From 531d560914181e348b8f33102f85333da1335662 Mon Sep 17 00:00:00 2001 From: SY2on Date: Sun, 3 Dec 2023 14:42:18 +0900 Subject: [PATCH 001/399] =?UTF-8?q?Feat:=20=EB=AC=B8=EC=9D=98=20=EB=82=A8?= =?UTF-8?q?=EA=B8=B0=EA=B8=B0=20API=20=EA=B0=9C=EB=B0=9C=20=EB=AC=B8?= =?UTF-8?q?=EC=9D=98=20=EB=82=A8=EA=B8=B0=EB=8A=94=20API=20=EA=B0=9C?= =?UTF-8?q?=EB=B0=9C=20input=20data=20-=20=EB=AC=B8=EC=9D=98=EB=82=B4?= =?UTF-8?q?=EC=9A=A9=20text=EB=A7=8C=20=EC=9E=85=EB=A0=A5=20=EB=B0=9B?= =?UTF-8?q?=EC=9D=8C=20#45?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../generated/ssu/eatssu/domain/QUser.java | 2 + src/main/java/ssu/eatssu/domain/User.java | 3 ++ .../java/ssu/eatssu/domain/UserInquiries.java | 22 ++++++++++ .../repository/UserInquiriesRepository.java | 7 +++ .../eatssu/service/UserInquiriesService.java | 28 ++++++++++++ .../UserInquiriesController.java | 43 +++++++++++++++++++ .../dto/UserInquiriesCreate.java | 13 ++++++ 7 files changed, 118 insertions(+) create mode 100644 src/main/java/ssu/eatssu/domain/UserInquiries.java create mode 100644 src/main/java/ssu/eatssu/domain/repository/UserInquiriesRepository.java create mode 100644 src/main/java/ssu/eatssu/service/UserInquiriesService.java create mode 100644 src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java create mode 100644 src/main/java/ssu/eatssu/web/user_inquiries/dto/UserInquiriesCreate.java diff --git a/src/main/generated/ssu/eatssu/domain/QUser.java b/src/main/generated/ssu/eatssu/domain/QUser.java index 4c9c052d..cfde7375 100644 --- a/src/main/generated/ssu/eatssu/domain/QUser.java +++ b/src/main/generated/ssu/eatssu/domain/QUser.java @@ -48,6 +48,8 @@ public class QUser extends EntityPathBase { public final EnumPath status = createEnum("status", ssu.eatssu.domain.enums.UserStatus.class); + public final ListPath userInquiries = this.createList("userInquiries", UserInquiries.class, QUserInquiries.class, PathInits.DIRECT2); + public QUser(String variable) { super(User.class, forVariable(variable)); } diff --git a/src/main/java/ssu/eatssu/domain/User.java b/src/main/java/ssu/eatssu/domain/User.java index f723d047..8807f3f2 100644 --- a/src/main/java/ssu/eatssu/domain/User.java +++ b/src/main/java/ssu/eatssu/domain/User.java @@ -46,6 +46,9 @@ public class User extends BaseTimeEntity { @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) private List reviewReports; + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) + private List userInquiries; + public static User join(@NotNull String email, @NotNull String pwd) { User user = new User(); user.email = email; diff --git a/src/main/java/ssu/eatssu/domain/UserInquiries.java b/src/main/java/ssu/eatssu/domain/UserInquiries.java new file mode 100644 index 00000000..4516d2b2 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/UserInquiries.java @@ -0,0 +1,22 @@ +package ssu.eatssu.domain; + +import jakarta.persistence.*; +import lombok.*; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Builder +@AllArgsConstructor +public class UserInquiries { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_inquiries_id") + private Long id; + + private String content; + + @ManyToOne(fetch=FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; +} diff --git a/src/main/java/ssu/eatssu/domain/repository/UserInquiriesRepository.java b/src/main/java/ssu/eatssu/domain/repository/UserInquiriesRepository.java new file mode 100644 index 00000000..1656b9b0 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/repository/UserInquiriesRepository.java @@ -0,0 +1,7 @@ +package ssu.eatssu.domain.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.UserInquiries; + +public interface UserInquiriesRepository extends JpaRepository{ +} diff --git a/src/main/java/ssu/eatssu/service/UserInquiriesService.java b/src/main/java/ssu/eatssu/service/UserInquiriesService.java new file mode 100644 index 00000000..6a3bc2e0 --- /dev/null +++ b/src/main/java/ssu/eatssu/service/UserInquiriesService.java @@ -0,0 +1,28 @@ +package ssu.eatssu.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import ssu.eatssu.domain.User; +import ssu.eatssu.domain.UserInquiries; +import ssu.eatssu.domain.repository.UserInquiriesRepository; +import ssu.eatssu.domain.repository.UserRepository; +import ssu.eatssu.response.BaseException; + + +import static ssu.eatssu.response.BaseResponseStatus.*; + +@RequiredArgsConstructor +@Service +@Transactional +public class UserInquiriesService { + + private final UserRepository userRepository; + private final UserInquiriesRepository userInquiriesRepository; + + public void createUserInquiries(Long userId, String content) { + User user = userRepository.findById(userId).orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + UserInquiries userInquiries = UserInquiries.builder().user(user).content(content).build(); + userInquiriesRepository.save(userInquiries); + } +} diff --git a/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java b/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java new file mode 100644 index 00000000..324b54ee --- /dev/null +++ b/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java @@ -0,0 +1,43 @@ +package ssu.eatssu.web.user_inquiries; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; +import ssu.eatssu.domain.repository.UserRepository; +import ssu.eatssu.response.BaseException; +import ssu.eatssu.response.BaseResponse; +import ssu.eatssu.service.UserInquiriesService; +import ssu.eatssu.slack.SlackService; +import ssu.eatssu.utils.SecurityUtil; +import ssu.eatssu.web.user_inquiries.dto.UserInquiriesCreate; + +@Slf4j +@RestController +@RequestMapping("/inquiries") +@RequiredArgsConstructor +@Tag(name = "Inquiries", description = "문의 API") +public class UserInquiriesController { + private final SlackService slackService; + private final UserRepository userRepository; + private final UserInquiriesService userInquiriesService; + + /** + * 문의 남기기 + */ + @Operation(summary = "문의 남기기", description = "문의 남기기") + @PostMapping("/") + public BaseResponse userInquiriesCreate(@RequestBody UserInquiriesCreate userInquiriesCreate) { + Long userId = SecurityUtil.getLoginUserId(); + userInquiriesService.createUserInquiries(userId, userInquiriesCreate.getContent()); + return new BaseResponse<>(""); + } + + @ExceptionHandler(BaseException.class) + public BaseResponse handleBaseException(BaseException e) { + log.info(e.getStatus().toString()); + return new BaseResponse<>(e.getStatus()); + } + +} diff --git a/src/main/java/ssu/eatssu/web/user_inquiries/dto/UserInquiriesCreate.java b/src/main/java/ssu/eatssu/web/user_inquiries/dto/UserInquiriesCreate.java new file mode 100644 index 00000000..d8b18c4c --- /dev/null +++ b/src/main/java/ssu/eatssu/web/user_inquiries/dto/UserInquiriesCreate.java @@ -0,0 +1,13 @@ +package ssu.eatssu.web.user_inquiries.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Schema(title = "문의 남기기") +@NoArgsConstructor +@Getter +public class UserInquiriesCreate { + @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의 남깁니다") + private String content; +} From 77d83f574edeccddcd807d38608bc399d25d93f9 Mon Sep 17 00:00:00 2001 From: SY2on Date: Sun, 3 Dec 2023 17:25:03 +0900 Subject: [PATCH 002/399] =?UTF-8?q?Feat:=20=EB=AC=B8=EC=9D=98=20=EB=82=A8?= =?UTF-8?q?=EA=B8=B0=EA=B8=B0=20API=EC=97=90=20=EC=8A=AC=EB=9E=AB=EB=B4=87?= =?UTF-8?q?=20=EC=97=B0=EA=B2=B0=20=EC=9C=A0=EC=A0=80=EA=B0=80=20=EB=AC=B8?= =?UTF-8?q?=EC=9D=98=20=EB=82=A8=EA=B8=B0=EB=A9=B4=20=EC=8A=AC=EB=9E=AB?= =?UTF-8?q?=EB=B4=87=20=EC=95=8C=EB=A6=BC=20=EC=83=9D=EC=84=B1=20#45?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ssu/eatssu/domain/UserInquiries.java | 2 +- .../eatssu/service/UserInquiriesService.java | 4 ++-- .../java/ssu/eatssu/slack/SlackChannel.java | 2 +- .../UserInquiriesController.java | 19 ++++++++++++++++++- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/UserInquiries.java b/src/main/java/ssu/eatssu/domain/UserInquiries.java index 4516d2b2..9cae9aea 100644 --- a/src/main/java/ssu/eatssu/domain/UserInquiries.java +++ b/src/main/java/ssu/eatssu/domain/UserInquiries.java @@ -8,7 +8,7 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Builder @AllArgsConstructor -public class UserInquiries { +public class UserInquiries extends BaseTimeEntity{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "user_inquiries_id") diff --git a/src/main/java/ssu/eatssu/service/UserInquiriesService.java b/src/main/java/ssu/eatssu/service/UserInquiriesService.java index 6a3bc2e0..9f8a4bc1 100644 --- a/src/main/java/ssu/eatssu/service/UserInquiriesService.java +++ b/src/main/java/ssu/eatssu/service/UserInquiriesService.java @@ -20,9 +20,9 @@ public class UserInquiriesService { private final UserRepository userRepository; private final UserInquiriesRepository userInquiriesRepository; - public void createUserInquiries(Long userId, String content) { + public UserInquiries createUserInquiries(Long userId, String content) { User user = userRepository.findById(userId).orElseThrow(() -> new BaseException(NOT_FOUND_USER)); UserInquiries userInquiries = UserInquiries.builder().user(user).content(content).build(); - userInquiriesRepository.save(userInquiries); + return userInquiriesRepository.save(userInquiries); } } diff --git a/src/main/java/ssu/eatssu/slack/SlackChannel.java b/src/main/java/ssu/eatssu/slack/SlackChannel.java index 3916917d..32cc4471 100644 --- a/src/main/java/ssu/eatssu/slack/SlackChannel.java +++ b/src/main/java/ssu/eatssu/slack/SlackChannel.java @@ -4,7 +4,7 @@ public enum SlackChannel { - REPORT_CHANNEL("#신고"), ADDMENU_CHANNEL("#메뉴_추가"), ERROR_CHANNEL("#장애"); + REPORT_CHANNEL("#신고"), ADDMENU_CHANNEL("#메뉴_추가"), ERROR_CHANNEL("#장애"), USER_INQUIRIES_CHANNEL("#유저-문의"); @Getter private String krName; diff --git a/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java b/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java index 324b54ee..08e016a7 100644 --- a/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java +++ b/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java @@ -5,10 +5,12 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; +import ssu.eatssu.domain.UserInquiries; import ssu.eatssu.domain.repository.UserRepository; import ssu.eatssu.response.BaseException; import ssu.eatssu.response.BaseResponse; import ssu.eatssu.service.UserInquiriesService; +import ssu.eatssu.slack.SlackChannel; import ssu.eatssu.slack.SlackService; import ssu.eatssu.utils.SecurityUtil; import ssu.eatssu.web.user_inquiries.dto.UserInquiriesCreate; @@ -30,7 +32,22 @@ public class UserInquiriesController { @PostMapping("/") public BaseResponse userInquiriesCreate(@RequestBody UserInquiriesCreate userInquiriesCreate) { Long userId = SecurityUtil.getLoginUserId(); - userInquiriesService.createUserInquiries(userId, userInquiriesCreate.getContent()); + UserInquiries inquiries = userInquiriesService.createUserInquiries(userId, userInquiriesCreate.getContent()); + slackService.sendSlackMessage(String.format( + """ + =================== + *문의 INFO* + - 문의자 ID: %d + - 닉네임: %s + - 이메일: %s + *문의 내용* + - Date: %s + - Content: %s + =================== + """ + , inquiries.getUser().getId(), inquiries.getUser().getNickname() + ,inquiries.getUser().getEmail(),inquiries.getCreatedDate(), inquiries.getContent()), + SlackChannel.USER_INQUIRIES_CHANNEL); return new BaseResponse<>(""); } From ffb136bbede2225664688c9a54f23fe1c0ec89f8 Mon Sep 17 00:00:00 2001 From: SY2on Date: Mon, 4 Dec 2023 02:24:02 +0900 Subject: [PATCH 003/399] =?UTF-8?q?Refactor:=20=EC=8A=AC=EB=9E=99=EB=B4=87?= =?UTF-8?q?=20=EB=A9=94=EC=84=B8=EC=A7=80=20=EC=83=9D=EC=84=B1=EC=9A=A9=20?= =?UTF-8?q?class=20=EC=B6=94=EA=B0=80=20=EC=8A=AC=EB=9E=AB=EB=B4=87=20?= =?UTF-8?q?=EB=A9=94=EC=84=B8=EC=A7=80=20=EB=B3=B4=EB=82=BC=EB=95=8C=20?= =?UTF-8?q?=ED=8F=AC=EB=A7=B7=ED=8C=85=20=ED=95=B4=EC=A3=BC=EB=8A=94=20Sla?= =?UTF-8?q?ckMessageFormat=20=ED=81=B4=EB=9E=98=EC=8A=A4=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 --- .../ssu/eatssu/slack/SlackMessageFormat.java | 62 +++++++++++++++++++ .../eatssu/web/report/ReportController.java | 29 +-------- .../UserInquiriesController.java | 18 +----- 3 files changed, 67 insertions(+), 42 deletions(-) create mode 100644 src/main/java/ssu/eatssu/slack/SlackMessageFormat.java diff --git a/src/main/java/ssu/eatssu/slack/SlackMessageFormat.java b/src/main/java/ssu/eatssu/slack/SlackMessageFormat.java new file mode 100644 index 00000000..36284de2 --- /dev/null +++ b/src/main/java/ssu/eatssu/slack/SlackMessageFormat.java @@ -0,0 +1,62 @@ +package ssu.eatssu.slack; + +import org.springframework.stereotype.Component; +import ssu.eatssu.domain.Review; +import ssu.eatssu.domain.ReviewReport; +import ssu.eatssu.domain.User; +import ssu.eatssu.domain.UserInquiries; + +import java.text.MessageFormat; + +@Component +public class SlackMessageFormat { + + private SlackMessageFormat(){} + + public static String sendReport(ReviewReport report) { + User reporter = report.getUser(); + Review review = report.getReview(); + MessageFormat messageFormat = new MessageFormat( + """ + =================== + *신고자 INFO* + - 신고자 ID: {0} + - 닉네임: {1} + *신고된 리뷰 INFO* + - 리뷰 ID: {2} + - 리뷰 작성자 ID : {3} + - 리뷰 작성자 닉네임 : {4} + - 리뷰 메뉴: {5} + - 리뷰 내용: {6} + - 리뷰 날짜: {7} + *신고 INFO* + - 신고사유: {8} + - 신고 날짜: {9} + =================== + """ + ); + Object[] args = {reporter.getId(), reporter.getNickname(), review.getId(), review.getUser().getId() + , review.getUser().getNickname(), review.getMenu().getName(), review.getContent(), + review.getModifiedDate().toString(), report.getReportType().getKrName(), report.getCreatedDate()}; + return messageFormat.format(args); + } + + public static String sendUserInquiries(UserInquiries inquiries) { + MessageFormat messageFormat = new MessageFormat( + """ + =================== + *문의 INFO* + - 문의자 ID: {0} + - 닉네임: {1} + - 이메일: {2} + *문의 내용* + - Date: {3} + - Content: {4} + =================== + """ + ); + Object[] args = {inquiries.getUser().getId(), inquiries.getUser().getNickname(),inquiries.getUser().getEmail() + ,inquiries.getCreatedDate(), inquiries.getContent()}; + return messageFormat.format(args); + } +} diff --git a/src/main/java/ssu/eatssu/web/report/ReportController.java b/src/main/java/ssu/eatssu/web/report/ReportController.java index 73d674e5..6181727d 100644 --- a/src/main/java/ssu/eatssu/web/report/ReportController.java +++ b/src/main/java/ssu/eatssu/web/report/ReportController.java @@ -16,6 +16,7 @@ import ssu.eatssu.response.BaseResponse; import ssu.eatssu.service.ReportService; import ssu.eatssu.slack.SlackChannel; +import ssu.eatssu.slack.SlackMessageFormat; import ssu.eatssu.slack.SlackService; import ssu.eatssu.utils.SecurityUtil; import ssu.eatssu.web.report.dto.ReviewReportCreate; @@ -59,33 +60,7 @@ public BaseResponse> reportReviewType() { public BaseResponse reportReview(@RequestBody ReviewReportCreate reviewReportCreate) { Long userId = SecurityUtil.getLoginUserId(); ReviewReport report = reportService.reportReview(userId, reviewReportCreate); - User reporter = userRepository.findById(userId).orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Review review = reviewRepository.findById(reviewReportCreate.getReviewId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - slackService.sendSlackMessage(String.format( - """ - =================== - *신고자 INFO* - - 신고자 ID: %d - - 닉네임: %s - *신고된 리뷰 INFO* - - 리뷰 ID: %d - - 리뷰 작성자 ID : %d - - 리뷰 작성자 닉네임 : %s - - 리뷰 메뉴: %s - - 리뷰 내용: %s - - 리뷰 날짜: %s - *신고 INFO* - - 신고사유: %s - - 신고 날짜: %s - =================== - """ - , reporter.getId(), reporter.getNickname() - , review.getId(), review.getUser().getId(),review.getUser().getNickname(), review.getMenu().getName(), - review.getContent(), - review.getModifiedDate().toString() - ,report.getReportType().getKrName(), report.getCreatedDate()), - SlackChannel.REPORT_CHANNEL); + slackService.sendSlackMessage(SlackMessageFormat.sendReport(report), SlackChannel.REPORT_CHANNEL); return new BaseResponse<>("Success"); } diff --git a/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java b/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java index 08e016a7..d420a186 100644 --- a/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java +++ b/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java @@ -11,6 +11,7 @@ import ssu.eatssu.response.BaseResponse; import ssu.eatssu.service.UserInquiriesService; import ssu.eatssu.slack.SlackChannel; +import ssu.eatssu.slack.SlackMessageFormat; import ssu.eatssu.slack.SlackService; import ssu.eatssu.utils.SecurityUtil; import ssu.eatssu.web.user_inquiries.dto.UserInquiriesCreate; @@ -33,21 +34,8 @@ public class UserInquiriesController { public BaseResponse userInquiriesCreate(@RequestBody UserInquiriesCreate userInquiriesCreate) { Long userId = SecurityUtil.getLoginUserId(); UserInquiries inquiries = userInquiriesService.createUserInquiries(userId, userInquiriesCreate.getContent()); - slackService.sendSlackMessage(String.format( - """ - =================== - *문의 INFO* - - 문의자 ID: %d - - 닉네임: %s - - 이메일: %s - *문의 내용* - - Date: %s - - Content: %s - =================== - """ - , inquiries.getUser().getId(), inquiries.getUser().getNickname() - ,inquiries.getUser().getEmail(),inquiries.getCreatedDate(), inquiries.getContent()), - SlackChannel.USER_INQUIRIES_CHANNEL); + slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiries(inquiries) + , SlackChannel.USER_INQUIRIES_CHANNEL); return new BaseResponse<>(""); } From 1c2d5a988f37f4c3b1fc4df9ae20b231decdc368 Mon Sep 17 00:00:00 2001 From: SY2on Date: Mon, 4 Dec 2023 02:51:25 +0900 Subject: [PATCH 004/399] =?UTF-8?q?Feat:=20=EA=B3=A0=EA=B0=9D=20=EB=AC=B8?= =?UTF-8?q?=EC=9D=98=EB=82=B4=EC=97=AD=20=EC=A1=B0=ED=9A=8C=20By=20Id=20AP?= =?UTF-8?q?I=20=EA=B0=9C=EB=B0=9C=20UserInquiriesId=EB=A1=9C=20=EB=AC=B8?= =?UTF-8?q?=EC=9D=98=EB=82=B4=EC=97=AD=20=EC=84=B8=EB=B6=80=EC=82=AC?= =?UTF-8?q?=ED=95=AD=20=EC=A1=B0=ED=9A=8C=20=EA=B0=80=EB=8A=A5=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=ED=95=84=EC=9A=94=20X=20->=20=ED=9B=84?= =?UTF-8?q?=EC=97=90=20ADMIN=EC=9C=BC=EB=A1=9C=20=EB=B9=BC=EC=95=BC=20?= =?UTF-8?q?=ED=95=A8=20#45?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/config/SecurityConfig.java | 3 +- .../eatssu/response/BaseResponseStatus.java | 4 +++ .../UserInquiriesController.java | 21 ++++++++++++ .../dto/UserInquiriesDetail.java | 32 +++++++++++++++++++ 4 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ssu/eatssu/web/user_inquiries/dto/UserInquiriesDetail.java diff --git a/src/main/java/ssu/eatssu/config/SecurityConfig.java b/src/main/java/ssu/eatssu/config/SecurityConfig.java index 56402f42..bf109d0b 100644 --- a/src/main/java/ssu/eatssu/config/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/config/SecurityConfig.java @@ -21,7 +21,8 @@ public class SecurityConfig { private static final String[] AUTH_WHITELIST = { "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**", "/", "/user/join", "/user/login", "/user/user-emails/{email}/exist", "/user/check-nickname", - "/menu/**", "/restaurants/**", "/review/info","/review/list", "/oauth/**" + "/menu/**", "/restaurants/**", "/review/info","/review/list", "/oauth/**", "/inquiries/{userInquiriesId}", + "/inquiries/list" }; private final JwtTokenProvider jwtTokenProvider; diff --git a/src/main/java/ssu/eatssu/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/response/BaseResponseStatus.java index 45ec01a2..e4d1e4dc 100644 --- a/src/main/java/ssu/eatssu/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/response/BaseResponseStatus.java @@ -37,6 +37,10 @@ public enum BaseResponseStatus { INVALID_DATE(false, 2013, "잘못된 날짜형식입니다."), + NOT_FOUND_REVIEW_REPORT(false, 2014, "해당 문의내역을 찾을 수 없습니다."), + NOT_FOUND_USER_INQUIRIES(false, 2015, "해당 문의내역을 찾을 수 없습니다."), + + /** * 3000 : Response 오류 diff --git a/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java b/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java index d420a186..c844d246 100644 --- a/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java +++ b/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java @@ -1,20 +1,26 @@ package ssu.eatssu.web.user_inquiries; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.UserInquiries; +import ssu.eatssu.domain.repository.UserInquiriesRepository; import ssu.eatssu.domain.repository.UserRepository; import ssu.eatssu.response.BaseException; import ssu.eatssu.response.BaseResponse; +import ssu.eatssu.response.BaseResponseStatus; import ssu.eatssu.service.UserInquiriesService; import ssu.eatssu.slack.SlackChannel; import ssu.eatssu.slack.SlackMessageFormat; import ssu.eatssu.slack.SlackService; import ssu.eatssu.utils.SecurityUtil; import ssu.eatssu.web.user_inquiries.dto.UserInquiriesCreate; +import ssu.eatssu.web.user_inquiries.dto.UserInquiriesDetail; + +import static ssu.eatssu.response.BaseResponseStatus.*; @Slf4j @RestController @@ -24,6 +30,7 @@ public class UserInquiriesController { private final SlackService slackService; private final UserRepository userRepository; + private final UserInquiriesRepository userInquiriesRepository; private final UserInquiriesService userInquiriesService; /** @@ -39,6 +46,20 @@ public BaseResponse userInquiriesCreate(@RequestBody UserInquiriesCreate return new BaseResponse<>(""); } + /** + * 문의내역 조회 By Id + */ + @Operation(summary = "고객 문의 내역 조회", description = "고객 문의 내역 조회 By Id") + @GetMapping("/{userInquiriesId}") + public BaseResponse userInquiriesCreate(@Parameter(description = "userInquiriesId") + @PathVariable("userInquiriesId") Long userInquiriesId) { + UserInquiries inquiries = + userInquiriesRepository.findById(userInquiriesId).orElseThrow(()-> new BaseException(NOT_FOUND_USER_INQUIRIES)); + slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiries(inquiries) + , SlackChannel.USER_INQUIRIES_CHANNEL); + return new BaseResponse<>(UserInquiriesDetail.fromUserInquiries(inquiries)); + } + @ExceptionHandler(BaseException.class) public BaseResponse handleBaseException(BaseException e) { log.info(e.getStatus().toString()); diff --git a/src/main/java/ssu/eatssu/web/user_inquiries/dto/UserInquiriesDetail.java b/src/main/java/ssu/eatssu/web/user_inquiries/dto/UserInquiriesDetail.java new file mode 100644 index 00000000..7fc61d1d --- /dev/null +++ b/src/main/java/ssu/eatssu/web/user_inquiries/dto/UserInquiriesDetail.java @@ -0,0 +1,32 @@ +package ssu.eatssu.web.user_inquiries.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import ssu.eatssu.domain.UserInquiries; + +@AllArgsConstructor +@Builder +@Schema(title = "문의내역 상세") +@Getter +public class UserInquiriesDetail { + + @Schema(description = "문의 작성자 Id", example = "123") + private Long writerId; + + @Schema(description = "문의 작성자 닉네임", example = "먹짱맨") + private String writerNickName; + + @Schema(description = "문의 작성자 이메일", example = "test@gmail.com") + private String writerEmail; + + @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의드립니다") + private String content; + + public static UserInquiriesDetail fromUserInquiries(UserInquiries userInquiries) { + return UserInquiriesDetail.builder().writerId(userInquiries.getUser().getId()) + .writerNickName(userInquiries.getUser().getNickname()) + .writerEmail(userInquiries.getUser().getEmail()).content(userInquiries.getContent()).build(); + } +} From ae926dfa1dd9ecc147235443cc96c74a1a849e2c Mon Sep 17 00:00:00 2001 From: SY2on Date: Mon, 4 Dec 2023 03:18:04 +0900 Subject: [PATCH 005/399] =?UTF-8?q?Hotfix:=20=EC=9E=91=EC=84=B1=ED=95=9C?= =?UTF-8?q?=20=EC=8B=A0=EA=B3=A0=EA=B0=80=20=EC=9E=88=EC=9D=84=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20=ED=83=88=ED=87=B4=EA=B0=80=20=EC=95=88=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=EC=98=A4=EB=A5=98=20=ED=83=88=ED=87=B4=EC=8B=9C=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=ED=95=9C=20=EC=8B=A0=EA=B3=A0=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=ED=9B=84=20=ED=83=88=ED=87=B4=EC=B2=98=EB=A6=AC=20#48?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ssu/eatssu/domain/UserInquiries.java | 4 ++++ src/main/java/ssu/eatssu/service/UserService.java | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/main/java/ssu/eatssu/domain/UserInquiries.java b/src/main/java/ssu/eatssu/domain/UserInquiries.java index 9cae9aea..962baa2b 100644 --- a/src/main/java/ssu/eatssu/domain/UserInquiries.java +++ b/src/main/java/ssu/eatssu/domain/UserInquiries.java @@ -19,4 +19,8 @@ public class UserInquiries extends BaseTimeEntity{ @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name = "user_id") private User user; +/* + public void signoutWriter() { + this.user = null; + }*/ } diff --git a/src/main/java/ssu/eatssu/service/UserService.java b/src/main/java/ssu/eatssu/service/UserService.java index 804eeecd..caa2d9d4 100644 --- a/src/main/java/ssu/eatssu/service/UserService.java +++ b/src/main/java/ssu/eatssu/service/UserService.java @@ -9,7 +9,9 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import ssu.eatssu.domain.Review; +import ssu.eatssu.domain.ReviewReport; import ssu.eatssu.domain.User; +import ssu.eatssu.domain.repository.ReviewReportRepository; import ssu.eatssu.domain.repository.UserRepository; import ssu.eatssu.jwt.JwtTokenProvider; import ssu.eatssu.response.BaseException; @@ -24,6 +26,7 @@ @Transactional public class UserService { private final UserRepository userRepository; + private final ReviewReportRepository reviewReportRepository; private final PasswordEncoder passwordEncoder; private final AuthenticationManagerBuilder authenticationManagerBuilder; private final JwtTokenProvider jwtTokenProvider; @@ -80,9 +83,19 @@ public Tokens refreshAccessToken(Authentication authentication) throws JsonProce public void signout (Long userId) { User user = userRepository.findById(userId).orElseThrow(()-> new BaseException(NOT_FOUND_USER)); + //작성한 리뷰 삭제 for(Review review: user.getReviews()) { review.signoutUser(); } + //작성한 신고 삭제 + for(ReviewReport report: user.getReviewReports()){ + reviewReportRepository.delete(report); + } + /* + TODO 작성한 문의내역 삭제?? + for(UserInquiries inquiries : user.getUserInquiries()){ + inquiries.signoutWriter(); + }*/ userRepository.delete(user); } } From 227790e7c77ec20f61dd14b356854c873d395a0c Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 9 Dec 2023 16:26:13 +0900 Subject: [PATCH 006/399] =?UTF-8?q?Hotfix:=20BaseReponse=20->=20BaseEntity?= =?UTF-8?q?=20=ED=81=B4=EB=9D=BC=EC=9D=B4=EC=96=B8=ED=8A=B8=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0=EC=9D=84=20=EC=9C=84=ED=95=B4=20=EC=9E=A0=EA=B9=90=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/web/mypage/MyPageController.java | 8 ++--- .../ssu/eatssu/web/oauth/OauthController.java | 9 +++-- .../eatssu/web/report/ReportController.java | 8 ++--- .../eatssu/web/restaurant/MenuController.java | 22 ++++++------ .../web/restaurant/RestaurantController.java | 6 ++-- .../eatssu/web/review/ReviewController.java | 22 ++++++------ .../ssu/eatssu/web/user/UserController.java | 36 +++++++++---------- 7 files changed, 55 insertions(+), 56 deletions(-) diff --git a/src/main/java/ssu/eatssu/web/mypage/MyPageController.java b/src/main/java/ssu/eatssu/web/mypage/MyPageController.java index f64f0f74..17949774 100644 --- a/src/main/java/ssu/eatssu/web/mypage/MyPageController.java +++ b/src/main/java/ssu/eatssu/web/mypage/MyPageController.java @@ -33,14 +33,14 @@ public class MyPageController { */ @Operation(summary = "내가 쓴 리뷰 모아보기", description = "내가 쓴 리뷰 리스트") @GetMapping("/myreview") - public BaseResponse> myReviewList( + public ResponseEntity> myReviewList( @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable ) { Long userId = SecurityUtil.getLoginUserId(); SliceDto myReviewList = myPageService.findMyReviewList(userId, pageable, lastReviewId); - return new BaseResponse<>(myReviewList); + return ResponseEntity.ok(myReviewList); } /** @@ -48,10 +48,10 @@ public BaseResponse> myReviewList( */ @Operation(summary = "마이페이지 정보", description = "마이페이지 정보") @GetMapping("/info") - public BaseResponse mypageInfo() { + public ResponseEntity mypageInfo() { Long userId = SecurityUtil.getLoginUserId(); MypageInfo mypageInfo = myPageService.mypageInfo(userId); - return new BaseResponse<>(mypageInfo); + return ResponseEntity.ok(mypageInfo); } @ExceptionHandler(BaseException.class) diff --git a/src/main/java/ssu/eatssu/web/oauth/OauthController.java b/src/main/java/ssu/eatssu/web/oauth/OauthController.java index a4f2cdca..4ae75ff2 100644 --- a/src/main/java/ssu/eatssu/web/oauth/OauthController.java +++ b/src/main/java/ssu/eatssu/web/oauth/OauthController.java @@ -38,9 +38,9 @@ public class OauthController { */ @Operation(summary = "카카오 로그인, 회원가입", description = "카카오 로그인, 회원가입") @PostMapping("/kakao") - public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLogin login) { + public ResponseEntity kakaoLogin(@Valid @RequestBody KakaoLogin login) throws JsonProcessingException { Tokens tokens = oauthService.loginByKakao(login.getEmail(), login.getProviderId()); - return new BaseResponse<>(tokens); + return ResponseEntity.ok(tokens); } /** @@ -48,10 +48,9 @@ public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLogin login) { */ @Operation(summary = "애플 로그인, 회원가입", description = "애플 로그인, 회원가입") @PostMapping("/apple") - public BaseResponse appleLogin(@Valid @RequestBody AppleLogin login) throws NoSuchAlgorithmException, - InvalidKeySpecException { + public ResponseEntity appleLogin(@Valid @RequestBody AppleLogin login) throws NoSuchAlgorithmException, InvalidKeySpecException { Tokens tokens = oauthService.loginByApple(login.getIdentityToken()); - return new BaseResponse<>(tokens); + return ResponseEntity.ok(tokens); } @ExceptionHandler(BaseException.class) diff --git a/src/main/java/ssu/eatssu/web/report/ReportController.java b/src/main/java/ssu/eatssu/web/report/ReportController.java index 6181727d..f731d1d6 100644 --- a/src/main/java/ssu/eatssu/web/report/ReportController.java +++ b/src/main/java/ssu/eatssu/web/report/ReportController.java @@ -45,11 +45,11 @@ public class ReportController { */ @Operation(summary = "리뷰 신고 사유 받아오기", description = "리뷰 신고 사유 받아오기") @GetMapping("/type") - public BaseResponse> reportReviewType() { + public ResponseEntity> reportReviewType() { List reportInfo = new ArrayList<>(); Arrays.stream(ReviewReportType.values()) .forEach(reportType -> reportInfo.add(new ReviewReportTypeInfo(reportType))); - return new BaseResponse<>(reportInfo); + return ResponseEntity.ok(reportInfo); } /** @@ -57,11 +57,11 @@ public BaseResponse> reportReviewType() { */ @Operation(summary = "리뷰 신고하기", description = "리뷰 신고하기") @PostMapping("/") - public BaseResponse reportReview(@RequestBody ReviewReportCreate reviewReportCreate) { + public ResponseEntity reportReview(@RequestBody ReviewReportCreate reviewReportCreate) { Long userId = SecurityUtil.getLoginUserId(); ReviewReport report = reportService.reportReview(userId, reviewReportCreate); slackService.sendSlackMessage(SlackMessageFormat.sendReport(report), SlackChannel.REPORT_CHANNEL); - return new BaseResponse<>("Success"); + return ResponseEntity.ok("Success"); } @ExceptionHandler(BaseException.class) diff --git a/src/main/java/ssu/eatssu/web/restaurant/MenuController.java b/src/main/java/ssu/eatssu/web/restaurant/MenuController.java index 79121f76..51f28e42 100644 --- a/src/main/java/ssu/eatssu/web/restaurant/MenuController.java +++ b/src/main/java/ssu/eatssu/web/restaurant/MenuController.java @@ -39,7 +39,7 @@ public class MenuController { */ @Operation(summary = "변동메뉴 식단 리스트 조회 By 식당", description = "변동메뉴 식단 리스트 조회(학생식당, 도담, 기숙사 식당)") @GetMapping("/today-meal") - public BaseResponse> todayMealList(@Parameter(description = "날짜(yyyyMMdd)") @RequestParam( + public ResponseEntity> todayMealList(@Parameter(description = "날짜(yyyyMMdd)") @RequestParam( "date") String date, @Parameter(description = "식당이름") @RequestParam("restaurant") @@ -53,7 +53,7 @@ public BaseResponse> todayMealList(@Parameter(description = "날 TodayMeal todayMeal = TodayMeal.from(meal); todayMealList.add(todayMeal); } - return new BaseResponse<>(todayMealList); + return ResponseEntity.ok(todayMealList); } else { throw new BaseException(NOT_SUPPORT_RESTAURANT); } @@ -65,12 +65,12 @@ public BaseResponse> todayMealList(@Parameter(description = "날 */ @Operation(summary = "고정 메뉴 리스트 조회", description = "고정 메뉴 리스트 조회(푸드코트, 스낵코너, 더 키친)") @GetMapping("/fix-menu") - public BaseResponse fixMenuList(@Parameter(description = "식당이름") @RequestParam("restaurant") + public ResponseEntity fixMenuList(@Parameter(description = "식당이름") @RequestParam("restaurant") RestaurantName restaurantName) { if (MenuTypeGroup.isFix(restaurantName)) { List menuList = menuService.findFixMenuByRestaurant(restaurantName); FixMenuList fixMenuList = FixMenuList.from(menuList); - return new BaseResponse<>(fixMenuList); + return ResponseEntity.ok(fixMenuList); } else { throw new BaseException(NOT_SUPPORT_RESTAURANT); } @@ -82,7 +82,7 @@ public BaseResponse fixMenuList(@Parameter(description = "식당이 */ @Operation(summary = "특정 식당 식단 추가", description = "특정 식당의 식단 추가") @PostMapping("/") - public BaseResponse todayMenuAdd(@Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") + public ResponseEntity todayMenuAdd(@Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") String date, @Parameter(description = "식당이름") @RequestParam("restaurant") RestaurantName restaurantName, @@ -94,13 +94,13 @@ public BaseResponse todayMenuAdd(@Parameter(description = "날짜(yyyyMM try{ if(menuService.dupliicateMealCheck(timePart,date, restaurantName, addTodayMenuList)){//이미 추가된 식단이면 log.info("식단 중복 발견!"); - return new BaseResponse<>("Duplicated"); + return ResponseEntity.ok(HttpStatus.OK); } }catch (ParseException e){ throw new BaseException(INVALID_DATE); } menuService.addMeal(timePart, date, restaurantName, addTodayMenuList); - return new BaseResponse<>("Success"); + return ResponseEntity.ok(HttpStatus.OK); } else { throw new BaseException(NOT_SUPPORT_RESTAURANT); } @@ -111,9 +111,9 @@ public BaseResponse todayMenuAdd(@Parameter(description = "날짜(yyyyMM */ @Operation(summary = "메뉴 정보 조회 By mealId", description = "메뉴 정보(Id, name) 조회 By mealId") @GetMapping("/menus") - public BaseResponse menuList(@Parameter(description = "mealId") @RequestParam("mealId") Long mealId) { + public ResponseEntity menuList(@Parameter(description = "mealId") @RequestParam("mealId") Long mealId) { MenuList menuList = menuService.findAllMenu(mealId); - return new BaseResponse<>(menuList); + return ResponseEntity.ok(menuList); } /** @@ -121,10 +121,10 @@ public BaseResponse menuList(@Parameter(description = "mealId") @Reque */ @Operation(summary = "식단 삭제", description = "mealId로 meal 삭제") @DeleteMapping("/meal/{mealId}") - public BaseResponse mealDelete(@Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { + public ResponseEntity mealDelete(@Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { List menuIdList = menuService.deleteMeal(mealId); menuService.cleanupGarbageMenu(menuIdList); - return new BaseResponse<>("Deleted"); + return ResponseEntity.ok(""); } @ExceptionHandler(BaseException.class) diff --git a/src/main/java/ssu/eatssu/web/restaurant/RestaurantController.java b/src/main/java/ssu/eatssu/web/restaurant/RestaurantController.java index b4944e1c..7ee194f3 100644 --- a/src/main/java/ssu/eatssu/web/restaurant/RestaurantController.java +++ b/src/main/java/ssu/eatssu/web/restaurant/RestaurantController.java @@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.Restaurant; import ssu.eatssu.domain.enums.RestaurantName; @@ -24,12 +25,11 @@ public class RestaurantController { */ @Operation(summary = "식당 정보 조회", description = "식당 위치, 운영시간 조회") @GetMapping("/{restaurantName}") - public BaseResponse restaurantInfo(@Parameter(description = "식당이름")@PathVariable("restaurantName") + public ResponseEntity restaurantInfo(@Parameter(description = "식당이름")@PathVariable("restaurantName") RestaurantName restaurantName) { Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) .orElseThrow(() -> new IllegalArgumentException("해당 이름의 식당이 없습니다.")); - return new BaseResponse<>(RestaurantInfo.from(restaurant)); - + return ResponseEntity.ok(RestaurantInfo.from(restaurant)); } } diff --git a/src/main/java/ssu/eatssu/web/review/ReviewController.java b/src/main/java/ssu/eatssu/web/review/ReviewController.java index b9a02719..d4cb457d 100644 --- a/src/main/java/ssu/eatssu/web/review/ReviewController.java +++ b/src/main/java/ssu/eatssu/web/review/ReviewController.java @@ -52,13 +52,13 @@ public class ReviewController { @PostMapping(value = "/{menuId}", consumes = { MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, produces = MediaType.APPLICATION_JSON_VALUE) - public BaseResponse reviewCreate(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, + public ResponseEntity reviewCreate(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, @RequestPart(value = "reviewCreate") ReviewCreate reviewCreate, @RequestPart(value = "multipartFileList", required = false) List multipartFileList ) { Long userId = SecurityUtil.getLoginUserId(); reviewService.createReview(userId, menuId, reviewCreate, multipartFileList); - return new BaseResponse<>(""); + return new ResponseEntity(HttpStatus.OK); } /** @@ -66,11 +66,11 @@ public BaseResponse reviewCreate(@Parameter(description = "menuId") @Pat */ @Operation(summary = "리뷰 수정(글 수정)", description = "리뷰 수정(글 수정)") @PatchMapping("/{reviewId}") - public BaseResponse reviewUpdate(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, + public ResponseEntity reviewUpdate(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, @RequestBody ReviewUpdate reviewUpdate) { Long userId = SecurityUtil.getLoginUserId(); reviewService.updateReview(userId, reviewId, reviewUpdate); - return new BaseResponse<>(""); + return new ResponseEntity(HttpStatus.OK); } /** @@ -78,10 +78,10 @@ public BaseResponse reviewUpdate(@Parameter(description = "reviewId") @P */ @Operation(summary = "리뷰 삭제", description = "리뷰 삭제") @DeleteMapping("/{reviewId}") - public BaseResponse reviewDelete(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId) { + public ResponseEntity reviewDelete(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId) { Long userId = SecurityUtil.getLoginUserId(); reviewService.deleteReview(userId, reviewId); - return new BaseResponse<>(""); + return new ResponseEntity(HttpStatus.OK); } /** @@ -89,7 +89,7 @@ public BaseResponse reviewDelete(@Parameter(description = "reviewId") @P */ @Operation(summary = "리뷰 정보 조회(평점 등등)", description = "리뷰 정보 조회(평점 등등)") @GetMapping("/info") - public BaseResponse menuReviewInfo( + public ResponseEntity menuReviewInfo( @Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") MenuTypeGroup menuTypeGroup, @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) @@ -113,7 +113,7 @@ public BaseResponse menuReviewInfo( } else { throw new BaseException(MISSING_QUERY_PARAM); } - return new BaseResponse<>(menuReviewInfo); + return ResponseEntity.ok(menuReviewInfo); } /** @@ -121,7 +121,7 @@ public BaseResponse menuReviewInfo( */ @Operation(summary = "리뷰 리스트 조회", description = "리뷰 리스트 조회") @GetMapping("/list") - public BaseResponse> menuReviewInfo(@Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam( + public ResponseEntity> menuReviewInfo(@Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam( "menuType") MenuTypeGroup menuTypeGroup, @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) @@ -150,13 +150,13 @@ public BaseResponse> menuReviewInfo(@Parameter(descriptio } else { throw new BaseException(MISSING_QUERY_PARAM); } - return new BaseResponse<>(reviewList); + return ResponseEntity.ok(reviewList); } /* review 갯수, 별점 refresh */ @GetMapping("/refresh") - public BaseResponse refreshReviewInfo(){ + public BaseResponse refreshReviewInfo(){ refreshingService.refreshAllReviews(); return new BaseResponse<>(""); } diff --git a/src/main/java/ssu/eatssu/web/user/UserController.java b/src/main/java/ssu/eatssu/web/user/UserController.java index 3b84820c..2c3a76ad 100644 --- a/src/main/java/ssu/eatssu/web/user/UserController.java +++ b/src/main/java/ssu/eatssu/web/user/UserController.java @@ -36,9 +36,9 @@ public class UserController { */ @Operation(summary = "회원가입", description = "회원가입.") @PostMapping("/join") - public BaseResponse join(@Valid @RequestBody Join join) throws JsonProcessingException { + public ResponseEntity join(@Valid @RequestBody Join join) throws JsonProcessingException { Tokens tokens = userService.join(join.getEmail(), join.getPwd()); - return new BaseResponse<>(tokens); + return ResponseEntity.ok(tokens); } /** @@ -46,13 +46,13 @@ public BaseResponse join(@Valid @RequestBody Join join) throws JsonProce */ @Operation(summary = "이메일 중복 체크", description = "통과하면 true, 존재하는 이메일이면 errorCode 2011") @PostMapping("/user-emails/{email}/exist") - public BaseResponse checkEmailDuplicate(@Parameter(description = "이메일")@PathVariable String email){ + public ResponseEntity checkEmailDuplicate(@Parameter(description = "이메일")@PathVariable String email){ boolean duplicated = userRepository.existsByEmail(email); if(!duplicated){ - return new BaseResponse<>(true); + return ResponseEntity.ok(true); }else{ //throw new BaseException(EMAIL_DUPLICATE); - return new BaseResponse<>(false); + return ResponseEntity.ok(false); } } @@ -61,9 +61,9 @@ public BaseResponse checkEmailDuplicate(@Parameter(description = "이 */ @Operation(summary = "로그인", description = "로그인") @PostMapping("/login") - public BaseResponse login(@Valid @RequestBody Login login) throws JsonProcessingException { + public ResponseEntity login(@Valid @RequestBody Login login) throws JsonProcessingException { Tokens tokens = userService.login(login.getEmail(), login.getPwd()); - return new BaseResponse<>(tokens); + return ResponseEntity.ok(tokens); } /** @@ -71,10 +71,10 @@ public BaseResponse login(@Valid @RequestBody Login login) throws JsonPr */ @Operation(summary = "닉네임 수정", description = "닉네임 수정") @PatchMapping("/nickname") - public BaseResponse nicknameUpdate(@Valid @RequestBody NicknameEdit nicknameEdit){ + public ResponseEntity nicknameUpdate(@Valid @RequestBody NicknameEdit nicknameEdit){ Long userId = getLoginUserId(); userService.updateNickname(userId, nicknameEdit.getNickname()); - return new BaseResponse<>(""); + return new ResponseEntity(HttpStatus.OK); } /** @@ -82,14 +82,14 @@ public BaseResponse nicknameUpdate(@Valid @RequestBody NicknameEdit nick */ @Operation(summary = "닉네임 중복 체크", description = "통과하면 true, 존재하는 닉네임이면 errorCode 2012") @GetMapping("/check-nickname") - public BaseResponse checkNicknameDuplicate(@Parameter(description = "닉네임")@RequestParam(value = + public ResponseEntity checkNicknameDuplicate(@Parameter(description = "닉네임")@RequestParam(value = "nickname") String nickname){ boolean duplicated = userRepository.existsByNickname(nickname); if(!duplicated){ - return new BaseResponse<>(true); + return ResponseEntity.ok(true); }else{ //throw new BaseException(NICKNAME_DUPLICATE); - return new BaseResponse<>(false); + return ResponseEntity.ok(false); } } @@ -98,10 +98,10 @@ public BaseResponse checkNicknameDuplicate(@Parameter(description = " */ @Operation(summary = "비밀번호 변경", description = "비밀번호 변경") @PatchMapping("/password") - public BaseResponse passwordChange(@Valid @RequestBody PasswordChange passwordChange){ + public ResponseEntity passwordChange(@Valid @RequestBody PasswordChange passwordChange){ Long userId = getLoginUserId(); userService.changePassword(userId, passwordChange.getPwd()); - return new BaseResponse<>(""); + return new ResponseEntity(HttpStatus.OK); } /** @@ -109,18 +109,18 @@ public BaseResponse passwordChange(@Valid @RequestBody PasswordChange pa */ @Operation(summary = "accessToken, refreshToken 재발급", description = "accessToken, refreshToken 재발급") @PostMapping("/token/reissue") - public BaseResponse refreshAccessToken() throws JsonProcessingException{ + public ResponseEntity refreshAccessToken() throws JsonProcessingException{ Tokens tokens = userService.refreshAccessToken(getLoginUser()); - return new BaseResponse<>(tokens); + return ResponseEntity.ok(tokens); } /** * 유저 탈퇴 */ @Operation(summary = "유저 탈퇴", description = "탈퇴 성공하면 true 반환") @DeleteMapping("/signout") - public BaseResponse signout(){ + public ResponseEntity signout(){ userService.signout(getLoginUserId()); - return new BaseResponse<>(true); + return ResponseEntity.ok(true); } @ExceptionHandler(BaseException.class) From 744726b6af91b268c2beb7f4ab39959f3d4692ce Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 9 Dec 2023 18:45:14 +0900 Subject: [PATCH 007/399] =?UTF-8?q?Hotfix:=20TasteGrade=20=ED=8F=89?= =?UTF-8?q?=EA=B7=A0=EA=B0=92=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?TasteGrade=20=ED=8F=89=EA=B7=A0=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(=EC=98=A4=ED=83=80=EB=95=8C=EB=AC=B8?= =?UTF-8?q?=EC=9D=B4=EC=97=88=EC=9D=8C)=20Solved:=20#56?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ssu/eatssu/domain/Menu.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/Menu.java b/src/main/java/ssu/eatssu/domain/Menu.java index 15fe7b13..f352a758 100644 --- a/src/main/java/ssu/eatssu/domain/Menu.java +++ b/src/main/java/ssu/eatssu/domain/Menu.java @@ -88,7 +88,7 @@ public void refreshReview(){ int totalAmount = 0; for(Review review : this.reviews){ totalMain+=review.getMainGrade(); - totalTaste = review.getTasteGrade(); + totalTaste += review.getTasteGrade(); totalAmount+=review.getAmountGrade(); } this.totalMainGrade = totalMain; From 7e2b25b1a5a601c49c373d6cd8888cb8932bb30f Mon Sep 17 00:00:00 2001 From: SY2on Date: Thu, 21 Dec 2023 19:01:38 +0900 Subject: [PATCH 008/399] =?UTF-8?q?Feat:=20BaseResponse=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=20=EC=95=88=EB=90=9C=20=EB=B6=80=EB=B6=84=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 --- src/main/java/ssu/eatssu/web/report/ReportController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/web/report/ReportController.java b/src/main/java/ssu/eatssu/web/report/ReportController.java index eb99e9f5..6181727d 100644 --- a/src/main/java/ssu/eatssu/web/report/ReportController.java +++ b/src/main/java/ssu/eatssu/web/report/ReportController.java @@ -61,7 +61,7 @@ public BaseResponse reportReview(@RequestBody ReviewReportCreate reviewR Long userId = SecurityUtil.getLoginUserId(); ReviewReport report = reportService.reportReview(userId, reviewReportCreate); slackService.sendSlackMessage(SlackMessageFormat.sendReport(report), SlackChannel.REPORT_CHANNEL); - return ResponseEntity.ok("Success"); + return new BaseResponse<>("Success"); } @ExceptionHandler(BaseException.class) From 72ea6f3c666a84736f3c10239bd0e84af4d2364a Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 30 Dec 2023 22:08:34 +0900 Subject: [PATCH 009/399] =?UTF-8?q?Comment:=20Controller=20=EC=A3=BC?= =?UTF-8?q?=EC=84=9D=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/web/mypage/MyPageController.java | 4 ++-- .../eatssu/web/report/ReportController.java | 4 ++-- .../eatssu/web/restaurant/MenuController.java | 17 +++++++++++----- .../web/restaurant/RestaurantController.java | 2 +- .../eatssu/web/review/ReviewController.java | 10 +++++++++- .../ssu/eatssu/web/user/UserController.java | 20 +++++++++++++------ .../UserInquiriesController.java | 6 ++++-- 7 files changed, 44 insertions(+), 19 deletions(-) diff --git a/src/main/java/ssu/eatssu/web/mypage/MyPageController.java b/src/main/java/ssu/eatssu/web/mypage/MyPageController.java index f64f0f74..a72dd6c1 100644 --- a/src/main/java/ssu/eatssu/web/mypage/MyPageController.java +++ b/src/main/java/ssu/eatssu/web/mypage/MyPageController.java @@ -29,7 +29,7 @@ public class MyPageController { private final MyPageService myPageService; /** - * 내가 쓴 리뷰 리스트 + * 내가 쓴 리뷰 목록 조회 */ @Operation(summary = "내가 쓴 리뷰 모아보기", description = "내가 쓴 리뷰 리스트") @GetMapping("/myreview") @@ -44,7 +44,7 @@ public BaseResponse> myReviewList( } /** - * 마이페이지 정보 + * 마이페이지 정보 조회 */ @Operation(summary = "마이페이지 정보", description = "마이페이지 정보") @GetMapping("/info") diff --git a/src/main/java/ssu/eatssu/web/report/ReportController.java b/src/main/java/ssu/eatssu/web/report/ReportController.java index 6181727d..830f3296 100644 --- a/src/main/java/ssu/eatssu/web/report/ReportController.java +++ b/src/main/java/ssu/eatssu/web/report/ReportController.java @@ -41,7 +41,7 @@ public class ReportController { private final ReviewRepository reviewRepository; /** - * 리뷰 신고 사유 받아오기 + * 리뷰 신고 사유 종류 조회 */ @Operation(summary = "리뷰 신고 사유 받아오기", description = "리뷰 신고 사유 받아오기") @GetMapping("/type") @@ -53,7 +53,7 @@ public BaseResponse> reportReviewType() { } /** - * 리뷰 신고하기 + * 리뷰 신고 */ @Operation(summary = "리뷰 신고하기", description = "리뷰 신고하기") @PostMapping("/") diff --git a/src/main/java/ssu/eatssu/web/restaurant/MenuController.java b/src/main/java/ssu/eatssu/web/restaurant/MenuController.java index ed8379ff..4f89b7d1 100644 --- a/src/main/java/ssu/eatssu/web/restaurant/MenuController.java +++ b/src/main/java/ssu/eatssu/web/restaurant/MenuController.java @@ -35,7 +35,9 @@ public class MenuController { private final MenuService menuService; /** - * 특정 식당의 식단 조회 + * 식단 목록 조회 + *

변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회한다. + * 일반적으로 학생식당과 도담의 경우 식단 여러개가 조회되고 기숙사식당은 한개만 조회된다.

*/ @Operation(summary = "변동메뉴 식단 리스트 조회 By 식당", description = "변동메뉴 식단 리스트 조회(학생식당, 도담, 기숙사 식당)") @GetMapping("/today-meal") @@ -61,7 +63,8 @@ public BaseResponse> todayMealList(@Parameter(description = "날 /** - * 고정메뉴 조회 + * 고정 메뉴 목록 조회 + *

메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 목록을 조회한다.

*/ @Operation(summary = "고정 메뉴 리스트 조회", description = "고정 메뉴 리스트 조회(푸드코트, 스낵코너, 더 키친)") @GetMapping("/fix-menu") @@ -78,7 +81,9 @@ public BaseResponse fixMenuList(@Parameter(description = "식당이 /** - * 특정 식당의 특정 날짜 식단 추가하기 + * 식단 추가 + *

변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가. + * 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리한다.(별도의 ErrorResponse 응답 X)

*/ @Operation(summary = "특정 식당 식단 추가", description = "특정 식당의 식단 추가") @PostMapping("/") @@ -107,7 +112,8 @@ public BaseResponse todayMenuAdd(@Parameter(description = "날짜(yyyyMM } /** - * mealId로 menuId, name 리스트 조회 + * 식단의 메뉴정보 목록 조회 + *

식단식별자(mealId)로 식단에 속하는 메뉴정보(menuId, name) 목록을 조회한다.

*/ @Operation(summary = "메뉴 정보 조회 By mealId", description = "메뉴 정보(Id, name) 조회 By mealId") @GetMapping("/menus") @@ -117,7 +123,8 @@ public BaseResponse menuList(@Parameter(description = "mealId") @Reque } /** - * mealId로 meal 삭제 + * 식단 삭제 + *

식단식별자(mealId)에 해당하는 식단을 삭제한다.

*/ @Operation(summary = "식단 삭제", description = "mealId로 meal 삭제") @DeleteMapping("/meal/{mealId}") diff --git a/src/main/java/ssu/eatssu/web/restaurant/RestaurantController.java b/src/main/java/ssu/eatssu/web/restaurant/RestaurantController.java index 4787c6e3..1cd00b8a 100644 --- a/src/main/java/ssu/eatssu/web/restaurant/RestaurantController.java +++ b/src/main/java/ssu/eatssu/web/restaurant/RestaurantController.java @@ -11,6 +11,7 @@ import ssu.eatssu.response.BaseResponse; import ssu.eatssu.web.restaurant.dto.RestaurantInfo; +//todo: 삭제 @RestController @RequestMapping("/restaurants") @RequiredArgsConstructor @@ -18,7 +19,6 @@ public class RestaurantController { private final RestaurantRepository restaurantRepository; - /** * 식당 위치, 운영 시간 조회 */ diff --git a/src/main/java/ssu/eatssu/web/review/ReviewController.java b/src/main/java/ssu/eatssu/web/review/ReviewController.java index b9a02719..3be92410 100644 --- a/src/main/java/ssu/eatssu/web/review/ReviewController.java +++ b/src/main/java/ssu/eatssu/web/review/ReviewController.java @@ -47,6 +47,7 @@ public class ReviewController { /** * 리뷰 작성 + *

메뉴식별자(menuId)에 해당하는 메뉴에 리뷰를 작성한다. 사진은 여러장 첨부 가능하다.

*/ @Operation(summary = "리뷰 작성", description = "리뷰 작성") @PostMapping(value = "/{menuId}", consumes = { @@ -63,6 +64,7 @@ public BaseResponse reviewCreate(@Parameter(description = "menuId") @Pat /** * 리뷰 수정(글 수정) + *

리뷰식별자(reviewId)에 해당하는 리뷰 속 글을 수정한다. 사진은 수정 X

*/ @Operation(summary = "리뷰 수정(글 수정)", description = "리뷰 수정(글 수정)") @PatchMapping("/{reviewId}") @@ -75,6 +77,7 @@ public BaseResponse reviewUpdate(@Parameter(description = "reviewId") @P /** * 리뷰 삭제 + *

리뷰식별자(reviewId)에 해당하는 리뷰를 삭제한다.

*/ @Operation(summary = "리뷰 삭제", description = "리뷰 삭제") @DeleteMapping("/{reviewId}") @@ -85,7 +88,9 @@ public BaseResponse reviewDelete(@Parameter(description = "reviewId") @P } /** - * 리뷰 정보 조회(평점 등등) + * 리뷰 정보 조회 + *

식단(변동메뉴)리뷰 조회 시 메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 평점 별 개수를 조회한다.
+ * 고정메뉴 리뷰 조회 시 메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 평점 별 개수를 조회한다.

*/ @Operation(summary = "리뷰 정보 조회(평점 등등)", description = "리뷰 정보 조회(평점 등등)") @GetMapping("/info") @@ -118,6 +123,8 @@ public BaseResponse menuReviewInfo( /** * 리뷰 리스트 조회 + *

커서 기반 페이지네이션으로 리뷰 리스트를 조회한다.
+ * pageable default={size=20, sort=date, direction=desc}

*/ @Operation(summary = "리뷰 리스트 조회", description = "리뷰 리스트 조회") @GetMapping("/list") @@ -154,6 +161,7 @@ public BaseResponse> menuReviewInfo(@Parameter(descriptio } /* review 갯수, 별점 refresh + //todo 관리자 api로 이동 필요 */ @GetMapping("/refresh") public BaseResponse refreshReviewInfo(){ diff --git a/src/main/java/ssu/eatssu/web/user/UserController.java b/src/main/java/ssu/eatssu/web/user/UserController.java index 3b84820c..f609dd75 100644 --- a/src/main/java/ssu/eatssu/web/user/UserController.java +++ b/src/main/java/ssu/eatssu/web/user/UserController.java @@ -7,8 +7,6 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.repository.UserRepository; import ssu.eatssu.response.BaseException; @@ -33,6 +31,9 @@ public class UserController { /** * 회원가입 + *

자체 회원가입

+ * + * @deprecated 현재는 카카오, 애플 로그인만 사용 중입니다. */ @Operation(summary = "회원가입", description = "회원가입.") @PostMapping("/join") @@ -42,7 +43,8 @@ public BaseResponse join(@Valid @RequestBody Join join) throws JsonProce } /** - * 이메일 중복체크. 중복이면 true + * 이메일 중복 검사 + *

중복되지 않은 이메일인 경우 true를 반환합니다.

*/ @Operation(summary = "이메일 중복 체크", description = "통과하면 true, 존재하는 이메일이면 errorCode 2011") @PostMapping("/user-emails/{email}/exist") @@ -57,7 +59,8 @@ public BaseResponse checkEmailDuplicate(@Parameter(description = "이 } /** - * 로그인 + * 공통 로그인 + *

자체, 카카오, 애플 로그인 공용으로 사용합니다.

*/ @Operation(summary = "로그인", description = "로그인") @PostMapping("/login") @@ -68,6 +71,7 @@ public BaseResponse login(@Valid @RequestBody Login login) throws JsonPr /** * 닉네임 수정 + *

닉네임을 수정합니다.

*/ @Operation(summary = "닉네임 수정", description = "닉네임 수정") @PatchMapping("/nickname") @@ -78,7 +82,8 @@ public BaseResponse nicknameUpdate(@Valid @RequestBody NicknameEdit nick } /** - * 닉네임 중복 체크 + * 닉네임 중복 검사 + *

중복되지 않은 닉네임인 경우 true를 반환합니다.

*/ @Operation(summary = "닉네임 중복 체크", description = "통과하면 true, 존재하는 닉네임이면 errorCode 2012") @GetMapping("/check-nickname") @@ -95,6 +100,7 @@ public BaseResponse checkNicknameDuplicate(@Parameter(description = " /** * 비밀번호 변경 + *

비밀번호를 변경합니다.

*/ @Operation(summary = "비밀번호 변경", description = "비밀번호 변경") @PatchMapping("/password") @@ -105,7 +111,8 @@ public BaseResponse passwordChange(@Valid @RequestBody PasswordChange pa } /** - * accessToken, refreshToken 재발급 + * AccessToken, RefreshToken 재발급 + *

유효한 Token을 받으면 AccessToken, RefreshToken을 새로 발급합니다.

*/ @Operation(summary = "accessToken, refreshToken 재발급", description = "accessToken, refreshToken 재발급") @PostMapping("/token/reissue") @@ -115,6 +122,7 @@ public BaseResponse refreshAccessToken() throws JsonProcessingException{ } /** * 유저 탈퇴 + *

유저를 탈퇴처리합니다.

*/ @Operation(summary = "유저 탈퇴", description = "탈퇴 성공하면 true 반환") @DeleteMapping("/signout") diff --git a/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java b/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java index c844d246..b39ef506 100644 --- a/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java +++ b/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java @@ -34,7 +34,8 @@ public class UserInquiriesController { private final UserInquiriesService userInquiriesService; /** - * 문의 남기기 + * 문의 작성 + *

문의를 작성합니다.

*/ @Operation(summary = "문의 남기기", description = "문의 남기기") @PostMapping("/") @@ -47,7 +48,8 @@ public BaseResponse userInquiriesCreate(@RequestBody UserInquiriesCreate } /** - * 문의내역 조회 By Id + * 문의 내용 조회 + *

문의 식별자(userInquiriesId)에 해당하는 문의 내용을 조회합니다.

*/ @Operation(summary = "고객 문의 내역 조회", description = "고객 문의 내역 조회 By Id") @GetMapping("/{userInquiriesId}") From 186e625bdd809b53deac826d7621797d6a27cae8 Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 30 Dec 2023 22:29:04 +0900 Subject: [PATCH 010/399] =?UTF-8?q?Remove:=20RestaurantController=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EC=8B=9D=EB=8B=B9=20=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EB=8A=94=20=ED=81=B4=EB=9D=BC=EB=8B=A8?= =?UTF-8?q?=EC=97=90=EC=84=9C=20firebase=EB=A1=9C=20=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=ED=95=98=EA=B8=B0=EB=A1=9C=20=EA=B2=B0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/restaurant/RestaurantController.java | 34 ------------------- 1 file changed, 34 deletions(-) delete mode 100644 src/main/java/ssu/eatssu/web/restaurant/RestaurantController.java diff --git a/src/main/java/ssu/eatssu/web/restaurant/RestaurantController.java b/src/main/java/ssu/eatssu/web/restaurant/RestaurantController.java deleted file mode 100644 index 1cd00b8a..00000000 --- a/src/main/java/ssu/eatssu/web/restaurant/RestaurantController.java +++ /dev/null @@ -1,34 +0,0 @@ -package ssu.eatssu.web.restaurant; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.Restaurant; -import ssu.eatssu.domain.enums.RestaurantName; -import ssu.eatssu.domain.repository.RestaurantRepository; -import ssu.eatssu.response.BaseResponse; -import ssu.eatssu.web.restaurant.dto.RestaurantInfo; - -//todo: 삭제 -@RestController -@RequestMapping("/restaurants") -@RequiredArgsConstructor -@Tag(name="Restaurant",description = "레스토랑 API") -public class RestaurantController { - - private final RestaurantRepository restaurantRepository; - /** - * 식당 위치, 운영 시간 조회 - */ - @Operation(summary = "식당 정보 조회", description = "식당 위치, 운영시간 조회") - @GetMapping("/{restaurantName}") - public BaseResponse restaurantInfo(@Parameter(description = "식당이름")@PathVariable("restaurantName") - RestaurantName restaurantName) { - Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) - .orElseThrow(() -> new IllegalArgumentException("해당 이름의 식당이 없습니다.")); - return new BaseResponse<>(RestaurantInfo.from(restaurant)); - } - -} From e659e0a883ca47eceae07aa8d012c9c553bd4aa7 Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 30 Dec 2023 23:25:34 +0900 Subject: [PATCH 011/399] Rename: package restaurant -> menu rename --- src/main/java/ssu/eatssu/service/MenuService.java | 4 ++-- .../eatssu/web/{restaurant => menu}/MenuController.java | 8 +++----- .../eatssu/web/{restaurant => menu}/dto/MenuReqDto.java | 2 +- .../eatssu/web/{restaurant => menu}/dto/MenuResDto.java | 2 +- .../web/{restaurant => menu}/dto/RestaurantInfo.java | 2 +- 5 files changed, 8 insertions(+), 10 deletions(-) rename src/main/java/ssu/eatssu/web/{restaurant => menu}/MenuController.java (96%) rename src/main/java/ssu/eatssu/web/{restaurant => menu}/dto/MenuReqDto.java (93%) rename src/main/java/ssu/eatssu/web/{restaurant => menu}/dto/MenuResDto.java (99%) rename src/main/java/ssu/eatssu/web/{restaurant => menu}/dto/RestaurantInfo.java (97%) diff --git a/src/main/java/ssu/eatssu/service/MenuService.java b/src/main/java/ssu/eatssu/service/MenuService.java index 9cc73b46..9b7cd9e9 100644 --- a/src/main/java/ssu/eatssu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/service/MenuService.java @@ -14,14 +14,14 @@ import ssu.eatssu.domain.repository.MenuRepository; import ssu.eatssu.domain.repository.RestaurantRepository; import ssu.eatssu.response.BaseException; -import ssu.eatssu.web.restaurant.dto.MenuReqDto; +import ssu.eatssu.web.menu.dto.MenuReqDto; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import static ssu.eatssu.response.BaseResponseStatus.*; -import static ssu.eatssu.web.restaurant.dto.MenuResDto.*; +import static ssu.eatssu.web.menu.dto.MenuResDto.*; @Service @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/web/restaurant/MenuController.java b/src/main/java/ssu/eatssu/web/menu/MenuController.java similarity index 96% rename from src/main/java/ssu/eatssu/web/restaurant/MenuController.java rename to src/main/java/ssu/eatssu/web/menu/MenuController.java index 4f89b7d1..016a553f 100644 --- a/src/main/java/ssu/eatssu/web/restaurant/MenuController.java +++ b/src/main/java/ssu/eatssu/web/menu/MenuController.java @@ -1,12 +1,10 @@ -package ssu.eatssu.web.restaurant; +package ssu.eatssu.web.menu; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.Meal; import ssu.eatssu.domain.Menu; @@ -16,14 +14,14 @@ import ssu.eatssu.response.BaseException; import ssu.eatssu.response.BaseResponse; import ssu.eatssu.service.MenuService; -import ssu.eatssu.web.restaurant.dto.MenuReqDto.AddTodayMenuList; +import ssu.eatssu.web.menu.dto.MenuReqDto.AddTodayMenuList; import java.text.ParseException; import java.util.ArrayList; import java.util.List; import static ssu.eatssu.response.BaseResponseStatus.*; -import static ssu.eatssu.web.restaurant.dto.MenuResDto.*; +import static ssu.eatssu.web.menu.dto.MenuResDto.*; @Slf4j @RestController diff --git a/src/main/java/ssu/eatssu/web/restaurant/dto/MenuReqDto.java b/src/main/java/ssu/eatssu/web/menu/dto/MenuReqDto.java similarity index 93% rename from src/main/java/ssu/eatssu/web/restaurant/dto/MenuReqDto.java rename to src/main/java/ssu/eatssu/web/menu/dto/MenuReqDto.java index 0ddfef08..a62f2a6e 100644 --- a/src/main/java/ssu/eatssu/web/restaurant/dto/MenuReqDto.java +++ b/src/main/java/ssu/eatssu/web/menu/dto/MenuReqDto.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.restaurant.dto; +package ssu.eatssu.web.menu.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; diff --git a/src/main/java/ssu/eatssu/web/restaurant/dto/MenuResDto.java b/src/main/java/ssu/eatssu/web/menu/dto/MenuResDto.java similarity index 99% rename from src/main/java/ssu/eatssu/web/restaurant/dto/MenuResDto.java rename to src/main/java/ssu/eatssu/web/menu/dto/MenuResDto.java index 8c0b6439..9a4ea4d0 100644 --- a/src/main/java/ssu/eatssu/web/restaurant/dto/MenuResDto.java +++ b/src/main/java/ssu/eatssu/web/menu/dto/MenuResDto.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.restaurant.dto; +package ssu.eatssu.web.menu.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; diff --git a/src/main/java/ssu/eatssu/web/restaurant/dto/RestaurantInfo.java b/src/main/java/ssu/eatssu/web/menu/dto/RestaurantInfo.java similarity index 97% rename from src/main/java/ssu/eatssu/web/restaurant/dto/RestaurantInfo.java rename to src/main/java/ssu/eatssu/web/menu/dto/RestaurantInfo.java index e2e3d28a..1b4e0c3d 100644 --- a/src/main/java/ssu/eatssu/web/restaurant/dto/RestaurantInfo.java +++ b/src/main/java/ssu/eatssu/web/menu/dto/RestaurantInfo.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.restaurant.dto; +package ssu.eatssu.web.menu.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; From 49ce3de4523abf460100b82533581f68180406df Mon Sep 17 00:00:00 2001 From: SY2on Date: Sun, 31 Dec 2023 00:47:24 +0900 Subject: [PATCH 012/399] =?UTF-8?q?Refactor:=20Controller=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/web/menu/MenuController.java | 59 +++++++++--------- .../eatssu/web/mypage/MyPageController.java | 9 ++- .../eatssu/web/report/ReportController.java | 2 +- .../eatssu/web/review/ReviewController.java | 62 ++++++++----------- .../ssu/eatssu/web/user/UserController.java | 28 +++++---- .../UserInquiriesController.java | 13 ++-- 6 files changed, 81 insertions(+), 92 deletions(-) diff --git a/src/main/java/ssu/eatssu/web/menu/MenuController.java b/src/main/java/ssu/eatssu/web/menu/MenuController.java index 016a553f..e359550a 100644 --- a/src/main/java/ssu/eatssu/web/menu/MenuController.java +++ b/src/main/java/ssu/eatssu/web/menu/MenuController.java @@ -20,7 +20,8 @@ import java.util.ArrayList; import java.util.List; -import static ssu.eatssu.response.BaseResponseStatus.*; +import static ssu.eatssu.response.BaseResponseStatus.INVALID_DATE; +import static ssu.eatssu.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; import static ssu.eatssu.web.menu.dto.MenuResDto.*; @Slf4j @@ -34,18 +35,17 @@ public class MenuController { /** * 식단 목록 조회 - *

변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회한다. - * 일반적으로 학생식당과 도담의 경우 식단 여러개가 조회되고 기숙사식당은 한개만 조회된다.

+ *

변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회한다. + * 일반적으로 학생식당과 도담의 경우 식단 여러개가 조회되고 기숙사식당은 한개만 조회된다.

*/ @Operation(summary = "변동메뉴 식단 리스트 조회 By 식당", description = "변동메뉴 식단 리스트 조회(학생식당, 도담, 기숙사 식당)") - @GetMapping("/today-meal") - public BaseResponse> todayMealList(@Parameter(description = "날짜(yyyyMMdd)") @RequestParam( - "date") - String date, - @Parameter(description = "식당이름") @RequestParam("restaurant") - RestaurantName restaurantName, - @Parameter(description = "시간대") @RequestParam("time") - TimePart timePart) throws ParseException { + @GetMapping("/today-meal") //todo today-meal은 아닌것 같음 + public BaseResponse> getMealList(@Parameter(description = "날짜(yyyyMMdd)") + @RequestParam("date") String date, + @Parameter(description = "식당이름") + @RequestParam("restaurant") RestaurantName restaurantName, + @Parameter(description = "시간대") + @RequestParam("time") TimePart timePart) throws ParseException { //todo Exceiption service단에서 처리 if (MenuTypeGroup.isChange(restaurantName)) { List mealList = menuService.findTodayMeals(timePart, date, restaurantName); List todayMealList = new ArrayList<>(); @@ -66,8 +66,8 @@ public BaseResponse> todayMealList(@Parameter(description = "날 */ @Operation(summary = "고정 메뉴 리스트 조회", description = "고정 메뉴 리스트 조회(푸드코트, 스낵코너, 더 키친)") @GetMapping("/fix-menu") - public BaseResponse fixMenuList(@Parameter(description = "식당이름") @RequestParam("restaurant") - RestaurantName restaurantName) { + public BaseResponse getFixMenuList(@Parameter(description = "식당이름") + @RequestParam("restaurant") RestaurantName restaurantName) { if (MenuTypeGroup.isFix(restaurantName)) { List menuList = menuService.findFixMenuByRestaurant(restaurantName); FixMenuList fixMenuList = FixMenuList.from(menuList); @@ -85,21 +85,21 @@ public BaseResponse fixMenuList(@Parameter(description = "식당이 */ @Operation(summary = "특정 식당 식단 추가", description = "특정 식당의 식단 추가") @PostMapping("/") - public BaseResponse todayMenuAdd(@Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") - String date, - @Parameter(description = "식당이름") @RequestParam("restaurant") - RestaurantName restaurantName, - @Parameter(description = "시간대") @RequestParam("time") - TimePart timePart, - @RequestBody AddTodayMenuList addTodayMenuList) throws ParseException { - + public BaseResponse addMeal(@Parameter(description = "날짜(yyyyMMdd)") + @RequestParam("date") String date, + @Parameter(description = "식당이름") + @RequestParam("restaurant") RestaurantName restaurantName, + @Parameter(description = "시간대") + @RequestParam("time") TimePart timePart, + @RequestBody AddTodayMenuList addTodayMenuList) throws ParseException { + //todo Exceiption service단에서 처리 if (MenuTypeGroup.isChange(restaurantName)) { - try{ - if(menuService.dupliicateMealCheck(timePart,date, restaurantName, addTodayMenuList)){//이미 추가된 식단이면 - log.info("식단 중복 발견!"); - return new BaseResponse<>("Duplicated"); - } - }catch (ParseException e){ + try { + if (menuService.dupliicateMealCheck(timePart, date, restaurantName, addTodayMenuList)) {//이미 추가된 식단이면 + log.info("식단 중복 발견!"); + return new BaseResponse<>("Duplicated"); + } + } catch (ParseException e) { throw new BaseException(INVALID_DATE); } menuService.addMeal(timePart, date, restaurantName, addTodayMenuList); @@ -115,7 +115,8 @@ public BaseResponse todayMenuAdd(@Parameter(description = "날짜(yyyyMM */ @Operation(summary = "메뉴 정보 조회 By mealId", description = "메뉴 정보(Id, name) 조회 By mealId") @GetMapping("/menus") - public BaseResponse menuList(@Parameter(description = "mealId") @RequestParam("mealId") Long mealId) { + public BaseResponse getMenuListInMeal(@Parameter(description = "mealId") + @RequestParam("mealId") Long mealId) { MenuList menuList = menuService.findAllMenu(mealId); return new BaseResponse<>(menuList); } @@ -126,7 +127,7 @@ public BaseResponse menuList(@Parameter(description = "mealId") @Reque */ @Operation(summary = "식단 삭제", description = "mealId로 meal 삭제") @DeleteMapping("/meal/{mealId}") - public BaseResponse mealDelete(@Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { + public BaseResponse deleteMeal(@Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { List menuIdList = menuService.deleteMeal(mealId); menuService.cleanupGarbageMenu(menuIdList); return new BaseResponse<>(""); diff --git a/src/main/java/ssu/eatssu/web/mypage/MyPageController.java b/src/main/java/ssu/eatssu/web/mypage/MyPageController.java index a72dd6c1..ee41c179 100644 --- a/src/main/java/ssu/eatssu/web/mypage/MyPageController.java +++ b/src/main/java/ssu/eatssu/web/mypage/MyPageController.java @@ -10,7 +10,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.web.PageableDefault; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import ssu.eatssu.response.BaseException; import ssu.eatssu.response.BaseResponse; @@ -33,9 +32,9 @@ public class MyPageController { */ @Operation(summary = "내가 쓴 리뷰 모아보기", description = "내가 쓴 리뷰 리스트") @GetMapping("/myreview") - public BaseResponse> myReviewList( - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", - in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, + public BaseResponse> getMyReviewList( + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) + @RequestParam(required = false) Long lastReviewId, @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable ) { Long userId = SecurityUtil.getLoginUserId(); @@ -48,7 +47,7 @@ public BaseResponse> myReviewList( */ @Operation(summary = "마이페이지 정보", description = "마이페이지 정보") @GetMapping("/info") - public BaseResponse mypageInfo() { + public BaseResponse getMyPageInfo() { Long userId = SecurityUtil.getLoginUserId(); MypageInfo mypageInfo = myPageService.mypageInfo(userId); return new BaseResponse<>(mypageInfo); diff --git a/src/main/java/ssu/eatssu/web/report/ReportController.java b/src/main/java/ssu/eatssu/web/report/ReportController.java index 830f3296..05e9b6a3 100644 --- a/src/main/java/ssu/eatssu/web/report/ReportController.java +++ b/src/main/java/ssu/eatssu/web/report/ReportController.java @@ -45,7 +45,7 @@ public class ReportController { */ @Operation(summary = "리뷰 신고 사유 받아오기", description = "리뷰 신고 사유 받아오기") @GetMapping("/type") - public BaseResponse> reportReviewType() { + public BaseResponse> getReportType() { List reportInfo = new ArrayList<>(); Arrays.stream(ReviewReportType.values()) .forEach(reportType -> reportInfo.add(new ReviewReportTypeInfo(reportType))); diff --git a/src/main/java/ssu/eatssu/web/review/ReviewController.java b/src/main/java/ssu/eatssu/web/review/ReviewController.java index 3be92410..443ebd80 100644 --- a/src/main/java/ssu/eatssu/web/review/ReviewController.java +++ b/src/main/java/ssu/eatssu/web/review/ReviewController.java @@ -10,9 +10,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.web.PageableDefault; -import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import ssu.eatssu.domain.enums.MenuTypeGroup; @@ -27,8 +25,6 @@ import ssu.eatssu.web.review.dto.ReviewDetail; import ssu.eatssu.web.review.dto.ReviewUpdate; -import javax.net.ssl.SSLEngineResult; -import java.awt.*; import java.util.List; import static ssu.eatssu.domain.enums.MenuTypeGroup.CHANGE; @@ -50,13 +46,13 @@ public class ReviewController { *

메뉴식별자(menuId)에 해당하는 메뉴에 리뷰를 작성한다. 사진은 여러장 첨부 가능하다.

*/ @Operation(summary = "리뷰 작성", description = "리뷰 작성") - @PostMapping(value = "/{menuId}", consumes = { - MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, produces = - MediaType.APPLICATION_JSON_VALUE) - public BaseResponse reviewCreate(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, - @RequestPart(value = "reviewCreate") ReviewCreate reviewCreate, - @RequestPart(value = "multipartFileList", required = false) List multipartFileList - ) { + @PostMapping(value = "/{menuId}", + consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, + produces = MediaType.APPLICATION_JSON_VALUE) + public BaseResponse writeReview(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, + @RequestPart(value = "reviewCreate") ReviewCreate reviewCreate, + @RequestPart(value = "multipartFileList", required = false) + List multipartFileList) { Long userId = SecurityUtil.getLoginUserId(); reviewService.createReview(userId, menuId, reviewCreate, multipartFileList); return new BaseResponse<>(""); @@ -68,8 +64,9 @@ public BaseResponse reviewCreate(@Parameter(description = "menuId") @Pat */ @Operation(summary = "리뷰 수정(글 수정)", description = "리뷰 수정(글 수정)") @PatchMapping("/{reviewId}") - public BaseResponse reviewUpdate(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, - @RequestBody ReviewUpdate reviewUpdate) { + public BaseResponse updateReview(@Parameter(description = "reviewId") + @PathVariable("reviewId") Long reviewId, + @RequestBody ReviewUpdate reviewUpdate) { Long userId = SecurityUtil.getLoginUserId(); reviewService.updateReview(userId, reviewId, reviewUpdate); return new BaseResponse<>(""); @@ -81,7 +78,7 @@ public BaseResponse reviewUpdate(@Parameter(description = "reviewId") @P */ @Operation(summary = "리뷰 삭제", description = "리뷰 삭제") @DeleteMapping("/{reviewId}") - public BaseResponse reviewDelete(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId) { + public BaseResponse deleteReview(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId) { Long userId = SecurityUtil.getLoginUserId(); reviewService.deleteReview(userId, reviewId); return new BaseResponse<>(""); @@ -94,14 +91,12 @@ public BaseResponse reviewDelete(@Parameter(description = "reviewId") @P */ @Operation(summary = "리뷰 정보 조회(평점 등등)", description = "리뷰 정보 조회(평점 등등)") @GetMapping("/info") - public BaseResponse menuReviewInfo( - @Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") - MenuTypeGroup menuTypeGroup, - @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) - Long menuId, - @Parameter(description = "mealId(고정메뉴)") @RequestParam(value = "mealId", required = false) - Long mealId - ) { + public BaseResponse getMenuReviewInfo(@Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") + @RequestParam("menuType") MenuTypeGroup menuTypeGroup, + @Parameter(description = "menuId(고정메뉴)") + @RequestParam(value = "menuId", required = false) Long menuId, + @Parameter(description = "mealId(고정메뉴)") + @RequestParam(value = "mealId", required = false) Long mealId) { MenuReviewInfo menuReviewInfo; if (menuTypeGroup == FIX) { if (menuId == null) { @@ -128,19 +123,13 @@ public BaseResponse menuReviewInfo( */ @Operation(summary = "리뷰 리스트 조회", description = "리뷰 리스트 조회") @GetMapping("/list") - public BaseResponse> menuReviewInfo(@Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam( - "menuType") - MenuTypeGroup menuTypeGroup, - @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) - Long menuId, - @Parameter(description = "mealId(변동메뉴)") @RequestParam(value = "mealId", required = false) - Long mealId, - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 " + - "값 필요 없음)", - in = ParameterIn.QUERY) @RequestParam(value - = "lastReviewId", required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = - "date", direction = Sort.Direction.DESC) Pageable pageable) { + public BaseResponse> getReviewList( + @Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") MenuTypeGroup menuTypeGroup, + @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) Long menuId, + @Parameter(description = "mealId(변동메뉴)") @RequestParam(value = "mealId", required = false) Long mealId, + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) + @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable) { SliceDto reviewList; if (menuTypeGroup == FIX) { if (menuId == null) { @@ -159,12 +148,13 @@ public BaseResponse> menuReviewInfo(@Parameter(descriptio } return new BaseResponse<>(reviewList); } + /* review 갯수, 별점 refresh //todo 관리자 api로 이동 필요 */ @GetMapping("/refresh") - public BaseResponse refreshReviewInfo(){ + public BaseResponse refreshReviewInfo() { refreshingService.refreshAllReviews(); return new BaseResponse<>(""); } diff --git a/src/main/java/ssu/eatssu/web/user/UserController.java b/src/main/java/ssu/eatssu/web/user/UserController.java index f609dd75..a6862c2e 100644 --- a/src/main/java/ssu/eatssu/web/user/UserController.java +++ b/src/main/java/ssu/eatssu/web/user/UserController.java @@ -22,7 +22,7 @@ @RestController @RequestMapping("/user") @RequiredArgsConstructor -@Tag(name="User",description = "유저 API") +@Tag(name = "User", description = "유저 API") public class UserController { private final UserService userService; @@ -48,11 +48,11 @@ public BaseResponse join(@Valid @RequestBody Join join) throws JsonProce */ @Operation(summary = "이메일 중복 체크", description = "통과하면 true, 존재하는 이메일이면 errorCode 2011") @PostMapping("/user-emails/{email}/exist") - public BaseResponse checkEmailDuplicate(@Parameter(description = "이메일")@PathVariable String email){ + public BaseResponse checkEmailDuplicate(@Parameter(description = "이메일") @PathVariable String email) { boolean duplicated = userRepository.existsByEmail(email); - if(!duplicated){ + if (!duplicated) { return new BaseResponse<>(true); - }else{ + } else { //throw new BaseException(EMAIL_DUPLICATE); return new BaseResponse<>(false); } @@ -64,7 +64,8 @@ public BaseResponse checkEmailDuplicate(@Parameter(description = "이 */ @Operation(summary = "로그인", description = "로그인") @PostMapping("/login") - public BaseResponse login(@Valid @RequestBody Login login) throws JsonProcessingException { + public BaseResponse login(@Valid @RequestBody Login login) throws JsonProcessingException { // todo: + // exceiption service단에서 처리 Tokens tokens = userService.login(login.getEmail(), login.getPwd()); return new BaseResponse<>(tokens); } @@ -75,7 +76,7 @@ public BaseResponse login(@Valid @RequestBody Login login) throws JsonPr */ @Operation(summary = "닉네임 수정", description = "닉네임 수정") @PatchMapping("/nickname") - public BaseResponse nicknameUpdate(@Valid @RequestBody NicknameEdit nicknameEdit){ + public BaseResponse updateNickname(@Valid @RequestBody NicknameEdit nicknameEdit) { Long userId = getLoginUserId(); userService.updateNickname(userId, nicknameEdit.getNickname()); return new BaseResponse<>(""); @@ -87,12 +88,12 @@ public BaseResponse nicknameUpdate(@Valid @RequestBody NicknameEdit nick */ @Operation(summary = "닉네임 중복 체크", description = "통과하면 true, 존재하는 닉네임이면 errorCode 2012") @GetMapping("/check-nickname") - public BaseResponse checkNicknameDuplicate(@Parameter(description = "닉네임")@RequestParam(value = - "nickname") String nickname){ + public BaseResponse checkNicknameDuplicate(@Parameter(description = "닉네임") + @RequestParam(value = "nickname") String nickname) { boolean duplicated = userRepository.existsByNickname(nickname); - if(!duplicated){ + if (!duplicated) { return new BaseResponse<>(true); - }else{ + } else { //throw new BaseException(NICKNAME_DUPLICATE); return new BaseResponse<>(false); } @@ -104,7 +105,7 @@ public BaseResponse checkNicknameDuplicate(@Parameter(description = " */ @Operation(summary = "비밀번호 변경", description = "비밀번호 변경") @PatchMapping("/password") - public BaseResponse passwordChange(@Valid @RequestBody PasswordChange passwordChange){ + public BaseResponse updatePassword(@Valid @RequestBody PasswordChange passwordChange) { Long userId = getLoginUserId(); userService.changePassword(userId, passwordChange.getPwd()); return new BaseResponse<>(""); @@ -116,17 +117,18 @@ public BaseResponse passwordChange(@Valid @RequestBody PasswordChange pa */ @Operation(summary = "accessToken, refreshToken 재발급", description = "accessToken, refreshToken 재발급") @PostMapping("/token/reissue") - public BaseResponse refreshAccessToken() throws JsonProcessingException{ + public BaseResponse refreshToken() throws JsonProcessingException { Tokens tokens = userService.refreshAccessToken(getLoginUser()); return new BaseResponse<>(tokens); } + /** * 유저 탈퇴 *

유저를 탈퇴처리합니다.

*/ @Operation(summary = "유저 탈퇴", description = "탈퇴 성공하면 true 반환") @DeleteMapping("/signout") - public BaseResponse signout(){ + public BaseResponse signout() { userService.signout(getLoginUserId()); return new BaseResponse<>(true); } diff --git a/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java b/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java index b39ef506..8746b09f 100644 --- a/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java +++ b/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java @@ -8,10 +8,8 @@ import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.UserInquiries; import ssu.eatssu.domain.repository.UserInquiriesRepository; -import ssu.eatssu.domain.repository.UserRepository; import ssu.eatssu.response.BaseException; import ssu.eatssu.response.BaseResponse; -import ssu.eatssu.response.BaseResponseStatus; import ssu.eatssu.service.UserInquiriesService; import ssu.eatssu.slack.SlackChannel; import ssu.eatssu.slack.SlackMessageFormat; @@ -20,7 +18,7 @@ import ssu.eatssu.web.user_inquiries.dto.UserInquiriesCreate; import ssu.eatssu.web.user_inquiries.dto.UserInquiriesDetail; -import static ssu.eatssu.response.BaseResponseStatus.*; +import static ssu.eatssu.response.BaseResponseStatus.NOT_FOUND_USER_INQUIRIES; @Slf4j @RestController @@ -29,7 +27,6 @@ @Tag(name = "Inquiries", description = "문의 API") public class UserInquiriesController { private final SlackService slackService; - private final UserRepository userRepository; private final UserInquiriesRepository userInquiriesRepository; private final UserInquiriesService userInquiriesService; @@ -39,7 +36,7 @@ public class UserInquiriesController { */ @Operation(summary = "문의 남기기", description = "문의 남기기") @PostMapping("/") - public BaseResponse userInquiriesCreate(@RequestBody UserInquiriesCreate userInquiriesCreate) { + public BaseResponse writeInquiries(@RequestBody UserInquiriesCreate userInquiriesCreate) { Long userId = SecurityUtil.getLoginUserId(); UserInquiries inquiries = userInquiriesService.createUserInquiries(userId, userInquiriesCreate.getContent()); slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiries(inquiries) @@ -53,10 +50,10 @@ public BaseResponse userInquiriesCreate(@RequestBody UserInquiriesCreate */ @Operation(summary = "고객 문의 내역 조회", description = "고객 문의 내역 조회 By Id") @GetMapping("/{userInquiriesId}") - public BaseResponse userInquiriesCreate(@Parameter(description = "userInquiriesId") - @PathVariable("userInquiriesId") Long userInquiriesId) { + public BaseResponse getInquiriesDetail(@Parameter(description = "userInquiriesId") + @PathVariable("userInquiriesId") Long userInquiriesId) { UserInquiries inquiries = - userInquiriesRepository.findById(userInquiriesId).orElseThrow(()-> new BaseException(NOT_FOUND_USER_INQUIRIES)); + userInquiriesRepository.findById(userInquiriesId).orElseThrow(() -> new BaseException(NOT_FOUND_USER_INQUIRIES)); slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiries(inquiries) , SlackChannel.USER_INQUIRIES_CHANNEL); return new BaseResponse<>(UserInquiriesDetail.fromUserInquiries(inquiries)); From ed6d12ae8e18873512d9f62e58c5e62836e6d4bf Mon Sep 17 00:00:00 2001 From: SY2on Date: Mon, 1 Jan 2024 01:46:50 +0900 Subject: [PATCH 013/399] =?UTF-8?q?Refactor:=20Service=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=EB=AA=85=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20?= =?UTF-8?q?=EC=A3=BC=EC=84=9D=20=EB=B3=B4=EC=B6=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ssu/eatssu/service/MenuService.java | 36 ++++++++++--- .../ssu/eatssu/service/MyPageService.java | 11 +++- .../java/ssu/eatssu/service/OauthService.java | 39 +++++++++++--- .../ssu/eatssu/service/RefreshingService.java | 3 ++ .../ssu/eatssu/service/ReportService.java | 3 ++ .../ssu/eatssu/service/ReviewService.java | 51 +++++++++++++++++-- .../eatssu/service/UserInquiriesService.java | 3 ++ .../java/ssu/eatssu/service/UserService.java | 30 +++++++++-- .../ssu/eatssu/web/menu/MenuController.java | 10 ++-- .../eatssu/web/mypage/MyPageController.java | 2 +- .../ssu/eatssu/web/oauth/OauthController.java | 8 +-- .../eatssu/web/review/ReviewController.java | 2 +- .../ssu/eatssu/web/user/UserController.java | 4 +- 13 files changed, 164 insertions(+), 38 deletions(-) diff --git a/src/main/java/ssu/eatssu/service/MenuService.java b/src/main/java/ssu/eatssu/service/MenuService.java index 9b7cd9e9..32db553b 100644 --- a/src/main/java/ssu/eatssu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/service/MenuService.java @@ -33,13 +33,21 @@ public class MenuService { private final MealMenuRepository mealMenuRepository; private final RestaurantRepository restaurantRepository; - public List findFixMenuByRestaurant(RestaurantName restaurantName) { + /** + * 고정 메뉴 조회 + *

특정 식당에 해당하는 고정메뉴 목록을 조회합니다.

+ */ + public List findFixMenuList(RestaurantName restaurantName) { Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) .orElseThrow(() -> new BaseException(NOT_FOUND_RESTAURANT)); return menuRepository.findAllByRestaurant(restaurant); } - public List findTodayMeals(TimePart timePart, String date, + /** + * 식단 목록 조회 + *

변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회한다.

+ */ + public List findMealList(TimePart timePart, String date, RestaurantName restaurantName) throws ParseException { Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) .orElseThrow(() -> new BaseException(NOT_FOUND_RESTAURANT)); @@ -49,9 +57,11 @@ public List findTodayMeals(TimePart timePart, String date, return mealRepository.findAllByDateAndTimePartAndRestaurant(formatDate, timePart, restaurant); } - - public void addMeal(TimePart timePart, String date, RestaurantName restaurantName, - MenuReqDto.AddTodayMenuList addTodayMenuList) throws ParseException { + /** + * 식단 등록 + */ + public void createMeal(TimePart timePart, String date, RestaurantName restaurantName, + MenuReqDto.AddTodayMenuList addTodayMenuList) throws ParseException { Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) .orElseThrow(() -> new BaseException(NOT_FOUND_RESTAURANT)); //date format 맞추기 @@ -75,7 +85,10 @@ public void addMeal(TimePart timePart, String date, RestaurantName restaurantNam newMeal.caculateGrade(); } - public boolean dupliicateMealCheck(TimePart timePart, String date, RestaurantName restaurantName, + /** + * 이미 존재하는 식단인지 확인 + */ + public boolean isExistMeal(TimePart timePart, String date, RestaurantName restaurantName, MenuReqDto.AddTodayMenuList addTodayMenuList) throws ParseException { //date format 맞추기 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); @@ -97,11 +110,17 @@ public boolean dupliicateMealCheck(TimePart timePart, String date, RestaurantNam return false; } - public MenuList findAllMenu(Long mealId) { + /** + * 식단 속 메뉴 목록 조회 + */ + public MenuList findMenuListInMeal(Long mealId) { Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); return MenuList.from(meal); } + /** + * 식단 삭제 + */ public List deleteMeal(Long mealId) { Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); List menuIdList = new ArrayList<>(); @@ -116,6 +135,9 @@ public List deleteMeal(Long mealId) { return menuIdList; } + /** + * 변동 메뉴 중 어떤 식단에도 포함되지 않는 메뉴를 찾아 삭제한다. + */ public void cleanupGarbageMenu(List menuIdList) { for(Long menuId : menuIdList){ Optional menu = menuRepository.findById(menuId); diff --git a/src/main/java/ssu/eatssu/service/MyPageService.java b/src/main/java/ssu/eatssu/service/MyPageService.java index 7a98ca04..4187d649 100644 --- a/src/main/java/ssu/eatssu/service/MyPageService.java +++ b/src/main/java/ssu/eatssu/service/MyPageService.java @@ -28,6 +28,9 @@ public class MyPageService { private final ReviewRepository reviewRepository; private final UserRepository userRepository; + /** + * 유저가 작성한 리뷰 목록 조회 + */ public SliceDto findMyReviewList(Long userId, Pageable pageable, Long lastReviewId) { User user = userRepository.findById(userId).orElseThrow(() -> new BaseException(NOT_FOUND_USER)); @@ -51,6 +54,9 @@ public SliceDto findMyReviewList(Long userId, Pageable pageable, } + /** + * Slice를 Slice로 변환 + */ private SliceDto sliceReviewToSliceMyReviewDetail(Slice sliceReviewList) { List myReviewDetailList = new ArrayList<>(); for (Review review : sliceReviewList) { @@ -61,7 +67,10 @@ private SliceDto sliceReviewToSliceMyReviewDetail(Slice sliceReviewList.hasNext(), myReviewDetailList); } - public MypageInfo mypageInfo(Long userId) { + /** + * 마이페이지 정보(닉네임, OAuth 제공처) 조회 + */ + public MypageInfo findMyPageInfo(Long userId) { User user = userRepository.findById(userId).orElseThrow(() -> new BaseException(NOT_FOUND_USER)); return new MypageInfo(user.getNickname(), user.getProvider()); } diff --git a/src/main/java/ssu/eatssu/service/OauthService.java b/src/main/java/ssu/eatssu/service/OauthService.java index 38ec9cb9..f5a65bd7 100644 --- a/src/main/java/ssu/eatssu/service/OauthService.java +++ b/src/main/java/ssu/eatssu/service/OauthService.java @@ -53,13 +53,19 @@ public class OauthService { private final JwtTokenProvider jwtTokenProvider; private final RestTemplate restTemplate; + /** + * 회원가입 + */ private User join(String email, String providerId, OauthProvider provider) { - String pwd = makePassword(provider, providerId); + String pwd = createOAuthUserPassword(provider, providerId); String encodedPwd = passwordEncoder.encode(pwd); User user = User.oAuthJoin(email, encodedPwd, provider, providerId); return userRepository.save(user); } + /** + * email, pwd를 통해 JwtToken을 생성 //todo: JwtTokenProvider로 옮길까? + */ public Tokens generateJwtTokens(String email, String pwd){ // 1. email/pwd 를 기반으로 Authentication 객체 생성 // 이때 authentication은 인증 여부를 확인하는 authenticated 값이 false @@ -77,21 +83,31 @@ public Tokens generateJwtTokens(String email, String pwd){ } } - private String makePassword(OauthProvider provider, String providerId) { + /** + * OAuth 유저용 Password 생성 + * todo 자체회원가입 안써서 password 컬럼이 필요없는데 삭제? + */ + private String createOAuthUserPassword(OauthProvider provider, String providerId) { return provider.toString() + providerId; } - public Tokens loginByKakao(String email, String providerId) { + /** + * 카카오 로그인 + */ + public Tokens kakaoLogin(String email, String providerId) { Optional user = userRepository.findByProviderId(providerId); if (user.isEmpty()) { join(email, providerId, OauthProvider.KAKAO); } - String pwd = makePassword(OauthProvider.KAKAO, providerId); + String pwd = createOAuthUserPassword(OauthProvider.KAKAO, providerId); return generateJwtTokens(email, pwd); } - public Tokens loginByApple(String identityToken) throws NoSuchAlgorithmException, InvalidKeySpecException { - OauthInfo oauthInfo = userInfoFromApple(identityToken); + /** + * 애플 로그인 + */ + public Tokens appleLogin(String identityToken) throws NoSuchAlgorithmException, InvalidKeySpecException { + OauthInfo oauthInfo = getUserInfoFromApple(identityToken); Optional userOptional = userRepository.findByProviderId(oauthInfo.getProviderId()); User user; if (userOptional.isEmpty()) {//최초로그인시 회원가입 @@ -103,11 +119,15 @@ public Tokens loginByApple(String identityToken) throws NoSuchAlgorithmException userRepository.save(user); } } - String pwd = makePassword(OauthProvider.APPLE, oauthInfo.getProviderId()); + String pwd = createOAuthUserPassword(OauthProvider.APPLE, oauthInfo.getProviderId()); return generateJwtTokens(user.getEmail(), pwd); } - private OauthInfo userInfoFromApple(String identityToken) throws NoSuchAlgorithmException, InvalidKeySpecException { + /** + * 애플 로그인 - 애플 API 호출을 통해 유저 정보(providerId, email) 조회 + */ + private OauthInfo getUserInfoFromApple(String identityToken) throws NoSuchAlgorithmException, + InvalidKeySpecException { //identity token decode String[] decodeArray = identityToken.split("\\."); @@ -155,6 +175,9 @@ private OauthInfo userInfoFromApple(String identityToken) throws NoSuchAlgorithm } } + /** + * 애플 로그인 - 이메일 가리기 선택한지 확인 + */ private boolean isHideEmail(String email){ if(email.length()>25){ return email.substring(email.length() - 25, email.length()).equals("@privaterelay.appleid.com"); diff --git a/src/main/java/ssu/eatssu/service/RefreshingService.java b/src/main/java/ssu/eatssu/service/RefreshingService.java index c102c998..b732ab72 100644 --- a/src/main/java/ssu/eatssu/service/RefreshingService.java +++ b/src/main/java/ssu/eatssu/service/RefreshingService.java @@ -9,6 +9,9 @@ import java.util.List; +/** + * 리뷰 정보(별점, 리뷰 개수 ..) 이상할 때 refresh하는 클래스 + */ @RequiredArgsConstructor @Service @Transactional diff --git a/src/main/java/ssu/eatssu/service/ReportService.java b/src/main/java/ssu/eatssu/service/ReportService.java index 13ba4248..cdfed809 100644 --- a/src/main/java/ssu/eatssu/service/ReportService.java +++ b/src/main/java/ssu/eatssu/service/ReportService.java @@ -25,6 +25,9 @@ public class ReportService { private final UserRepository userRepository; private final ReviewReportRepository reviewReportRepository; + /** + * 리뷰 신고 + */ public ReviewReport reportReview(Long userId, ReviewReportCreate reviewReportCreate) { User user = userRepository.findById(userId).orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Review review = reviewRepository.findById(reviewReportCreate.getReviewId()) diff --git a/src/main/java/ssu/eatssu/service/ReviewService.java b/src/main/java/ssu/eatssu/service/ReviewService.java index 8cb6f3e7..178ff891 100644 --- a/src/main/java/ssu/eatssu/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/service/ReviewService.java @@ -36,6 +36,9 @@ public class ReviewService { private final MealRepository mealRepository; private final S3Uploader s3Uploader; + /** + * 리뷰 작성 + */ public void createReview(Long userId, Long menuId, ReviewCreate reviewCreate, List imgList) { User user = userRepository.findById(userId) .orElseThrow(()-> new BaseException(NOT_FOUND_USER)); @@ -52,6 +55,10 @@ public void createReview(Long userId, Long menuId, ReviewCreate reviewCreate, Li } } } + + /** + * 리뷰 이미지 추가 + */ public void addReviewImg(Review review, MultipartFile image) { if(!image.isEmpty()){ try{ @@ -63,7 +70,11 @@ public void addReviewImg(Review review, MultipartFile image) { } } } - public void updateReview(Long userId, Long reviewId, ReviewUpdate reviewUpdate) { + + /** + * 리뷰 문장 수정 + */ + public void updateReviewContent(Long userId, Long reviewId, ReviewUpdate reviewUpdate) { User user = userRepository.findById(userId) .orElseThrow(()-> new BaseException(NOT_FOUND_USER)); @@ -78,6 +89,10 @@ public void updateReview(Long userId, Long reviewId, ReviewUpdate reviewUpdate) throw new BaseException(PERMISSION_DENIED); } } + + /** + * 리뷰 삭제 + */ public void deleteReview(Long userId, Long reviewId){ User user = userRepository.findById(userId) .orElseThrow(()-> new BaseException(NOT_FOUND_USER)); @@ -92,9 +107,17 @@ public void deleteReview(Long userId, Long reviewId){ throw new BaseException(PERMISSION_DENIED); } } + + /** + * 리뷰 작성자/관리자 인지 확인 //todo 관리자인지는 빼도 될듯 + */ public boolean isWriterOrAdmin(Review review, User user){ return review.getUser() == user; } + + /** + * 고정메뉴 - 리뷰 정보 조회 + */ public MenuReviewInfo findReviewInfoByMenuId(Long menuId) { Menu menu = menuRepository.findById(menuId) .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); @@ -104,9 +127,13 @@ public MenuReviewInfo findReviewInfoByMenuId(Long menuId) { return MenuReviewInfo.builder() .menuName(reviewMenuList).mainGrade(menu.getMainGrade()).tasteGrade(menu.getTasteGrade()) .amountGrade(menu.getAmountGrade()).totalReviewCount(menu.getReviewCnt()) - .reviewGradeCnt(MenuReviewInfo.ReviewGradeCnt.fromMap(findMenuReviewGradeCnt(menu))) + .reviewGradeCnt(MenuReviewInfo.ReviewGradeCnt.fromMap(getReviewGradeCnt(menu))) .build(); } + + /** + * 변동메뉴 - 리뷰 정보 조회 + */ public MenuReviewInfo findReviewInfoByMealId(Long mealId) { Meal meal = mealRepository.findById(mealId) .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); @@ -115,7 +142,7 @@ public MenuReviewInfo findReviewInfoByMealId(Long mealId) { List reviewMenuList = new ArrayList<>(); menuList.forEach(menu ->reviewMenuList.add(menu.getName())); List> gradeCntMapList = - menuList.stream().map(this::findMenuReviewGradeCnt).toList(); + menuList.stream().map(this::getReviewGradeCnt).toList(); Map totalGradeCntMap = gradeCntMapList.stream().flatMap(m -> m.entrySet().stream()) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, Long::sum)); meal.caculateGrade(); @@ -125,7 +152,11 @@ public MenuReviewInfo findReviewInfoByMealId(Long mealId) { .reviewGradeCnt(MenuReviewInfo.ReviewGradeCnt.fromMap(totalGradeCntMap)) .build(); } - public Map findMenuReviewGradeCnt(Menu menu) { + + /** + * 메뉴의 리뷰 평점별 개수 조회 + */ + public Map getReviewGradeCnt(Menu menu) { List reviewList = menu.getReviews(); long oneCnt = reviewList.stream().filter(r -> r.getMainGrade() == 1).count(); long twoCnt = reviewList.stream().filter(r -> r.getMainGrade() == 2).count(); @@ -140,6 +171,10 @@ public Map findMenuReviewGradeCnt(Menu menu) { reviewGradeCntMap.put(5,fiveCnt); return reviewGradeCntMap; } + + /** + * Slice를 Slice로 변환 + */ private SliceDto sliceReviewToSliceReviewDetail(Slice sliceReviewList){ Long userId = SecurityUtil.getLoginUserId(); List reviewDetailList = new ArrayList<>(); @@ -150,6 +185,10 @@ private SliceDto sliceReviewToSliceReviewDetail(Slice slic return new SliceDto<>(sliceReviewList.getNumberOfElements(), sliceReviewList.hasNext(), reviewDetailList); } + + /** + * 고정메뉴 - 리뷰 목록 조회 + */ public SliceDto findReviewListByMenuId(Long menuId, Pageable pageable, Long lastReviewId) { Menu menu = menuRepository.findById(menuId) .orElseThrow(()->new BaseException(NOT_FOUND_MENU)); @@ -169,6 +208,10 @@ public SliceDto findReviewListByMenuId(Long menuId, Pageable pagea } return sliceReviewToSliceReviewDetail(sliceReviewList); } + + /** + * 변동메뉴 - 리뷰 목록 조회 + */ public SliceDto findReviewListByMealId(Long mealId, Pageable pageable, Long lastReviewId) { Meal meal = mealRepository.findById(mealId) .orElseThrow(()->new BaseException(NOT_FOUND_MEAL)); diff --git a/src/main/java/ssu/eatssu/service/UserInquiriesService.java b/src/main/java/ssu/eatssu/service/UserInquiriesService.java index 9f8a4bc1..bbbc00e1 100644 --- a/src/main/java/ssu/eatssu/service/UserInquiriesService.java +++ b/src/main/java/ssu/eatssu/service/UserInquiriesService.java @@ -20,6 +20,9 @@ public class UserInquiriesService { private final UserRepository userRepository; private final UserInquiriesRepository userInquiriesRepository; + /** + * 문의 작성 + */ public UserInquiries createUserInquiries(Long userId, String content) { User user = userRepository.findById(userId).orElseThrow(() -> new BaseException(NOT_FOUND_USER)); UserInquiries userInquiries = UserInquiries.builder().user(user).content(content).build(); diff --git a/src/main/java/ssu/eatssu/service/UserService.java b/src/main/java/ssu/eatssu/service/UserService.java index caa2d9d4..62436930 100644 --- a/src/main/java/ssu/eatssu/service/UserService.java +++ b/src/main/java/ssu/eatssu/service/UserService.java @@ -31,6 +31,11 @@ public class UserService { private final AuthenticationManagerBuilder authenticationManagerBuilder; private final JwtTokenProvider jwtTokenProvider; + /** + * 자체 회원가입 + * + * @deprecated + */ public Tokens join(String email, String pwd) throws JsonProcessingException{ String encodedPwd = passwordEncoder.encode(pwd); User user = User.join(email, encodedPwd); @@ -39,6 +44,11 @@ public Tokens join(String email, String pwd) throws JsonProcessingException{ return generateJwtTokens(email, pwd); } + /** + * 자체 로그인 + * + * @deprecated + */ public Tokens login(String email, String pwd) throws JsonProcessingException { //유저 존재 여부 체크 Optional user = userRepository.findByEmail(email); @@ -48,6 +58,9 @@ public Tokens login(String email, String pwd) throws JsonProcessingException { return generateJwtTokens(email, pwd); } + /** + * 닉네임 변경 + */ public void updateNickname(Long userId, String nickname) { User user = userRepository.findById(userId) .orElseThrow(()-> new RuntimeException("User not found")); @@ -55,6 +68,9 @@ public void updateNickname(Long userId, String nickname) { userRepository.save(user); } + /** + * email, pwd를 통해 JwtToken을 생성 //todo: JwtTokenProvider로 옮길까? + */ public Tokens generateJwtTokens(String email, String pwd) throws JsonProcessingException { // 1. email/pwd 를 기반으로 Authentication 객체 생성 // 이때 authentication은 인증 여부를 확인하는 authenticated 값이 false @@ -68,7 +84,10 @@ public Tokens generateJwtTokens(String email, String pwd) throws JsonProcessingE return jwtTokenProvider.generateTokens(authentication); } - public void changePassword(Long userId, String pwd) { + /** + * 비밀번호 변경 + */ + public void updatePassword(Long userId, String pwd) { User user = userRepository.findById(userId) .orElseThrow(()-> new RuntimeException("User not found")); String encodedPwd = passwordEncoder.encode(pwd); @@ -76,11 +95,16 @@ public void changePassword(Long userId, String pwd) { userRepository.save(user); } - public Tokens refreshAccessToken(Authentication authentication) throws JsonProcessingException{ - + /** + * JWT 토큰 재발급 + */ + public Tokens refreshTokens(Authentication authentication) throws JsonProcessingException{ return jwtTokenProvider.generateTokens(authentication); } + /** + * 유저 탈퇴 + */ public void signout (Long userId) { User user = userRepository.findById(userId).orElseThrow(()-> new BaseException(NOT_FOUND_USER)); //작성한 리뷰 삭제 diff --git a/src/main/java/ssu/eatssu/web/menu/MenuController.java b/src/main/java/ssu/eatssu/web/menu/MenuController.java index e359550a..7f963e5c 100644 --- a/src/main/java/ssu/eatssu/web/menu/MenuController.java +++ b/src/main/java/ssu/eatssu/web/menu/MenuController.java @@ -47,7 +47,7 @@ public BaseResponse> getMealList(@Parameter(description = "날 @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) throws ParseException { //todo Exceiption service단에서 처리 if (MenuTypeGroup.isChange(restaurantName)) { - List mealList = menuService.findTodayMeals(timePart, date, restaurantName); + List mealList = menuService.findMealList(timePart, date, restaurantName); List todayMealList = new ArrayList<>(); for (Meal meal : mealList) { TodayMeal todayMeal = TodayMeal.from(meal); @@ -69,7 +69,7 @@ public BaseResponse> getMealList(@Parameter(description = "날 public BaseResponse getFixMenuList(@Parameter(description = "식당이름") @RequestParam("restaurant") RestaurantName restaurantName) { if (MenuTypeGroup.isFix(restaurantName)) { - List menuList = menuService.findFixMenuByRestaurant(restaurantName); + List menuList = menuService.findFixMenuList(restaurantName); FixMenuList fixMenuList = FixMenuList.from(menuList); return new BaseResponse<>(fixMenuList); } else { @@ -95,14 +95,14 @@ public BaseResponse addMeal(@Parameter(description = "날짜(yyyyMMdd)") //todo Exceiption service단에서 처리 if (MenuTypeGroup.isChange(restaurantName)) { try { - if (menuService.dupliicateMealCheck(timePart, date, restaurantName, addTodayMenuList)) {//이미 추가된 식단이면 + if (menuService.isExistMeal(timePart, date, restaurantName, addTodayMenuList)) {//이미 추가된 식단이면 log.info("식단 중복 발견!"); return new BaseResponse<>("Duplicated"); } } catch (ParseException e) { throw new BaseException(INVALID_DATE); } - menuService.addMeal(timePart, date, restaurantName, addTodayMenuList); + menuService.createMeal(timePart, date, restaurantName, addTodayMenuList); return new BaseResponse<>(""); } else { throw new BaseException(NOT_SUPPORT_RESTAURANT); @@ -117,7 +117,7 @@ public BaseResponse addMeal(@Parameter(description = "날짜(yyyyMMdd)") @GetMapping("/menus") public BaseResponse getMenuListInMeal(@Parameter(description = "mealId") @RequestParam("mealId") Long mealId) { - MenuList menuList = menuService.findAllMenu(mealId); + MenuList menuList = menuService.findMenuListInMeal(mealId); return new BaseResponse<>(menuList); } diff --git a/src/main/java/ssu/eatssu/web/mypage/MyPageController.java b/src/main/java/ssu/eatssu/web/mypage/MyPageController.java index ee41c179..99aaec65 100644 --- a/src/main/java/ssu/eatssu/web/mypage/MyPageController.java +++ b/src/main/java/ssu/eatssu/web/mypage/MyPageController.java @@ -49,7 +49,7 @@ public BaseResponse> getMyReviewList( @GetMapping("/info") public BaseResponse getMyPageInfo() { Long userId = SecurityUtil.getLoginUserId(); - MypageInfo mypageInfo = myPageService.mypageInfo(userId); + MypageInfo mypageInfo = myPageService.findMyPageInfo(userId); return new BaseResponse<>(mypageInfo); } diff --git a/src/main/java/ssu/eatssu/web/oauth/OauthController.java b/src/main/java/ssu/eatssu/web/oauth/OauthController.java index a4f2cdca..be93aac2 100644 --- a/src/main/java/ssu/eatssu/web/oauth/OauthController.java +++ b/src/main/java/ssu/eatssu/web/oauth/OauthController.java @@ -1,14 +1,10 @@ package ssu.eatssu.web.oauth; -import com.fasterxml.jackson.core.JsonProcessingException; import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.repository.UserRepository; import ssu.eatssu.response.BaseException; @@ -39,7 +35,7 @@ public class OauthController { @Operation(summary = "카카오 로그인, 회원가입", description = "카카오 로그인, 회원가입") @PostMapping("/kakao") public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLogin login) { - Tokens tokens = oauthService.loginByKakao(login.getEmail(), login.getProviderId()); + Tokens tokens = oauthService.kakaoLogin(login.getEmail(), login.getProviderId()); return new BaseResponse<>(tokens); } @@ -50,7 +46,7 @@ public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLogin login) { @PostMapping("/apple") public BaseResponse appleLogin(@Valid @RequestBody AppleLogin login) throws NoSuchAlgorithmException, InvalidKeySpecException { - Tokens tokens = oauthService.loginByApple(login.getIdentityToken()); + Tokens tokens = oauthService.appleLogin(login.getIdentityToken()); return new BaseResponse<>(tokens); } diff --git a/src/main/java/ssu/eatssu/web/review/ReviewController.java b/src/main/java/ssu/eatssu/web/review/ReviewController.java index 443ebd80..03ef6e86 100644 --- a/src/main/java/ssu/eatssu/web/review/ReviewController.java +++ b/src/main/java/ssu/eatssu/web/review/ReviewController.java @@ -68,7 +68,7 @@ public BaseResponse updateReview(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, @RequestBody ReviewUpdate reviewUpdate) { Long userId = SecurityUtil.getLoginUserId(); - reviewService.updateReview(userId, reviewId, reviewUpdate); + reviewService.updateReviewContent(userId, reviewId, reviewUpdate); return new BaseResponse<>(""); } diff --git a/src/main/java/ssu/eatssu/web/user/UserController.java b/src/main/java/ssu/eatssu/web/user/UserController.java index a6862c2e..c1db8eb6 100644 --- a/src/main/java/ssu/eatssu/web/user/UserController.java +++ b/src/main/java/ssu/eatssu/web/user/UserController.java @@ -107,7 +107,7 @@ public BaseResponse checkNicknameDuplicate(@Parameter(description = " @PatchMapping("/password") public BaseResponse updatePassword(@Valid @RequestBody PasswordChange passwordChange) { Long userId = getLoginUserId(); - userService.changePassword(userId, passwordChange.getPwd()); + userService.updatePassword(userId, passwordChange.getPwd()); return new BaseResponse<>(""); } @@ -118,7 +118,7 @@ public BaseResponse updatePassword(@Valid @RequestBody PasswordChange pa @Operation(summary = "accessToken, refreshToken 재발급", description = "accessToken, refreshToken 재발급") @PostMapping("/token/reissue") public BaseResponse refreshToken() throws JsonProcessingException { - Tokens tokens = userService.refreshAccessToken(getLoginUser()); + Tokens tokens = userService.refreshTokens(getLoginUser()); return new BaseResponse<>(tokens); } From 8f540afac9371151c6d029a01bcfef50a3988b87 Mon Sep 17 00:00:00 2001 From: SY2on Date: Mon, 1 Jan 2024 02:42:27 +0900 Subject: [PATCH 014/399] Rename: Inquiries -> Inquiry --- .../generated/ssu/eatssu/domain/QUser.java | 2 +- src/main/java/ssu/eatssu/domain/User.java | 2 +- .../{UserInquiries.java => UserInquiry.java} | 4 +- .../repository/UserInquiriesRepository.java | 7 --- .../repository/UserInquiryRepository.java | 7 +++ .../eatssu/response/BaseResponseStatus.java | 2 +- ...esService.java => UserInquiryService.java} | 17 +++---- .../java/ssu/eatssu/slack/SlackChannel.java | 2 +- .../ssu/eatssu/slack/SlackMessageFormat.java | 8 +-- .../UserInquiryController.java} | 50 +++++++++---------- .../dto/UserInquiryCreate.java} | 4 +- .../dto/UserInquiryDetail.java} | 14 +++--- 12 files changed, 59 insertions(+), 60 deletions(-) rename src/main/java/ssu/eatssu/domain/{UserInquiries.java => UserInquiry.java} (83%) delete mode 100644 src/main/java/ssu/eatssu/domain/repository/UserInquiriesRepository.java create mode 100644 src/main/java/ssu/eatssu/domain/repository/UserInquiryRepository.java rename src/main/java/ssu/eatssu/service/{UserInquiriesService.java => UserInquiryService.java} (52%) rename src/main/java/ssu/eatssu/web/{user_inquiries/UserInquiriesController.java => userinquiry/UserInquiryController.java} (50%) rename src/main/java/ssu/eatssu/web/{user_inquiries/dto/UserInquiriesCreate.java => userinquiry/dto/UserInquiryCreate.java} (79%) rename src/main/java/ssu/eatssu/web/{user_inquiries/dto/UserInquiriesDetail.java => userinquiry/dto/UserInquiryDetail.java} (58%) diff --git a/src/main/generated/ssu/eatssu/domain/QUser.java b/src/main/generated/ssu/eatssu/domain/QUser.java index cfde7375..f34788ea 100644 --- a/src/main/generated/ssu/eatssu/domain/QUser.java +++ b/src/main/generated/ssu/eatssu/domain/QUser.java @@ -48,7 +48,7 @@ public class QUser extends EntityPathBase { public final EnumPath status = createEnum("status", ssu.eatssu.domain.enums.UserStatus.class); - public final ListPath userInquiries = this.createList("userInquiries", UserInquiries.class, QUserInquiries.class, PathInits.DIRECT2); + public final ListPath userInquiry = this.createList("userInquiry", UserInquiry.class, QUserInquiry.class, PathInits.DIRECT2); public QUser(String variable) { super(User.class, forVariable(variable)); diff --git a/src/main/java/ssu/eatssu/domain/User.java b/src/main/java/ssu/eatssu/domain/User.java index 8807f3f2..f6f44376 100644 --- a/src/main/java/ssu/eatssu/domain/User.java +++ b/src/main/java/ssu/eatssu/domain/User.java @@ -47,7 +47,7 @@ public class User extends BaseTimeEntity { private List reviewReports; @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) - private List userInquiries; + private List userInquiry; public static User join(@NotNull String email, @NotNull String pwd) { User user = new User(); diff --git a/src/main/java/ssu/eatssu/domain/UserInquiries.java b/src/main/java/ssu/eatssu/domain/UserInquiry.java similarity index 83% rename from src/main/java/ssu/eatssu/domain/UserInquiries.java rename to src/main/java/ssu/eatssu/domain/UserInquiry.java index 962baa2b..88b99b04 100644 --- a/src/main/java/ssu/eatssu/domain/UserInquiries.java +++ b/src/main/java/ssu/eatssu/domain/UserInquiry.java @@ -8,10 +8,10 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Builder @AllArgsConstructor -public class UserInquiries extends BaseTimeEntity{ +public class UserInquiry extends BaseTimeEntity{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "user_inquiries_id") + @Column(name = "user_inquiry_id") private Long id; private String content; diff --git a/src/main/java/ssu/eatssu/domain/repository/UserInquiriesRepository.java b/src/main/java/ssu/eatssu/domain/repository/UserInquiriesRepository.java deleted file mode 100644 index 1656b9b0..00000000 --- a/src/main/java/ssu/eatssu/domain/repository/UserInquiriesRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package ssu.eatssu.domain.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.UserInquiries; - -public interface UserInquiriesRepository extends JpaRepository{ -} diff --git a/src/main/java/ssu/eatssu/domain/repository/UserInquiryRepository.java b/src/main/java/ssu/eatssu/domain/repository/UserInquiryRepository.java new file mode 100644 index 00000000..1328a078 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/repository/UserInquiryRepository.java @@ -0,0 +1,7 @@ +package ssu.eatssu.domain.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.UserInquiry; + +public interface UserInquiryRepository extends JpaRepository{ +} diff --git a/src/main/java/ssu/eatssu/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/response/BaseResponseStatus.java index e4d1e4dc..c6d17ce1 100644 --- a/src/main/java/ssu/eatssu/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/response/BaseResponseStatus.java @@ -38,7 +38,7 @@ public enum BaseResponseStatus { INVALID_DATE(false, 2013, "잘못된 날짜형식입니다."), NOT_FOUND_REVIEW_REPORT(false, 2014, "해당 문의내역을 찾을 수 없습니다."), - NOT_FOUND_USER_INQUIRIES(false, 2015, "해당 문의내역을 찾을 수 없습니다."), + NOT_FOUND_USER_INQUIRY(false, 2015, "해당 문의내역을 찾을 수 없습니다."), diff --git a/src/main/java/ssu/eatssu/service/UserInquiriesService.java b/src/main/java/ssu/eatssu/service/UserInquiryService.java similarity index 52% rename from src/main/java/ssu/eatssu/service/UserInquiriesService.java rename to src/main/java/ssu/eatssu/service/UserInquiryService.java index bbbc00e1..3ea947f2 100644 --- a/src/main/java/ssu/eatssu/service/UserInquiriesService.java +++ b/src/main/java/ssu/eatssu/service/UserInquiryService.java @@ -4,28 +4,27 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.User; -import ssu.eatssu.domain.UserInquiries; -import ssu.eatssu.domain.repository.UserInquiriesRepository; +import ssu.eatssu.domain.UserInquiry; +import ssu.eatssu.domain.repository.UserInquiryRepository; import ssu.eatssu.domain.repository.UserRepository; import ssu.eatssu.response.BaseException; - -import static ssu.eatssu.response.BaseResponseStatus.*; +import static ssu.eatssu.response.BaseResponseStatus.NOT_FOUND_USER; @RequiredArgsConstructor @Service @Transactional -public class UserInquiriesService { +public class UserInquiryService { private final UserRepository userRepository; - private final UserInquiriesRepository userInquiriesRepository; + private final UserInquiryRepository userInquiryRepository; /** * 문의 작성 */ - public UserInquiries createUserInquiries(Long userId, String content) { + public UserInquiry createUserInquiry(Long userId, String content) { User user = userRepository.findById(userId).orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - UserInquiries userInquiries = UserInquiries.builder().user(user).content(content).build(); - return userInquiriesRepository.save(userInquiries); + UserInquiry userInquiry = UserInquiry.builder().user(user).content(content).build(); + return userInquiryRepository.save(userInquiry); } } diff --git a/src/main/java/ssu/eatssu/slack/SlackChannel.java b/src/main/java/ssu/eatssu/slack/SlackChannel.java index 32cc4471..aec8edf5 100644 --- a/src/main/java/ssu/eatssu/slack/SlackChannel.java +++ b/src/main/java/ssu/eatssu/slack/SlackChannel.java @@ -4,7 +4,7 @@ public enum SlackChannel { - REPORT_CHANNEL("#신고"), ADDMENU_CHANNEL("#메뉴_추가"), ERROR_CHANNEL("#장애"), USER_INQUIRIES_CHANNEL("#유저-문의"); + REPORT_CHANNEL("#신고"), ADDMENU_CHANNEL("#메뉴_추가"), ERROR_CHANNEL("#장애"), USER_INQUIRY_CHANNEL("#유저-문의"); @Getter private String krName; diff --git a/src/main/java/ssu/eatssu/slack/SlackMessageFormat.java b/src/main/java/ssu/eatssu/slack/SlackMessageFormat.java index 36284de2..814074ce 100644 --- a/src/main/java/ssu/eatssu/slack/SlackMessageFormat.java +++ b/src/main/java/ssu/eatssu/slack/SlackMessageFormat.java @@ -4,7 +4,7 @@ import ssu.eatssu.domain.Review; import ssu.eatssu.domain.ReviewReport; import ssu.eatssu.domain.User; -import ssu.eatssu.domain.UserInquiries; +import ssu.eatssu.domain.UserInquiry; import java.text.MessageFormat; @@ -41,7 +41,7 @@ public static String sendReport(ReviewReport report) { return messageFormat.format(args); } - public static String sendUserInquiries(UserInquiries inquiries) { + public static String sendUserInquiry(UserInquiry inquiry) { MessageFormat messageFormat = new MessageFormat( """ =================== @@ -55,8 +55,8 @@ public static String sendUserInquiries(UserInquiries inquiries) { =================== """ ); - Object[] args = {inquiries.getUser().getId(), inquiries.getUser().getNickname(),inquiries.getUser().getEmail() - ,inquiries.getCreatedDate(), inquiries.getContent()}; + Object[] args = {inquiry.getUser().getId(), inquiry.getUser().getNickname(),inquiry.getUser().getEmail() + ,inquiry.getCreatedDate(), inquiry.getContent()}; return messageFormat.format(args); } } diff --git a/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java b/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java similarity index 50% rename from src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java rename to src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java index 8746b09f..6a3cdcb8 100644 --- a/src/main/java/ssu/eatssu/web/user_inquiries/UserInquiriesController.java +++ b/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.user_inquiries; +package ssu.eatssu.web.userinquiry; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -6,29 +6,29 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.UserInquiries; -import ssu.eatssu.domain.repository.UserInquiriesRepository; +import ssu.eatssu.domain.UserInquiry; +import ssu.eatssu.domain.repository.UserInquiryRepository; import ssu.eatssu.response.BaseException; import ssu.eatssu.response.BaseResponse; -import ssu.eatssu.service.UserInquiriesService; +import ssu.eatssu.service.UserInquiryService; import ssu.eatssu.slack.SlackChannel; import ssu.eatssu.slack.SlackMessageFormat; import ssu.eatssu.slack.SlackService; import ssu.eatssu.utils.SecurityUtil; -import ssu.eatssu.web.user_inquiries.dto.UserInquiriesCreate; -import ssu.eatssu.web.user_inquiries.dto.UserInquiriesDetail; +import ssu.eatssu.web.userinquiry.dto.UserInquiryCreate; +import ssu.eatssu.web.userinquiry.dto.UserInquiryDetail; -import static ssu.eatssu.response.BaseResponseStatus.NOT_FOUND_USER_INQUIRIES; +import static ssu.eatssu.response.BaseResponseStatus.NOT_FOUND_USER_INQUIRY; @Slf4j @RestController -@RequestMapping("/inquiries") +@RequestMapping("/inquiry") @RequiredArgsConstructor -@Tag(name = "Inquiries", description = "문의 API") -public class UserInquiriesController { +@Tag(name = "Inquiry", description = "문의 API") +public class UserInquiryController { private final SlackService slackService; - private final UserInquiriesRepository userInquiriesRepository; - private final UserInquiriesService userInquiriesService; + private final UserInquiryRepository userInquiryRepository; + private final UserInquiryService userInquiryService; /** * 문의 작성 @@ -36,27 +36,27 @@ public class UserInquiriesController { */ @Operation(summary = "문의 남기기", description = "문의 남기기") @PostMapping("/") - public BaseResponse writeInquiries(@RequestBody UserInquiriesCreate userInquiriesCreate) { + public BaseResponse writeInquiry(@RequestBody UserInquiryCreate userInquiryCreate) { Long userId = SecurityUtil.getLoginUserId(); - UserInquiries inquiries = userInquiriesService.createUserInquiries(userId, userInquiriesCreate.getContent()); - slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiries(inquiries) - , SlackChannel.USER_INQUIRIES_CHANNEL); + UserInquiry inquiry = userInquiryService.createUserInquiry(userId, userInquiryCreate.getContent()); + slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiry(inquiry) + , SlackChannel.USER_INQUIRY_CHANNEL); return new BaseResponse<>(""); } /** * 문의 내용 조회 - *

문의 식별자(userInquiriesId)에 해당하는 문의 내용을 조회합니다.

+ *

문의 식별자(userInquiryId)에 해당하는 문의 내용을 조회합니다.

*/ @Operation(summary = "고객 문의 내역 조회", description = "고객 문의 내역 조회 By Id") - @GetMapping("/{userInquiriesId}") - public BaseResponse getInquiriesDetail(@Parameter(description = "userInquiriesId") - @PathVariable("userInquiriesId") Long userInquiriesId) { - UserInquiries inquiries = - userInquiriesRepository.findById(userInquiriesId).orElseThrow(() -> new BaseException(NOT_FOUND_USER_INQUIRIES)); - slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiries(inquiries) - , SlackChannel.USER_INQUIRIES_CHANNEL); - return new BaseResponse<>(UserInquiriesDetail.fromUserInquiries(inquiries)); + @GetMapping("/{userInquiryId}") + public BaseResponse getInquiryDetail(@Parameter(description = "userInquiryId") + @PathVariable("userInquiryId") Long userInquiryId) { + UserInquiry inquiry = + userInquiryRepository.findById(userInquiryId).orElseThrow(() -> new BaseException(NOT_FOUND_USER_INQUIRY)); + slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiry(inquiry) + , SlackChannel.USER_INQUIRY_CHANNEL); + return new BaseResponse<>(UserInquiryDetail.fromUserInquiry(inquiry)); } @ExceptionHandler(BaseException.class) diff --git a/src/main/java/ssu/eatssu/web/user_inquiries/dto/UserInquiriesCreate.java b/src/main/java/ssu/eatssu/web/userinquiry/dto/UserInquiryCreate.java similarity index 79% rename from src/main/java/ssu/eatssu/web/user_inquiries/dto/UserInquiriesCreate.java rename to src/main/java/ssu/eatssu/web/userinquiry/dto/UserInquiryCreate.java index d8b18c4c..901e0c85 100644 --- a/src/main/java/ssu/eatssu/web/user_inquiries/dto/UserInquiriesCreate.java +++ b/src/main/java/ssu/eatssu/web/userinquiry/dto/UserInquiryCreate.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.user_inquiries.dto; +package ssu.eatssu.web.userinquiry.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; @@ -7,7 +7,7 @@ @Schema(title = "문의 남기기") @NoArgsConstructor @Getter -public class UserInquiriesCreate { +public class UserInquiryCreate { @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의 남깁니다") private String content; } diff --git a/src/main/java/ssu/eatssu/web/user_inquiries/dto/UserInquiriesDetail.java b/src/main/java/ssu/eatssu/web/userinquiry/dto/UserInquiryDetail.java similarity index 58% rename from src/main/java/ssu/eatssu/web/user_inquiries/dto/UserInquiriesDetail.java rename to src/main/java/ssu/eatssu/web/userinquiry/dto/UserInquiryDetail.java index 7fc61d1d..5b6646f3 100644 --- a/src/main/java/ssu/eatssu/web/user_inquiries/dto/UserInquiriesDetail.java +++ b/src/main/java/ssu/eatssu/web/userinquiry/dto/UserInquiryDetail.java @@ -1,16 +1,16 @@ -package ssu.eatssu.web.user_inquiries.dto; +package ssu.eatssu.web.userinquiry.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.UserInquiries; +import ssu.eatssu.domain.UserInquiry; @AllArgsConstructor @Builder @Schema(title = "문의내역 상세") @Getter -public class UserInquiriesDetail { +public class UserInquiryDetail { @Schema(description = "문의 작성자 Id", example = "123") private Long writerId; @@ -24,9 +24,9 @@ public class UserInquiriesDetail { @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의드립니다") private String content; - public static UserInquiriesDetail fromUserInquiries(UserInquiries userInquiries) { - return UserInquiriesDetail.builder().writerId(userInquiries.getUser().getId()) - .writerNickName(userInquiries.getUser().getNickname()) - .writerEmail(userInquiries.getUser().getEmail()).content(userInquiries.getContent()).build(); + public static UserInquiryDetail fromUserInquiry(UserInquiry userInquiry) { + return UserInquiryDetail.builder().writerId(userInquiry.getUser().getId()) + .writerNickName(userInquiry.getUser().getNickname()) + .writerEmail(userInquiry.getUser().getEmail()).content(userInquiry.getContent()).build(); } } From 28841618911bf4966425fb995dd3055bfa475792 Mon Sep 17 00:00:00 2001 From: SY2on Date: Mon, 1 Jan 2024 03:25:54 +0900 Subject: [PATCH 015/399] Rename: Grade -> Rate --- .../generated/ssu/eatssu/domain/QMeal.java | 6 +- .../generated/ssu/eatssu/domain/QMenu.java | 12 ++-- .../generated/ssu/eatssu/domain/QReview.java | 6 +- src/main/java/ssu/eatssu/domain/Meal.java | 44 +++++++------- src/main/java/ssu/eatssu/domain/Menu.java | 60 +++++++++---------- src/main/java/ssu/eatssu/domain/Review.java | 14 ++--- .../java/ssu/eatssu/service/MenuService.java | 2 +- .../ssu/eatssu/service/RefreshingService.java | 2 +- .../ssu/eatssu/service/ReviewService.java | 52 ++++++++-------- .../ssu/eatssu/web/menu/dto/MenuResDto.java | 8 +-- .../eatssu/web/mypage/dto/MyReviewDetail.java | 10 ++-- .../eatssu/web/review/dto/MenuReviewInfo.java | 18 +++--- .../eatssu/web/review/dto/ReviewCreate.java | 10 ++-- .../eatssu/web/review/dto/ReviewDetail.java | 10 ++-- .../eatssu/web/review/dto/ReviewUpdate.java | 6 +- 15 files changed, 130 insertions(+), 130 deletions(-) diff --git a/src/main/generated/ssu/eatssu/domain/QMeal.java b/src/main/generated/ssu/eatssu/domain/QMeal.java index 5f7e73d2..80c530b0 100644 --- a/src/main/generated/ssu/eatssu/domain/QMeal.java +++ b/src/main/generated/ssu/eatssu/domain/QMeal.java @@ -22,19 +22,19 @@ public class QMeal extends EntityPathBase { public static final QMeal meal = new QMeal("meal"); - public final NumberPath amountGrade = createNumber("amountGrade", Double.class); + public final NumberPath amountRate = createNumber("amountRate", Double.class); public final DatePath date = createDate("date", java.util.Date.class); public final NumberPath id = createNumber("id", Long.class); - public final NumberPath mainGrade = createNumber("mainGrade", Double.class); + public final NumberPath mainRate = createNumber("mainRate", Double.class); public final ListPath mealMenus = this.createList("mealMenus", MealMenu.class, QMealMenu.class, PathInits.DIRECT2); public final QRestaurant restaurant; - public final NumberPath tasteGrade = createNumber("tasteGrade", Double.class); + public final NumberPath tasteRate = createNumber("tasteRate", Double.class); public final EnumPath timePart = createEnum("timePart", ssu.eatssu.domain.enums.TimePart.class); diff --git a/src/main/generated/ssu/eatssu/domain/QMenu.java b/src/main/generated/ssu/eatssu/domain/QMenu.java index 4fc60507..b4892c42 100644 --- a/src/main/generated/ssu/eatssu/domain/QMenu.java +++ b/src/main/generated/ssu/eatssu/domain/QMenu.java @@ -22,11 +22,11 @@ public class QMenu extends EntityPathBase { public static final QMenu menu = new QMenu("menu"); - public final NumberPath amountGrade = createNumber("amountGrade", Double.class); + public final NumberPath amountRate = createNumber("amountRate", Double.class); public final NumberPath id = createNumber("id", Long.class); - public final NumberPath mainGrade = createNumber("mainGrade", Double.class); + public final NumberPath mainRate = createNumber("mainRate", Double.class); public final ListPath mealMenus = this.createList("mealMenus", MealMenu.class, QMealMenu.class, PathInits.DIRECT2); @@ -40,13 +40,13 @@ public class QMenu extends EntityPathBase { public final ListPath reviews = this.createList("reviews", Review.class, QReview.class, PathInits.DIRECT2); - public final NumberPath tasteGrade = createNumber("tasteGrade", Double.class); + public final NumberPath tasteRate = createNumber("tasteRate", Double.class); - public final NumberPath totalAmountGrade = createNumber("totalAmountGrade", Integer.class); + public final NumberPath totalAmountRate = createNumber("totalAmountRate", Integer.class); - public final NumberPath totalMainGrade = createNumber("totalMainGrade", Integer.class); + public final NumberPath totalMainRate = createNumber("totalMainRate", Integer.class); - public final NumberPath totalTasteGrade = createNumber("totalTasteGrade", Integer.class); + public final NumberPath totalTasteRate = createNumber("totalTasteRate", Integer.class); public QMenu(String variable) { this(Menu.class, forVariable(variable), INITS); diff --git a/src/main/generated/ssu/eatssu/domain/QReview.java b/src/main/generated/ssu/eatssu/domain/QReview.java index 39a23d0a..13ef63c7 100644 --- a/src/main/generated/ssu/eatssu/domain/QReview.java +++ b/src/main/generated/ssu/eatssu/domain/QReview.java @@ -24,7 +24,7 @@ public class QReview extends EntityPathBase { public final QBaseTimeEntity _super = new QBaseTimeEntity(this); - public final NumberPath amountGrade = createNumber("amountGrade", Integer.class); + public final NumberPath amountRate = createNumber("amountRate", Integer.class); public final StringPath content = createString("content"); @@ -33,7 +33,7 @@ public class QReview extends EntityPathBase { public final NumberPath id = createNumber("id", Long.class); - public final NumberPath mainGrade = createNumber("mainGrade", Integer.class); + public final NumberPath mainRate = createNumber("mainRate", Integer.class); public final QMenu menu; @@ -42,7 +42,7 @@ public class QReview extends EntityPathBase { public final ListPath reviewImgs = this.createList("reviewImgs", ReviewImg.class, QReviewImg.class, PathInits.DIRECT2); - public final NumberPath tasteGrade = createNumber("tasteGrade", Integer.class); + public final NumberPath tasteRate = createNumber("tasteRate", Integer.class); public final QUser user; diff --git a/src/main/java/ssu/eatssu/domain/Meal.java b/src/main/java/ssu/eatssu/domain/Meal.java index 75420286..1fd3661b 100644 --- a/src/main/java/ssu/eatssu/domain/Meal.java +++ b/src/main/java/ssu/eatssu/domain/Meal.java @@ -31,11 +31,11 @@ public class Meal { @JoinColumn(name = "restaurant_id") private Restaurant restaurant; - private Double mainGrade = 0.0; + private Double mainRate = 0.0; - private Double amountGrade = 0.0; + private Double amountRate = 0.0; - private Double tasteGrade = 0.0; + private Double tasteRate = 0.0; @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL) @@ -48,37 +48,37 @@ public Meal(Date date, TimePart timePart, Restaurant restaurant){ this.restaurant = restaurant; } - public void caculateGrade(){ + public void caculateRate(){ if(!mealMenus.isEmpty()){ int totalReviewCnt = 0; - Double mainGradeSum = 0.0; - Double amountGradeSum = 0.0; - Double tasteGradeSum = 0.0; + Double mainRateSum = 0.0; + Double amountRateSum = 0.0; + Double tasteRateSum = 0.0; for(MealMenu mealMenu : mealMenus){ Menu menu = mealMenu.getMenu(); totalReviewCnt += menu.getReviewCnt(); - mainGradeSum += menu.getTotalMainGrade(); - amountGradeSum += menu.getTotalAmountGrade(); - tasteGradeSum += menu.getTotalTasteGrade(); + mainRateSum += menu.getTotalMainRate(); + amountRateSum += menu.getTotalAmountRate(); + tasteRateSum += menu.getTotalTasteRate(); } if(totalReviewCnt!=0){ - this.mainGrade = mainGradeSum/totalReviewCnt; - this.amountGrade = amountGradeSum/totalReviewCnt; - this.tasteGrade = tasteGradeSum/totalReviewCnt; + this.mainRate = mainRateSum/totalReviewCnt; + this.amountRate = amountRateSum/totalReviewCnt; + this.tasteRate = tasteRateSum/totalReviewCnt; }else{ - this.mainGrade = 0.0; - this.amountGrade = 0.0; - this.tasteGrade = 0.0; + this.mainRate = 0.0; + this.amountRate = 0.0; + this.tasteRate = 0.0; } } } - public Map getGradeMap() { - Map gradeMap = new HashMap<>(); - gradeMap.put("mainGrade", mainGrade); - gradeMap.put("amountGrade", amountGrade); - gradeMap.put("tasteGrade", tasteGrade); - return gradeMap; + public Map getRateMap() { + Map rateMap = new HashMap<>(); + rateMap.put("mainRate", mainRate); + rateMap.put("amountRate", amountRate); + rateMap.put("tasteRate", tasteRate); + return rateMap; } } diff --git a/src/main/java/ssu/eatssu/domain/Menu.java b/src/main/java/ssu/eatssu/domain/Menu.java index f352a758..994181c5 100644 --- a/src/main/java/ssu/eatssu/domain/Menu.java +++ b/src/main/java/ssu/eatssu/domain/Menu.java @@ -22,22 +22,22 @@ public class Menu { private Integer price; @ColumnDefault("0.0") - private Double mainGrade = 0.0; + private Double mainRate = 0.0; @ColumnDefault("0.0") - private Double amountGrade = 0.0; + private Double amountRate = 0.0; @ColumnDefault("0.0") - private Double tasteGrade = 0.0; + private Double tasteRate = 0.0; @ColumnDefault("0") - private Integer totalMainGrade = 0; + private Integer totalMainRate = 0; @ColumnDefault("0") - private Integer totalAmountGrade = 0; + private Integer totalAmountRate = 0; @ColumnDefault("0") - private Integer totalTasteGrade = 0; + private Integer totalTasteRate = 0; @ColumnDefault("0") private Integer reviewCnt = 0 ; @@ -66,12 +66,12 @@ public static Menu addFixPrice(String name, Restaurant restaurant) { return new Menu(name, restaurant, price); } - public void addReview(Integer mainGrade, Integer tasteGrade, Integer amountGrade) { + public void addReview(Integer mainRate, Integer tasteRate, Integer amountRate) { this.reviewCnt++; - this.totalMainGrade += mainGrade; - this.totalTasteGrade += tasteGrade; - this.totalAmountGrade += amountGrade; - calculateGrade(); + this.totalMainRate += mainRate; + this.totalTasteRate += tasteRate; + this.totalAmountRate += amountRate; + calculateRate(); } public void deleteReview(){ @@ -87,33 +87,33 @@ public void refreshReview(){ int totalTaste =0; int totalAmount = 0; for(Review review : this.reviews){ - totalMain+=review.getMainGrade(); - totalTaste += review.getTasteGrade(); - totalAmount+=review.getAmountGrade(); + totalMain+=review.getMainRate(); + totalTaste += review.getTasteRate(); + totalAmount+=review.getAmountRate(); } - this.totalMainGrade = totalMain; - this.totalTasteGrade = totalTaste; - this.totalAmountGrade = totalAmount; + this.totalMainRate = totalMain; + this.totalTasteRate = totalTaste; + this.totalAmountRate = totalAmount; this.reviewCnt = (int)reviews.stream().count(); - calculateGrade(); + calculateRate(); } - private void calculateGrade(){ // 평점 계산 후 적용 + private void calculateRate(){ // 평점 계산 후 적용 if(this.reviewCnt==0){ - gradeReset(); + rateReset(); }else{ - this.mainGrade = this.totalMainGrade.doubleValue()/this.reviewCnt.doubleValue(); - this.tasteGrade = this.totalTasteGrade.doubleValue()/this.reviewCnt.doubleValue(); - this.amountGrade = this.totalAmountGrade.doubleValue()/this.reviewCnt.doubleValue(); + this.mainRate = this.totalMainRate.doubleValue()/this.reviewCnt.doubleValue(); + this.tasteRate = this.totalTasteRate.doubleValue()/this.reviewCnt.doubleValue(); + this.amountRate = this.totalAmountRate.doubleValue()/this.reviewCnt.doubleValue(); } } - private void gradeReset(){ //평점 초기화 - this.totalMainGrade = 0; - this.totalTasteGrade = 0; - this.totalAmountGrade = 0; - this.mainGrade = 0.0; - this.tasteGrade = 0.0; - this.amountGrade = 0.0; + private void rateReset(){ //평점 초기화 + this.totalMainRate = 0; + this.totalTasteRate = 0; + this.totalAmountRate = 0; + this.mainRate = 0.0; + this.tasteRate = 0.0; + this.amountRate = 0.0; } } diff --git a/src/main/java/ssu/eatssu/domain/Review.java b/src/main/java/ssu/eatssu/domain/Review.java index 9efa7eca..c51c51d7 100644 --- a/src/main/java/ssu/eatssu/domain/Review.java +++ b/src/main/java/ssu/eatssu/domain/Review.java @@ -20,11 +20,11 @@ public class Review extends BaseTimeEntity{ private String content; - private Integer mainGrade; + private Integer mainRate; - private Integer amountGrade; + private Integer amountRate; - private Integer tasteGrade; + private Integer tasteRate; @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name = "user_id") @@ -37,11 +37,11 @@ public class Review extends BaseTimeEntity{ @OneToMany(mappedBy = "review", cascade = CascadeType.ALL) private List reviewImgs; - public void update(String content, Integer mainGrade, Integer amountGrade, Integer tasteGrade){ + public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate){ this.content = content; - this.mainGrade = mainGrade; - this.amountGrade = amountGrade; - this.tasteGrade = tasteGrade; + this.mainRate = mainRate; + this.amountRate = amountRate; + this.tasteRate = tasteRate; } public void signoutUser(){ diff --git a/src/main/java/ssu/eatssu/service/MenuService.java b/src/main/java/ssu/eatssu/service/MenuService.java index 32db553b..30fb82a1 100644 --- a/src/main/java/ssu/eatssu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/service/MenuService.java @@ -82,7 +82,7 @@ public void createMeal(TimePart timePart, String date, RestaurantName restaurant MealMenu mealMenu = MealMenu.builder().menu(menu).meal(newMeal).build(); mealMenuRepository.save(mealMenu); } - newMeal.caculateGrade(); + newMeal.caculateRate(); } /** diff --git a/src/main/java/ssu/eatssu/service/RefreshingService.java b/src/main/java/ssu/eatssu/service/RefreshingService.java index b732ab72..8cfa0b18 100644 --- a/src/main/java/ssu/eatssu/service/RefreshingService.java +++ b/src/main/java/ssu/eatssu/service/RefreshingService.java @@ -29,7 +29,7 @@ public void refreshAllReviews(){ } List mealList = mealRepository.findAll(); for(Meal meal : mealList){ - meal.caculateGrade(); + meal.caculateRate(); } } } diff --git a/src/main/java/ssu/eatssu/service/ReviewService.java b/src/main/java/ssu/eatssu/service/ReviewService.java index 178ff891..e171ad2c 100644 --- a/src/main/java/ssu/eatssu/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/service/ReviewService.java @@ -46,7 +46,7 @@ public void createReview(Long userId, Long menuId, ReviewCreate reviewCreate, Li .orElseThrow(()-> new BaseException(NOT_FOUND_MENU)); Review review = reviewCreate.toEntity(user, menu); reviewRepository.save(review); - menu.addReview(reviewCreate.getMainGrade(),reviewCreate.getTasteGrade(), reviewCreate.getAmountGrade()); + menu.addReview(reviewCreate.getMainRate(),reviewCreate.getTasteRate(), reviewCreate.getAmountRate()); menuRepository.save(menu); if(imgList!=null&&!imgList.isEmpty()){ @@ -82,8 +82,8 @@ public void updateReviewContent(Long userId, Long reviewId, ReviewUpdate reviewU .orElseThrow(()-> new BaseException(NOT_FOUND_REVIEW)); if(isWriterOrAdmin(review, user)){ - review.update(reviewUpdate.getContent(), reviewUpdate.getMainGrade(), reviewUpdate.getAmountGrade() - , reviewUpdate.getTasteGrade()); + review.update(reviewUpdate.getContent(), reviewUpdate.getMainRate(), reviewUpdate.getAmountRate() + , reviewUpdate.getTasteRate()); review.getMenu().updateReview(); }else{ throw new BaseException(PERMISSION_DENIED); @@ -125,9 +125,9 @@ public MenuReviewInfo findReviewInfoByMenuId(Long menuId) { reviewMenuList.add(menu.getName()); return MenuReviewInfo.builder() - .menuName(reviewMenuList).mainGrade(menu.getMainGrade()).tasteGrade(menu.getTasteGrade()) - .amountGrade(menu.getAmountGrade()).totalReviewCount(menu.getReviewCnt()) - .reviewGradeCnt(MenuReviewInfo.ReviewGradeCnt.fromMap(getReviewGradeCnt(menu))) + .menuName(reviewMenuList).mainRate(menu.getMainRate()).tasteRate(menu.getTasteRate()) + .amountRate(menu.getAmountRate()).totalReviewCount(menu.getReviewCnt()) + .reviewRateCnt(MenuReviewInfo.ReviewRateCnt.fromMap(getReviewRateCnt(menu))) .build(); } @@ -141,35 +141,35 @@ public MenuReviewInfo findReviewInfoByMealId(Long mealId) { meal.getMealMenus().forEach(mealMenu -> menuList.add(mealMenu.getMenu())); List reviewMenuList = new ArrayList<>(); menuList.forEach(menu ->reviewMenuList.add(menu.getName())); - List> gradeCntMapList = - menuList.stream().map(this::getReviewGradeCnt).toList(); - Map totalGradeCntMap = gradeCntMapList.stream().flatMap(m -> m.entrySet().stream()) + List> rateCntMapList = + menuList.stream().map(this::getReviewRateCnt).toList(); + Map totalRateCntMap = rateCntMapList.stream().flatMap(m -> m.entrySet().stream()) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, Long::sum)); - meal.caculateGrade(); + meal.caculateRate(); return MenuReviewInfo.builder() - .menuName(reviewMenuList).mainGrade(meal.getMainGrade()).tasteGrade(meal.getTasteGrade()) - .amountGrade(meal.getAmountGrade()).totalReviewCount(menuList.stream().mapToInt(Menu::getReviewCnt).sum()) - .reviewGradeCnt(MenuReviewInfo.ReviewGradeCnt.fromMap(totalGradeCntMap)) + .menuName(reviewMenuList).mainRate(meal.getMainRate()).tasteRate(meal.getTasteRate()) + .amountRate(meal.getAmountRate()).totalReviewCount(menuList.stream().mapToInt(Menu::getReviewCnt).sum()) + .reviewRateCnt(MenuReviewInfo.ReviewRateCnt.fromMap(totalRateCntMap)) .build(); } /** * 메뉴의 리뷰 평점별 개수 조회 */ - public Map getReviewGradeCnt(Menu menu) { + public Map getReviewRateCnt(Menu menu) { List reviewList = menu.getReviews(); - long oneCnt = reviewList.stream().filter(r -> r.getMainGrade() == 1).count(); - long twoCnt = reviewList.stream().filter(r -> r.getMainGrade() == 2).count(); - long threeCnt = reviewList.stream().filter(r -> r.getMainGrade() == 3).count(); - long fourCnt = reviewList.stream().filter(r -> r.getMainGrade() == 4).count(); - long fiveCnt = reviewList.stream().filter(r -> r.getMainGrade() == 5).count(); - Map reviewGradeCntMap = new HashMap<>(); - reviewGradeCntMap.put(1, oneCnt); - reviewGradeCntMap.put(2,twoCnt); - reviewGradeCntMap.put(3,threeCnt); - reviewGradeCntMap.put(4,fourCnt); - reviewGradeCntMap.put(5,fiveCnt); - return reviewGradeCntMap; + long oneCnt = reviewList.stream().filter(r -> r.getMainRate() == 1).count(); + long twoCnt = reviewList.stream().filter(r -> r.getMainRate() == 2).count(); + long threeCnt = reviewList.stream().filter(r -> r.getMainRate() == 3).count(); + long fourCnt = reviewList.stream().filter(r -> r.getMainRate() == 4).count(); + long fiveCnt = reviewList.stream().filter(r -> r.getMainRate() == 5).count(); + Map reviewRateCntMap = new HashMap<>(); + reviewRateCntMap.put(1, oneCnt); + reviewRateCntMap.put(2,twoCnt); + reviewRateCntMap.put(3,threeCnt); + reviewRateCntMap.put(4,fourCnt); + reviewRateCntMap.put(5,fiveCnt); + return reviewRateCntMap; } /** diff --git a/src/main/java/ssu/eatssu/web/menu/dto/MenuResDto.java b/src/main/java/ssu/eatssu/web/menu/dto/MenuResDto.java index 9a4ea4d0..00c01229 100644 --- a/src/main/java/ssu/eatssu/web/menu/dto/MenuResDto.java +++ b/src/main/java/ssu/eatssu/web/menu/dto/MenuResDto.java @@ -28,7 +28,7 @@ public static class TodayMeal { private Integer price; @Schema(description = "식단 평점(평점이 없으면 null)", example = "4.4") - private Double mainGrade; + private Double mainRate; @Schema(description = "식단 속 메뉴 리스트") private List changeMenuInfoList; @@ -55,7 +55,7 @@ public static TodayMeal from (Meal meal){ changeMenuList.add(changeMenuInfo); } return new TodayMeal(meal.getId(), meal.getRestaurant().getRestaurantName().getPrice() - , meal.getGradeMap().get("mainGrade"), changeMenuList); + , meal.getRateMap().get("mainRate"), changeMenuList); }else{ return null; } @@ -79,7 +79,7 @@ private static class FixMenuInfo{ private String name; @Schema(description = "메뉴 평점(평점이 없으면 null)", example = "4.4") - private Double mainGrade; + private Double mainRate; @Schema(description = "가격", example = "5000") private Integer price; @@ -88,7 +88,7 @@ private static class FixMenuInfo{ public static FixMenuList from(List menus){ List fixMenuList = new ArrayList<>(); for (Menu menu : menus) { - FixMenuInfo menuInfo = new FixMenuInfo(menu.getId(), menu.getName(), menu.getMainGrade(), menu.getPrice()); + FixMenuInfo menuInfo = new FixMenuInfo(menu.getId(), menu.getName(), menu.getMainRate(), menu.getPrice()); fixMenuList.add(menuInfo); } return new FixMenuList(fixMenuList); diff --git a/src/main/java/ssu/eatssu/web/mypage/dto/MyReviewDetail.java b/src/main/java/ssu/eatssu/web/mypage/dto/MyReviewDetail.java index e98b669e..389a4502 100644 --- a/src/main/java/ssu/eatssu/web/mypage/dto/MyReviewDetail.java +++ b/src/main/java/ssu/eatssu/web/mypage/dto/MyReviewDetail.java @@ -20,13 +20,13 @@ public class MyReviewDetail { Long reviewId; @Schema(description = "평점-메인", example = "4") - private Integer mainGrade; + private Integer mainRate; @Schema(description = "평점-양", example = "4") - private Integer amountGrade; + private Integer amountRate; @Schema(description = "평점-맛", example = "4") - private Integer tasteGrade; + private Integer tasteRate; @Schema(description = "리뷰 작성 날짜(format = yyyyMMdd)", example = "20230407") private LocalDate writeDate; @@ -46,8 +46,8 @@ public static MyReviewDetail from(Review review){ review.getReviewImgs().forEach(i->imgUrlList.add(i.getImageUrl())); return MyReviewDetail.builder() - .reviewId(review.getId()).mainGrade(review.getMainGrade()).amountGrade(review.getAmountGrade()) - .tasteGrade(review.getTasteGrade()).writeDate(review.getCreatedDate().toLocalDate()) + .reviewId(review.getId()).mainRate(review.getMainRate()).amountRate(review.getAmountRate()) + .tasteRate(review.getTasteRate()).writeDate(review.getCreatedDate().toLocalDate()) .content(review.getContent()).imgUrlList(imgUrlList).menuName(review.getMenu().getName()) .build(); } diff --git a/src/main/java/ssu/eatssu/web/review/dto/MenuReviewInfo.java b/src/main/java/ssu/eatssu/web/review/dto/MenuReviewInfo.java index 1efc8479..7514790d 100644 --- a/src/main/java/ssu/eatssu/web/review/dto/MenuReviewInfo.java +++ b/src/main/java/ssu/eatssu/web/review/dto/MenuReviewInfo.java @@ -20,20 +20,20 @@ public class MenuReviewInfo { private Integer totalReviewCount; @Schema(description = "평점-메인", example = "4.4") - private Double mainGrade; + private Double mainRate; @Schema(description = "평점-양", example = "4.4") - private Double amountGrade; + private Double amountRate; @Schema(description = "평점-맛", example = "4.4") - private Double tasteGrade; + private Double tasteRate; - private ReviewGradeCnt reviewGradeCnt; + private ReviewRateCnt reviewRateCnt; @Getter @AllArgsConstructor @Builder - public static class ReviewGradeCnt{ + public static class ReviewRateCnt{ @Schema(description = "평점5 개수", example = "5") private Long fiveCnt; @@ -49,10 +49,10 @@ public static class ReviewGradeCnt{ @Schema(description = "평점1 개수", example = "5") private Long oneCnt; - public static ReviewGradeCnt fromMap (Map gradeCntMap){ - return ReviewGradeCnt.builder() - .oneCnt(gradeCntMap.get(1)).twoCnt(gradeCntMap.get(2)).threeCnt(gradeCntMap.get(3)) - .fourCnt(gradeCntMap.get(4)).fiveCnt(gradeCntMap.get(5)).build(); + public static ReviewRateCnt fromMap (Map rateCntMap){ + return ReviewRateCnt.builder() + .oneCnt(rateCntMap.get(1)).twoCnt(rateCntMap.get(2)).threeCnt(rateCntMap.get(3)) + .fourCnt(rateCntMap.get(4)).fiveCnt(rateCntMap.get(5)).build(); } } diff --git a/src/main/java/ssu/eatssu/web/review/dto/ReviewCreate.java b/src/main/java/ssu/eatssu/web/review/dto/ReviewCreate.java index 548236fe..52a01fbb 100644 --- a/src/main/java/ssu/eatssu/web/review/dto/ReviewCreate.java +++ b/src/main/java/ssu/eatssu/web/review/dto/ReviewCreate.java @@ -14,13 +14,13 @@ public class ReviewCreate { @Schema(description = "평점-메인", example = "4") - private Integer mainGrade; + private Integer mainRate; @Schema(description = "평점-양", example = "4") - private Integer amountGrade; + private Integer amountRate; @Schema(description = "평점-맛", example = "4") - private Integer tasteGrade; + private Integer tasteRate; @Max(150) @Schema(description = "한줄평", example = "맛있어용") @@ -28,8 +28,8 @@ public class ReviewCreate { public Review toEntity(User user, Menu menu) { return Review.builder() - .user(user).content(this.content).mainGrade(this.mainGrade).amountGrade(this.amountGrade) - .tasteGrade(this.tasteGrade).menu(menu).build(); + .user(user).content(this.content).mainRate(this.mainRate).amountRate(this.amountRate) + .tasteRate(this.tasteRate).menu(menu).build(); } } diff --git a/src/main/java/ssu/eatssu/web/review/dto/ReviewDetail.java b/src/main/java/ssu/eatssu/web/review/dto/ReviewDetail.java index c2291eb1..eb7240dd 100644 --- a/src/main/java/ssu/eatssu/web/review/dto/ReviewDetail.java +++ b/src/main/java/ssu/eatssu/web/review/dto/ReviewDetail.java @@ -33,13 +33,13 @@ public class ReviewDetail { private String writerNickname; @Schema(description = "평점-메인", example = "4") - private Integer mainGrade; + private Integer mainRate; @Schema(description = "평점-양", example = "4") - private Integer amountGrade; + private Integer amountRate; @Schema(description = "평점-맛", example = "4") - private Integer tasteGrade; + private Integer tasteRate; @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") private LocalDate writeDate; @@ -58,7 +58,7 @@ public static ReviewDetail from(Review review, Long userId) { return ReviewDetail.builder() .reviewId(review.getId()) .writerId(null).writerNickname("알 수 없음") - .mainGrade(review.getMainGrade()).amountGrade(review.getAmountGrade()).tasteGrade(review.getTasteGrade()) + .mainRate(review.getMainRate()).amountRate(review.getAmountRate()).tasteRate(review.getTasteRate()) .writeDate(review.getCreatedDate().toLocalDate()).content(review.getContent()) .isWriter(false).imgUrlList(imgUrlList).menu(review.getMenu().getName()) .build(); @@ -67,7 +67,7 @@ public static ReviewDetail from(Review review, Long userId) { return ReviewDetail.builder() .reviewId(review.getId()) .writerId(review.getUser().getId()).writerNickname(review.getUser().getNickname()) - .mainGrade(review.getMainGrade()).amountGrade(review.getAmountGrade()).tasteGrade(review.getTasteGrade()) + .mainRate(review.getMainRate()).amountRate(review.getAmountRate()).tasteRate(review.getTasteRate()) .writeDate(review.getCreatedDate().toLocalDate()).content(review.getContent()) .isWriter(isWriter).imgUrlList(imgUrlList).menu(review.getMenu().getName()) .build(); diff --git a/src/main/java/ssu/eatssu/web/review/dto/ReviewUpdate.java b/src/main/java/ssu/eatssu/web/review/dto/ReviewUpdate.java index 5baf12ea..b975afec 100644 --- a/src/main/java/ssu/eatssu/web/review/dto/ReviewUpdate.java +++ b/src/main/java/ssu/eatssu/web/review/dto/ReviewUpdate.java @@ -11,13 +11,13 @@ public class ReviewUpdate { @Schema(description = "평점-메인", example = "4") - private Integer mainGrade; + private Integer mainRate; @Schema(description = "평점-양", example = "4") - private Integer amountGrade; + private Integer amountRate; @Schema(description = "평점-맛", example = "4") - private Integer tasteGrade; + private Integer tasteRate; @Max(150) @Schema(description = "한줄평", example = "맛있어용") From 2ae52ed6c8668ff157f1033b31c6272902a51539 Mon Sep 17 00:00:00 2001 From: SY2on Date: Mon, 1 Jan 2024 05:03:02 +0900 Subject: [PATCH 016/399] =?UTF-8?q?Refactor:=20BaseResponse=EC=97=90=20?= =?UTF-8?q?=EC=A0=95=EC=A0=81=20=ED=8C=A9=ED=86=A0=EB=A6=AC=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/response/BaseResponse.java | 41 +++++++++++++------ .../ssu/eatssu/web/menu/MenuController.java | 22 ++++------ .../eatssu/web/mypage/MyPageController.java | 16 +++----- .../ssu/eatssu/web/oauth/OauthController.java | 19 ++++----- .../eatssu/web/report/ReportController.java | 19 ++------- .../eatssu/web/review/ReviewController.java | 26 +++++------- .../ssu/eatssu/web/user/UserController.java | 32 ++++++--------- .../userinquiry/UserInquiryController.java | 12 ++---- 8 files changed, 78 insertions(+), 109 deletions(-) diff --git a/src/main/java/ssu/eatssu/response/BaseResponse.java b/src/main/java/ssu/eatssu/response/BaseResponse.java index 8a76a6c3..8eeb1025 100644 --- a/src/main/java/ssu/eatssu/response/BaseResponse.java +++ b/src/main/java/ssu/eatssu/response/BaseResponse.java @@ -5,9 +5,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; -import static ssu.eatssu.response.BaseResponseStatus.SUCCESS; - - @Getter @AllArgsConstructor @JsonPropertyOrder({"isSuccess", "code", "message", "result"}) @@ -17,21 +14,41 @@ public class BaseResponse { private final String message; private final int code; - @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonInclude(JsonInclude.Include.NON_NULL) //Json으로 응답이 나갈 때 null인 경우 포함되지 않음 private T result; - // 요청에 성공한 경우 - public BaseResponse(T result) { - this.isSuccess = SUCCESS.isSuccess(); - this.message = SUCCESS.getMessage(); - this.code = SUCCESS.getCode(); - this.result = result; + /** + * 정적 팩토리 메서드 + */ + private BaseResponse(BaseResponseStatus status) { + this.isSuccess = status.isSuccess(); + this.message = status.getMessage(); + this.code = status.getCode(); } - // 요청에 실패한 경우 - public BaseResponse(BaseResponseStatus status) { + private BaseResponse(BaseResponseStatus status, T result) { this.isSuccess = status.isSuccess(); this.message = status.getMessage(); this.code = status.getCode(); + this.result = result; + } + + + /** + * API 성공 응답 + */ + public static BaseResponse success() { + return new BaseResponse<>(BaseResponseStatus.SUCCESS); + } + + public static BaseResponse success(T result) { + return new BaseResponse<>(BaseResponseStatus.SUCCESS, result); + } + + /** + * API 실패 응답 + */ + public static BaseResponse fail(BaseResponseStatus status) { + return new BaseResponse<>(status); } } diff --git a/src/main/java/ssu/eatssu/web/menu/MenuController.java b/src/main/java/ssu/eatssu/web/menu/MenuController.java index 7f963e5c..23ce4116 100644 --- a/src/main/java/ssu/eatssu/web/menu/MenuController.java +++ b/src/main/java/ssu/eatssu/web/menu/MenuController.java @@ -53,7 +53,7 @@ public BaseResponse> getMealList(@Parameter(description = "날 TodayMeal todayMeal = TodayMeal.from(meal); todayMealList.add(todayMeal); } - return new BaseResponse<>(todayMealList); + return BaseResponse.success(todayMealList); } else { throw new BaseException(NOT_SUPPORT_RESTAURANT); } @@ -71,7 +71,7 @@ public BaseResponse getFixMenuList(@Parameter(description = "식당 if (MenuTypeGroup.isFix(restaurantName)) { List menuList = menuService.findFixMenuList(restaurantName); FixMenuList fixMenuList = FixMenuList.from(menuList); - return new BaseResponse<>(fixMenuList); + return BaseResponse.success(fixMenuList); } else { throw new BaseException(NOT_SUPPORT_RESTAURANT); } @@ -85,7 +85,7 @@ public BaseResponse getFixMenuList(@Parameter(description = "식당 */ @Operation(summary = "특정 식당 식단 추가", description = "특정 식당의 식단 추가") @PostMapping("/") - public BaseResponse addMeal(@Parameter(description = "날짜(yyyyMMdd)") + public BaseResponse addMeal(@Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") String date, @Parameter(description = "식당이름") @RequestParam("restaurant") RestaurantName restaurantName, @@ -97,13 +97,13 @@ public BaseResponse addMeal(@Parameter(description = "날짜(yyyyMMdd)") try { if (menuService.isExistMeal(timePart, date, restaurantName, addTodayMenuList)) {//이미 추가된 식단이면 log.info("식단 중복 발견!"); - return new BaseResponse<>("Duplicated"); + return BaseResponse.success(); } } catch (ParseException e) { throw new BaseException(INVALID_DATE); } menuService.createMeal(timePart, date, restaurantName, addTodayMenuList); - return new BaseResponse<>(""); + return BaseResponse.success(); } else { throw new BaseException(NOT_SUPPORT_RESTAURANT); } @@ -118,7 +118,7 @@ public BaseResponse addMeal(@Parameter(description = "날짜(yyyyMMdd)") public BaseResponse getMenuListInMeal(@Parameter(description = "mealId") @RequestParam("mealId") Long mealId) { MenuList menuList = menuService.findMenuListInMeal(mealId); - return new BaseResponse<>(menuList); + return BaseResponse.success(menuList); } /** @@ -127,16 +127,10 @@ public BaseResponse getMenuListInMeal(@Parameter(description = "mealId */ @Operation(summary = "식단 삭제", description = "mealId로 meal 삭제") @DeleteMapping("/meal/{mealId}") - public BaseResponse deleteMeal(@Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { + public BaseResponse deleteMeal(@Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { List menuIdList = menuService.deleteMeal(mealId); menuService.cleanupGarbageMenu(menuIdList); - return new BaseResponse<>(""); - } - - @ExceptionHandler(BaseException.class) - public BaseResponse handleBaseException(BaseException e) { - log.info(e.getStatus().toString()); - return new BaseResponse<>(e.getStatus()); + return BaseResponse.success(); } } diff --git a/src/main/java/ssu/eatssu/web/mypage/MyPageController.java b/src/main/java/ssu/eatssu/web/mypage/MyPageController.java index 99aaec65..06ca4fce 100644 --- a/src/main/java/ssu/eatssu/web/mypage/MyPageController.java +++ b/src/main/java/ssu/eatssu/web/mypage/MyPageController.java @@ -10,8 +10,10 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.web.PageableDefault; -import org.springframework.web.bind.annotation.*; -import ssu.eatssu.response.BaseException; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.response.BaseResponse; import ssu.eatssu.service.MyPageService; import ssu.eatssu.utils.SecurityUtil; @@ -39,7 +41,7 @@ public BaseResponse> getMyReviewList( ) { Long userId = SecurityUtil.getLoginUserId(); SliceDto myReviewList = myPageService.findMyReviewList(userId, pageable, lastReviewId); - return new BaseResponse<>(myReviewList); + return BaseResponse.success(myReviewList); } /** @@ -50,13 +52,7 @@ public BaseResponse> getMyReviewList( public BaseResponse getMyPageInfo() { Long userId = SecurityUtil.getLoginUserId(); MypageInfo mypageInfo = myPageService.findMyPageInfo(userId); - return new BaseResponse<>(mypageInfo); - } - - @ExceptionHandler(BaseException.class) - public BaseResponse handleBaseException(BaseException e) { - log.info(e.getStatus().toString()); - return new BaseResponse<>(e.getStatus()); + return BaseResponse.success(mypageInfo); } } diff --git a/src/main/java/ssu/eatssu/web/oauth/OauthController.java b/src/main/java/ssu/eatssu/web/oauth/OauthController.java index be93aac2..1024c6c5 100644 --- a/src/main/java/ssu/eatssu/web/oauth/OauthController.java +++ b/src/main/java/ssu/eatssu/web/oauth/OauthController.java @@ -5,15 +5,17 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.response.BaseException; import ssu.eatssu.response.BaseResponse; import ssu.eatssu.service.OauthService; import ssu.eatssu.utils.SecurityUtil; import ssu.eatssu.web.oauth.dto.AppleLogin; import ssu.eatssu.web.oauth.dto.KakaoLogin; -import ssu.eatssu.web.user.dto.*; +import ssu.eatssu.web.user.dto.Tokens; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; @@ -36,7 +38,7 @@ public class OauthController { @PostMapping("/kakao") public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLogin login) { Tokens tokens = oauthService.kakaoLogin(login.getEmail(), login.getProviderId()); - return new BaseResponse<>(tokens); + return BaseResponse.success(tokens); } /** @@ -47,14 +49,7 @@ public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLogin login) { public BaseResponse appleLogin(@Valid @RequestBody AppleLogin login) throws NoSuchAlgorithmException, InvalidKeySpecException { Tokens tokens = oauthService.appleLogin(login.getIdentityToken()); - return new BaseResponse<>(tokens); + return BaseResponse.success(tokens); } - @ExceptionHandler(BaseException.class) - public BaseResponse handleBaseException(BaseException e) { - log.info(e.getStatus().toString()); - return new BaseResponse<>(e.getStatus()); - } - - } diff --git a/src/main/java/ssu/eatssu/web/report/ReportController.java b/src/main/java/ssu/eatssu/web/report/ReportController.java index 05e9b6a3..0dd195d4 100644 --- a/src/main/java/ssu/eatssu/web/report/ReportController.java +++ b/src/main/java/ssu/eatssu/web/report/ReportController.java @@ -4,15 +4,11 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.Review; import ssu.eatssu.domain.ReviewReport; -import ssu.eatssu.domain.User; import ssu.eatssu.domain.enums.ReviewReportType; import ssu.eatssu.domain.repository.ReviewRepository; import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.response.BaseException; import ssu.eatssu.response.BaseResponse; import ssu.eatssu.service.ReportService; import ssu.eatssu.slack.SlackChannel; @@ -26,9 +22,6 @@ import java.util.Arrays; import java.util.List; -import static ssu.eatssu.response.BaseResponseStatus.NOT_FOUND_REVIEW; -import static ssu.eatssu.response.BaseResponseStatus.NOT_FOUND_USER; - @Slf4j @RestController @RequestMapping("/report") @@ -49,7 +42,7 @@ public BaseResponse> getReportType() { List reportInfo = new ArrayList<>(); Arrays.stream(ReviewReportType.values()) .forEach(reportType -> reportInfo.add(new ReviewReportTypeInfo(reportType))); - return new BaseResponse<>(reportInfo); + return BaseResponse.success(reportInfo); } /** @@ -57,17 +50,11 @@ public BaseResponse> getReportType() { */ @Operation(summary = "리뷰 신고하기", description = "리뷰 신고하기") @PostMapping("/") - public BaseResponse reportReview(@RequestBody ReviewReportCreate reviewReportCreate) { + public BaseResponse reportReview(@RequestBody ReviewReportCreate reviewReportCreate) { Long userId = SecurityUtil.getLoginUserId(); ReviewReport report = reportService.reportReview(userId, reviewReportCreate); slackService.sendSlackMessage(SlackMessageFormat.sendReport(report), SlackChannel.REPORT_CHANNEL); - return new BaseResponse<>("Success"); - } - - @ExceptionHandler(BaseException.class) - public BaseResponse handleBaseException(BaseException e) { - log.info(e.getStatus().toString()); - return new BaseResponse<>(e.getStatus()); + return BaseResponse.success(); } } diff --git a/src/main/java/ssu/eatssu/web/review/ReviewController.java b/src/main/java/ssu/eatssu/web/review/ReviewController.java index 03ef6e86..c869069b 100644 --- a/src/main/java/ssu/eatssu/web/review/ReviewController.java +++ b/src/main/java/ssu/eatssu/web/review/ReviewController.java @@ -49,13 +49,13 @@ public class ReviewController { @PostMapping(value = "/{menuId}", consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, produces = MediaType.APPLICATION_JSON_VALUE) - public BaseResponse writeReview(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, + public BaseResponse writeReview(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, @RequestPart(value = "reviewCreate") ReviewCreate reviewCreate, @RequestPart(value = "multipartFileList", required = false) List multipartFileList) { Long userId = SecurityUtil.getLoginUserId(); reviewService.createReview(userId, menuId, reviewCreate, multipartFileList); - return new BaseResponse<>(""); + return BaseResponse.success(); } /** @@ -64,12 +64,12 @@ public BaseResponse writeReview(@Parameter(description = "menuId") @Path */ @Operation(summary = "리뷰 수정(글 수정)", description = "리뷰 수정(글 수정)") @PatchMapping("/{reviewId}") - public BaseResponse updateReview(@Parameter(description = "reviewId") + public BaseResponse updateReview(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, @RequestBody ReviewUpdate reviewUpdate) { Long userId = SecurityUtil.getLoginUserId(); reviewService.updateReviewContent(userId, reviewId, reviewUpdate); - return new BaseResponse<>(""); + return BaseResponse.success(); } /** @@ -78,10 +78,10 @@ public BaseResponse updateReview(@Parameter(description = "reviewId") */ @Operation(summary = "리뷰 삭제", description = "리뷰 삭제") @DeleteMapping("/{reviewId}") - public BaseResponse deleteReview(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId) { + public BaseResponse deleteReview(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId) { Long userId = SecurityUtil.getLoginUserId(); reviewService.deleteReview(userId, reviewId); - return new BaseResponse<>(""); + return BaseResponse.success(); } /** @@ -113,7 +113,7 @@ public BaseResponse getMenuReviewInfo(@Parameter(description = " } else { throw new BaseException(MISSING_QUERY_PARAM); } - return new BaseResponse<>(menuReviewInfo); + return BaseResponse.success(menuReviewInfo); } /** @@ -146,7 +146,7 @@ public BaseResponse> getReviewList( } else { throw new BaseException(MISSING_QUERY_PARAM); } - return new BaseResponse<>(reviewList); + return BaseResponse.success(reviewList); } /* @@ -154,15 +154,9 @@ public BaseResponse> getReviewList( //todo 관리자 api로 이동 필요 */ @GetMapping("/refresh") - public BaseResponse refreshReviewInfo() { + public BaseResponse refreshReviewInfo() { refreshingService.refreshAllReviews(); - return new BaseResponse<>(""); - } - - @ExceptionHandler(BaseException.class) - public BaseResponse handleBaseException(BaseException e) { - log.info(e.getStatus().toString()); - return new BaseResponse<>(e.getStatus()); + return BaseResponse.success(); } } diff --git a/src/main/java/ssu/eatssu/web/user/UserController.java b/src/main/java/ssu/eatssu/web/user/UserController.java index c1db8eb6..1f83694c 100644 --- a/src/main/java/ssu/eatssu/web/user/UserController.java +++ b/src/main/java/ssu/eatssu/web/user/UserController.java @@ -9,7 +9,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.response.BaseException; import ssu.eatssu.response.BaseResponse; import ssu.eatssu.service.UserService; import ssu.eatssu.utils.SecurityUtil; @@ -39,7 +38,7 @@ public class UserController { @PostMapping("/join") public BaseResponse join(@Valid @RequestBody Join join) throws JsonProcessingException { Tokens tokens = userService.join(join.getEmail(), join.getPwd()); - return new BaseResponse<>(tokens); + return BaseResponse.success(tokens); } /** @@ -51,10 +50,10 @@ public BaseResponse join(@Valid @RequestBody Join join) throws JsonProce public BaseResponse checkEmailDuplicate(@Parameter(description = "이메일") @PathVariable String email) { boolean duplicated = userRepository.existsByEmail(email); if (!duplicated) { - return new BaseResponse<>(true); + return BaseResponse.success(true); } else { //throw new BaseException(EMAIL_DUPLICATE); - return new BaseResponse<>(false); + return BaseResponse.success(false); } } @@ -67,7 +66,7 @@ public BaseResponse checkEmailDuplicate(@Parameter(description = "이 public BaseResponse login(@Valid @RequestBody Login login) throws JsonProcessingException { // todo: // exceiption service단에서 처리 Tokens tokens = userService.login(login.getEmail(), login.getPwd()); - return new BaseResponse<>(tokens); + return BaseResponse.success(tokens); } /** @@ -76,10 +75,10 @@ public BaseResponse login(@Valid @RequestBody Login login) throws JsonPr */ @Operation(summary = "닉네임 수정", description = "닉네임 수정") @PatchMapping("/nickname") - public BaseResponse updateNickname(@Valid @RequestBody NicknameEdit nicknameEdit) { + public BaseResponse updateNickname(@Valid @RequestBody NicknameEdit nicknameEdit) { Long userId = getLoginUserId(); userService.updateNickname(userId, nicknameEdit.getNickname()); - return new BaseResponse<>(""); + return BaseResponse.success(); } /** @@ -92,10 +91,10 @@ public BaseResponse checkNicknameDuplicate(@Parameter(description = " @RequestParam(value = "nickname") String nickname) { boolean duplicated = userRepository.existsByNickname(nickname); if (!duplicated) { - return new BaseResponse<>(true); + return BaseResponse.success(true); } else { //throw new BaseException(NICKNAME_DUPLICATE); - return new BaseResponse<>(false); + return BaseResponse.success(false); } } @@ -105,10 +104,10 @@ public BaseResponse checkNicknameDuplicate(@Parameter(description = " */ @Operation(summary = "비밀번호 변경", description = "비밀번호 변경") @PatchMapping("/password") - public BaseResponse updatePassword(@Valid @RequestBody PasswordChange passwordChange) { + public BaseResponse updatePassword(@Valid @RequestBody PasswordChange passwordChange) { Long userId = getLoginUserId(); userService.updatePassword(userId, passwordChange.getPwd()); - return new BaseResponse<>(""); + return BaseResponse.success(); } /** @@ -119,7 +118,7 @@ public BaseResponse updatePassword(@Valid @RequestBody PasswordChange pa @PostMapping("/token/reissue") public BaseResponse refreshToken() throws JsonProcessingException { Tokens tokens = userService.refreshTokens(getLoginUser()); - return new BaseResponse<>(tokens); + return BaseResponse.success(tokens); } /** @@ -130,14 +129,7 @@ public BaseResponse refreshToken() throws JsonProcessingException { @DeleteMapping("/signout") public BaseResponse signout() { userService.signout(getLoginUserId()); - return new BaseResponse<>(true); + return BaseResponse.success(true); } - @ExceptionHandler(BaseException.class) - public BaseResponse handleBaseException(BaseException e) { - log.info(e.getStatus().toString()); - return new BaseResponse<>(e.getStatus()); - } - - } diff --git a/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java b/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java index 6a3cdcb8..5d7e988f 100644 --- a/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java +++ b/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java @@ -36,12 +36,12 @@ public class UserInquiryController { */ @Operation(summary = "문의 남기기", description = "문의 남기기") @PostMapping("/") - public BaseResponse writeInquiry(@RequestBody UserInquiryCreate userInquiryCreate) { + public BaseResponse writeInquiry(@RequestBody UserInquiryCreate userInquiryCreate) { Long userId = SecurityUtil.getLoginUserId(); UserInquiry inquiry = userInquiryService.createUserInquiry(userId, userInquiryCreate.getContent()); slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiry(inquiry) , SlackChannel.USER_INQUIRY_CHANNEL); - return new BaseResponse<>(""); + return BaseResponse.success(); } /** @@ -56,13 +56,7 @@ public BaseResponse getInquiryDetail(@Parameter(description = userInquiryRepository.findById(userInquiryId).orElseThrow(() -> new BaseException(NOT_FOUND_USER_INQUIRY)); slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiry(inquiry) , SlackChannel.USER_INQUIRY_CHANNEL); - return new BaseResponse<>(UserInquiryDetail.fromUserInquiry(inquiry)); - } - - @ExceptionHandler(BaseException.class) - public BaseResponse handleBaseException(BaseException e) { - log.info(e.getStatus().toString()); - return new BaseResponse<>(e.getStatus()); + return BaseResponse.success(UserInquiryDetail.fromUserInquiry(inquiry)); } } From 0f07f52516f90e94a3a6461e053bd2ceb11b82cc Mon Sep 17 00:00:00 2001 From: SY2on Date: Wed, 3 Jan 2024 03:34:45 +0900 Subject: [PATCH 017/399] =?UTF-8?q?Feat:=20Global=20Error=20Handler=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80,=20BaseResponseStatus=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=20=EB=B0=8F=20=EC=88=98=EC=A0=95=20=EC=A0=84=EC=B2=B4=EC=A0=81?= =?UTF-8?q?=EC=9D=B8=20ErrorHandling=20=EB=A1=9C=EC=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20Error=EC=97=90=20=EB=A7=9E=EB=8A=94=20HttpStatus=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=ED=95=98=EB=8F=84=EB=A1=9D=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 --- .../handler/GlobalExceptionHandler.java | 161 ++++++++++++++++++ .../{ => handler}/response/BaseException.java | 2 +- .../{ => handler}/response/BaseResponse.java | 2 +- .../handler/response/BaseResponseStatus.java | 101 +++++++++++ .../java/ssu/eatssu/jwt/JwtTokenProvider.java | 12 +- .../eatssu/response/BaseResponseStatus.java | 66 ------- .../java/ssu/eatssu/service/MenuService.java | 4 +- .../ssu/eatssu/service/MyPageService.java | 4 +- .../java/ssu/eatssu/service/OauthService.java | 11 +- .../ssu/eatssu/service/ReportService.java | 6 +- .../ssu/eatssu/service/ReviewService.java | 8 +- .../eatssu/service/UserInquiryService.java | 4 +- .../java/ssu/eatssu/service/UserService.java | 4 +- .../ssu/eatssu/web/menu/MenuController.java | 8 +- .../eatssu/web/mypage/MyPageController.java | 2 +- .../ssu/eatssu/web/oauth/OauthController.java | 2 +- .../eatssu/web/report/ReportController.java | 2 +- .../eatssu/web/review/ReviewController.java | 18 +- .../ssu/eatssu/web/user/UserController.java | 2 +- .../userinquiry/UserInquiryController.java | 6 +- 20 files changed, 312 insertions(+), 113 deletions(-) create mode 100644 src/main/java/ssu/eatssu/handler/GlobalExceptionHandler.java rename src/main/java/ssu/eatssu/{ => handler}/response/BaseException.java (85%) rename src/main/java/ssu/eatssu/{ => handler}/response/BaseResponse.java (97%) create mode 100644 src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java delete mode 100644 src/main/java/ssu/eatssu/response/BaseResponseStatus.java diff --git a/src/main/java/ssu/eatssu/handler/GlobalExceptionHandler.java b/src/main/java/ssu/eatssu/handler/GlobalExceptionHandler.java new file mode 100644 index 00000000..260af3e8 --- /dev/null +++ b/src/main/java/ssu/eatssu/handler/GlobalExceptionHandler.java @@ -0,0 +1,161 @@ +package ssu.eatssu.handler; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.TypeMismatchException; +import org.springframework.http.*; +import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.http.converter.HttpMessageNotWritableException; +import org.springframework.web.HttpMediaTypeNotAcceptableException; +import org.springframework.web.HttpMediaTypeNotSupportedException; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.MissingPathVariableException; +import org.springframework.web.bind.MissingServletRequestParameterException; +import org.springframework.web.bind.ServletRequestBindingException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.context.request.async.AsyncRequestTimeoutException; +import org.springframework.web.multipart.support.MissingServletRequestPartException; +import org.springframework.web.servlet.NoHandlerFoundException; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; +import ssu.eatssu.handler.response.BaseException; +import ssu.eatssu.handler.response.BaseResponse; +import ssu.eatssu.handler.response.BaseResponseStatus; + +/** + * 전역 Controller 예외처리 + */ +@Slf4j +@RestControllerAdvice +public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { + + /** + * BaseException 처리 + */ + @ExceptionHandler(BaseException.class) + public ResponseEntity handleBaseException(BaseException e) { + log.info(e.getStatus().toString()); + return ResponseEntity.status(e.getStatus().getHttpStatus()).body(BaseResponse.fail(e.getStatus())); + } + + /** + * 경로는 있으나 지원하지 않는 http method로 요청 시 + */ + @Override + protected ResponseEntity handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException ex, + HttpHeaders headers, HttpStatusCode status, WebRequest request) { + return ResponseEntity.status(HttpStatus.METHOD_NOT_ALLOWED).body(BaseResponse.fail(BaseResponseStatus.METHOD_NOT_ALLOWED)); + } + + /** + * 지원하지 않는 content type으로 요청 시 + */ + @Override + protected ResponseEntity handleHttpMediaTypeNotSupported(HttpMediaTypeNotSupportedException ex, + HttpHeaders headers, HttpStatusCode status, WebRequest request) { + return ResponseEntity.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE).body(BaseResponse.fail(BaseResponseStatus.UNSUPPORTED_MEDIA_TYPE)); + + } + + /** + * 인식할 수 없는 content type으로 요청 시 + */ + @Override + protected ResponseEntity handleHttpMediaTypeNotAcceptable(HttpMediaTypeNotAcceptableException ex, + HttpHeaders headers, HttpStatusCode status, WebRequest request) { + return ResponseEntity.status(HttpStatus.NOT_ACCEPTABLE).body(BaseResponse.fail(BaseResponseStatus.NOT_ACCEPTABLE)); + } + + /** + * PathVariable 값 누락 시 + */ + @Override + protected ResponseEntity handleMissingPathVariable(MissingPathVariableException ex, HttpHeaders headers, + HttpStatusCode status, WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(BaseResponse.fail(BaseResponseStatus.MISSING_PATH_VARIABLE)); + } + + /*** + * RequestParam 값 누락 시 + */ + @Override + protected ResponseEntity handleMissingServletRequestParameter(MissingServletRequestParameterException ex, + HttpHeaders headers, HttpStatusCode status, WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PARAM)); + } + + /** + * RequestPart 값 누락 시 + */ + @Override + protected ResponseEntity handleMissingServletRequestPart(MissingServletRequestPartException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PART)); + } + + /** + * 요청 값 바인딩 처리에 실패한 경우 + */ + @Override + protected ResponseEntity handleServletRequestBindingException(ServletRequestBindingException ex, + HttpHeaders headers, HttpStatusCode status, WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(BaseResponse.fail(BaseResponseStatus.REQ_BINDING_FAIL)); + } + + /** + * request @Valid 유효성 체크를 통과하지 못한 경우 + */ + @Override + protected ResponseEntity handleMethodArgumentNotValid(MethodArgumentNotValidException ex, + HttpHeaders headers, HttpStatusCode status, + WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(BaseResponse.fail(BaseResponseStatus.FAILED_VALIDATION)); + } + + /** + * Dispatcher Servlet에서 핸들러를 찾지 못한 경우 + *

기본적으로는 404-Not Found응답을 내리지만 Dispatcher Servlet의 throwExceptionIfNoHandlerFound 값이 true인 경우 + * NoHandlerFoundException 예외를 발생

+ */ + @Override + protected ResponseEntity handleNoHandlerFoundException(NoHandlerFoundException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(BaseResponse.fail(BaseResponseStatus.NOT_FOUND)); + } + + /** + * 비동기 요청의 응답시간이 초과될 경우 + */ + @Override + protected ResponseEntity handleAsyncRequestTimeoutException(AsyncRequestTimeoutException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { + return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE).body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_TIME_OUT)); + } + + /** + * 파라미터 타입 불일치가 발생한 경우 + */ + @Override + protected ResponseEntity handleTypeMismatch(TypeMismatchException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(BaseResponse.fail(BaseResponseStatus.MISMATCH_PARAM_TYPE)); + } + + /** + * 적절하지 않은 RequestBody 때문에 HttpMessageConverter.read 메소드 실패한 경우 + */ + @Override + protected ResponseEntity handleHttpMessageNotReadable(HttpMessageNotReadableException ex, + HttpHeaders headers, HttpStatusCode status, WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(BaseResponse.fail(BaseResponseStatus.BAD_REQUEST)); + } + + /** + * 직렬화 실패한 경우 + */ + @Override + protected ResponseEntity handleHttpMessageNotWritable(HttpMessageNotWritableException ex, + HttpHeaders headers, HttpStatusCode status, + WebRequest request) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); + } + +} diff --git a/src/main/java/ssu/eatssu/response/BaseException.java b/src/main/java/ssu/eatssu/handler/response/BaseException.java similarity index 85% rename from src/main/java/ssu/eatssu/response/BaseException.java rename to src/main/java/ssu/eatssu/handler/response/BaseException.java index 051bbcb0..8ada61b8 100644 --- a/src/main/java/ssu/eatssu/response/BaseException.java +++ b/src/main/java/ssu/eatssu/handler/response/BaseException.java @@ -1,4 +1,4 @@ -package ssu.eatssu.response; +package ssu.eatssu.handler.response; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/ssu/eatssu/response/BaseResponse.java b/src/main/java/ssu/eatssu/handler/response/BaseResponse.java similarity index 97% rename from src/main/java/ssu/eatssu/response/BaseResponse.java rename to src/main/java/ssu/eatssu/handler/response/BaseResponse.java index 8eeb1025..85195e4e 100644 --- a/src/main/java/ssu/eatssu/response/BaseResponse.java +++ b/src/main/java/ssu/eatssu/handler/response/BaseResponse.java @@ -1,4 +1,4 @@ -package ssu.eatssu.response; +package ssu.eatssu.handler.response; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonPropertyOrder; diff --git a/src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java new file mode 100644 index 00000000..0efd69ce --- /dev/null +++ b/src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java @@ -0,0 +1,101 @@ +package ssu.eatssu.handler.response; + +import lombok.Getter; +import org.springframework.http.HttpStatus; + +/** + * 에러 코드 관리 + */ +@Getter +public enum BaseResponseStatus { + + /** + * 1000 : 요청 성공 + */ + SUCCESS(true, HttpStatus.OK, 1000, "요청에 성공하였습니다."), + + /** + * 400 BAD_REQUEST 잘못된 요청 + */ + BAD_REQUEST(false, HttpStatus.BAD_REQUEST, 400, "잘못된 요청입니다."), + VALIDATION_ERROR(false, HttpStatus.BAD_REQUEST, 40001, "입력값을 확인해주세요."), + MISSING_PATH_VARIABLE(false, HttpStatus.BAD_REQUEST, 40002, "경로 변수가 누락되었습니다."), + MISSING_REQUEST_PARAM(false, HttpStatus.BAD_REQUEST, 40003, "쿼리 파라미터가 누락되었습니다."), + MISSING_REQUEST_PART(false, HttpStatus.BAD_REQUEST,40004, "multipart/form-data 파일이 누락되었습니다."), + REQ_BINDING_FAIL(false, HttpStatus.BAD_REQUEST,40005, "잘못된 request 입니다."), + MISMATCH_PARAM_TYPE(false, HttpStatus.BAD_REQUEST,40006, "잘못된 파라미터 타입입니다."), + FAILED_VALIDATION(false, HttpStatus.BAD_REQUEST,40007,"입력값이 누락되었거나, 부적절한 입력 값이 있습니다."), + INVALID_DATE(false, HttpStatus.BAD_REQUEST, 40008, "잘못된 날짜형식입니다."), + NOT_SUPPORT_RESTAURANT(false, HttpStatus.BAD_REQUEST, 40009, "해당 식당은 지원하지 않습니다."), + + /** + * 401 UNAUTHORIZED 권한없음(인증 실패) + */ + UNAUTHORIZED(false, HttpStatus.UNAUTHORIZED, 401, "권한 인증에 실패했습니다."), + INVALID_TOKEN(false, HttpStatus.UNAUTHORIZED, 40101, "유효하지 않은 토큰 값입니다." ), + + /** + * 403 FORBIDDEN 권한없음(인가 실패) + */ + FORBIDDEN(false, HttpStatus.FORBIDDEN, 403, "권한이 없습니다."), + REVIEW_PERMISSION_DENIED(false, HttpStatus.FORBIDDEN, 40301, "리뷰에 대한 권한이 없습니다."), + + /** + * 404 NOT_FOUND 잘못된 리소스 접근 + */ + NOT_FOUND(false, HttpStatus.NOT_FOUND, 404, "요청한 리소스를 찾을 수 없습니다."), + NOT_FOUND_USER(false, HttpStatus.NOT_FOUND, 40401, "해당 회원을 찾을 수 없습니다."), + NOT_FOUND_MENU(false, HttpStatus.NOT_FOUND, 40402, "해당 메뉴를 찾을 수 없습니다."), + NOT_FOUND_MEAL(false, HttpStatus.NOT_FOUND, 40403, "해당 식단을 찾을 수 없습니다."), + NOT_FOUND_RESTAURANT(false, HttpStatus.NOT_FOUND, 40404, "해당 식당을 찾을 수 없습니다."), + NOT_FOUND_REVIEW(false, HttpStatus.NOT_FOUND, 40405, "해당 리뷰을 찾을 수 없습니다."), + NOT_FOUND_REVIEW_REPORT(false, HttpStatus.NOT_FOUND, 40406, "해당 리뷰 신고 내역을 찾을 수 없습니다."), + NOT_FOUND_USER_INQUIRY(false, HttpStatus.NOT_FOUND, 40407, "해당 문의 내역을 찾을 수 없습니다."), + + /** + * 405 METHOD_NOT_ALLOWED 지원하지 않은 method 호출 + */ + METHOD_NOT_ALLOWED(false, HttpStatus.METHOD_NOT_ALLOWED,405,"해당 method는 지원하지 않습니다."), + + /** + * 406 NOT_ACCEPTABLE 인식할 수 없는 content type + */ + NOT_ACCEPTABLE(false, HttpStatus.NOT_ACCEPTABLE, 406, "인식할 수 없는 미디어 타입입니다."), + + /** + * 409 CONFLICT 중복된 리소스 + */ + CONFLICT(false, HttpStatus.CONFLICT, 409, "중복된 리소스를 입력했습니다."), + DUPLICATE_EMAIL(false, HttpStatus.CONFLICT, 40901, "중복된 이메일입니다."), + DUPLICATE_NICKNAME(false, HttpStatus.CONFLICT, 40902, "중복된 닉네임입니다."), + + /** + * 415 UNSUPPORTED_MEDIA_TYPE 지원하지 않는 content type + */ + UNSUPPORTED_MEDIA_TYPE(false, HttpStatus.UNSUPPORTED_MEDIA_TYPE, 415, "지원하지 않는 미디어 타입입니다."), + + /** + * 500 INTERNAL_SERVER_ERROR 서버 내부 에러 + */ + INTERNAL_SERVER_ERROR(false, HttpStatus.INTERNAL_SERVER_ERROR, 500, "서버 내부 에러입니다"), + FAIL_IMG_UPLOAD(false, HttpStatus.INTERNAL_SERVER_ERROR, 50001, "이미지 업로드에 실패했습니다."), + + /** + * 503 SERVICE_UNAVAILABLE 서버 내부 에러 + */ + SERVICE_UNAVAILABLE(false, HttpStatus.SERVICE_UNAVAILABLE, 503, "현재 서비스가 불가능한 상태입니다."), + INTERNAL_SERVER_TIME_OUT(false, HttpStatus.SERVICE_UNAVAILABLE, 503, "서버에서 시간초과가 발생했습니다."); + + + private final boolean isSuccess; + private final HttpStatus httpStatus; + private final int code; + private final String message; + + BaseResponseStatus(boolean isSuccess, HttpStatus httpStatus, int code, String message) { + this.isSuccess = isSuccess; + this.httpStatus = httpStatus; + this.code = code; + this.message = message; + } +} diff --git a/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java b/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java index 625880f7..7fdcef32 100644 --- a/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java +++ b/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java @@ -14,6 +14,8 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.stereotype.Component; +import ssu.eatssu.handler.response.BaseException; +import ssu.eatssu.handler.response.BaseResponseStatus; import ssu.eatssu.security.CustomUserDetails; import ssu.eatssu.security.UserPrincipalDto; import ssu.eatssu.web.user.dto.Tokens; @@ -55,7 +57,7 @@ public void setKey(){ //jwt.secret을 이요하여 key생성 } //토큰 발급 - public Tokens generateTokens(Authentication authentication) throws JsonProcessingException { + public Tokens generateTokens(Authentication authentication){ ObjectMapper objectMapper = new ObjectMapper(); @@ -65,7 +67,13 @@ public Tokens generateTokens(Authentication authentication) throws JsonProcessin .collect(Collectors.joining(",")); UserPrincipalDto userPrincipalDto = UserPrincipalDto.from((CustomUserDetails) authentication.getPrincipal()); - String subject = objectMapper.writeValueAsString(userPrincipalDto); + String subject; + try{ + subject = objectMapper.writeValueAsString(userPrincipalDto); + } catch (JsonProcessingException e) { + log.error("Cannot generate JWT Tokens \n errorTrackStace: {}", e.getStackTrace()); + throw new BaseException(BaseResponseStatus.INTERNAL_SERVER_ERROR); + } Claims claims = Jwts.claims(); claims.setSubject(subject); diff --git a/src/main/java/ssu/eatssu/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/response/BaseResponseStatus.java deleted file mode 100644 index c6d17ce1..00000000 --- a/src/main/java/ssu/eatssu/response/BaseResponseStatus.java +++ /dev/null @@ -1,66 +0,0 @@ -package ssu.eatssu.response; - -import lombok.Getter; - -/** - * 에러 코드 관리 - */ -@Getter -public enum BaseResponseStatus { - - /** - * 1000 : 요청 성공 - */ - SUCCESS(true, 1000, "요청에 성공하였습니다."), - - /** - * 2000 : Request 오류 - */ - VALIDATION_ERROR(false, 2000, "입력값을 확인해주세요."), - NOT_FOUND_USER(false, 2001, "해당 유저를 찾을 수 없습니다."), - NOT_FOUND_MENU(false, 2002, "해당 메뉴를 찾을 수 없습니다."), - NOT_FOUND_MEAL(false, 2003, "해당 식단을 찾을 수 없습니다."), - NOT_FOUND_RESTAURANT(false, 2004, "해당 식당을 찾을 수 없습니다."), - NOT_FOUND_REVIEW(false, 2005, "해당 리뷰를 찾을 수 없습니다."), - NOT_SUPPORT_RESTAURANT(false, 2006, "해당 식당은 지원하지 않습니다."), - PERMISSION_DENIED(false, 2007, "권한이 없습니다."), - - MISSING_QUERY_PARAM(false, 2008, "쿼리 파라미터가 누락되었습니다."), - INVALID_TOKEN(false, 2009, "유효하지 않은 토큰 값입니다." ), - FAIL_MAKE_TOKEN(false, 2010, "토큰 생성에 실패했습니다."), - NICKNAME_DUPLICATE(false, 2011, "이미 존재하는 닉네임입니다."), - EMAIL_DUPLICATE(false, 2012, "이미 존재하는 이메일입니다."), - - - DUPLICATE_EMAIL(false, 2011, "중복된 이메일입니다."), - DUPLICATE_NICKNAME(false, 2012, "중복된 닉네임입니다."), - - INVALID_DATE(false, 2013, "잘못된 날짜형식입니다."), - - NOT_FOUND_REVIEW_REPORT(false, 2014, "해당 문의내역을 찾을 수 없습니다."), - NOT_FOUND_USER_INQUIRY(false, 2015, "해당 문의내역을 찾을 수 없습니다."), - - - - /** - * 3000 : Response 오류 - */ - RESPONSE_ERROR(false, 3000, "값을 불러오는데 실패하였습니다."), - - /** - * 4000 : Database, Server 오류 - */ - DATABASE_ERROR(false, 4000, "데이터베이스 연결에 실패하였습니다."), - FAIL_IMG_UPLOAD(false, 4001, "이미지 업로드에 실패했습니다.") - ; - - private final boolean isSuccess; - private final int code; - private final String message; - - BaseResponseStatus(boolean isSuccess, int code, String message) { - this.isSuccess = isSuccess; - this.code = code; - this.message = message; - } -} diff --git a/src/main/java/ssu/eatssu/service/MenuService.java b/src/main/java/ssu/eatssu/service/MenuService.java index 30fb82a1..e90d4552 100644 --- a/src/main/java/ssu/eatssu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/service/MenuService.java @@ -13,14 +13,14 @@ import ssu.eatssu.domain.repository.MealRepository; import ssu.eatssu.domain.repository.MenuRepository; import ssu.eatssu.domain.repository.RestaurantRepository; -import ssu.eatssu.response.BaseException; +import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.web.menu.dto.MenuReqDto; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; -import static ssu.eatssu.response.BaseResponseStatus.*; +import static ssu.eatssu.handler.response.BaseResponseStatus.*; import static ssu.eatssu.web.menu.dto.MenuResDto.*; @Service diff --git a/src/main/java/ssu/eatssu/service/MyPageService.java b/src/main/java/ssu/eatssu/service/MyPageService.java index 4187d649..e36cbe73 100644 --- a/src/main/java/ssu/eatssu/service/MyPageService.java +++ b/src/main/java/ssu/eatssu/service/MyPageService.java @@ -10,7 +10,7 @@ import ssu.eatssu.domain.User; import ssu.eatssu.domain.repository.ReviewRepository; import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.response.BaseException; +import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.web.SliceDto; import ssu.eatssu.web.mypage.dto.MyReviewDetail; import ssu.eatssu.web.mypage.dto.MypageInfo; @@ -18,7 +18,7 @@ import java.util.ArrayList; import java.util.List; -import static ssu.eatssu.response.BaseResponseStatus.NOT_FOUND_USER; +import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_FOUND_USER; @RequiredArgsConstructor @Service diff --git a/src/main/java/ssu/eatssu/service/OauthService.java b/src/main/java/ssu/eatssu/service/OauthService.java index f5a65bd7..6f7aa411 100644 --- a/src/main/java/ssu/eatssu/service/OauthService.java +++ b/src/main/java/ssu/eatssu/service/OauthService.java @@ -24,7 +24,7 @@ import ssu.eatssu.domain.enums.OauthProvider; import ssu.eatssu.domain.repository.UserRepository; import ssu.eatssu.jwt.JwtTokenProvider; -import ssu.eatssu.response.BaseException; +import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.web.oauth.dto.AppleKeys; import ssu.eatssu.web.user.dto.Tokens; @@ -39,8 +39,7 @@ import java.util.Map; import java.util.Optional; -import static ssu.eatssu.response.BaseResponseStatus.FAIL_MAKE_TOKEN; -import static ssu.eatssu.response.BaseResponseStatus.INVALID_TOKEN; +import static ssu.eatssu.handler.response.BaseResponseStatus.INVALID_TOKEN; @Slf4j @RequiredArgsConstructor @@ -76,11 +75,7 @@ public Tokens generateJwtTokens(String email, String pwd){ Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken); // 3. 인증 정보를 바탕으로 JWT 토큰 생성 - try{ - return jwtTokenProvider.generateTokens(authentication); - } catch (JsonProcessingException e){ - throw new BaseException(FAIL_MAKE_TOKEN); - } + return jwtTokenProvider.generateTokens(authentication); } /** diff --git a/src/main/java/ssu/eatssu/service/ReportService.java b/src/main/java/ssu/eatssu/service/ReportService.java index cdfed809..73ad37da 100644 --- a/src/main/java/ssu/eatssu/service/ReportService.java +++ b/src/main/java/ssu/eatssu/service/ReportService.java @@ -10,11 +10,11 @@ import ssu.eatssu.domain.repository.ReviewReportRepository; import ssu.eatssu.domain.repository.ReviewRepository; import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.response.BaseException; +import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.web.report.dto.ReviewReportCreate; -import static ssu.eatssu.response.BaseResponseStatus.NOT_FOUND_REVIEW; -import static ssu.eatssu.response.BaseResponseStatus.NOT_FOUND_USER; +import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; +import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_FOUND_USER; @RequiredArgsConstructor @Service diff --git a/src/main/java/ssu/eatssu/service/ReviewService.java b/src/main/java/ssu/eatssu/service/ReviewService.java index e171ad2c..b72919c5 100644 --- a/src/main/java/ssu/eatssu/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/service/ReviewService.java @@ -9,7 +9,7 @@ import org.springframework.web.multipart.MultipartFile; import ssu.eatssu.domain.*; import ssu.eatssu.domain.repository.*; -import ssu.eatssu.response.BaseException; +import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.utils.S3Uploader; import ssu.eatssu.utils.SecurityUtil; import ssu.eatssu.web.SliceDto; @@ -22,7 +22,7 @@ import java.util.Map; import java.util.stream.Collectors; -import static ssu.eatssu.response.BaseResponseStatus.*; +import static ssu.eatssu.handler.response.BaseResponseStatus.*; @RequiredArgsConstructor @Service @@ -86,7 +86,7 @@ public void updateReviewContent(Long userId, Long reviewId, ReviewUpdate reviewU , reviewUpdate.getTasteRate()); review.getMenu().updateReview(); }else{ - throw new BaseException(PERMISSION_DENIED); + throw new BaseException(REVIEW_PERMISSION_DENIED); } } @@ -104,7 +104,7 @@ public void deleteReview(Long userId, Long reviewId){ reviewRepository.flush(); review.getMenu().deleteReview(); }else{ - throw new BaseException(PERMISSION_DENIED); + throw new BaseException(REVIEW_PERMISSION_DENIED); } } diff --git a/src/main/java/ssu/eatssu/service/UserInquiryService.java b/src/main/java/ssu/eatssu/service/UserInquiryService.java index 3ea947f2..edeb2048 100644 --- a/src/main/java/ssu/eatssu/service/UserInquiryService.java +++ b/src/main/java/ssu/eatssu/service/UserInquiryService.java @@ -7,9 +7,9 @@ import ssu.eatssu.domain.UserInquiry; import ssu.eatssu.domain.repository.UserInquiryRepository; import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.response.BaseException; +import ssu.eatssu.handler.response.BaseException; -import static ssu.eatssu.response.BaseResponseStatus.NOT_FOUND_USER; +import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_FOUND_USER; @RequiredArgsConstructor @Service diff --git a/src/main/java/ssu/eatssu/service/UserService.java b/src/main/java/ssu/eatssu/service/UserService.java index 62436930..898118c1 100644 --- a/src/main/java/ssu/eatssu/service/UserService.java +++ b/src/main/java/ssu/eatssu/service/UserService.java @@ -14,12 +14,12 @@ import ssu.eatssu.domain.repository.ReviewReportRepository; import ssu.eatssu.domain.repository.UserRepository; import ssu.eatssu.jwt.JwtTokenProvider; -import ssu.eatssu.response.BaseException; +import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.web.user.dto.Tokens; import java.util.Optional; -import static ssu.eatssu.response.BaseResponseStatus.*; +import static ssu.eatssu.handler.response.BaseResponseStatus.*; @Service @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/web/menu/MenuController.java b/src/main/java/ssu/eatssu/web/menu/MenuController.java index 23ce4116..647d4ef3 100644 --- a/src/main/java/ssu/eatssu/web/menu/MenuController.java +++ b/src/main/java/ssu/eatssu/web/menu/MenuController.java @@ -11,8 +11,8 @@ import ssu.eatssu.domain.enums.MenuTypeGroup; import ssu.eatssu.domain.enums.RestaurantName; import ssu.eatssu.domain.enums.TimePart; -import ssu.eatssu.response.BaseException; -import ssu.eatssu.response.BaseResponse; +import ssu.eatssu.handler.response.BaseException; +import ssu.eatssu.handler.response.BaseResponse; import ssu.eatssu.service.MenuService; import ssu.eatssu.web.menu.dto.MenuReqDto.AddTodayMenuList; @@ -20,8 +20,8 @@ import java.util.ArrayList; import java.util.List; -import static ssu.eatssu.response.BaseResponseStatus.INVALID_DATE; -import static ssu.eatssu.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; +import static ssu.eatssu.handler.response.BaseResponseStatus.INVALID_DATE; +import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; import static ssu.eatssu.web.menu.dto.MenuResDto.*; @Slf4j diff --git a/src/main/java/ssu/eatssu/web/mypage/MyPageController.java b/src/main/java/ssu/eatssu/web/mypage/MyPageController.java index 06ca4fce..54c57678 100644 --- a/src/main/java/ssu/eatssu/web/mypage/MyPageController.java +++ b/src/main/java/ssu/eatssu/web/mypage/MyPageController.java @@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import ssu.eatssu.response.BaseResponse; +import ssu.eatssu.handler.response.BaseResponse; import ssu.eatssu.service.MyPageService; import ssu.eatssu.utils.SecurityUtil; import ssu.eatssu.web.SliceDto; diff --git a/src/main/java/ssu/eatssu/web/oauth/OauthController.java b/src/main/java/ssu/eatssu/web/oauth/OauthController.java index 1024c6c5..6b3f6b03 100644 --- a/src/main/java/ssu/eatssu/web/oauth/OauthController.java +++ b/src/main/java/ssu/eatssu/web/oauth/OauthController.java @@ -10,7 +10,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.response.BaseResponse; +import ssu.eatssu.handler.response.BaseResponse; import ssu.eatssu.service.OauthService; import ssu.eatssu.utils.SecurityUtil; import ssu.eatssu.web.oauth.dto.AppleLogin; diff --git a/src/main/java/ssu/eatssu/web/report/ReportController.java b/src/main/java/ssu/eatssu/web/report/ReportController.java index 0dd195d4..8a281515 100644 --- a/src/main/java/ssu/eatssu/web/report/ReportController.java +++ b/src/main/java/ssu/eatssu/web/report/ReportController.java @@ -9,7 +9,7 @@ import ssu.eatssu.domain.enums.ReviewReportType; import ssu.eatssu.domain.repository.ReviewRepository; import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.response.BaseResponse; +import ssu.eatssu.handler.response.BaseResponse; import ssu.eatssu.service.ReportService; import ssu.eatssu.slack.SlackChannel; import ssu.eatssu.slack.SlackMessageFormat; diff --git a/src/main/java/ssu/eatssu/web/review/ReviewController.java b/src/main/java/ssu/eatssu/web/review/ReviewController.java index c869069b..e604cfc9 100644 --- a/src/main/java/ssu/eatssu/web/review/ReviewController.java +++ b/src/main/java/ssu/eatssu/web/review/ReviewController.java @@ -14,8 +14,8 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import ssu.eatssu.domain.enums.MenuTypeGroup; -import ssu.eatssu.response.BaseException; -import ssu.eatssu.response.BaseResponse; +import ssu.eatssu.handler.response.BaseException; +import ssu.eatssu.handler.response.BaseResponse; import ssu.eatssu.service.RefreshingService; import ssu.eatssu.service.ReviewService; import ssu.eatssu.utils.SecurityUtil; @@ -29,7 +29,7 @@ import static ssu.eatssu.domain.enums.MenuTypeGroup.CHANGE; import static ssu.eatssu.domain.enums.MenuTypeGroup.FIX; -import static ssu.eatssu.response.BaseResponseStatus.MISSING_QUERY_PARAM; +import static ssu.eatssu.handler.response.BaseResponseStatus.MISSING_REQUEST_PARAM; @Slf4j @RestController @@ -100,18 +100,18 @@ public BaseResponse getMenuReviewInfo(@Parameter(description = " MenuReviewInfo menuReviewInfo; if (menuTypeGroup == FIX) { if (menuId == null) { - throw new BaseException(MISSING_QUERY_PARAM); + throw new BaseException(MISSING_REQUEST_PARAM); } else { menuReviewInfo = reviewService.findReviewInfoByMenuId(menuId); } } else if (menuTypeGroup == CHANGE) { if (mealId == null) { - throw new BaseException(MISSING_QUERY_PARAM); + throw new BaseException(MISSING_REQUEST_PARAM); } else { menuReviewInfo = reviewService.findReviewInfoByMealId(mealId); } } else { - throw new BaseException(MISSING_QUERY_PARAM); + throw new BaseException(MISSING_REQUEST_PARAM); } return BaseResponse.success(menuReviewInfo); } @@ -133,18 +133,18 @@ public BaseResponse> getReviewList( SliceDto reviewList; if (menuTypeGroup == FIX) { if (menuId == null) { - throw new BaseException(MISSING_QUERY_PARAM); + throw new BaseException(MISSING_REQUEST_PARAM); } else { reviewList = reviewService.findReviewListByMenuId(menuId, pageable, lastReviewId); } } else if (menuTypeGroup == CHANGE) { if (mealId == null) { - throw new BaseException(MISSING_QUERY_PARAM); + throw new BaseException(MISSING_REQUEST_PARAM); } else { reviewList = reviewService.findReviewListByMealId(mealId, pageable, lastReviewId); } } else { - throw new BaseException(MISSING_QUERY_PARAM); + throw new BaseException(MISSING_REQUEST_PARAM); } return BaseResponse.success(reviewList); } diff --git a/src/main/java/ssu/eatssu/web/user/UserController.java b/src/main/java/ssu/eatssu/web/user/UserController.java index 1f83694c..00af7088 100644 --- a/src/main/java/ssu/eatssu/web/user/UserController.java +++ b/src/main/java/ssu/eatssu/web/user/UserController.java @@ -9,7 +9,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.response.BaseResponse; +import ssu.eatssu.handler.response.BaseResponse; import ssu.eatssu.service.UserService; import ssu.eatssu.utils.SecurityUtil; import ssu.eatssu.web.user.dto.*; diff --git a/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java b/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java index 5d7e988f..bf8b92b1 100644 --- a/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java +++ b/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java @@ -8,8 +8,8 @@ import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.UserInquiry; import ssu.eatssu.domain.repository.UserInquiryRepository; -import ssu.eatssu.response.BaseException; -import ssu.eatssu.response.BaseResponse; +import ssu.eatssu.handler.response.BaseException; +import ssu.eatssu.handler.response.BaseResponse; import ssu.eatssu.service.UserInquiryService; import ssu.eatssu.slack.SlackChannel; import ssu.eatssu.slack.SlackMessageFormat; @@ -18,7 +18,7 @@ import ssu.eatssu.web.userinquiry.dto.UserInquiryCreate; import ssu.eatssu.web.userinquiry.dto.UserInquiryDetail; -import static ssu.eatssu.response.BaseResponseStatus.NOT_FOUND_USER_INQUIRY; +import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_FOUND_USER_INQUIRY; @Slf4j @RestController From dc6f7a84dc900cb25efeb996d2faaf012fcaa7ec Mon Sep 17 00:00:00 2001 From: SY2on Date: Wed, 3 Jan 2024 03:53:30 +0900 Subject: [PATCH 018/399] commit --- .../ssu/eatssu/web/menu/MenuController.java | 8 +++ .../eatssu/web/report/ReportController.java | 4 ++ .../eatssu/web/review/ReviewController.java | 16 +++++ .../ssu/eatssu/web/user/UserController.java | 8 +++ .../userinquiry/UserInquiryController.java | 62 +++++++++++++++++++ 5 files changed, 98 insertions(+) create mode 100644 src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java diff --git a/src/main/java/ssu/eatssu/web/menu/MenuController.java b/src/main/java/ssu/eatssu/web/menu/MenuController.java index 7f963e5c..803d97b7 100644 --- a/src/main/java/ssu/eatssu/web/menu/MenuController.java +++ b/src/main/java/ssu/eatssu/web/menu/MenuController.java @@ -85,7 +85,11 @@ public BaseResponse getFixMenuList(@Parameter(description = "식당 */ @Operation(summary = "특정 식당 식단 추가", description = "특정 식당의 식단 추가") @PostMapping("/") +<<<<<<< Updated upstream public BaseResponse addMeal(@Parameter(description = "날짜(yyyyMMdd)") +======= + public BaseResponse addMeal(@Parameter(description = "날짜(yyyyMMdd)") +>>>>>>> Stashed changes @RequestParam("date") String date, @Parameter(description = "식당이름") @RequestParam("restaurant") RestaurantName restaurantName, @@ -127,7 +131,11 @@ public BaseResponse getMenuListInMeal(@Parameter(description = "mealId */ @Operation(summary = "식단 삭제", description = "mealId로 meal 삭제") @DeleteMapping("/meal/{mealId}") +<<<<<<< Updated upstream public BaseResponse deleteMeal(@Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { +======= + public BaseResponse deleteMeal(@Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { +>>>>>>> Stashed changes List menuIdList = menuService.deleteMeal(mealId); menuService.cleanupGarbageMenu(menuIdList); return new BaseResponse<>(""); diff --git a/src/main/java/ssu/eatssu/web/report/ReportController.java b/src/main/java/ssu/eatssu/web/report/ReportController.java index 05e9b6a3..96ec8961 100644 --- a/src/main/java/ssu/eatssu/web/report/ReportController.java +++ b/src/main/java/ssu/eatssu/web/report/ReportController.java @@ -57,7 +57,11 @@ public BaseResponse> getReportType() { */ @Operation(summary = "리뷰 신고하기", description = "리뷰 신고하기") @PostMapping("/") +<<<<<<< Updated upstream public BaseResponse reportReview(@RequestBody ReviewReportCreate reviewReportCreate) { +======= + public BaseResponse reportReview(@RequestBody ReviewReportCreate reviewReportCreate) { +>>>>>>> Stashed changes Long userId = SecurityUtil.getLoginUserId(); ReviewReport report = reportService.reportReview(userId, reviewReportCreate); slackService.sendSlackMessage(SlackMessageFormat.sendReport(report), SlackChannel.REPORT_CHANNEL); diff --git a/src/main/java/ssu/eatssu/web/review/ReviewController.java b/src/main/java/ssu/eatssu/web/review/ReviewController.java index 03ef6e86..7fc396fc 100644 --- a/src/main/java/ssu/eatssu/web/review/ReviewController.java +++ b/src/main/java/ssu/eatssu/web/review/ReviewController.java @@ -49,7 +49,11 @@ public class ReviewController { @PostMapping(value = "/{menuId}", consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, produces = MediaType.APPLICATION_JSON_VALUE) +<<<<<<< Updated upstream public BaseResponse writeReview(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, +======= + public BaseResponse writeReview(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, +>>>>>>> Stashed changes @RequestPart(value = "reviewCreate") ReviewCreate reviewCreate, @RequestPart(value = "multipartFileList", required = false) List multipartFileList) { @@ -64,7 +68,11 @@ public BaseResponse writeReview(@Parameter(description = "menuId") @Path */ @Operation(summary = "리뷰 수정(글 수정)", description = "리뷰 수정(글 수정)") @PatchMapping("/{reviewId}") +<<<<<<< Updated upstream public BaseResponse updateReview(@Parameter(description = "reviewId") +======= + public BaseResponse updateReview(@Parameter(description = "reviewId") +>>>>>>> Stashed changes @PathVariable("reviewId") Long reviewId, @RequestBody ReviewUpdate reviewUpdate) { Long userId = SecurityUtil.getLoginUserId(); @@ -78,7 +86,11 @@ public BaseResponse updateReview(@Parameter(description = "reviewId") */ @Operation(summary = "리뷰 삭제", description = "리뷰 삭제") @DeleteMapping("/{reviewId}") +<<<<<<< Updated upstream public BaseResponse deleteReview(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId) { +======= + public BaseResponse deleteReview(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId) { +>>>>>>> Stashed changes Long userId = SecurityUtil.getLoginUserId(); reviewService.deleteReview(userId, reviewId); return new BaseResponse<>(""); @@ -154,7 +166,11 @@ public BaseResponse> getReviewList( //todo 관리자 api로 이동 필요 */ @GetMapping("/refresh") +<<<<<<< Updated upstream public BaseResponse refreshReviewInfo() { +======= + public BaseResponse refreshReviewInfo() { +>>>>>>> Stashed changes refreshingService.refreshAllReviews(); return new BaseResponse<>(""); } diff --git a/src/main/java/ssu/eatssu/web/user/UserController.java b/src/main/java/ssu/eatssu/web/user/UserController.java index c1db8eb6..bd22f6df 100644 --- a/src/main/java/ssu/eatssu/web/user/UserController.java +++ b/src/main/java/ssu/eatssu/web/user/UserController.java @@ -76,7 +76,11 @@ public BaseResponse login(@Valid @RequestBody Login login) throws JsonPr */ @Operation(summary = "닉네임 수정", description = "닉네임 수정") @PatchMapping("/nickname") +<<<<<<< Updated upstream public BaseResponse updateNickname(@Valid @RequestBody NicknameEdit nicknameEdit) { +======= + public BaseResponse updateNickname(@Valid @RequestBody NicknameEdit nicknameEdit) { +>>>>>>> Stashed changes Long userId = getLoginUserId(); userService.updateNickname(userId, nicknameEdit.getNickname()); return new BaseResponse<>(""); @@ -105,7 +109,11 @@ public BaseResponse checkNicknameDuplicate(@Parameter(description = " */ @Operation(summary = "비밀번호 변경", description = "비밀번호 변경") @PatchMapping("/password") +<<<<<<< Updated upstream public BaseResponse updatePassword(@Valid @RequestBody PasswordChange passwordChange) { +======= + public BaseResponse updatePassword(@Valid @RequestBody PasswordChange passwordChange) { +>>>>>>> Stashed changes Long userId = getLoginUserId(); userService.updatePassword(userId, passwordChange.getPwd()); return new BaseResponse<>(""); diff --git a/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java b/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java new file mode 100644 index 00000000..65426a05 --- /dev/null +++ b/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java @@ -0,0 +1,62 @@ +package ssu.eatssu.web.userinquiry; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; +import ssu.eatssu.domain.UserInquiry; +import ssu.eatssu.domain.repository.UserInquiryRepository; +import ssu.eatssu.handler.response.BaseException; +import ssu.eatssu.handler.response.BaseResponse; +import ssu.eatssu.service.UserInquiryService; +import ssu.eatssu.slack.SlackChannel; +import ssu.eatssu.slack.SlackMessageFormat; +import ssu.eatssu.slack.SlackService; +import ssu.eatssu.utils.SecurityUtil; +import ssu.eatssu.web.userinquiry.dto.UserInquiryCreate; +import ssu.eatssu.web.userinquiry.dto.UserInquiryDetail; + +import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_FOUND_USER_INQUIRY; + +@Slf4j +@RestController +@RequestMapping("/inquiry") +@RequiredArgsConstructor +@Tag(name = "Inquiry", description = "문의 API") +public class UserInquiryController { + private final SlackService slackService; + private final UserInquiryRepository userInquiryRepository; + private final UserInquiryService userInquiryService; + + /** + * 문의 작성 + *

문의를 작성합니다.

+ */ + @Operation(summary = "문의 남기기", description = "문의 남기기") + @PostMapping("/") + public BaseResponse writeInquiry(@RequestBody UserInquiryCreate userInquiryCreate) { + Long userId = SecurityUtil.getLoginUserId(); + UserInquiry inquiry = userInquiryService.createUserInquiry(userId, userInquiryCreate.getContent()); + slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiry(inquiry) + , SlackChannel.USER_INQUIRY_CHANNEL); + return BaseResponse.success(); + } + + /** + * 문의 내용 조회 + *

문의 식별자(userInquiryId)에 해당하는 문의 내용을 조회합니다.

+ */ + @Operation(summary = "고객 문의 내역 조회", description = "고객 문의 내역 조회 By Id") + @GetMapping("/{userInquiryId}") + public BaseResponse getInquiryDetail(@Parameter(description = "userInquiryId") + @PathVariable("userInquiryId") Long userInquiryId) { + UserInquiry inquiry = + userInquiryRepository.findById(userInquiryId).orElseThrow(() -> new BaseException(NOT_FOUND_USER_INQUIRY)); + slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiry(inquiry) + , SlackChannel.USER_INQUIRY_CHANNEL); + return BaseResponse.success(UserInquiryDetail.fromUserInquiry(inquiry)); + } + +} From fc77bbcda5975ab26bb393915420ac234a9dfdfe Mon Sep 17 00:00:00 2001 From: SY2on Date: Wed, 3 Jan 2024 16:31:11 +0900 Subject: [PATCH 019/399] =?UTF-8?q?Feat:=20Swagger=20description=20?= =?UTF-8?q?=EB=B3=B4=EC=B6=A9=20=EB=B0=8F=20ApiResponse=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 --- .../java/ssu/eatssu/jwt/JwtTokenProvider.java | 2 +- .../ssu/eatssu/web/menu/MenuController.java | 54 +++++++++++-- .../eatssu/web/mypage/MyPageController.java | 20 ++++- .../ssu/eatssu/web/oauth/OauthController.java | 26 ++++++- .../eatssu/web/report/ReportController.java | 13 +++- .../eatssu/web/review/ReviewController.java | 67 ++++++++++++++-- .../ssu/eatssu/web/user/UserController.java | 76 +++++++++++++++---- .../userinquiry/UserInquiryController.java | 16 +++- 8 files changed, 234 insertions(+), 40 deletions(-) diff --git a/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java b/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java index 7fdcef32..b302c4df 100644 --- a/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java +++ b/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java @@ -72,7 +72,7 @@ public Tokens generateTokens(Authentication authentication){ subject = objectMapper.writeValueAsString(userPrincipalDto); } catch (JsonProcessingException e) { log.error("Cannot generate JWT Tokens \n errorTrackStace: {}", e.getStackTrace()); - throw new BaseException(BaseResponseStatus.INTERNAL_SERVER_ERROR); + throw new BaseException(BaseResponseStatus.INTERNAL_SERVER_ERROR); //todo : token값이 잘못됬다면? } Claims claims = Jwts.claims(); diff --git a/src/main/java/ssu/eatssu/web/menu/MenuController.java b/src/main/java/ssu/eatssu/web/menu/MenuController.java index 07853f2a..483b3cc1 100644 --- a/src/main/java/ssu/eatssu/web/menu/MenuController.java +++ b/src/main/java/ssu/eatssu/web/menu/MenuController.java @@ -2,6 +2,10 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -38,7 +42,16 @@ public class MenuController { *

변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회한다. * 일반적으로 학생식당과 도담의 경우 식단 여러개가 조회되고 기숙사식당은 한개만 조회된다.

*/ - @Operation(summary = "변동메뉴 식단 리스트 조회 By 식당", description = "변동메뉴 식단 리스트 조회(학생식당, 도담, 기숙사 식당)") + @Operation(summary = "변동메뉴 식단 리스트 조회", description = """ + 변동메뉴 식단 리스트를 조회하는 API 입니다. + 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회합니다. + 일반적으로 학생식당과 도담의 경우 식단 여러개가 조회되고 기숙사식당은 한개만 조회됩니다.) + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @GetMapping("/today-meal") //todo today-meal은 아닌것 같음 public BaseResponse> getMealList(@Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") String date, @@ -64,7 +77,15 @@ public BaseResponse> getMealList(@Parameter(description = "날 * 고정 메뉴 목록 조회 *

메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 목록을 조회한다.

*/ - @Operation(summary = "고정 메뉴 리스트 조회", description = "고정 메뉴 리스트 조회(푸드코트, 스낵코너, 더 키친)") + @Operation(summary = "고정 메뉴 리스트 조회", description = """ + 고정 메뉴 리스트를 조회하는 API 입니다. + 메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 리스트를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @GetMapping("/fix-menu") public BaseResponse getFixMenuList(@Parameter(description = "식당이름") @RequestParam("restaurant") RestaurantName restaurantName) { @@ -83,7 +104,17 @@ public BaseResponse getFixMenuList(@Parameter(description = "식당 *

변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가. * 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리한다.(별도의 ErrorResponse 응답 X)

*/ - @Operation(summary = "특정 식당 식단 추가", description = "특정 식당의 식단 추가") + @Operation(summary = "식단 추가", description = """ + 식단을 추가하는 API 입니다.

+ 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

+ 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 추가 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @PostMapping("/") public BaseResponse addMeal(@Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") String date, @@ -113,7 +144,14 @@ public BaseResponse addMeal(@Parameter(description = "날짜(yyyyMMdd)") * 식단의 메뉴정보 목록 조회 *

식단식별자(mealId)로 식단에 속하는 메뉴정보(menuId, name) 목록을 조회한다.

*/ - @Operation(summary = "메뉴 정보 조회 By mealId", description = "메뉴 정보(Id, name) 조회 By mealId") + @Operation(summary = "메뉴 정보 리스트 조회", description = """ + 메뉴 정보 리스트를 조회하는 API 입니다.

+ 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @GetMapping("/menus") public BaseResponse getMenuListInMeal(@Parameter(description = "mealId") @RequestParam("mealId") Long mealId) { @@ -125,9 +163,13 @@ public BaseResponse getMenuListInMeal(@Parameter(description = "mealId * 식단 삭제 *

식단식별자(mealId)에 해당하는 식단을 삭제한다.

*/ - @Operation(summary = "식단 삭제", description = "mealId로 meal 삭제") + @Operation(summary = "식단 삭제", description = "식단을 삭제하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 삭제 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @DeleteMapping("/meal/{mealId}") - public BaseResponse deleteMeal(@Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { + public BaseResponse deleteMeal(@Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { //todo : 관리자 API List menuIdList = menuService.deleteMeal(mealId); menuService.cleanupGarbageMenu(menuIdList); return BaseResponse.success(); diff --git a/src/main/java/ssu/eatssu/web/mypage/MyPageController.java b/src/main/java/ssu/eatssu/web/mypage/MyPageController.java index 54c57678..e95516a7 100644 --- a/src/main/java/ssu/eatssu/web/mypage/MyPageController.java +++ b/src/main/java/ssu/eatssu/web/mypage/MyPageController.java @@ -3,6 +3,10 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -14,6 +18,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponse; import ssu.eatssu.service.MyPageService; import ssu.eatssu.utils.SecurityUtil; @@ -32,13 +37,16 @@ public class MyPageController { /** * 내가 쓴 리뷰 목록 조회 */ - @Operation(summary = "내가 쓴 리뷰 모아보기", description = "내가 쓴 리뷰 리스트") + @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @GetMapping("/myreview") public BaseResponse> getMyReviewList( @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable - ) { + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable) { Long userId = SecurityUtil.getLoginUserId(); SliceDto myReviewList = myPageService.findMyReviewList(userId, pageable, lastReviewId); return BaseResponse.success(myReviewList); @@ -47,7 +55,11 @@ public BaseResponse> getMyReviewList( /** * 마이페이지 정보 조회 */ - @Operation(summary = "마이페이지 정보", description = "마이페이지 정보") + @Operation(summary = "마이페이지 정보 조회", description = "마이페이지 정보를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @GetMapping("/info") public BaseResponse getMyPageInfo() { Long userId = SecurityUtil.getLoginUserId(); diff --git a/src/main/java/ssu/eatssu/web/oauth/OauthController.java b/src/main/java/ssu/eatssu/web/oauth/OauthController.java index 6b3f6b03..8f0c2b7f 100644 --- a/src/main/java/ssu/eatssu/web/oauth/OauthController.java +++ b/src/main/java/ssu/eatssu/web/oauth/OauthController.java @@ -1,6 +1,10 @@ package ssu.eatssu.web.oauth; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -10,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.repository.UserRepository; +import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponse; import ssu.eatssu.service.OauthService; import ssu.eatssu.utils.SecurityUtil; @@ -32,9 +37,15 @@ public class OauthController { private final SecurityUtil securityUtil; /** - * 카카오 로그인, 회원가입 + * 카카오 회원가입, 로그인 */ - @Operation(summary = "카카오 로그인, 회원가입", description = "카카오 로그인, 회원가입") + @Operation(summary = "카카오 회원가입, 로그인", description = """ + 카카오 회원가입, 로그인 API 입니다.

+ 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "카카오 회원가입/로그인 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @PostMapping("/kakao") public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLogin login) { Tokens tokens = oauthService.kakaoLogin(login.getEmail(), login.getProviderId()); @@ -42,9 +53,16 @@ public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLogin login) { } /** - * 애플 로그인, 회원가입 + * 애플 회원가입, 로그인 */ - @Operation(summary = "애플 로그인, 회원가입", description = "애플 로그인, 회원가입") + @Operation(summary = "애플 회원가입, 로그인", description = """ + 애플 로그인, 회원가입 API 입니다.

+ 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "애플 회원가입/로그인 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @PostMapping("/apple") public BaseResponse appleLogin(@Valid @RequestBody AppleLogin login) throws NoSuchAlgorithmException, InvalidKeySpecException { diff --git a/src/main/java/ssu/eatssu/web/report/ReportController.java b/src/main/java/ssu/eatssu/web/report/ReportController.java index 3dab5c45..a955b179 100644 --- a/src/main/java/ssu/eatssu/web/report/ReportController.java +++ b/src/main/java/ssu/eatssu/web/report/ReportController.java @@ -1,6 +1,10 @@ package ssu.eatssu.web.report; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -9,6 +13,7 @@ import ssu.eatssu.domain.enums.ReviewReportType; import ssu.eatssu.domain.repository.ReviewRepository; import ssu.eatssu.domain.repository.UserRepository; +import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponse; import ssu.eatssu.service.ReportService; import ssu.eatssu.slack.SlackChannel; @@ -36,7 +41,7 @@ public class ReportController { /** * 리뷰 신고 사유 종류 조회 */ - @Operation(summary = "리뷰 신고 사유 받아오기", description = "리뷰 신고 사유 받아오기") + @Operation(summary = "리뷰 신고 사유 종류 조회", description = "리뷰 신고 사유 종류를 조회하는 API 입니다.") @GetMapping("/type") public BaseResponse> getReportType() { List reportInfo = new ArrayList<>(); @@ -48,8 +53,12 @@ public BaseResponse> getReportType() { /** * 리뷰 신고 */ - @Operation(summary = "리뷰 신고하기", description = "리뷰 신고하기") + @Operation(summary = "리뷰 신고하기", description = "리뷰를 신고하는 API 입니다.") @PostMapping("/") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 신고 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) public BaseResponse reportReview(@RequestBody ReviewReportCreate reviewReportCreate) { Long userId = SecurityUtil.getLoginUserId(); ReviewReport report = reportService.reportReview(userId, reviewReportCreate); diff --git a/src/main/java/ssu/eatssu/web/review/ReviewController.java b/src/main/java/ssu/eatssu/web/review/ReviewController.java index ad057c05..5debb522 100644 --- a/src/main/java/ssu/eatssu/web/review/ReviewController.java +++ b/src/main/java/ssu/eatssu/web/review/ReviewController.java @@ -3,6 +3,10 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -45,7 +49,17 @@ public class ReviewController { * 리뷰 작성 *

메뉴식별자(menuId)에 해당하는 메뉴에 리뷰를 작성한다. 사진은 여러장 첨부 가능하다.

*/ - @Operation(summary = "리뷰 작성", description = "리뷰 작성") + @Operation(summary = "리뷰 작성", description = """ + 리뷰를 작성하는 API 입니다.

+ reviewCreate는 application/json, multipartFileList는 multipart/form-data로 요청해주세요.

+ 사진은 여러장 첨부 가능합니다.(기획상으로는 한 장만 첨부하도록 제한이 있지만 API 스펙 자체는 여러 장 첨부 가능) + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @PostMapping(value = "/{menuId}", consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, produces = MediaType.APPLICATION_JSON_VALUE) @@ -62,7 +76,16 @@ public BaseResponse writeReview(@Parameter(description = "menuId") @PathVaria * 리뷰 수정(글 수정) *

리뷰식별자(reviewId)에 해당하는 리뷰 속 글을 수정한다. 사진은 수정 X

*/ - @Operation(summary = "리뷰 수정(글 수정)", description = "리뷰 수정(글 수정)") + @Operation(summary = "리뷰 수정(글 수정)", description = """ + 리뷰 내용을 수정하는 API 입니다.

+ 글 수정만 가능하며 사진 수정은 지원하지 않습니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 수정 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @PatchMapping("/{reviewId}") public BaseResponse updateReview(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, @@ -76,7 +99,13 @@ public BaseResponse updateReview(@Parameter(description = "reviewId") * 리뷰 삭제 *

리뷰식별자(reviewId)에 해당하는 리뷰를 삭제한다.

*/ - @Operation(summary = "리뷰 삭제", description = "리뷰 삭제") + @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @DeleteMapping("/{reviewId}") public BaseResponse deleteReview(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId) { Long userId = SecurityUtil.getLoginUserId(); @@ -89,7 +118,19 @@ public BaseResponse deleteReview(@Parameter(description = "reviewId") @PathVa *

식단(변동메뉴)리뷰 조회 시 메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 평점 별 개수를 조회한다.
* 고정메뉴 리뷰 조회 시 메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 평점 별 개수를 조회한다.

*/ - @Operation(summary = "리뷰 정보 조회(평점 등등)", description = "리뷰 정보 조회(평점 등등)") + @Operation(summary = "리뷰 정보 조회(평점 등등)", description = """ + 리뷰 정보를 조회하는 API 입니다.

+ menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

+ 고정메뉴 리뷰 조회 시 메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 평점 별 개수를 조회합니다. + menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

+ 식단(변동메뉴)리뷰 조회 시 메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 평점 별 개수를 조회합니다.

+ """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @GetMapping("/info") public BaseResponse getMenuReviewInfo(@Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") MenuTypeGroup menuTypeGroup, @@ -117,11 +158,23 @@ public BaseResponse getMenuReviewInfo(@Parameter(description = " } /** - * 리뷰 리스트 조회 - *

커서 기반 페이지네이션으로 리뷰 리스트를 조회한다.
+ * 리뷰 목록 조회 + *

커서 기반 페이지네이션으로 리뷰 목록을 조회한다.
* pageable default={size=20, sort=date, direction=desc}

*/ - @Operation(summary = "리뷰 리스트 조회", description = "리뷰 리스트 조회") + @Operation(summary = "리뷰 리스트 조회", description = """ + 리뷰 리스트를 조회하는 API 입니다.

+ menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

+ menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

+ 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

+ 페이징 기본 값 = {size=20, sort=date, direction=desc}

+ """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @GetMapping("/list") public BaseResponse> getReviewList( @Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") MenuTypeGroup menuTypeGroup, diff --git a/src/main/java/ssu/eatssu/web/user/UserController.java b/src/main/java/ssu/eatssu/web/user/UserController.java index 0974b71f..d39bb062 100644 --- a/src/main/java/ssu/eatssu/web/user/UserController.java +++ b/src/main/java/ssu/eatssu/web/user/UserController.java @@ -3,12 +3,17 @@ import com.fasterxml.jackson.core.JsonProcessingException; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.repository.UserRepository; +import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponse; import ssu.eatssu.service.UserService; import ssu.eatssu.utils.SecurityUtil; @@ -32,9 +37,16 @@ public class UserController { * 회원가입 *

자체 회원가입

* - * @deprecated 현재는 카카오, 애플 로그인만 사용 중입니다. + * @deprecated 현재는 카카오, 애플 회원가입만 사용 중입니다. */ - @Operation(summary = "회원가입", description = "회원가입.") + @Deprecated(since = "개발 초기에 사용했지만 출시하면서 OAuth 만 사용하기로 기획이 변경됨") + @Operation(summary = "자체 회원가입", description = "자체 회원가입 API 입니다. \n 회원가입 후 자동 로그인됩니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "회원가입 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @PostMapping("/join") public BaseResponse join(@Valid @RequestBody Join join) throws JsonProcessingException { Tokens tokens = userService.join(join.getEmail(), join.getPwd()); @@ -43,10 +55,16 @@ public BaseResponse join(@Valid @RequestBody Join join) throws JsonProce /** * 이메일 중복 검사 - *

중복되지 않은 이메일인 경우 true를 반환합니다.

+ *

중복되지 않은 이메일인 경우 true 를 반환합니다.

*/ - @Operation(summary = "이메일 중복 체크", description = "통과하면 true, 존재하는 이메일이면 errorCode 2011") - @PostMapping("/user-emails/{email}/exist") + @Operation(summary = "이메일 중복 체크", description = """ + 이메일 중복 체크 API 입니다.

+ 중복되지 않은 이메일이면 true 를 반환합니다 + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "중복되지 않은 이메일", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/user-emails/{email}/exist") //todo: 중복인 경우 error throw, 중복 아니면 ApiReposne return public BaseResponse checkEmailDuplicate(@Parameter(description = "이메일") @PathVariable String email) { boolean duplicated = userRepository.existsByEmail(email); if (!duplicated) { @@ -58,10 +76,17 @@ public BaseResponse checkEmailDuplicate(@Parameter(description = "이 } /** - * 공통 로그인 - *

자체, 카카오, 애플 로그인 공용으로 사용합니다.

+ * 로그인 + *

자체 로그인

+ * + * @deprecated 현재는 카카오, 애플 로그인만 사용 중입니다. */ - @Operation(summary = "로그인", description = "로그인") + @Deprecated(since = "개발 초기에 사용했지만 출시하면서 OAuth 만 사용하기로 기획이 변경됨") + @Operation(summary = "자체 로그인", description = "자체 로그인 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "로그인 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @PostMapping("/login") public BaseResponse login(@Valid @RequestBody Login login) throws JsonProcessingException { // todo: // exceiption service단에서 처리 @@ -73,7 +98,11 @@ public BaseResponse login(@Valid @RequestBody Login login) throws JsonPr * 닉네임 수정 *

닉네임을 수정합니다.

*/ - @Operation(summary = "닉네임 수정", description = "닉네임 수정") + @Operation(summary = "닉네임 수정", description = "닉네임 수정 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "닉네임 수정 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @PatchMapping("/nickname") public BaseResponse updateNickname(@Valid @RequestBody NicknameEdit nicknameEdit) { Long userId = getLoginUserId(); @@ -83,9 +112,15 @@ public BaseResponse updateNickname(@Valid @RequestBody NicknameEdit nicknameE /** * 닉네임 중복 검사 - *

중복되지 않은 닉네임인 경우 true를 반환합니다.

+ *

중복되지 않은 닉네임인 경우 true 를 반환합니다.

*/ - @Operation(summary = "닉네임 중복 체크", description = "통과하면 true, 존재하는 닉네임이면 errorCode 2012") + @Operation(summary = "닉네임 중복 체크", description = """ + 닉네임 중복 체크 API 입니다.

+ 중복되지 않은 닉네임이면 true 를 반환합니다 + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @GetMapping("/check-nickname") public BaseResponse checkNicknameDuplicate(@Parameter(description = "닉네임") @RequestParam(value = "nickname") String nickname) { @@ -101,8 +136,14 @@ public BaseResponse checkNicknameDuplicate(@Parameter(description = " /** * 비밀번호 변경 *

비밀번호를 변경합니다.

+ * + * @deprecated 현재는 카카오, 애플 로그인만 사용 중입니다. */ - @Operation(summary = "비밀번호 변경", description = "비밀번호 변경") + @Deprecated(since = "개발 초기에 사용했지만 출시하면서 OAuth 만 사용하기로 기획이 변경됨") + @Operation(summary = "비밀번호 변경", description = "비밀번호 변경 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "비밀번호 변경 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @PatchMapping("/password") public BaseResponse updatePassword(@Valid @RequestBody PasswordChange passwordChange) { Long userId = getLoginUserId(); @@ -114,7 +155,10 @@ public BaseResponse updatePassword(@Valid @RequestBody PasswordChange passwor * AccessToken, RefreshToken 재발급 *

유효한 Token을 받으면 AccessToken, RefreshToken을 새로 발급합니다.

*/ - @Operation(summary = "accessToken, refreshToken 재발급", description = "accessToken, refreshToken 재발급") + @Operation(summary = "Tokens 재발급", description = "accessToken, refreshToken 재발급 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "토큰 재발급 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @PostMapping("/token/reissue") public BaseResponse refreshToken() throws JsonProcessingException { Tokens tokens = userService.refreshTokens(getLoginUser()); @@ -125,7 +169,11 @@ public BaseResponse refreshToken() throws JsonProcessingException { * 유저 탈퇴 *

유저를 탈퇴처리합니다.

*/ - @Operation(summary = "유저 탈퇴", description = "탈퇴 성공하면 true 반환") + @Operation(summary = "유저 탈퇴", description = "유저 탈퇴 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @DeleteMapping("/signout") public BaseResponse signout() { userService.signout(getLoginUserId()); diff --git a/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java b/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java index 65426a05..05191271 100644 --- a/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java +++ b/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java @@ -2,6 +2,10 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -34,7 +38,11 @@ public class UserInquiryController { * 문의 작성 *

문의를 작성합니다.

*/ - @Operation(summary = "문의 남기기", description = "문의 남기기") + @Operation(summary = "문의 작성", description = "문의를 작성하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "문의 작성 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @PostMapping("/") public BaseResponse writeInquiry(@RequestBody UserInquiryCreate userInquiryCreate) { Long userId = SecurityUtil.getLoginUserId(); @@ -48,7 +56,11 @@ public BaseResponse writeInquiry(@RequestBody UserInquiryCreate userInquiryCr * 문의 내용 조회 *

문의 식별자(userInquiryId)에 해당하는 문의 내용을 조회합니다.

*/ - @Operation(summary = "고객 문의 내역 조회", description = "고객 문의 내역 조회 By Id") + @Operation(summary = "문의 내용 조회", description = "문의 내용을 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "문의 작성 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 문의", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) @GetMapping("/{userInquiryId}") public BaseResponse getInquiryDetail(@Parameter(description = "userInquiryId") @PathVariable("userInquiryId") Long userInquiryId) { From 252615a70fb4d519a84c7be75fea312616c6ae99 Mon Sep 17 00:00:00 2001 From: SY2on Date: Wed, 3 Jan 2024 20:50:31 +0900 Subject: [PATCH 020/399] =?UTF-8?q?Feat:=20SecurityFilter=20Layer=20?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EB=B0=9C=EC=83=9D=ED=95=98=EB=8A=94=20401?= =?UTF-8?q?,=20403=20Error=20Response=20=EC=BB=A4=EC=8A=A4=ED=85=80=20Base?= =?UTF-8?q?Response=20=ED=98=95=EC=8B=9D=EC=9C=BC=EB=A1=9C=20=ED=86=B5?= =?UTF-8?q?=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/config/SecurityConfig.java | 9 +++- .../handler/JwtAccessDeniedHandler.java | 41 ++++++++++++++++++ .../handler/JwtAuthenticationEntryPoint.java | 42 +++++++++++++++++++ .../handler/response/BaseResponseStatus.java | 4 +- .../eatssu/jwt/JwtAuthenticationFilter.java | 1 + .../java/ssu/eatssu/jwt/JwtTokenProvider.java | 13 +++--- .../ssu/eatssu/web/user/UserController.java | 2 +- 7 files changed, 100 insertions(+), 12 deletions(-) create mode 100644 src/main/java/ssu/eatssu/handler/JwtAccessDeniedHandler.java create mode 100644 src/main/java/ssu/eatssu/handler/JwtAuthenticationEntryPoint.java diff --git a/src/main/java/ssu/eatssu/config/SecurityConfig.java b/src/main/java/ssu/eatssu/config/SecurityConfig.java index bf109d0b..be97f1ae 100644 --- a/src/main/java/ssu/eatssu/config/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/config/SecurityConfig.java @@ -9,6 +9,8 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import ssu.eatssu.handler.JwtAccessDeniedHandler; +import ssu.eatssu.handler.JwtAuthenticationEntryPoint; import ssu.eatssu.jwt.JwtAuthenticationFilter; import ssu.eatssu.jwt.JwtTokenProvider; @@ -26,6 +28,8 @@ public class SecurityConfig { }; private final JwtTokenProvider jwtTokenProvider; + private final JwtAccessDeniedHandler jwtAccessDeniedHandler; + private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; @Bean public PasswordEncoder passwordEncoder() { @@ -42,7 +46,10 @@ protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .requestMatchers(AUTH_WHITELIST).permitAll() .anyRequest().authenticated() .and().addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), - UsernamePasswordAuthenticationFilter.class)); + UsernamePasswordAuthenticationFilter.class)) + .exceptionHandling() + .accessDeniedHandler(jwtAccessDeniedHandler) + .authenticationEntryPoint(jwtAuthenticationEntryPoint); return http.build(); } diff --git a/src/main/java/ssu/eatssu/handler/JwtAccessDeniedHandler.java b/src/main/java/ssu/eatssu/handler/JwtAccessDeniedHandler.java new file mode 100644 index 00000000..d3acf661 --- /dev/null +++ b/src/main/java/ssu/eatssu/handler/JwtAccessDeniedHandler.java @@ -0,0 +1,41 @@ +package ssu.eatssu.handler; + +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.http.MediaType; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.web.access.AccessDeniedHandler; +import org.springframework.stereotype.Component; +import ssu.eatssu.handler.response.BaseResponse; +import ssu.eatssu.handler.response.BaseResponseStatus; + +import java.io.IOException; + +/** + * jwt 인가 실패 시 처리 + * HttpStatus 403 + */ +@Component +@RequiredArgsConstructor +public class JwtAccessDeniedHandler implements AccessDeniedHandler { + + private final ObjectMapper objectMapper; + + @Override + public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException { + + BaseResponseStatus responseStatus = BaseResponseStatus.FORBIDDEN; + + BaseResponse body = BaseResponse.fail(responseStatus); + String bodyString = objectMapper.writeValueAsString(body); + + //response setting + response.setStatus(responseStatus.getHttpStatus().value()); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write(bodyString); + } +} diff --git a/src/main/java/ssu/eatssu/handler/JwtAuthenticationEntryPoint.java b/src/main/java/ssu/eatssu/handler/JwtAuthenticationEntryPoint.java new file mode 100644 index 00000000..4ccfc258 --- /dev/null +++ b/src/main/java/ssu/eatssu/handler/JwtAuthenticationEntryPoint.java @@ -0,0 +1,42 @@ +package ssu.eatssu.handler; + +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.http.MediaType; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.stereotype.Component; +import ssu.eatssu.handler.response.BaseResponse; +import ssu.eatssu.handler.response.BaseResponseStatus; + +import java.io.IOException; + +/** + * jwt 인증 실패 시 처리 + * HttpStatus 401 + */ +@Component +@RequiredArgsConstructor +public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint { + + private final ObjectMapper objectMapper; + + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, + AuthenticationException authException) throws IOException, ServletException { + + BaseResponseStatus responseStatus = BaseResponseStatus.UNAUTHORIZED; + + BaseResponse body = BaseResponse.fail(responseStatus); + String bodyString = objectMapper.writeValueAsString(body); + + //response setting + response.setStatus(responseStatus.getHttpStatus().value()); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write(bodyString); + } +} diff --git a/src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java index 0efd69ce..385cfc62 100644 --- a/src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java @@ -31,8 +31,8 @@ public enum BaseResponseStatus { /** * 401 UNAUTHORIZED 권한없음(인증 실패) */ - UNAUTHORIZED(false, HttpStatus.UNAUTHORIZED, 401, "권한 인증에 실패했습니다."), - INVALID_TOKEN(false, HttpStatus.UNAUTHORIZED, 40101, "유효하지 않은 토큰 값입니다." ), + UNAUTHORIZED(false, HttpStatus.UNAUTHORIZED, 401, "인증에 실패했습니다."), + INVALID_TOKEN(false, HttpStatus.UNAUTHORIZED, 40101, "유효하지 않은 토큰 입니다." ), /** * 403 FORBIDDEN 권한없음(인가 실패) diff --git a/src/main/java/ssu/eatssu/jwt/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/jwt/JwtAuthenticationFilter.java index d213897e..255894c4 100644 --- a/src/main/java/ssu/eatssu/jwt/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/jwt/JwtAuthenticationFilter.java @@ -34,6 +34,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha Authentication authentication = jwtTokenProvider.getAuthentication(token); SecurityContextHolder.getContext().setAuthentication(authentication); } + chain.doFilter(request, response); } diff --git a/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java b/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java index b302c4df..95a4654e 100644 --- a/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java +++ b/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java @@ -130,17 +130,13 @@ public Authentication getAuthentication(String token) throws JsonProcessingExcep } //토큰 유효성 검증 - public boolean validateToken(String token) { + public boolean validateToken(String token) throws BaseException{ try { Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token); - return true; - }catch (ExpiredJwtException e){ - log.error("만료된 토큰입니다."); + } catch (Exception e) { + return false; } - catch (Exception e) { - log.error("유효하지 않은 토큰입니다."); - } - return false; + return true; } // 토큰 만료 시간 확인(밀리세컨드) @@ -154,6 +150,7 @@ public Long getExpiration(String accessToken) { .getExpiration(); Long now = new Date().getTime(); + return (expiration.getTime() - now); } diff --git a/src/main/java/ssu/eatssu/web/user/UserController.java b/src/main/java/ssu/eatssu/web/user/UserController.java index d39bb062..9727ffc6 100644 --- a/src/main/java/ssu/eatssu/web/user/UserController.java +++ b/src/main/java/ssu/eatssu/web/user/UserController.java @@ -155,7 +155,7 @@ public BaseResponse updatePassword(@Valid @RequestBody PasswordChange passwor * AccessToken, RefreshToken 재발급 *

유효한 Token을 받으면 AccessToken, RefreshToken을 새로 발급합니다.

*/ - @Operation(summary = "Tokens 재발급", description = "accessToken, refreshToken 재발급 API 입니다.") + @Operation(summary = "토큰 재발급", description = "accessToken, refreshToken 재발급 API 입니다.") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "토큰 재발급 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) From f0de926f3abadf0cf312ea85cb8e20a209dd8227 Mon Sep 17 00:00:00 2001 From: SY2on Date: Thu, 4 Jan 2024 02:07:46 +0900 Subject: [PATCH 021/399] =?UTF-8?q?Refactor:=20OauthService=20=EC=A0=95?= =?UTF-8?q?=EB=8F=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/response/BaseResponseStatus.java | 1 + .../java/ssu/eatssu/jwt/JwtTokenProvider.java | 10 +- .../java/ssu/eatssu/service/OauthService.java | 222 ++++++++++++------ .../java/ssu/eatssu/service/UserService.java | 4 +- .../java/ssu/eatssu/service/vo/OauthInfo.java | 3 + 5 files changed, 162 insertions(+), 78 deletions(-) create mode 100644 src/main/java/ssu/eatssu/service/vo/OauthInfo.java diff --git a/src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java index 385cfc62..2f3e5fa3 100644 --- a/src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java @@ -27,6 +27,7 @@ public enum BaseResponseStatus { FAILED_VALIDATION(false, HttpStatus.BAD_REQUEST,40007,"입력값이 누락되었거나, 부적절한 입력 값이 있습니다."), INVALID_DATE(false, HttpStatus.BAD_REQUEST, 40008, "잘못된 날짜형식입니다."), NOT_SUPPORT_RESTAURANT(false, HttpStatus.BAD_REQUEST, 40009, "해당 식당은 지원하지 않습니다."), + INVALID_IDENTITY_TOKEN(false, HttpStatus.BAD_REQUEST, 40010, "잘못된 identityToken 입니다."), /** * 401 UNAUTHORIZED 권한없음(인증 실패) diff --git a/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java b/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java index 95a4654e..36299c46 100644 --- a/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java +++ b/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java @@ -36,6 +36,8 @@ public class JwtTokenProvider { private final long refreshTokenValidityInMilliseconds; private Key key; + private final ObjectMapper objectMapper = new ObjectMapper(); + /*@Autowired private final RedisTemplate redisTemplate;*/ @@ -59,8 +61,6 @@ public void setKey(){ //jwt.secret을 이요하여 key생성 //토큰 발급 public Tokens generateTokens(Authentication authentication){ - ObjectMapper objectMapper = new ObjectMapper(); - // 권한 가져오기 String authorities = authentication.getAuthorities().stream() .map(GrantedAuthority::getAuthority) @@ -71,8 +71,9 @@ public Tokens generateTokens(Authentication authentication){ try{ subject = objectMapper.writeValueAsString(userPrincipalDto); } catch (JsonProcessingException e) { - log.error("Cannot generate JWT Tokens \n errorTrackStace: {}", e.getStackTrace()); - throw new BaseException(BaseResponseStatus.INTERNAL_SERVER_ERROR); //todo : token값이 잘못됬다면? + log.error("Cannot generate JWT Tokens because an error occurred during json parsing."); + log.error("errorTrackStace: {}", (Object) e.getStackTrace()); + throw new BaseException(BaseResponseStatus.INTERNAL_SERVER_ERROR); } Claims claims = Jwts.claims(); @@ -121,7 +122,6 @@ public Authentication getAuthentication(String token) throws JsonProcessingExcep .toList(); String subject = claims.getSubject(); - ObjectMapper objectMapper = new ObjectMapper(); UserPrincipalDto userPrincipalDto = objectMapper.readValue(subject, UserPrincipalDto.class); CustomUserDetails principal = new CustomUserDetails(userPrincipalDto.getId(),userPrincipalDto.getEmail(), "", authorities.get(0)); diff --git a/src/main/java/ssu/eatssu/service/OauthService.java b/src/main/java/ssu/eatssu/service/OauthService.java index 6f7aa411..ec79e155 100644 --- a/src/main/java/ssu/eatssu/service/OauthService.java +++ b/src/main/java/ssu/eatssu/service/OauthService.java @@ -23,8 +23,10 @@ import ssu.eatssu.domain.User; import ssu.eatssu.domain.enums.OauthProvider; import ssu.eatssu.domain.repository.UserRepository; +import ssu.eatssu.handler.response.BaseResponseStatus; import ssu.eatssu.jwt.JwtTokenProvider; import ssu.eatssu.handler.response.BaseException; +import ssu.eatssu.service.vo.OauthInfo; import ssu.eatssu.web.oauth.dto.AppleKeys; import ssu.eatssu.web.user.dto.Tokens; @@ -39,6 +41,7 @@ import java.util.Map; import java.util.Optional; +import static ssu.eatssu.handler.response.BaseResponseStatus.INVALID_IDENTITY_TOKEN; import static ssu.eatssu.handler.response.BaseResponseStatus.INVALID_TOKEN; @Slf4j @@ -46,32 +49,86 @@ @Service @Transactional public class OauthService { + private final UserRepository userRepository; private final PasswordEncoder passwordEncoder; + private final UserService userService; private final AuthenticationManagerBuilder authenticationManagerBuilder; private final JwtTokenProvider jwtTokenProvider; private final RestTemplate restTemplate; + /** + * 카카오 로그인 + */ + public Tokens kakaoLogin(String email, String providerId) { + + //가입 안된 유저일 경우 회원가입 진행 + User user = userRepository.findByProviderId(providerId) + .orElse(join(email, providerId, OauthProvider.KAKAO)); + + //OAuth 유저 용 비밀번호 생성 + String pwd = createOAuthUserPassword(OauthProvider.KAKAO, providerId); + + return userService.generateJwtTokens(user.getEmail(), pwd); + } + + /** + * 애플 로그인 + */ + public Tokens appleLogin(String identityToken) throws NoSuchAlgorithmException, InvalidKeySpecException { + + //애플 유저 정보 조회 + OauthInfo oauthInfo = getUserInfoFromApple(identityToken); + + //가입 안된 유저일 경우 회원가입 진행 + User user = userRepository.findByProviderId(oauthInfo.providerId()) + .orElse(join(oauthInfo.email(), oauthInfo.providerId(), OauthProvider.APPLE)); + + //이메일 갱신 + updateAppleUserEmail(user, oauthInfo.email()); + + //OAuth 유저 용 비밀번호 생성 + String pwd = createOAuthUserPassword(OauthProvider.APPLE, oauthInfo.providerId()); + + return userService.generateJwtTokens(user.getEmail(), pwd); + } + /** * 회원가입 */ private User join(String email, String providerId, OauthProvider provider) { + + //OAuth 유저 용 비밀번호 생성 String pwd = createOAuthUserPassword(provider, providerId); + + //비밀번호 encode String encodedPwd = passwordEncoder.encode(pwd); + + //회원가입 User user = User.oAuthJoin(email, encodedPwd, provider, providerId); + return userRepository.save(user); } /** - * email, pwd를 통해 JwtToken을 생성 //todo: JwtTokenProvider로 옮길까? + * OAuth 유저용 Password 생성 + * todo 자체회원가입 안써서 password 컬럼이 필요없는데 삭제? + */ + private String createOAuthUserPassword(OauthProvider provider, String providerId) { + + return provider.toString() + providerId; + } + + /** + * email, pwd 를 통해 JwtToken 을 생성 */ public Tokens generateJwtTokens(String email, String pwd){ // 1. email/pwd 를 기반으로 Authentication 객체 생성 - // 이때 authentication은 인증 여부를 확인하는 authenticated 값이 false + // 이때 authentication 은 인증 여부를 확인하는 authenticated 값이 false UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(email, pwd); // 2. 실제 검증 (사용자 비밀번호 체크) - // authenticate 메서드 실행 => CustomUserDetailsService 에서 만든 loadUserByUsername 메서드 실행 + // authenticate 메서드 실행 => CustomUserDetailsService 에서 만든 loadUserByUsername 메서드 실행 Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken); // 3. 인증 정보를 바탕으로 JWT 토큰 생성 @@ -79,99 +136,128 @@ public Tokens generateJwtTokens(String email, String pwd){ } /** - * OAuth 유저용 Password 생성 - * todo 자체회원가입 안써서 password 컬럼이 필요없는데 삭제? + * 애플 유저 private email -> 찐 email 로 갱신 */ - private String createOAuthUserPassword(OauthProvider provider, String providerId) { - return provider.toString() + providerId; + private void updateAppleUserEmail(User user, String email) { + + if(isHideEmail(user.getEmail())&&!isHideEmail(email)){ + user.updateEmail(email); + userRepository.save(user); + } } /** - * 카카오 로그인 + * 애플 로그인 - 유저 정보(providerId, email) 조회 */ - public Tokens kakaoLogin(String email, String providerId) { - Optional user = userRepository.findByProviderId(providerId); - if (user.isEmpty()) { - join(email, providerId, OauthProvider.KAKAO); - } - String pwd = createOAuthUserPassword(OauthProvider.KAKAO, providerId); - return generateJwtTokens(email, pwd); + private OauthInfo getUserInfoFromApple(String identityToken) { + + PublicKey publicKey = generatePublicKey(identityToken); + + return getUserInfoByPublicKey(identityToken, publicKey); } /** - * 애플 로그인 + * 애플 로그인 - PublicKey 를 통해 유저 정보(providerId, email) 조회 */ - public Tokens appleLogin(String identityToken) throws NoSuchAlgorithmException, InvalidKeySpecException { - OauthInfo oauthInfo = getUserInfoFromApple(identityToken); - Optional userOptional = userRepository.findByProviderId(oauthInfo.getProviderId()); - User user; - if (userOptional.isEmpty()) {//최초로그인시 회원가입 - user = join(oauthInfo.getEmail(), oauthInfo.getProviderId(), OauthProvider.APPLE); - }else{ - user = userOptional.get(); - if(isHideEmail(userOptional.get().getEmail())&&!isHideEmail(oauthInfo.getEmail())){ - user.updateEmail(oauthInfo.getEmail()); - userRepository.save(user); - } + private OauthInfo getUserInfoByPublicKey(String identityToken, PublicKey publicKey) { + + // identityToken 에서 publicKey 서명을 통해 Claims 를 추출한다. + Claims claims = Jwts.parserBuilder() + .setSigningKey(publicKey) + .build() + .parseClaimsJws(identityToken) + .getBody(); + + //Claims 에서 email, providerId(사용자 식별값) 를 추출한다. + try{ + String email = claims.get("email").toString(); + String providerId = claims.get("sub").toString(); + return new OauthInfo(email,providerId); + }catch (ExpiredJwtException exception){ + throw new BaseException(INVALID_IDENTITY_TOKEN); } - String pwd = createOAuthUserPassword(OauthProvider.APPLE, oauthInfo.getProviderId()); - return generateJwtTokens(user.getEmail(), pwd); } /** - * 애플 로그인 - 애플 API 호출을 통해 유저 정보(providerId, email) 조회 + * 애플 로그인 - PublicKey 를 생성한다. */ - private OauthInfo getUserInfoFromApple(String identityToken) throws NoSuchAlgorithmException, - InvalidKeySpecException { + private PublicKey generatePublicKey(String identityToken) { - //identity token decode - String[] decodeArray = identityToken.split("\\."); - String headerOfToken = new String(Base64.getDecoder().decode(decodeArray[0])); - Map headerMap; - try{ - headerMap = new ObjectMapper().readValue( - headerOfToken, new TypeReference>(){}); - } catch (JsonProcessingException e) { - throw new BaseException(INVALID_TOKEN); - } - URI uri = UriComponentsBuilder - .fromUriString("https://appleid.apple.com") - .path("/auth/keys") - .encode() - .build() - .toUri(); + //PublicKey 를 만들기 위한 재료가 되는 후보 Key 목록을 가져온다. + AppleKeys keys = getAppleKeys(); - ResponseEntity response = restTemplate.getForEntity(uri, AppleKeys.class); - AppleKeys keys = response.getBody(); - AppleKeys.Key matchedKey = keys.findKeyBy(headerMap.get("kid"), headerMap.get("alg")) - .orElseThrow(() -> new BaseException(INVALID_TOKEN)); + //후보 Key 에서 정답 Key 를 찾는다. + AppleKeys.Key matchedKey = selectMatchedKey(identityToken, keys); + + //정답 Key 를 통해 PublicKey 를 생성한다. + return generatePublicKeyWithApplePublicKey(matchedKey); + + } + /** + * 애플 로그인 - 정답 Key 를 통해 PublicKey 를 생성한다. + */ + private PublicKey generatePublicKeyWithApplePublicKey(AppleKeys.Key matchedKey) { + + //정답 키에서 PublicKey 의 재료가 될 n, e 값을 가져온다. byte[] nBytes = Base64.getUrlDecoder().decode(matchedKey.getN()); byte[] eBytes = Base64.getUrlDecoder().decode(matchedKey.getE()); - BigInteger n = new BigInteger(1, nBytes); BigInteger e = new BigInteger(1, eBytes); + // n, e 값을 통해 PublicKeySpec 을 세팅한다. RSAPublicKeySpec publicKeySpec = new RSAPublicKeySpec(n, e); - KeyFactory keyFactory = KeyFactory.getInstance(matchedKey.getKty()); - PublicKey publicKey = keyFactory.generatePublic(publicKeySpec); + //PublicKeySpec 을 통해 PublicKey 를 생성한다. try{ - Claims claims = Jwts.parserBuilder().setSigningKey(publicKey).build() - .parseClaimsJws(identityToken).getBody(); - String email = claims.get("email").toString(); - String providerId = claims.get("sub").toString(); - return new OauthInfo(email,providerId); + KeyFactory keyFactory = KeyFactory.getInstance(matchedKey.getKty()); + return keyFactory.generatePublic(publicKeySpec); + } catch (NoSuchAlgorithmException | InvalidKeySpecException ex){ + throw new BaseException(BaseResponseStatus.INVALID_IDENTITY_TOKEN); + } + } - }catch (ExpiredJwtException exception){ - log.info(exception.getMessage()); - throw new BaseException(INVALID_TOKEN); + /** + * 애플 로그인 - 헤더에서 뽑은 정보를 통해 후보 Key 에서 정답 Key 를 찾아서 반환한다. + */ + private AppleKeys.Key selectMatchedKey(String identityToken, AppleKeys candidateKeys) { + + //identity token 에서 header 를 뽑아서 decode 한다. + String header = identityToken.split("\\.")[0]; + String decodedHeader = new String(Base64.getDecoder().decode(header)); + + //decode 된 header 정보를 통해 정답키의 key id, algorithm 정보를 가져온다. + Map headerMap; + try{ + headerMap = new ObjectMapper().readValue(decodedHeader, new TypeReference>(){}); + } catch (JsonProcessingException e) { + throw new BaseException(BaseResponseStatus.INVALID_IDENTITY_TOKEN); } + + //후보키 중에서 정답키를 찾아서 반환한다. + return candidateKeys.findKeyBy(headerMap.get("kid"), headerMap.get("alg")) + .orElseThrow(() -> new BaseException(BaseResponseStatus.INVALID_IDENTITY_TOKEN)); + } + + /** + * 애플 로그인 - Apple api 호출을 통해 apple 후보 key 리스트를 받아온다. + */ + private AppleKeys getAppleKeys() { + + URI uri = UriComponentsBuilder + .fromUriString("https://appleid.apple.com") + .path("/auth/keys") + .encode() + .build() + .toUri(); + + ResponseEntity response = restTemplate.getForEntity(uri, AppleKeys.class); + return response.getBody(); } /** - * 애플 로그인 - 이메일 가리기 선택한지 확인 + * 애플 로그인 - 이메일 가리기 여부 확인 */ private boolean isHideEmail(String email){ if(email.length()>25){ @@ -181,10 +267,4 @@ private boolean isHideEmail(String email){ } } - @AllArgsConstructor - @Getter - private static class OauthInfo{ - private String email; - private String providerId; - } } diff --git a/src/main/java/ssu/eatssu/service/UserService.java b/src/main/java/ssu/eatssu/service/UserService.java index 898118c1..a2cd2d15 100644 --- a/src/main/java/ssu/eatssu/service/UserService.java +++ b/src/main/java/ssu/eatssu/service/UserService.java @@ -69,9 +69,9 @@ public void updateNickname(Long userId, String nickname) { } /** - * email, pwd를 통해 JwtToken을 생성 //todo: JwtTokenProvider로 옮길까? + * email, pwd 를 통해 JwtToken 을 생성 */ - public Tokens generateJwtTokens(String email, String pwd) throws JsonProcessingException { + public Tokens generateJwtTokens(String email, String pwd) { // 1. email/pwd 를 기반으로 Authentication 객체 생성 // 이때 authentication은 인증 여부를 확인하는 authenticated 값이 false UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(email, pwd); diff --git a/src/main/java/ssu/eatssu/service/vo/OauthInfo.java b/src/main/java/ssu/eatssu/service/vo/OauthInfo.java new file mode 100644 index 00000000..33af4335 --- /dev/null +++ b/src/main/java/ssu/eatssu/service/vo/OauthInfo.java @@ -0,0 +1,3 @@ +package ssu.eatssu.service.vo; + +public record OauthInfo(String email, String providerId) {} \ No newline at end of file From 359ff31f8db72a42d80541cb9750afac06121716 Mon Sep 17 00:00:00 2001 From: SY2on Date: Thu, 4 Jan 2024 02:35:07 +0900 Subject: [PATCH 022/399] =?UTF-8?q?Remove:=20OpenHour=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=20=EC=9D=B4=EC=A0=9C=20=EC=95=88=EC=94=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/QOpenHour.java | 57 ------------------- .../ssu/eatssu/domain/QRestaurant.java | 4 -- src/main/java/ssu/eatssu/domain/OpenHour.java | 31 ---------- .../java/ssu/eatssu/domain/Restaurant.java | 5 -- .../eatssu/web/menu/dto/RestaurantInfo.java | 45 --------------- 5 files changed, 142 deletions(-) delete mode 100644 src/main/generated/ssu/eatssu/domain/QOpenHour.java delete mode 100644 src/main/java/ssu/eatssu/domain/OpenHour.java delete mode 100644 src/main/java/ssu/eatssu/web/menu/dto/RestaurantInfo.java diff --git a/src/main/generated/ssu/eatssu/domain/QOpenHour.java b/src/main/generated/ssu/eatssu/domain/QOpenHour.java deleted file mode 100644 index aa24c1c8..00000000 --- a/src/main/generated/ssu/eatssu/domain/QOpenHour.java +++ /dev/null @@ -1,57 +0,0 @@ -package ssu.eatssu.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QOpenHour is a Querydsl query type for OpenHour - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QOpenHour extends EntityPathBase { - - private static final long serialVersionUID = -1320396512L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QOpenHour openHour = new QOpenHour("openHour"); - - public final EnumPath dayType = createEnum("dayType", ssu.eatssu.domain.enums.DayType.class); - - public final NumberPath id = createNumber("id", Long.class); - - public final QRestaurant restaurant; - - public final StringPath time = createString("time"); - - public final EnumPath timePart = createEnum("timePart", ssu.eatssu.domain.enums.TimePart.class); - - public QOpenHour(String variable) { - this(OpenHour.class, forVariable(variable), INITS); - } - - public QOpenHour(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QOpenHour(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QOpenHour(PathMetadata metadata, PathInits inits) { - this(OpenHour.class, metadata, inits); - } - - public QOpenHour(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.restaurant = inits.isInitialized("restaurant") ? new QRestaurant(forProperty("restaurant")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/QRestaurant.java b/src/main/generated/ssu/eatssu/domain/QRestaurant.java index 3811e8f1..edb9e14c 100644 --- a/src/main/generated/ssu/eatssu/domain/QRestaurant.java +++ b/src/main/generated/ssu/eatssu/domain/QRestaurant.java @@ -22,14 +22,10 @@ public class QRestaurant extends EntityPathBase { public final NumberPath id = createNumber("id", Long.class); - public final StringPath location = createString("location"); - public final ListPath meals = this.createList("meals", Meal.class, QMeal.class, PathInits.DIRECT2); public final ListPath menus = this.createList("menus", Menu.class, QMenu.class, PathInits.DIRECT2); - public final ListPath openHours = this.createList("openHours", OpenHour.class, QOpenHour.class, PathInits.DIRECT2); - public final EnumPath restaurantName = createEnum("restaurantName", ssu.eatssu.domain.enums.RestaurantName.class); public QRestaurant(String variable) { diff --git a/src/main/java/ssu/eatssu/domain/OpenHour.java b/src/main/java/ssu/eatssu/domain/OpenHour.java deleted file mode 100644 index 4e62ef26..00000000 --- a/src/main/java/ssu/eatssu/domain/OpenHour.java +++ /dev/null @@ -1,31 +0,0 @@ -package ssu.eatssu.domain; - -import jakarta.persistence.*; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import ssu.eatssu.domain.enums.DayType; -import ssu.eatssu.domain.enums.TimePart; - -@Entity -@Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class OpenHour { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "open_hour_id") - private Long id; - - @ManyToOne(fetch=FetchType.LAZY) - @JoinColumn(name = "restaurant_id") - private Restaurant restaurant; - - @Enumerated(EnumType.STRING) - private DayType dayType; - - @Enumerated(EnumType.STRING) - private TimePart timePart; - - private String time; - -} diff --git a/src/main/java/ssu/eatssu/domain/Restaurant.java b/src/main/java/ssu/eatssu/domain/Restaurant.java index 1a152505..c3c23805 100644 --- a/src/main/java/ssu/eatssu/domain/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/Restaurant.java @@ -20,14 +20,9 @@ public class Restaurant { @Enumerated(EnumType.STRING) private RestaurantName restaurantName; - private String location; - @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) private List menus; @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) private List meals; - - @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) - private List openHours; } diff --git a/src/main/java/ssu/eatssu/web/menu/dto/RestaurantInfo.java b/src/main/java/ssu/eatssu/web/menu/dto/RestaurantInfo.java deleted file mode 100644 index 1b4e0c3d..00000000 --- a/src/main/java/ssu/eatssu/web/menu/dto/RestaurantInfo.java +++ /dev/null @@ -1,45 +0,0 @@ -package ssu.eatssu.web.menu.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Getter; -import ssu.eatssu.domain.OpenHour; -import ssu.eatssu.domain.Restaurant; - -import java.util.ArrayList; -import java.util.List; - -@Schema(title = "식당 정보") -@AllArgsConstructor -@Getter -public class RestaurantInfo { - - @Schema(description = "식당위치", example = "기숙사 1층") - private String location; - - @Schema(description = "식당 운영시간 리스트") - private List openHours; - - @AllArgsConstructor - @Getter - private static class OpenHourInfo { - @Schema(description = "평일/주말", example = "주중") - private String dayType; - - @Schema(description = "아침/점심/저녁", example = "점심") - private String timepart; - - @Schema(description = "운영 시간", example = "11:00 - 14:00") - private String time; - - private static OpenHourInfo from(OpenHour openHour) { - return new OpenHourInfo(openHour.getDayType().getKrName(),openHour.getTimePart().getKrName(), openHour.getTime()); - } - } - - public static RestaurantInfo from (Restaurant restaurant){ - List openHours = new ArrayList<>(); - restaurant.getOpenHours().forEach(openHour -> openHours.add(OpenHourInfo.from(openHour))); - return new RestaurantInfo(restaurant.getLocation(),openHours); - } -} From 4f49b283f47cda03546e821b20742542623d841d Mon Sep 17 00:00:00 2001 From: SY2on Date: Thu, 4 Jan 2024 04:27:31 +0900 Subject: [PATCH 023/399] =?UTF-8?q?Refactor:=20MenuController=20~=20MenuSe?= =?UTF-8?q?rvice=20=EC=A0=95=EB=A6=AC=20=EB=A9=94=EC=86=8C=EB=93=9C=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC,=20=EB=9E=8C=EB=8B=A4=20=EC=82=AC=EC=9A=A9,?= =?UTF-8?q?=20=EC=A3=BC=EC=84=9D=20=EB=B3=B4=EC=B6=A9=20=EB=93=B1=EB=93=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ssu/eatssu/domain/Meal.java | 4 + .../java/ssu/eatssu/service/MenuService.java | 147 ++++++++++++------ src/main/java/ssu/eatssu/utils/DateUtil.java | 15 ++ .../ssu/eatssu/web/menu/MenuController.java | 48 ++---- 4 files changed, 129 insertions(+), 85 deletions(-) create mode 100644 src/main/java/ssu/eatssu/utils/DateUtil.java diff --git a/src/main/java/ssu/eatssu/domain/Meal.java b/src/main/java/ssu/eatssu/domain/Meal.java index 1fd3661b..fc97268b 100644 --- a/src/main/java/ssu/eatssu/domain/Meal.java +++ b/src/main/java/ssu/eatssu/domain/Meal.java @@ -81,4 +81,8 @@ public Map getRateMap() { rateMap.put("tasteRate", tasteRate); return rateMap; } + + public List getMenuNameList(){ + return mealMenus.stream().map(mealMenu -> mealMenu.getMenu().getName()).toList(); + } } diff --git a/src/main/java/ssu/eatssu/service/MenuService.java b/src/main/java/ssu/eatssu/service/MenuService.java index e90d4552..07d25952 100644 --- a/src/main/java/ssu/eatssu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/service/MenuService.java @@ -2,6 +2,7 @@ import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import ssu.eatssu.domain.Meal; import ssu.eatssu.domain.MealMenu; @@ -14,15 +15,16 @@ import ssu.eatssu.domain.repository.MenuRepository; import ssu.eatssu.domain.repository.RestaurantRepository; import ssu.eatssu.handler.response.BaseException; +import ssu.eatssu.handler.response.BaseResponseStatus; +import ssu.eatssu.utils.DateUtil; import ssu.eatssu.web.menu.dto.MenuReqDto; import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.*; -import static ssu.eatssu.handler.response.BaseResponseStatus.*; import static ssu.eatssu.web.menu.dto.MenuResDto.*; +@Slf4j @Service @RequiredArgsConstructor @Transactional @@ -37,76 +39,99 @@ public class MenuService { * 고정 메뉴 조회 *

특정 식당에 해당하는 고정메뉴 목록을 조회합니다.

*/ - public List findFixMenuList(RestaurantName restaurantName) { + public FixMenuList findFixMenuList(RestaurantName restaurantName) { + Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) - .orElseThrow(() -> new BaseException(NOT_FOUND_RESTAURANT)); - return menuRepository.findAllByRestaurant(restaurant); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); + + return FixMenuList.from(menuRepository.findAllByRestaurant(restaurant)); } /** * 식단 목록 조회 *

변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회한다.

*/ - public List findMealList(TimePart timePart, String date, - RestaurantName restaurantName) throws ParseException { + public List findMealList(TimePart timePart, String date, RestaurantName restaurantName){ + Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) - .orElseThrow(() -> new BaseException(NOT_FOUND_RESTAURANT)); - //date format 맞추기 - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); - Date formatDate = simpleDateFormat.parse(date); - return mealRepository.findAllByDateAndTimePartAndRestaurant(formatDate, timePart, restaurant); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); + + List mealList = mealRepository.findAllByDateAndTimePartAndRestaurant(toDate(date), timePart, restaurant); + + //mealList 를 TodayMeal 로 매핑 후 반환 + return mealList.stream().map(TodayMeal::from).toList(); } + /** * 식단 등록 */ - public void createMeal(TimePart timePart, String date, RestaurantName restaurantName, - MenuReqDto.AddTodayMenuList addTodayMenuList) throws ParseException { + public void createMeal(TimePart timePart, String date, RestaurantName restaurantName, MenuReqDto.AddTodayMenuList addTodayMenuList) { + Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) - .orElseThrow(() -> new BaseException(NOT_FOUND_RESTAURANT)); - //date format 맞추기 - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); - Date formatDate = simpleDateFormat.parse(date); - Meal newMeal = Meal.builder().date(formatDate).restaurant(restaurant).timePart(timePart).build(); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); + + //이미 추가된 식단이면 생성하지 않음 + if (isExistMeal(timePart, date, restaurant, addTodayMenuList)) { + return; + } + + //식단 생성 + Meal newMeal = Meal.builder().date(toDate(date)).restaurant(restaurant).timePart(timePart).build(); mealRepository.save(newMeal); + + //식단에 메뉴 추가 + addMenu(newMeal, addTodayMenuList); + + //식단 평점 업데이트 + newMeal.caculateRate(); + } + + /** + * 식단에 메뉴 추가 + */ + private void addMenu(Meal meal, MenuReqDto.AddTodayMenuList addTodayMenuList) { + + Restaurant restaurant = meal.getRestaurant(); + for (String addMenuName : addTodayMenuList.getTodayMenuList()) { //메뉴 체크 (기존에 없던 새로운 메뉴 라면) if (!menuRepository.existsByNameAndRestaurant(addMenuName, restaurant)) { //메뉴 추가 menuRepository.save(Menu.addFixPrice(addMenuName, restaurant)); } + //메뉴 찾아서 Menu menu = menuRepository.findByNameAndRestaurant(addMenuName, restaurant) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + //식단에 메뉴 추가 - MealMenu mealMenu = MealMenu.builder().menu(menu).meal(newMeal).build(); + MealMenu mealMenu = MealMenu.builder().menu(menu).meal(meal).build(); mealMenuRepository.save(mealMenu); } - newMeal.caculateRate(); } /** * 이미 존재하는 식단인지 확인 */ - public boolean isExistMeal(TimePart timePart, String date, RestaurantName restaurantName, - MenuReqDto.AddTodayMenuList addTodayMenuList) throws ParseException { - //date format 맞추기 - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); - Date formatDate = simpleDateFormat.parse(date); - Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) - .orElseThrow(()->new BaseException(NOT_FOUND_RESTAURANT)); - List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(formatDate,timePart,restaurant); + public boolean isExistMeal(TimePart timePart, String date, Restaurant restaurant, MenuReqDto.AddTodayMenuList addTodayMenuList){ + + List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(toDate(date),timePart,restaurant); + + //비교를 위한 정렬 Collections.sort(addTodayMenuList.getTodayMenuList()); + + //식단 목록을 돌면서 메뉴 목록을 정렬하고 비교 for(Meal meal : meals){ - List menuNameList = new ArrayList<>(); - for(MealMenu mealMenu: meal.getMealMenus()){ - menuNameList.add(mealMenu.getMenu().getName()); - } + List menuNameList = meal.getMenuNameList(); Collections.sort(menuNameList); + + //메뉴 목록이 같다면 이미 존재하는 식단 if(menuNameList.equals(addTodayMenuList.getTodayMenuList())){ return true; } } + return false; } @@ -114,36 +139,56 @@ public boolean isExistMeal(TimePart timePart, String date, RestaurantName restau * 식단 속 메뉴 목록 조회 */ public MenuList findMenuListInMeal(Long mealId) { - Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + return MenuList.from(meal); } /** * 식단 삭제 */ - public List deleteMeal(Long mealId) { - Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); - List menuIdList = new ArrayList<>(); - meal.getMealMenus().forEach(mealMenu -> menuIdList.add(mealMenu.getMenu().getId())); - for(Iterator it = meal.getMealMenus().iterator(); it.hasNext() ; ) - { - MealMenu mealMenu = it.next(); - it.remove(); - mealMenuRepository.delete(mealMenu); - } + public void deleteMeal(Long mealId) { + + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + + //식단에 포함된 메뉴 목록 조회 + List menuList = meal.getMealMenus().stream().map(MealMenu::getMenu).toList(); + mealRepository.delete(meal); - return menuIdList; + + //식단 삭제 -> mealMenu 삭제 반영 + mealRepository.flush(); + + //고아 변동 메뉴 정리 + cleanupGarbageMenu(menuList); } /** * 변동 메뉴 중 어떤 식단에도 포함되지 않는 메뉴를 찾아 삭제한다. */ - public void cleanupGarbageMenu(List menuIdList) { - for(Long menuId : menuIdList){ - Optional menu = menuRepository.findById(menuId); - if(menu.isPresent()&&menu.get().getMealMenus().isEmpty()){ - menuRepository.delete(menu.get()); + public void cleanupGarbageMenu(List menuList) { + + for(Menu menu : menuList){ + if(menu.getMealMenus().isEmpty()) { + menuRepository.delete(menu); } } } + + /** + * yyyyMMdd -> Date 형 변환 + */ + public Date toDate(String date) throws BaseException { + + try{ + return DateUtil.toDate("yyyyMMdd", date); + } catch (ParseException e) { + throw new BaseException(BaseResponseStatus.INVALID_DATE); + } + + } + } diff --git a/src/main/java/ssu/eatssu/utils/DateUtil.java b/src/main/java/ssu/eatssu/utils/DateUtil.java new file mode 100644 index 00000000..7e53076d --- /dev/null +++ b/src/main/java/ssu/eatssu/utils/DateUtil.java @@ -0,0 +1,15 @@ +package ssu.eatssu.utils; + +import ssu.eatssu.handler.response.BaseException; +import ssu.eatssu.handler.response.BaseResponseStatus; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class DateUtil { + public static Date toDate(String dateFormat, String dateString) throws ParseException { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat); + return simpleDateFormat.parse(dateString); + } +} diff --git a/src/main/java/ssu/eatssu/web/menu/MenuController.java b/src/main/java/ssu/eatssu/web/menu/MenuController.java index 483b3cc1..26ed7a39 100644 --- a/src/main/java/ssu/eatssu/web/menu/MenuController.java +++ b/src/main/java/ssu/eatssu/web/menu/MenuController.java @@ -58,20 +58,13 @@ public BaseResponse> getMealList(@Parameter(description = "날 @Parameter(description = "식당이름") @RequestParam("restaurant") RestaurantName restaurantName, @Parameter(description = "시간대") - @RequestParam("time") TimePart timePart) throws ParseException { //todo Exceiption service단에서 처리 - if (MenuTypeGroup.isChange(restaurantName)) { - List mealList = menuService.findMealList(timePart, date, restaurantName); - List todayMealList = new ArrayList<>(); - for (Meal meal : mealList) { - TodayMeal todayMeal = TodayMeal.from(meal); - todayMealList.add(todayMeal); - } - return BaseResponse.success(todayMealList); - } else { + @RequestParam("time") TimePart timePart) { + if (MenuTypeGroup.isFix(restaurantName)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } - } + return BaseResponse.success(menuService.findMealList(timePart, date, restaurantName)); + } /** * 고정 메뉴 목록 조회 @@ -89,13 +82,11 @@ public BaseResponse> getMealList(@Parameter(description = "날 @GetMapping("/fix-menu") public BaseResponse getFixMenuList(@Parameter(description = "식당이름") @RequestParam("restaurant") RestaurantName restaurantName) { - if (MenuTypeGroup.isFix(restaurantName)) { - List menuList = menuService.findFixMenuList(restaurantName); - FixMenuList fixMenuList = FixMenuList.from(menuList); - return BaseResponse.success(fixMenuList); - } else { + if(MenuTypeGroup.isChange(restaurantName)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } + + return BaseResponse.success(menuService.findFixMenuList(restaurantName)); } @@ -122,22 +113,13 @@ public BaseResponse addMeal(@Parameter(description = "날짜(yyyyMMdd)") @RequestParam("restaurant") RestaurantName restaurantName, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, - @RequestBody AddTodayMenuList addTodayMenuList) throws ParseException { - //todo Exceiption service단에서 처리 - if (MenuTypeGroup.isChange(restaurantName)) { - try { - if (menuService.isExistMeal(timePart, date, restaurantName, addTodayMenuList)) {//이미 추가된 식단이면 - log.info("식단 중복 발견!"); - return BaseResponse.success(); - } - } catch (ParseException e) { - throw new BaseException(INVALID_DATE); - } - menuService.createMeal(timePart, date, restaurantName, addTodayMenuList); - return BaseResponse.success(); - } else { + @RequestBody AddTodayMenuList addTodayMenuList) { + if (MenuTypeGroup.isFix(restaurantName)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } + + menuService.createMeal(timePart, date, restaurantName, addTodayMenuList); + return BaseResponse.success(); } /** @@ -155,8 +137,7 @@ public BaseResponse addMeal(@Parameter(description = "날짜(yyyyMMdd)") @GetMapping("/menus") public BaseResponse getMenuListInMeal(@Parameter(description = "mealId") @RequestParam("mealId") Long mealId) { - MenuList menuList = menuService.findMenuListInMeal(mealId); - return BaseResponse.success(menuList); + return BaseResponse.success(menuService.findMenuListInMeal(mealId)); } /** @@ -170,8 +151,7 @@ public BaseResponse getMenuListInMeal(@Parameter(description = "mealId }) @DeleteMapping("/meal/{mealId}") public BaseResponse deleteMeal(@Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { //todo : 관리자 API - List menuIdList = menuService.deleteMeal(mealId); - menuService.cleanupGarbageMenu(menuIdList); + menuService.deleteMeal(mealId); return BaseResponse.success(); } From 5a593abfa3a8d13ba8950c4f13902c4ae27beb78 Mon Sep 17 00:00:00 2001 From: SY2on Date: Thu, 4 Jan 2024 04:43:20 +0900 Subject: [PATCH 024/399] =?UTF-8?q?Refactor:=20UserController=20~=20UserSe?= =?UTF-8?q?rvice=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ssu/eatssu/service/UserService.java | 30 +++++++++++-------- .../ssu/eatssu/web/user/UserController.java | 17 +++++------ 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/main/java/ssu/eatssu/service/UserService.java b/src/main/java/ssu/eatssu/service/UserService.java index a2cd2d15..6cd90b3c 100644 --- a/src/main/java/ssu/eatssu/service/UserService.java +++ b/src/main/java/ssu/eatssu/service/UserService.java @@ -13,12 +13,11 @@ import ssu.eatssu.domain.User; import ssu.eatssu.domain.repository.ReviewReportRepository; import ssu.eatssu.domain.repository.UserRepository; +import ssu.eatssu.handler.response.BaseResponseStatus; import ssu.eatssu.jwt.JwtTokenProvider; import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.web.user.dto.Tokens; -import java.util.Optional; - import static ssu.eatssu.handler.response.BaseResponseStatus.*; @Service @@ -36,8 +35,10 @@ public class UserService { * * @deprecated */ - public Tokens join(String email, String pwd) throws JsonProcessingException{ + public Tokens join(String email, String pwd) { + String encodedPwd = passwordEncoder.encode(pwd); + User user = User.join(email, encodedPwd); userRepository.save(user); @@ -49,12 +50,10 @@ public Tokens join(String email, String pwd) throws JsonProcessingException{ * * @deprecated */ - public Tokens login(String email, String pwd) throws JsonProcessingException { - //유저 존재 여부 체크 - Optional user = userRepository.findByEmail(email); - if(user.isEmpty()){ - throw new BaseException(NOT_FOUND_USER); - } + public Tokens login(String email, String pwd) { + //가입된 유저인지 체크 + userRepository.findByEmail(email).orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_USER)); + return generateJwtTokens(email, pwd); } @@ -62,8 +61,10 @@ public Tokens login(String email, String pwd) throws JsonProcessingException { * 닉네임 변경 */ public void updateNickname(Long userId, String nickname) { + User user = userRepository.findById(userId) - .orElseThrow(()-> new RuntimeException("User not found")); + .orElseThrow(()-> new BaseException(BaseResponseStatus.NOT_FOUND_USER)); + user.updateNickname(nickname); userRepository.save(user); } @@ -89,24 +90,27 @@ public Tokens generateJwtTokens(String email, String pwd) { */ public void updatePassword(Long userId, String pwd) { User user = userRepository.findById(userId) - .orElseThrow(()-> new RuntimeException("User not found")); + .orElseThrow(()-> new BaseException(BaseResponseStatus.NOT_FOUND_USER)); + String encodedPwd = passwordEncoder.encode(pwd); user.changePassword(encodedPwd); + userRepository.save(user); } /** * JWT 토큰 재발급 */ - public Tokens refreshTokens(Authentication authentication) throws JsonProcessingException{ + public Tokens refreshTokens(Authentication authentication) { return jwtTokenProvider.generateTokens(authentication); } /** - * 유저 탈퇴 + * 유저 탈퇴 //todo */ public void signout (Long userId) { User user = userRepository.findById(userId).orElseThrow(()-> new BaseException(NOT_FOUND_USER)); + //작성한 리뷰 삭제 for(Review review: user.getReviews()) { review.signoutUser(); diff --git a/src/main/java/ssu/eatssu/web/user/UserController.java b/src/main/java/ssu/eatssu/web/user/UserController.java index 9727ffc6..1bf0144d 100644 --- a/src/main/java/ssu/eatssu/web/user/UserController.java +++ b/src/main/java/ssu/eatssu/web/user/UserController.java @@ -88,8 +88,7 @@ public BaseResponse checkEmailDuplicate(@Parameter(description = "이 @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping("/login") - public BaseResponse login(@Valid @RequestBody Login login) throws JsonProcessingException { // todo: - // exceiption service단에서 처리 + public BaseResponse login(@Valid @RequestBody Login login) { Tokens tokens = userService.login(login.getEmail(), login.getPwd()); return BaseResponse.success(tokens); } @@ -105,8 +104,7 @@ public BaseResponse login(@Valid @RequestBody Login login) throws JsonPr }) @PatchMapping("/nickname") public BaseResponse updateNickname(@Valid @RequestBody NicknameEdit nicknameEdit) { - Long userId = getLoginUserId(); - userService.updateNickname(userId, nicknameEdit.getNickname()); + userService.updateNickname(getLoginUserId(), nicknameEdit.getNickname()); return BaseResponse.success(); } @@ -125,11 +123,11 @@ public BaseResponse updateNickname(@Valid @RequestBody NicknameEdit nicknameE public BaseResponse checkNicknameDuplicate(@Parameter(description = "닉네임") @RequestParam(value = "nickname") String nickname) { boolean duplicated = userRepository.existsByNickname(nickname); - if (!duplicated) { - return BaseResponse.success(true); - } else { + if (duplicated) { //throw new BaseException(NICKNAME_DUPLICATE); return BaseResponse.success(false); + } else { + return BaseResponse.success(true); } } @@ -146,8 +144,7 @@ public BaseResponse checkNicknameDuplicate(@Parameter(description = " }) @PatchMapping("/password") public BaseResponse updatePassword(@Valid @RequestBody PasswordChange passwordChange) { - Long userId = getLoginUserId(); - userService.updatePassword(userId, passwordChange.getPwd()); + userService.updatePassword(getLoginUserId(), passwordChange.getPwd()); return BaseResponse.success(); } @@ -160,7 +157,7 @@ public BaseResponse updatePassword(@Valid @RequestBody PasswordChange passwor @ApiResponse(responseCode = "200", description = "토큰 재발급 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping("/token/reissue") - public BaseResponse refreshToken() throws JsonProcessingException { + public BaseResponse refreshToken() { Tokens tokens = userService.refreshTokens(getLoginUser()); return BaseResponse.success(tokens); } From cbe8afeaaf5bf3559631c0368b7b4f7dc680215e Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 6 Jan 2024 01:00:22 +0900 Subject: [PATCH 025/399] =?UTF-8?q?Refactor:=20=EB=A9=94=EB=89=B4=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=8B=9C=20=EC=A0=95=EC=A0=81=20=ED=8C=A9?= =?UTF-8?q?=ED=86=A0=EB=A6=AC=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ssu/eatssu/domain/Menu.java | 22 +++++++++++++++---- .../java/ssu/eatssu/service/MenuService.java | 2 +- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/Menu.java b/src/main/java/ssu/eatssu/domain/Menu.java index 994181c5..a99ac424 100644 --- a/src/main/java/ssu/eatssu/domain/Menu.java +++ b/src/main/java/ssu/eatssu/domain/Menu.java @@ -3,6 +3,7 @@ import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.ColumnDefault; +import ssu.eatssu.domain.enums.MenuTypeGroup; import java.util.ArrayList; import java.util.List; @@ -40,7 +41,7 @@ public class Menu { private Integer totalTasteRate = 0; @ColumnDefault("0") - private Integer reviewCnt = 0 ; + private Integer reviewCnt = 0; @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) private List mealMenus = new ArrayList<>(); @@ -52,20 +53,33 @@ public class Menu { @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) private List reviews = new ArrayList<>(); + //정적 팩토리 메서드 private Menu(String name, Restaurant restaurant, Integer price) { this.name = name; this.restaurant = restaurant; this.price = price; } - public static Menu addFixPrice(String name, Restaurant restaurant) { - Integer price = 0; - if(!restaurant.getRestaurantName().getPrice().equals(0)){ + /** + * 변동 메뉴를 생성합니다. + * todo: 변동메뉴 식당이 아니라 고정 메뉴 식당으로 잘못 들어온다면 어떻게 처리? + */ + public static Menu createChangeMenu(String name, Restaurant restaurant) { + int price = 0; + if(MenuTypeGroup.isChange(restaurant.getRestaurantName())){ price = restaurant.getRestaurantName().getPrice(); } return new Menu(name, restaurant, price); } + /** + * 고정 메뉴를 생성합니다. + * todo: 고정메뉴 식당이 아니라 변동 메뉴 식당으로 잘못 들어온다면 어떻게 처리? + */ + public static Menu createFixedMenu(String name, Restaurant restaurant, Integer price) { + return new Menu(name, restaurant, price); + } + public void addReview(Integer mainRate, Integer tasteRate, Integer amountRate) { this.reviewCnt++; this.totalMainRate += mainRate; diff --git a/src/main/java/ssu/eatssu/service/MenuService.java b/src/main/java/ssu/eatssu/service/MenuService.java index 07d25952..adcb3406 100644 --- a/src/main/java/ssu/eatssu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/service/MenuService.java @@ -98,7 +98,7 @@ private void addMenu(Meal meal, MenuReqDto.AddTodayMenuList addTodayMenuList) { //메뉴 체크 (기존에 없던 새로운 메뉴 라면) if (!menuRepository.existsByNameAndRestaurant(addMenuName, restaurant)) { //메뉴 추가 - menuRepository.save(Menu.addFixPrice(addMenuName, restaurant)); + menuRepository.save(Menu.createChangeMenu(addMenuName, restaurant)); } //메뉴 찾아서 From d37f2dcc2359e59948df8ab26de3b07c41ccae5e Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 6 Jan 2024 16:56:56 +0900 Subject: [PATCH 026/399] =?UTF-8?q?Refactor:=20=EC=9E=90=EC=B2=B4=20?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85=20/=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20credentials=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80=20password=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=20=EC=82=AD=EC=A0=9C=EB=90=98=EB=A9=B4=EC=84=9C=20jwt?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../generated/ssu/eatssu/domain/QUser.java | 4 +- src/main/java/ssu/eatssu/domain/User.java | 46 +++++----- .../java/ssu/eatssu/jwt/JwtTokenProvider.java | 38 +++++--- .../eatssu/security/CustomUserDetails.java | 6 +- .../security/CustomUserDetailsService.java | 9 +- .../ssu/eatssu/security/UserPrincipalDto.java | 2 + .../java/ssu/eatssu/service/OauthService.java | 89 ++++++------------- .../java/ssu/eatssu/service/UserService.java | 67 ++++---------- .../ssu/eatssu/web/user/UserController.java | 55 ------------ 9 files changed, 106 insertions(+), 210 deletions(-) diff --git a/src/main/generated/ssu/eatssu/domain/QUser.java b/src/main/generated/ssu/eatssu/domain/QUser.java index f34788ea..d720fbbf 100644 --- a/src/main/generated/ssu/eatssu/domain/QUser.java +++ b/src/main/generated/ssu/eatssu/domain/QUser.java @@ -25,6 +25,8 @@ public class QUser extends EntityPathBase { //inherited public final DateTimePath createdDate = _super.createdDate; + public final StringPath credentials = createString("credentials"); + public final StringPath email = createString("email"); public final NumberPath id = createNumber("id", Long.class); @@ -38,8 +40,6 @@ public class QUser extends EntityPathBase { public final StringPath providerId = createString("providerId"); - public final StringPath pwd = createString("pwd"); - public final ListPath reviewReports = this.createList("reviewReports", ReviewReport.class, QReviewReport.class, PathInits.DIRECT2); public final ListPath reviews = this.createList("reviews", Review.class, QReview.class, PathInits.DIRECT2); diff --git a/src/main/java/ssu/eatssu/domain/User.java b/src/main/java/ssu/eatssu/domain/User.java index f6f44376..6a32cf80 100644 --- a/src/main/java/ssu/eatssu/domain/User.java +++ b/src/main/java/ssu/eatssu/domain/User.java @@ -27,8 +27,6 @@ public class User extends BaseTimeEntity { @Column(unique = true) private String email; - private String pwd; - private String nickname; @Enumerated(EnumType.STRING) @@ -36,6 +34,8 @@ public class User extends BaseTimeEntity { private String providerId; + private String credentials; + @Enumerated(EnumType.STRING) private UserStatus status; @@ -49,35 +49,33 @@ public class User extends BaseTimeEntity { @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) private List userInquiry; - public static User join(@NotNull String email, @NotNull String pwd) { - User user = new User(); - user.email = email; - user.pwd = pwd; - user.role = Role.USER; - user.provider = OauthProvider.EATSSU; - user.status = UserStatus.ACTIVE; - return user; + + /** + * Oauth 회원가입 용 생성자 + */ + private User(@NotNull String email, @NotNull Role role, @NotNull OauthProvider provider, + @NotNull String providerId, @NotNull UserStatus status, @NotNull String credentials){ + this.email = email; + this.role = role; + this.provider = provider; + this.providerId = providerId; + this.status = status; + this.credentials = credentials; } - public static User oAuthJoin(@NotNull String email, @NotNull String pwd, @NotNull OauthProvider provider, - String providerId) { - User user = new User(); - user.email = email; - user.pwd = pwd; - user.role = Role.USER; - user.provider = provider; - user.providerId = providerId; - user.status = UserStatus.ACTIVE; - return user; + + /** + * <--Static Factory Method--> + * Oauth 회원가입 + */ + public static User oAuthJoin(@NotNull String email, @NotNull OauthProvider provider, String providerId, + String credentials) { + return new User(email, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials); } public void updateNickname(@NotNull String nickname) { this.nickname = nickname; } - public void changePassword(String newPwd) { - this.pwd = newPwd; - } - public void updateEmail(String email) { this.email = email; } } diff --git a/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java b/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java index 36299c46..d2f125ba 100644 --- a/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java +++ b/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java @@ -67,6 +67,14 @@ public Tokens generateTokens(Authentication authentication){ .collect(Collectors.joining(",")); UserPrincipalDto userPrincipalDto = UserPrincipalDto.from((CustomUserDetails) authentication.getPrincipal()); + + Claims claims = createClaims(userPrincipalDto, authorities); + + return new Tokens(createAccessToken(claims), createRefreshToken(claims)); + } + + private Claims createClaims(UserPrincipalDto userPrincipalDto, String authorities) { + String subject; try{ subject = objectMapper.writeValueAsString(userPrincipalDto); @@ -76,12 +84,11 @@ public Tokens generateTokens(Authentication authentication){ throw new BaseException(BaseResponseStatus.INTERNAL_SERVER_ERROR); } - Claims claims = Jwts.claims(); - claims.setSubject(subject); + Claims claims = Jwts.claims() + .setSubject(subject); claims.put(AUTHORITIES_KEY, authorities); - String accessToken = createAccessToken(claims); - String refreshToken = createRefreshToken(claims); - return new Tokens(accessToken, refreshToken); + + return claims; } //accessToken 생성 @@ -108,27 +115,32 @@ private String createRefreshToken(Claims claims) { .compact(); } - //token에서 Athentication 추출 + //token 에서 Authentication 추출 public Authentication getAuthentication(String token) throws JsonProcessingException { - Claims claims = Jwts.parserBuilder() - .setSigningKey(key) - .build() - .parseClaimsJws(token) - .getBody(); + Claims claims = getClaims(token); List authorities = Arrays.stream(claims.get(AUTHORITIES_KEY).toString().split(",")) .map(SimpleGrantedAuthority::new) .toList(); - String subject = claims.getSubject(); - UserPrincipalDto userPrincipalDto = objectMapper.readValue(subject, UserPrincipalDto.class); + + UserPrincipalDto userPrincipalDto = objectMapper.readValue(claims.getSubject(), UserPrincipalDto.class); + CustomUserDetails principal = new CustomUserDetails(userPrincipalDto.getId(),userPrincipalDto.getEmail(), "", authorities.get(0)); return new UsernamePasswordAuthenticationToken(principal, token, authorities); } + private Claims getClaims(String token){ + return Jwts.parserBuilder() + .setSigningKey(key) + .build() + .parseClaimsJws(token) + .getBody(); + } + //토큰 유효성 검증 public boolean validateToken(String token) throws BaseException{ try { diff --git a/src/main/java/ssu/eatssu/security/CustomUserDetails.java b/src/main/java/ssu/eatssu/security/CustomUserDetails.java index 1374444b..9e76a5e5 100644 --- a/src/main/java/ssu/eatssu/security/CustomUserDetails.java +++ b/src/main/java/ssu/eatssu/security/CustomUserDetails.java @@ -15,13 +15,13 @@ public class CustomUserDetails implements UserDetails { private final Long Id; private final String email; - private final String pwd; + private final String credentials; private final GrantedAuthority role; public CustomUserDetails(User user){ this.Id = user.getId(); this.email = user.getEmail(); - this.pwd = user.getPwd(); + this.credentials = user.getCredentials(); this.role = user.getRole(); } @@ -35,7 +35,7 @@ public Collection getAuthorities() { @Override public String getPassword() { - return pwd; + return credentials; } @Override diff --git a/src/main/java/ssu/eatssu/security/CustomUserDetailsService.java b/src/main/java/ssu/eatssu/security/CustomUserDetailsService.java index 406a9a52..7009c6c2 100644 --- a/src/main/java/ssu/eatssu/security/CustomUserDetailsService.java +++ b/src/main/java/ssu/eatssu/security/CustomUserDetailsService.java @@ -8,6 +8,10 @@ import org.springframework.stereotype.Component; import ssu.eatssu.domain.User; import ssu.eatssu.domain.repository.UserRepository; +import ssu.eatssu.handler.response.BaseException; +import ssu.eatssu.handler.response.BaseResponseStatus; + +import java.util.List; @Slf4j @Component @@ -17,10 +21,9 @@ public class CustomUserDetailsService implements UserDetailsService { private final UserRepository userRepository; @Override - public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { - log.info("CustomUserDetailService loadUserByUsername username : "+ username); + public UserDetails loadUserByUsername(String username) { User user = userRepository.findByEmail(username) - .orElseThrow(()-> new UsernameNotFoundException("Not Found User. Username = " + username)); + .orElseThrow(()-> new BaseException(BaseResponseStatus.NOT_FOUND_USER)); return new CustomUserDetails(user); } diff --git a/src/main/java/ssu/eatssu/security/UserPrincipalDto.java b/src/main/java/ssu/eatssu/security/UserPrincipalDto.java index 8241d440..11f78f34 100644 --- a/src/main/java/ssu/eatssu/security/UserPrincipalDto.java +++ b/src/main/java/ssu/eatssu/security/UserPrincipalDto.java @@ -12,11 +12,13 @@ public class UserPrincipalDto { private Long id; private String email; + private String role; public static UserPrincipalDto from(CustomUserDetails userDetails){ return UserPrincipalDto.builder() .id(userDetails.getId()) .email(userDetails.getEmail()) + .role(userDetails.getRole().getAuthority()) .build(); } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/service/OauthService.java b/src/main/java/ssu/eatssu/service/OauthService.java index ec79e155..61cdb1d3 100644 --- a/src/main/java/ssu/eatssu/service/OauthService.java +++ b/src/main/java/ssu/eatssu/service/OauthService.java @@ -7,14 +7,10 @@ import io.jsonwebtoken.Claims; import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.Jwts; -import lombok.AllArgsConstructor; -import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.core.Authentication; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -23,9 +19,9 @@ import ssu.eatssu.domain.User; import ssu.eatssu.domain.enums.OauthProvider; import ssu.eatssu.domain.repository.UserRepository; +import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponseStatus; import ssu.eatssu.jwt.JwtTokenProvider; -import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.service.vo.OauthInfo; import ssu.eatssu.web.oauth.dto.AppleKeys; import ssu.eatssu.web.user.dto.Tokens; @@ -39,10 +35,8 @@ import java.security.spec.RSAPublicKeySpec; import java.util.Base64; import java.util.Map; -import java.util.Optional; import static ssu.eatssu.handler.response.BaseResponseStatus.INVALID_IDENTITY_TOKEN; -import static ssu.eatssu.handler.response.BaseResponseStatus.INVALID_TOKEN; @Slf4j @RequiredArgsConstructor @@ -53,8 +47,6 @@ public class OauthService { private final UserRepository userRepository; private final PasswordEncoder passwordEncoder; private final UserService userService; - private final AuthenticationManagerBuilder authenticationManagerBuilder; - private final JwtTokenProvider jwtTokenProvider; private final RestTemplate restTemplate; /** @@ -64,75 +56,49 @@ public Tokens kakaoLogin(String email, String providerId) { //가입 안된 유저일 경우 회원가입 진행 User user = userRepository.findByProviderId(providerId) - .orElse(join(email, providerId, OauthProvider.KAKAO)); + .orElseGet(() -> join(email, OauthProvider.KAKAO, providerId)); - //OAuth 유저 용 비밀번호 생성 - String pwd = createOAuthUserPassword(OauthProvider.KAKAO, providerId); - - return userService.generateJwtTokens(user.getEmail(), pwd); + // return Tokens + return userService.generateOauthJwtTokens(user.getEmail(), OauthProvider.KAKAO, providerId); } /** * 애플 로그인 */ - public Tokens appleLogin(String identityToken) throws NoSuchAlgorithmException, InvalidKeySpecException { + public Tokens appleLogin(String identityToken) { //애플 유저 정보 조회 OauthInfo oauthInfo = getUserInfoFromApple(identityToken); + //가입 안된 유저일 경우 회원가입 진행 User user = userRepository.findByProviderId(oauthInfo.providerId()) - .orElse(join(oauthInfo.email(), oauthInfo.providerId(), OauthProvider.APPLE)); + .orElseGet(() -> join(oauthInfo.email(), OauthProvider.APPLE, oauthInfo.providerId())); //이메일 갱신 updateAppleUserEmail(user, oauthInfo.email()); - //OAuth 유저 용 비밀번호 생성 - String pwd = createOAuthUserPassword(OauthProvider.APPLE, oauthInfo.providerId()); - - return userService.generateJwtTokens(user.getEmail(), pwd); + // return Tokens + return userService.generateOauthJwtTokens(user.getEmail(), OauthProvider.APPLE, oauthInfo.providerId()); } /** * 회원가입 */ - private User join(String email, String providerId, OauthProvider provider) { - - //OAuth 유저 용 비밀번호 생성 - String pwd = createOAuthUserPassword(provider, providerId); + private User join(String email, OauthProvider provider, String providerId) { - //비밀번호 encode - String encodedPwd = passwordEncoder.encode(pwd); + String credentials = createCredentials(provider, providerId); //회원가입 - User user = User.oAuthJoin(email, encodedPwd, provider, providerId); - + User user = User.oAuthJoin(email, provider, providerId, credentials); return userRepository.save(user); } /** - * OAuth 유저용 Password 생성 - * todo 자체회원가입 안써서 password 컬럼이 필요없는데 삭제? + * Credentials 생성 */ - private String createOAuthUserPassword(OauthProvider provider, String providerId) { - - return provider.toString() + providerId; - } - - /** - * email, pwd 를 통해 JwtToken 을 생성 - */ - public Tokens generateJwtTokens(String email, String pwd){ - // 1. email/pwd 를 기반으로 Authentication 객체 생성 - // 이때 authentication 은 인증 여부를 확인하는 authenticated 값이 false - UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(email, pwd); - - // 2. 실제 검증 (사용자 비밀번호 체크) - // authenticate 메서드 실행 => CustomUserDetailsService 에서 만든 loadUserByUsername 메서드 실행 - Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken); - - // 3. 인증 정보를 바탕으로 JWT 토큰 생성 - return jwtTokenProvider.generateTokens(authentication); + private String createCredentials(OauthProvider provider, String providerId) { + return passwordEncoder.encode(provider + "_" + providerId); } /** @@ -140,7 +106,7 @@ public Tokens generateJwtTokens(String email, String pwd){ */ private void updateAppleUserEmail(User user, String email) { - if(isHideEmail(user.getEmail())&&!isHideEmail(email)){ + if (isHideEmail(user.getEmail()) && !isHideEmail(email)) { user.updateEmail(email); userRepository.save(user); } @@ -169,11 +135,11 @@ private OauthInfo getUserInfoByPublicKey(String identityToken, PublicKey publicK .getBody(); //Claims 에서 email, providerId(사용자 식별값) 를 추출한다. - try{ + try { String email = claims.get("email").toString(); String providerId = claims.get("sub").toString(); - return new OauthInfo(email,providerId); - }catch (ExpiredJwtException exception){ + return new OauthInfo(email, providerId); + } catch (ExpiredJwtException exception) { throw new BaseException(INVALID_IDENTITY_TOKEN); } } @@ -210,10 +176,10 @@ private PublicKey generatePublicKeyWithApplePublicKey(AppleKeys.Key matchedKey) RSAPublicKeySpec publicKeySpec = new RSAPublicKeySpec(n, e); //PublicKeySpec 을 통해 PublicKey 를 생성한다. - try{ + try { KeyFactory keyFactory = KeyFactory.getInstance(matchedKey.getKty()); return keyFactory.generatePublic(publicKeySpec); - } catch (NoSuchAlgorithmException | InvalidKeySpecException ex){ + } catch (NoSuchAlgorithmException | InvalidKeySpecException ex) { throw new BaseException(BaseResponseStatus.INVALID_IDENTITY_TOKEN); } } @@ -229,8 +195,9 @@ private AppleKeys.Key selectMatchedKey(String identityToken, AppleKeys candidate //decode 된 header 정보를 통해 정답키의 key id, algorithm 정보를 가져온다. Map headerMap; - try{ - headerMap = new ObjectMapper().readValue(decodedHeader, new TypeReference>(){}); + try { + headerMap = new ObjectMapper().readValue(decodedHeader, new TypeReference>() { + }); } catch (JsonProcessingException e) { throw new BaseException(BaseResponseStatus.INVALID_IDENTITY_TOKEN); } @@ -259,10 +226,10 @@ private AppleKeys getAppleKeys() { /** * 애플 로그인 - 이메일 가리기 여부 확인 */ - private boolean isHideEmail(String email){ - if(email.length()>25){ - return email.substring(email.length() - 25, email.length()).equals("@privaterelay.appleid.com"); - }else{ + private boolean isHideEmail(String email) { + if (email.length() > 25) { + return email.startsWith("@privaterelay.appleid.com", email.length() - 25); + } else { return false; } } diff --git a/src/main/java/ssu/eatssu/service/UserService.java b/src/main/java/ssu/eatssu/service/UserService.java index 6cd90b3c..816fe22d 100644 --- a/src/main/java/ssu/eatssu/service/UserService.java +++ b/src/main/java/ssu/eatssu/service/UserService.java @@ -1,8 +1,8 @@ package ssu.eatssu.service; -import com.fasterxml.jackson.core.JsonProcessingException; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.core.Authentication; @@ -11,6 +11,7 @@ import ssu.eatssu.domain.Review; import ssu.eatssu.domain.ReviewReport; import ssu.eatssu.domain.User; +import ssu.eatssu.domain.enums.OauthProvider; import ssu.eatssu.domain.repository.ReviewReportRepository; import ssu.eatssu.domain.repository.UserRepository; import ssu.eatssu.handler.response.BaseResponseStatus; @@ -20,6 +21,7 @@ import static ssu.eatssu.handler.response.BaseResponseStatus.*; +@Slf4j @Service @RequiredArgsConstructor @Transactional @@ -30,33 +32,6 @@ public class UserService { private final AuthenticationManagerBuilder authenticationManagerBuilder; private final JwtTokenProvider jwtTokenProvider; - /** - * 자체 회원가입 - * - * @deprecated - */ - public Tokens join(String email, String pwd) { - - String encodedPwd = passwordEncoder.encode(pwd); - - User user = User.join(email, encodedPwd); - userRepository.save(user); - - return generateJwtTokens(email, pwd); - } - - /** - * 자체 로그인 - * - * @deprecated - */ - public Tokens login(String email, String pwd) { - //가입된 유저인지 체크 - userRepository.findByEmail(email).orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_USER)); - - return generateJwtTokens(email, pwd); - } - /** * 닉네임 변경 */ @@ -70,32 +45,26 @@ public void updateNickname(Long userId, String nickname) { } /** - * email, pwd 를 통해 JwtToken 을 생성 + * Oauth 회원 - email, providerId 를 통해 JwtToken 을 생성 + * todo: 같은 이메일로 카카오, 애플 등 여러 회원가입을 한 회원 처리 필요 */ - public Tokens generateJwtTokens(String email, String pwd) { - // 1. email/pwd 를 기반으로 Authentication 객체 생성 - // 이때 authentication은 인증 여부를 확인하는 authenticated 값이 false - UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(email, pwd); + public Tokens generateOauthJwtTokens(String email, OauthProvider provider, String providerId) { - // 2. 실제 검증 (사용자 비밀번호 체크) - // authenticate 메서드 실행 => CustomUserDetailsService 에서 만든 loadUserByUsername 메서드 실행 + // email, credentials 를 기반으로 Authentication 객체 생성 + // 이때 authentication 은 인증 여부를 확인하는 authenticated 값이 false + UsernamePasswordAuthenticationToken authenticationToken = + new UsernamePasswordAuthenticationToken(email, makeOauthCredentials(provider, providerId)); + + // 실제 검증 (사용자 비밀번호 체크) + // authenticate 메서드 실행 => CustomUserDetailsService 에서 만든 loadUserByUsername 메서드 실행 Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken); - // 3. 인증 정보를 바탕으로 JWT 토큰 생성 + // 인증 정보를 바탕으로 JWT 토큰 생성 return jwtTokenProvider.generateTokens(authentication); } - /** - * 비밀번호 변경 - */ - public void updatePassword(Long userId, String pwd) { - User user = userRepository.findById(userId) - .orElseThrow(()-> new BaseException(BaseResponseStatus.NOT_FOUND_USER)); - - String encodedPwd = passwordEncoder.encode(pwd); - user.changePassword(encodedPwd); - - userRepository.save(user); + private String makeOauthCredentials(OauthProvider provider, String providerId) { + return provider+"_"+providerId; } /** @@ -106,7 +75,7 @@ public Tokens refreshTokens(Authentication authentication) { } /** - * 유저 탈퇴 //todo + * 유저 탈퇴 */ public void signout (Long userId) { User user = userRepository.findById(userId).orElseThrow(()-> new BaseException(NOT_FOUND_USER)); @@ -120,7 +89,7 @@ public void signout (Long userId) { reviewReportRepository.delete(report); } /* - TODO 작성한 문의내역 삭제?? + todo: 탈퇴한 유저의 문의내역은 어떻게 처리?? for(UserInquiries inquiries : user.getUserInquiries()){ inquiries.signoutWriter(); }*/ diff --git a/src/main/java/ssu/eatssu/web/user/UserController.java b/src/main/java/ssu/eatssu/web/user/UserController.java index 1bf0144d..589a4630 100644 --- a/src/main/java/ssu/eatssu/web/user/UserController.java +++ b/src/main/java/ssu/eatssu/web/user/UserController.java @@ -33,26 +33,6 @@ public class UserController { private final UserRepository userRepository; private final SecurityUtil securityUtil; - /** - * 회원가입 - *

자체 회원가입

- * - * @deprecated 현재는 카카오, 애플 회원가입만 사용 중입니다. - */ - @Deprecated(since = "개발 초기에 사용했지만 출시하면서 OAuth 만 사용하기로 기획이 변경됨") - @Operation(summary = "자체 회원가입", description = "자체 회원가입 API 입니다. \n 회원가입 후 자동 로그인됩니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "회원가입 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/join") - public BaseResponse join(@Valid @RequestBody Join join) throws JsonProcessingException { - Tokens tokens = userService.join(join.getEmail(), join.getPwd()); - return BaseResponse.success(tokens); - } - /** * 이메일 중복 검사 *

중복되지 않은 이메일인 경우 true 를 반환합니다.

@@ -75,24 +55,6 @@ public BaseResponse checkEmailDuplicate(@Parameter(description = "이 } } - /** - * 로그인 - *

자체 로그인

- * - * @deprecated 현재는 카카오, 애플 로그인만 사용 중입니다. - */ - @Deprecated(since = "개발 초기에 사용했지만 출시하면서 OAuth 만 사용하기로 기획이 변경됨") - @Operation(summary = "자체 로그인", description = "자체 로그인 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "로그인 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/login") - public BaseResponse login(@Valid @RequestBody Login login) { - Tokens tokens = userService.login(login.getEmail(), login.getPwd()); - return BaseResponse.success(tokens); - } - /** * 닉네임 수정 *

닉네임을 수정합니다.

@@ -131,23 +93,6 @@ public BaseResponse checkNicknameDuplicate(@Parameter(description = " } } - /** - * 비밀번호 변경 - *

비밀번호를 변경합니다.

- * - * @deprecated 현재는 카카오, 애플 로그인만 사용 중입니다. - */ - @Deprecated(since = "개발 초기에 사용했지만 출시하면서 OAuth 만 사용하기로 기획이 변경됨") - @Operation(summary = "비밀번호 변경", description = "비밀번호 변경 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "비밀번호 변경 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PatchMapping("/password") - public BaseResponse updatePassword(@Valid @RequestBody PasswordChange passwordChange) { - userService.updatePassword(getLoginUserId(), passwordChange.getPwd()); - return BaseResponse.success(); - } - /** * AccessToken, RefreshToken 재발급 *

유효한 Token을 받으면 AccessToken, RefreshToken을 새로 발급합니다.

From a9649d1a724f6a56456e1cc6c48b13142d1aa038 Mon Sep 17 00:00:00 2001 From: SY2on Date: Sun, 7 Jan 2024 03:29:02 +0900 Subject: [PATCH 027/399] =?UTF-8?q?Refactor:=20=EC=A0=84=EC=B2=B4=EC=A0=81?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=ED=8F=89=EC=A0=90=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../generated/ssu/eatssu/domain/QMeal.java | 6 - .../generated/ssu/eatssu/domain/QMenu.java | 16 +- .../generated/ssu/eatssu/domain/QReview.java | 72 -------- .../ssu/eatssu/domain/QReviewImg.java | 4 +- .../ssu/eatssu/domain/QReviewReport.java | 4 +- .../generated/ssu/eatssu/domain/QUser.java | 2 +- src/main/java/ssu/eatssu/domain/Meal.java | 42 +---- src/main/java/ssu/eatssu/domain/Menu.java | 82 +-------- .../java/ssu/eatssu/domain/ReviewImg.java | 1 + .../java/ssu/eatssu/domain/ReviewReport.java | 1 + src/main/java/ssu/eatssu/domain/User.java | 1 + .../domain/repository/ReviewRepository.java | 2 +- .../repository/ReviewRepositoryCustom.java | 2 +- .../repository/ReviewRepositoryImpl.java | 2 + .../java/ssu/eatssu/domain/review/Rates.java | 20 +++ .../eatssu/domain/{ => review}/Review.java | 29 ++-- .../java/ssu/eatssu/service/MenuService.java | 63 ++++--- .../ssu/eatssu/service/MyPageService.java | 2 +- .../java/ssu/eatssu/service/OauthService.java | 14 +- .../ssu/eatssu/service/RefreshingService.java | 35 ---- .../ssu/eatssu/service/ReportService.java | 2 +- .../ssu/eatssu/service/ReviewService.java | 144 +++++++--------- .../java/ssu/eatssu/service/UserService.java | 3 +- .../java/ssu/eatssu/service/vo/OauthInfo.java | 3 - .../ssu/eatssu/service/vo/OauthInfoVo.java | 4 + .../ssu/eatssu/slack/SlackMessageFormat.java | 2 +- .../ssu/eatssu/utils/RatesCalculator.java | 152 ++++++++++++++++ src/main/java/ssu/eatssu/vo/AverageRates.java | 9 + src/main/java/ssu/eatssu/vo/RateCountMap.java | 30 ++++ .../ssu/eatssu/web/menu/MenuController.java | 66 ++++--- .../ssu/eatssu/web/menu/dto/MenuResDto.java | 103 +++++------ .../eatssu/web/mypage/dto/MyReviewDetail.java | 13 +- .../eatssu/web/review/ReviewController.java | 163 +++++++++--------- .../eatssu/web/review/dto/MealReviewInfo.java | 72 ++++++++ .../eatssu/web/review/dto/MenuReviewInfo.java | 42 +++-- .../eatssu/web/review/dto/ReviewCreate.java | 8 +- .../eatssu/web/review/dto/ReviewDetail.java | 20 ++- src/test/java/ssu/eatssu/domain/MenuTest.java | 19 ++ 38 files changed, 674 insertions(+), 581 deletions(-) delete mode 100644 src/main/generated/ssu/eatssu/domain/QReview.java create mode 100644 src/main/java/ssu/eatssu/domain/review/Rates.java rename src/main/java/ssu/eatssu/domain/{ => review}/Review.java (59%) delete mode 100644 src/main/java/ssu/eatssu/service/RefreshingService.java delete mode 100644 src/main/java/ssu/eatssu/service/vo/OauthInfo.java create mode 100644 src/main/java/ssu/eatssu/service/vo/OauthInfoVo.java create mode 100644 src/main/java/ssu/eatssu/utils/RatesCalculator.java create mode 100644 src/main/java/ssu/eatssu/vo/AverageRates.java create mode 100644 src/main/java/ssu/eatssu/vo/RateCountMap.java create mode 100644 src/main/java/ssu/eatssu/web/review/dto/MealReviewInfo.java create mode 100644 src/test/java/ssu/eatssu/domain/MenuTest.java diff --git a/src/main/generated/ssu/eatssu/domain/QMeal.java b/src/main/generated/ssu/eatssu/domain/QMeal.java index 80c530b0..8bba9956 100644 --- a/src/main/generated/ssu/eatssu/domain/QMeal.java +++ b/src/main/generated/ssu/eatssu/domain/QMeal.java @@ -22,20 +22,14 @@ public class QMeal extends EntityPathBase { public static final QMeal meal = new QMeal("meal"); - public final NumberPath amountRate = createNumber("amountRate", Double.class); - public final DatePath date = createDate("date", java.util.Date.class); public final NumberPath id = createNumber("id", Long.class); - public final NumberPath mainRate = createNumber("mainRate", Double.class); - public final ListPath mealMenus = this.createList("mealMenus", MealMenu.class, QMealMenu.class, PathInits.DIRECT2); public final QRestaurant restaurant; - public final NumberPath tasteRate = createNumber("tasteRate", Double.class); - public final EnumPath timePart = createEnum("timePart", ssu.eatssu.domain.enums.TimePart.class); public QMeal(String variable) { diff --git a/src/main/generated/ssu/eatssu/domain/QMenu.java b/src/main/generated/ssu/eatssu/domain/QMenu.java index b4892c42..b451c360 100644 --- a/src/main/generated/ssu/eatssu/domain/QMenu.java +++ b/src/main/generated/ssu/eatssu/domain/QMenu.java @@ -22,12 +22,8 @@ public class QMenu extends EntityPathBase { public static final QMenu menu = new QMenu("menu"); - public final NumberPath amountRate = createNumber("amountRate", Double.class); - public final NumberPath id = createNumber("id", Long.class); - public final NumberPath mainRate = createNumber("mainRate", Double.class); - public final ListPath mealMenus = this.createList("mealMenus", MealMenu.class, QMealMenu.class, PathInits.DIRECT2); public final StringPath name = createString("name"); @@ -36,17 +32,7 @@ public class QMenu extends EntityPathBase { public final QRestaurant restaurant; - public final NumberPath reviewCnt = createNumber("reviewCnt", Integer.class); - - public final ListPath reviews = this.createList("reviews", Review.class, QReview.class, PathInits.DIRECT2); - - public final NumberPath tasteRate = createNumber("tasteRate", Double.class); - - public final NumberPath totalAmountRate = createNumber("totalAmountRate", Integer.class); - - public final NumberPath totalMainRate = createNumber("totalMainRate", Integer.class); - - public final NumberPath totalTasteRate = createNumber("totalTasteRate", Integer.class); + public final ListPath reviews = this.createList("reviews", ssu.eatssu.domain.review.Review.class, ssu.eatssu.domain.review.QReview.class, PathInits.DIRECT2); public QMenu(String variable) { this(Menu.class, forVariable(variable), INITS); diff --git a/src/main/generated/ssu/eatssu/domain/QReview.java b/src/main/generated/ssu/eatssu/domain/QReview.java deleted file mode 100644 index 13ef63c7..00000000 --- a/src/main/generated/ssu/eatssu/domain/QReview.java +++ /dev/null @@ -1,72 +0,0 @@ -package ssu.eatssu.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QReview is a Querydsl query type for Review - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QReview extends EntityPathBase { - - private static final long serialVersionUID = -564248150L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QReview review = new QReview("review"); - - public final QBaseTimeEntity _super = new QBaseTimeEntity(this); - - public final NumberPath amountRate = createNumber("amountRate", Integer.class); - - public final StringPath content = createString("content"); - - //inherited - public final DateTimePath createdDate = _super.createdDate; - - public final NumberPath id = createNumber("id", Long.class); - - public final NumberPath mainRate = createNumber("mainRate", Integer.class); - - public final QMenu menu; - - //inherited - public final DateTimePath modifiedDate = _super.modifiedDate; - - public final ListPath reviewImgs = this.createList("reviewImgs", ReviewImg.class, QReviewImg.class, PathInits.DIRECT2); - - public final NumberPath tasteRate = createNumber("tasteRate", Integer.class); - - public final QUser user; - - public QReview(String variable) { - this(Review.class, forVariable(variable), INITS); - } - - public QReview(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QReview(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QReview(PathMetadata metadata, PathInits inits) { - this(Review.class, metadata, inits); - } - - public QReview(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.menu = inits.isInitialized("menu") ? new QMenu(forProperty("menu"), inits.get("menu")) : null; - this.user = inits.isInitialized("user") ? new QUser(forProperty("user")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/QReviewImg.java b/src/main/generated/ssu/eatssu/domain/QReviewImg.java index 2e42f504..46895e5d 100644 --- a/src/main/generated/ssu/eatssu/domain/QReviewImg.java +++ b/src/main/generated/ssu/eatssu/domain/QReviewImg.java @@ -26,7 +26,7 @@ public class QReviewImg extends EntityPathBase { public final StringPath imageUrl = createString("imageUrl"); - public final QReview review; + public final ssu.eatssu.domain.review.QReview review; public QReviewImg(String variable) { this(ReviewImg.class, forVariable(variable), INITS); @@ -46,7 +46,7 @@ public QReviewImg(PathMetadata metadata, PathInits inits) { public QReviewImg(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); - this.review = inits.isInitialized("review") ? new QReview(forProperty("review"), inits.get("review")) : null; + this.review = inits.isInitialized("review") ? new ssu.eatssu.domain.review.QReview(forProperty("review"), inits.get("review")) : null; } } diff --git a/src/main/generated/ssu/eatssu/domain/QReviewReport.java b/src/main/generated/ssu/eatssu/domain/QReviewReport.java index 89ad28d6..0486b54e 100644 --- a/src/main/generated/ssu/eatssu/domain/QReviewReport.java +++ b/src/main/generated/ssu/eatssu/domain/QReviewReport.java @@ -36,7 +36,7 @@ public class QReviewReport extends EntityPathBase { public final EnumPath reportType = createEnum("reportType", ssu.eatssu.domain.enums.ReviewReportType.class); - public final QReview review; + public final ssu.eatssu.domain.review.QReview review; public final EnumPath status = createEnum("status", ssu.eatssu.domain.enums.ReportStatus.class); @@ -60,7 +60,7 @@ public QReviewReport(PathMetadata metadata, PathInits inits) { public QReviewReport(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); - this.review = inits.isInitialized("review") ? new QReview(forProperty("review"), inits.get("review")) : null; + this.review = inits.isInitialized("review") ? new ssu.eatssu.domain.review.QReview(forProperty("review"), inits.get("review")) : null; this.user = inits.isInitialized("user") ? new QUser(forProperty("user")) : null; } diff --git a/src/main/generated/ssu/eatssu/domain/QUser.java b/src/main/generated/ssu/eatssu/domain/QUser.java index f34788ea..11bb3c79 100644 --- a/src/main/generated/ssu/eatssu/domain/QUser.java +++ b/src/main/generated/ssu/eatssu/domain/QUser.java @@ -42,7 +42,7 @@ public class QUser extends EntityPathBase { public final ListPath reviewReports = this.createList("reviewReports", ReviewReport.class, QReviewReport.class, PathInits.DIRECT2); - public final ListPath reviews = this.createList("reviews", Review.class, QReview.class, PathInits.DIRECT2); + public final ListPath reviews = this.createList("reviews", ssu.eatssu.domain.review.Review.class, ssu.eatssu.domain.review.QReview.class, PathInits.DIRECT2); public final EnumPath role = createEnum("role", ssu.eatssu.domain.enums.Role.class); diff --git a/src/main/java/ssu/eatssu/domain/Meal.java b/src/main/java/ssu/eatssu/domain/Meal.java index fc97268b..6fe87881 100644 --- a/src/main/java/ssu/eatssu/domain/Meal.java +++ b/src/main/java/ssu/eatssu/domain/Meal.java @@ -6,6 +6,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; +import ssu.eatssu.domain.review.Rates; import ssu.eatssu.domain.enums.TimePart; import java.util.*; @@ -31,13 +32,6 @@ public class Meal { @JoinColumn(name = "restaurant_id") private Restaurant restaurant; - private Double mainRate = 0.0; - - private Double amountRate = 0.0; - - private Double tasteRate = 0.0; - - @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL) private List mealMenus = new ArrayList<>(); @@ -48,40 +42,6 @@ public Meal(Date date, TimePart timePart, Restaurant restaurant){ this.restaurant = restaurant; } - public void caculateRate(){ - if(!mealMenus.isEmpty()){ - int totalReviewCnt = 0; - Double mainRateSum = 0.0; - Double amountRateSum = 0.0; - Double tasteRateSum = 0.0; - for(MealMenu mealMenu : mealMenus){ - Menu menu = mealMenu.getMenu(); - totalReviewCnt += menu.getReviewCnt(); - mainRateSum += menu.getTotalMainRate(); - amountRateSum += menu.getTotalAmountRate(); - tasteRateSum += menu.getTotalTasteRate(); - } - if(totalReviewCnt!=0){ - this.mainRate = mainRateSum/totalReviewCnt; - this.amountRate = amountRateSum/totalReviewCnt; - this.tasteRate = tasteRateSum/totalReviewCnt; - }else{ - this.mainRate = 0.0; - this.amountRate = 0.0; - this.tasteRate = 0.0; - } - - } - } - - public Map getRateMap() { - Map rateMap = new HashMap<>(); - rateMap.put("mainRate", mainRate); - rateMap.put("amountRate", amountRate); - rateMap.put("tasteRate", tasteRate); - return rateMap; - } - public List getMenuNameList(){ return mealMenus.stream().map(mealMenu -> mealMenu.getMenu().getName()).toList(); } diff --git a/src/main/java/ssu/eatssu/domain/Menu.java b/src/main/java/ssu/eatssu/domain/Menu.java index a99ac424..a49aa539 100644 --- a/src/main/java/ssu/eatssu/domain/Menu.java +++ b/src/main/java/ssu/eatssu/domain/Menu.java @@ -1,9 +1,11 @@ package ssu.eatssu.domain; import jakarta.persistence.*; -import lombok.*; -import org.hibernate.annotations.ColumnDefault; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; import ssu.eatssu.domain.enums.MenuTypeGroup; +import ssu.eatssu.domain.review.Review; import java.util.ArrayList; import java.util.List; @@ -22,31 +24,10 @@ public class Menu { private Integer price; - @ColumnDefault("0.0") - private Double mainRate = 0.0; - - @ColumnDefault("0.0") - private Double amountRate = 0.0; - - @ColumnDefault("0.0") - private Double tasteRate = 0.0; - - @ColumnDefault("0") - private Integer totalMainRate = 0; - - @ColumnDefault("0") - private Integer totalAmountRate = 0; - - @ColumnDefault("0") - private Integer totalTasteRate = 0; - - @ColumnDefault("0") - private Integer reviewCnt = 0; - @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) private List mealMenus = new ArrayList<>(); - @ManyToOne(fetch=FetchType.LAZY) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "restaurant_id") private Restaurant restaurant; @@ -66,7 +47,7 @@ private Menu(String name, Restaurant restaurant, Integer price) { */ public static Menu createChangeMenu(String name, Restaurant restaurant) { int price = 0; - if(MenuTypeGroup.isChange(restaurant.getRestaurantName())){ + if (MenuTypeGroup.isChange(restaurant.getRestaurantName())) { price = restaurant.getRestaurantName().getPrice(); } return new Menu(name, restaurant, price); @@ -79,55 +60,4 @@ public static Menu createChangeMenu(String name, Restaurant restaurant) { public static Menu createFixedMenu(String name, Restaurant restaurant, Integer price) { return new Menu(name, restaurant, price); } - - public void addReview(Integer mainRate, Integer tasteRate, Integer amountRate) { - this.reviewCnt++; - this.totalMainRate += mainRate; - this.totalTasteRate += tasteRate; - this.totalAmountRate += amountRate; - calculateRate(); - } - - public void deleteReview(){ - refreshReview(); - } - - public void updateReview() { - refreshReview(); - } - - public void refreshReview(){ - int totalMain = 0; - int totalTaste =0; - int totalAmount = 0; - for(Review review : this.reviews){ - totalMain+=review.getMainRate(); - totalTaste += review.getTasteRate(); - totalAmount+=review.getAmountRate(); - } - this.totalMainRate = totalMain; - this.totalTasteRate = totalTaste; - this.totalAmountRate = totalAmount; - this.reviewCnt = (int)reviews.stream().count(); - calculateRate(); - } - - private void calculateRate(){ // 평점 계산 후 적용 - if(this.reviewCnt==0){ - rateReset(); - }else{ - this.mainRate = this.totalMainRate.doubleValue()/this.reviewCnt.doubleValue(); - this.tasteRate = this.totalTasteRate.doubleValue()/this.reviewCnt.doubleValue(); - this.amountRate = this.totalAmountRate.doubleValue()/this.reviewCnt.doubleValue(); - } - } - - private void rateReset(){ //평점 초기화 - this.totalMainRate = 0; - this.totalTasteRate = 0; - this.totalAmountRate = 0; - this.mainRate = 0.0; - this.tasteRate = 0.0; - this.amountRate = 0.0; - } } diff --git a/src/main/java/ssu/eatssu/domain/ReviewImg.java b/src/main/java/ssu/eatssu/domain/ReviewImg.java index 4a307c0e..b4ec51a3 100644 --- a/src/main/java/ssu/eatssu/domain/ReviewImg.java +++ b/src/main/java/ssu/eatssu/domain/ReviewImg.java @@ -2,6 +2,7 @@ import jakarta.persistence.*; import lombok.*; +import ssu.eatssu.domain.review.Review; @Entity @Getter diff --git a/src/main/java/ssu/eatssu/domain/ReviewReport.java b/src/main/java/ssu/eatssu/domain/ReviewReport.java index 37138828..5d21ed58 100644 --- a/src/main/java/ssu/eatssu/domain/ReviewReport.java +++ b/src/main/java/ssu/eatssu/domain/ReviewReport.java @@ -4,6 +4,7 @@ import lombok.*; import ssu.eatssu.domain.enums.ReportStatus; import ssu.eatssu.domain.enums.ReviewReportType; +import ssu.eatssu.domain.review.Review; @Builder @Entity diff --git a/src/main/java/ssu/eatssu/domain/User.java b/src/main/java/ssu/eatssu/domain/User.java index f6f44376..65e1ccde 100644 --- a/src/main/java/ssu/eatssu/domain/User.java +++ b/src/main/java/ssu/eatssu/domain/User.java @@ -9,6 +9,7 @@ import ssu.eatssu.domain.enums.OauthProvider; import ssu.eatssu.domain.enums.Role; import ssu.eatssu.domain.enums.UserStatus; +import ssu.eatssu.domain.review.Review; import java.util.List; diff --git a/src/main/java/ssu/eatssu/domain/repository/ReviewRepository.java b/src/main/java/ssu/eatssu/domain/repository/ReviewRepository.java index 7334de3d..9e72c63f 100644 --- a/src/main/java/ssu/eatssu/domain/repository/ReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/repository/ReviewRepository.java @@ -2,7 +2,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.Menu; -import ssu.eatssu.domain.Review; +import ssu.eatssu.domain.review.Review; import java.util.List; diff --git a/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryCustom.java b/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryCustom.java index 557e4b9b..b5b84ced 100644 --- a/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryCustom.java +++ b/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryCustom.java @@ -4,7 +4,7 @@ import org.springframework.data.domain.Slice; import ssu.eatssu.domain.Meal; import ssu.eatssu.domain.Menu; -import ssu.eatssu.domain.Review; +import ssu.eatssu.domain.review.Review; import ssu.eatssu.domain.User; public interface ReviewRepositoryCustom { diff --git a/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryImpl.java b/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryImpl.java index 1b74ee9d..41e7c6ba 100644 --- a/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryImpl.java +++ b/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryImpl.java @@ -9,6 +9,8 @@ import org.springframework.data.domain.SliceImpl; import org.springframework.stereotype.Repository; import ssu.eatssu.domain.*; +import ssu.eatssu.domain.review.QReview; +import ssu.eatssu.domain.review.Review; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/ssu/eatssu/domain/review/Rates.java b/src/main/java/ssu/eatssu/domain/review/Rates.java new file mode 100644 index 00000000..e38893f6 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/Rates.java @@ -0,0 +1,20 @@ +package ssu.eatssu.domain.review; + +import jakarta.persistence.Embeddable; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Embeddable +public class Rates { + + Integer mainRate; + + Integer amountRate; + + Integer tasteRate; + +} diff --git a/src/main/java/ssu/eatssu/domain/Review.java b/src/main/java/ssu/eatssu/domain/review/Review.java similarity index 59% rename from src/main/java/ssu/eatssu/domain/Review.java rename to src/main/java/ssu/eatssu/domain/review/Review.java index c51c51d7..66aaa6ff 100644 --- a/src/main/java/ssu/eatssu/domain/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/Review.java @@ -1,7 +1,11 @@ -package ssu.eatssu.domain; +package ssu.eatssu.domain.review; import jakarta.persistence.*; import lombok.*; +import ssu.eatssu.domain.BaseTimeEntity; +import ssu.eatssu.domain.Menu; +import ssu.eatssu.domain.ReviewImg; +import ssu.eatssu.domain.User; import java.util.List; @@ -11,7 +15,7 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Builder @AllArgsConstructor -public class Review extends BaseTimeEntity{ +public class Review extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -20,31 +24,26 @@ public class Review extends BaseTimeEntity{ private String content; - private Integer mainRate; - - private Integer amountRate; - - private Integer tasteRate; - - @ManyToOne(fetch=FetchType.LAZY) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private User user; - @ManyToOne(fetch=FetchType.LAZY) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "menu_id") private Menu menu; + @Embedded + private Rates rates; + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL) private List reviewImgs; - public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate){ + public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { this.content = content; - this.mainRate = mainRate; - this.amountRate = amountRate; - this.tasteRate = tasteRate; + this.rates = new Rates(mainRate, amountRate, tasteRate); } - public void signoutUser(){ + public void signoutUser() { this.user = null; } diff --git a/src/main/java/ssu/eatssu/service/MenuService.java b/src/main/java/ssu/eatssu/service/MenuService.java index adcb3406..5c50848a 100644 --- a/src/main/java/ssu/eatssu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/service/MenuService.java @@ -17,10 +17,13 @@ import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponseStatus; import ssu.eatssu.utils.DateUtil; +import ssu.eatssu.utils.RatesCalculator; import ssu.eatssu.web.menu.dto.MenuReqDto; import java.text.ParseException; -import java.util.*; +import java.util.Collections; +import java.util.Date; +import java.util.List; import static ssu.eatssu.web.menu.dto.MenuResDto.*; @@ -35,23 +38,28 @@ public class MenuService { private final MealMenuRepository mealMenuRepository; private final RestaurantRepository restaurantRepository; + private final RatesCalculator ratesCalculator; + /** * 고정 메뉴 조회 *

특정 식당에 해당하는 고정메뉴 목록을 조회합니다.

*/ - public FixMenuList findFixMenuList(RestaurantName restaurantName) { + public List findFixMenuList(RestaurantName restaurantName) { Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); - return FixMenuList.from(menuRepository.findAllByRestaurant(restaurant)); + List menuList = menuRepository.findAllByRestaurant(restaurant); + return menuList.stream() + .map(menu -> FixMenuInfo.from(menu, ratesCalculator.menuAverageMainRate(menu))) + .toList(); } /** * 식단 목록 조회 *

변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회한다.

*/ - public List findMealList(TimePart timePart, String date, RestaurantName restaurantName){ + public List findMealList(TimePart timePart, String date, RestaurantName restaurantName) { Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); @@ -59,14 +67,17 @@ public List findMealList(TimePart timePart, String date, RestaurantNa List mealList = mealRepository.findAllByDateAndTimePartAndRestaurant(toDate(date), timePart, restaurant); //mealList 를 TodayMeal 로 매핑 후 반환 - return mealList.stream().map(TodayMeal::from).toList(); + return mealList.stream() + .map(meal -> TodayMeal.from(meal, ratesCalculator.mealAverageMainRate(meal))) + .toList(); } /** * 식단 등록 */ - public void createMeal(TimePart timePart, String date, RestaurantName restaurantName, MenuReqDto.AddTodayMenuList addTodayMenuList) { + public void createMeal(TimePart timePart, String date, RestaurantName restaurantName, + MenuReqDto.AddTodayMenuList addTodayMenuList) { Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); @@ -83,8 +94,6 @@ public void createMeal(TimePart timePart, String date, RestaurantName restaurant //식단에 메뉴 추가 addMenu(newMeal, addTodayMenuList); - //식단 평점 업데이트 - newMeal.caculateRate(); } /** @@ -95,11 +104,7 @@ private void addMenu(Meal meal, MenuReqDto.AddTodayMenuList addTodayMenuList) { Restaurant restaurant = meal.getRestaurant(); for (String addMenuName : addTodayMenuList.getTodayMenuList()) { - //메뉴 체크 (기존에 없던 새로운 메뉴 라면) - if (!menuRepository.existsByNameAndRestaurant(addMenuName, restaurant)) { - //메뉴 추가 - menuRepository.save(Menu.createChangeMenu(addMenuName, restaurant)); - } + checkAndCreateMenu(addMenuName, restaurant); //메뉴 찾아서 Menu menu = menuRepository.findByNameAndRestaurant(addMenuName, restaurant) @@ -111,23 +116,39 @@ private void addMenu(Meal meal, MenuReqDto.AddTodayMenuList addTodayMenuList) { } } + /** + * 기존에 존재하는 메뉴인지 체크 후 없으면 메뉴 등록 + */ + private void checkAndCreateMenu(String menuName, Restaurant restaurant) { + + //메뉴 체크 (기존에 없던 새로운 메뉴인지) + if (!menuRepository.existsByNameAndRestaurant(menuName, restaurant)) { + //메뉴 등록 + menuRepository.save(Menu.createChangeMenu(menuName, restaurant)); + } + + //메뉴 등록 + menuRepository.save(Menu.createChangeMenu(menuName, restaurant)); + } + /** * 이미 존재하는 식단인지 확인 */ - public boolean isExistMeal(TimePart timePart, String date, Restaurant restaurant, MenuReqDto.AddTodayMenuList addTodayMenuList){ + public boolean isExistMeal(TimePart timePart, String date, Restaurant restaurant, + MenuReqDto.AddTodayMenuList addTodayMenuList) { - List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(toDate(date),timePart,restaurant); + List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(toDate(date), timePart, restaurant); //비교를 위한 정렬 Collections.sort(addTodayMenuList.getTodayMenuList()); //식단 목록을 돌면서 메뉴 목록을 정렬하고 비교 - for(Meal meal : meals){ + for (Meal meal : meals) { List menuNameList = meal.getMenuNameList(); Collections.sort(menuNameList); //메뉴 목록이 같다면 이미 존재하는 식단 - if(menuNameList.equals(addTodayMenuList.getTodayMenuList())){ + if (menuNameList.equals(addTodayMenuList.getTodayMenuList())) { return true; } } @@ -141,7 +162,7 @@ public boolean isExistMeal(TimePart timePart, String date, Restaurant restaurant public MenuList findMenuListInMeal(Long mealId) { Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); return MenuList.from(meal); } @@ -171,8 +192,8 @@ public void deleteMeal(Long mealId) { */ public void cleanupGarbageMenu(List menuList) { - for(Menu menu : menuList){ - if(menu.getMealMenus().isEmpty()) { + for (Menu menu : menuList) { + if (menu.getMealMenus().isEmpty()) { menuRepository.delete(menu); } } @@ -183,7 +204,7 @@ public void cleanupGarbageMenu(List menuList) { */ public Date toDate(String date) throws BaseException { - try{ + try { return DateUtil.toDate("yyyyMMdd", date); } catch (ParseException e) { throw new BaseException(BaseResponseStatus.INVALID_DATE); diff --git a/src/main/java/ssu/eatssu/service/MyPageService.java b/src/main/java/ssu/eatssu/service/MyPageService.java index e36cbe73..bd7db483 100644 --- a/src/main/java/ssu/eatssu/service/MyPageService.java +++ b/src/main/java/ssu/eatssu/service/MyPageService.java @@ -6,7 +6,7 @@ import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import ssu.eatssu.domain.Review; +import ssu.eatssu.domain.review.Review; import ssu.eatssu.domain.User; import ssu.eatssu.domain.repository.ReviewRepository; import ssu.eatssu.domain.repository.UserRepository; diff --git a/src/main/java/ssu/eatssu/service/OauthService.java b/src/main/java/ssu/eatssu/service/OauthService.java index ec79e155..874fb7e1 100644 --- a/src/main/java/ssu/eatssu/service/OauthService.java +++ b/src/main/java/ssu/eatssu/service/OauthService.java @@ -7,8 +7,6 @@ import io.jsonwebtoken.Claims; import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.Jwts; -import lombok.AllArgsConstructor; -import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; @@ -26,7 +24,7 @@ import ssu.eatssu.handler.response.BaseResponseStatus; import ssu.eatssu.jwt.JwtTokenProvider; import ssu.eatssu.handler.response.BaseException; -import ssu.eatssu.service.vo.OauthInfo; +import ssu.eatssu.service.vo.OauthInfoVo; import ssu.eatssu.web.oauth.dto.AppleKeys; import ssu.eatssu.web.user.dto.Tokens; @@ -39,10 +37,8 @@ import java.security.spec.RSAPublicKeySpec; import java.util.Base64; import java.util.Map; -import java.util.Optional; import static ssu.eatssu.handler.response.BaseResponseStatus.INVALID_IDENTITY_TOKEN; -import static ssu.eatssu.handler.response.BaseResponseStatus.INVALID_TOKEN; @Slf4j @RequiredArgsConstructor @@ -78,7 +74,7 @@ public Tokens kakaoLogin(String email, String providerId) { public Tokens appleLogin(String identityToken) throws NoSuchAlgorithmException, InvalidKeySpecException { //애플 유저 정보 조회 - OauthInfo oauthInfo = getUserInfoFromApple(identityToken); + OauthInfoVo oauthInfo = getUserInfoFromApple(identityToken); //가입 안된 유저일 경우 회원가입 진행 User user = userRepository.findByProviderId(oauthInfo.providerId()) @@ -149,7 +145,7 @@ private void updateAppleUserEmail(User user, String email) { /** * 애플 로그인 - 유저 정보(providerId, email) 조회 */ - private OauthInfo getUserInfoFromApple(String identityToken) { + private OauthInfoVo getUserInfoFromApple(String identityToken) { PublicKey publicKey = generatePublicKey(identityToken); @@ -159,7 +155,7 @@ private OauthInfo getUserInfoFromApple(String identityToken) { /** * 애플 로그인 - PublicKey 를 통해 유저 정보(providerId, email) 조회 */ - private OauthInfo getUserInfoByPublicKey(String identityToken, PublicKey publicKey) { + private OauthInfoVo getUserInfoByPublicKey(String identityToken, PublicKey publicKey) { // identityToken 에서 publicKey 서명을 통해 Claims 를 추출한다. Claims claims = Jwts.parserBuilder() @@ -172,7 +168,7 @@ private OauthInfo getUserInfoByPublicKey(String identityToken, PublicKey publicK try{ String email = claims.get("email").toString(); String providerId = claims.get("sub").toString(); - return new OauthInfo(email,providerId); + return new OauthInfoVo(email,providerId); }catch (ExpiredJwtException exception){ throw new BaseException(INVALID_IDENTITY_TOKEN); } diff --git a/src/main/java/ssu/eatssu/service/RefreshingService.java b/src/main/java/ssu/eatssu/service/RefreshingService.java deleted file mode 100644 index 8cfa0b18..00000000 --- a/src/main/java/ssu/eatssu/service/RefreshingService.java +++ /dev/null @@ -1,35 +0,0 @@ -package ssu.eatssu.service; - -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import ssu.eatssu.domain.Meal; -import ssu.eatssu.domain.Menu; -import ssu.eatssu.domain.repository.*; - -import java.util.List; - -/** - * 리뷰 정보(별점, 리뷰 개수 ..) 이상할 때 refresh하는 클래스 - */ -@RequiredArgsConstructor -@Service -@Transactional -public class RefreshingService { - private final UserRepository userRepository; - private final ReviewRepository reviewRepository; - private final ReviewImgRepository reviewImgRepository; - private final MenuRepository menuRepository; - private final MealRepository mealRepository; - - public void refreshAllReviews(){ - List menuList = menuRepository.findAll(); - for(Menu menu : menuList){ - menu.refreshReview(); - } - List mealList = mealRepository.findAll(); - for(Meal meal : mealList){ - meal.caculateRate(); - } - } -} diff --git a/src/main/java/ssu/eatssu/service/ReportService.java b/src/main/java/ssu/eatssu/service/ReportService.java index 73ad37da..f37f1d44 100644 --- a/src/main/java/ssu/eatssu/service/ReportService.java +++ b/src/main/java/ssu/eatssu/service/ReportService.java @@ -3,7 +3,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import ssu.eatssu.domain.Review; +import ssu.eatssu.domain.review.Review; import ssu.eatssu.domain.ReviewReport; import ssu.eatssu.domain.User; import ssu.eatssu.domain.enums.ReportStatus; diff --git a/src/main/java/ssu/eatssu/service/ReviewService.java b/src/main/java/ssu/eatssu/service/ReviewService.java index b72919c5..4d6158e0 100644 --- a/src/main/java/ssu/eatssu/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/service/ReviewService.java @@ -7,20 +7,24 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; -import ssu.eatssu.domain.*; +import ssu.eatssu.domain.Meal; +import ssu.eatssu.domain.Menu; +import ssu.eatssu.domain.ReviewImg; +import ssu.eatssu.domain.User; import ssu.eatssu.domain.repository.*; +import ssu.eatssu.domain.review.Review; import ssu.eatssu.handler.response.BaseException; +import ssu.eatssu.utils.RatesCalculator; import ssu.eatssu.utils.S3Uploader; import ssu.eatssu.utils.SecurityUtil; +import ssu.eatssu.vo.AverageRates; +import ssu.eatssu.vo.RateCountMap; import ssu.eatssu.web.SliceDto; import ssu.eatssu.web.review.dto.*; import java.io.IOException; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; import static ssu.eatssu.handler.response.BaseResponseStatus.*; @@ -34,23 +38,25 @@ public class ReviewService { private final ReviewImgRepository reviewImgRepository; private final MenuRepository menuRepository; private final MealRepository mealRepository; + private final S3Uploader s3Uploader; + private final RatesCalculator ratesCalculator; /** * 리뷰 작성 */ - public void createReview(Long userId, Long menuId, ReviewCreate reviewCreate, List imgList) { + public void createReview(Long userId, Long menuId, ReviewCreate reviewCreate, List imgList) { User user = userRepository.findById(userId) - .orElseThrow(()-> new BaseException(NOT_FOUND_USER)); + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + Menu menu = menuRepository.findById(menuId) - .orElseThrow(()-> new BaseException(NOT_FOUND_MENU)); + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + Review review = reviewCreate.toEntity(user, menu); reviewRepository.save(review); - menu.addReview(reviewCreate.getMainRate(),reviewCreate.getTasteRate(), reviewCreate.getAmountRate()); - menuRepository.save(menu); - if(imgList!=null&&!imgList.isEmpty()){ - for(MultipartFile img : imgList){ + if (imgList != null && !imgList.isEmpty()) { + for (MultipartFile img : imgList) { addReviewImg(review, img); } } @@ -60,32 +66,31 @@ public void createReview(Long userId, Long menuId, ReviewCreate reviewCreate, Li * 리뷰 이미지 추가 */ public void addReviewImg(Review review, MultipartFile image) { - if(!image.isEmpty()){ - try{ + if (!image.isEmpty()) { + try { String reviewImgUrl = s3Uploader.upload(image, "reviewImg"); ReviewImg reviewImg = ReviewImg.builder().review(review).imageUrl(reviewImgUrl).build(); reviewImgRepository.save(reviewImg); - }catch (IOException e){ + } catch (IOException e) { throw new BaseException(FAIL_IMG_UPLOAD); } } } /** - * 리뷰 문장 수정 + * 리뷰 문장 및 별점 수정 */ public void updateReviewContent(Long userId, Long reviewId, ReviewUpdate reviewUpdate) { User user = userRepository.findById(userId) - .orElseThrow(()-> new BaseException(NOT_FOUND_USER)); + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Review review = reviewRepository.findById(reviewId) - .orElseThrow(()-> new BaseException(NOT_FOUND_REVIEW)); + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - if(isWriterOrAdmin(review, user)){ - review.update(reviewUpdate.getContent(), reviewUpdate.getMainRate(), reviewUpdate.getAmountRate() - , reviewUpdate.getTasteRate()); - review.getMenu().updateReview(); - }else{ + if (isWriterOrAdmin(review, user)) { + review.update(reviewUpdate.getContent() + , reviewUpdate.getMainRate(), reviewUpdate.getAmountRate(), reviewUpdate.getTasteRate()); + } else { throw new BaseException(REVIEW_PERMISSION_DENIED); } } @@ -93,17 +98,17 @@ public void updateReviewContent(Long userId, Long reviewId, ReviewUpdate reviewU /** * 리뷰 삭제 */ - public void deleteReview(Long userId, Long reviewId){ + public void deleteReview(Long userId, Long reviewId) { User user = userRepository.findById(userId) - .orElseThrow(()-> new BaseException(NOT_FOUND_USER)); + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Review review = reviewRepository.findById(reviewId) - .orElseThrow(()-> new BaseException(NOT_FOUND_REVIEW)); - if(isWriterOrAdmin(review, user)){ + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (isWriterOrAdmin(review, user)) { reviewRepository.delete(review); reviewRepository.flush(); - review.getMenu().deleteReview(); - }else{ + } else { throw new BaseException(REVIEW_PERMISSION_DENIED); } } @@ -111,7 +116,7 @@ public void deleteReview(Long userId, Long reviewId){ /** * 리뷰 작성자/관리자 인지 확인 //todo 관리자인지는 빼도 될듯 */ - public boolean isWriterOrAdmin(Review review, User user){ + public boolean isWriterOrAdmin(Review review, User user) { return review.getUser() == user; } @@ -121,64 +126,39 @@ public boolean isWriterOrAdmin(Review review, User user){ public MenuReviewInfo findReviewInfoByMenuId(Long menuId) { Menu menu = menuRepository.findById(menuId) .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - List reviewMenuList = new ArrayList<>(); - reviewMenuList.add(menu.getName()); - - return MenuReviewInfo.builder() - .menuName(reviewMenuList).mainRate(menu.getMainRate()).tasteRate(menu.getTasteRate()) - .amountRate(menu.getAmountRate()).totalReviewCount(menu.getReviewCnt()) - .reviewRateCnt(MenuReviewInfo.ReviewRateCnt.fromMap(getReviewRateCnt(menu))) - .build(); + + AverageRates averageRate = ratesCalculator.menuAverageRates(menu); + + RateCountMap rateCountMap = ratesCalculator.menuRateCountMap(menu); + + return MenuReviewInfo.of(menu, averageRate, rateCountMap); + } /** * 변동메뉴 - 리뷰 정보 조회 */ - public MenuReviewInfo findReviewInfoByMealId(Long mealId) { + public MealReviewInfo findReviewInfoByMealId(Long mealId) { Meal meal = mealRepository.findById(mealId) .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); - List menuList = new ArrayList<>(); - meal.getMealMenus().forEach(mealMenu -> menuList.add(mealMenu.getMenu())); - List reviewMenuList = new ArrayList<>(); - menuList.forEach(menu ->reviewMenuList.add(menu.getName())); - List> rateCntMapList = - menuList.stream().map(this::getReviewRateCnt).toList(); - Map totalRateCntMap = rateCntMapList.stream().flatMap(m -> m.entrySet().stream()) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, Long::sum)); - meal.caculateRate(); - return MenuReviewInfo.builder() - .menuName(reviewMenuList).mainRate(meal.getMainRate()).tasteRate(meal.getTasteRate()) - .amountRate(meal.getAmountRate()).totalReviewCount(menuList.stream().mapToInt(Menu::getReviewCnt).sum()) - .reviewRateCnt(MenuReviewInfo.ReviewRateCnt.fromMap(totalRateCntMap)) - .build(); - } - /** - * 메뉴의 리뷰 평점별 개수 조회 - */ - public Map getReviewRateCnt(Menu menu) { - List reviewList = menu.getReviews(); - long oneCnt = reviewList.stream().filter(r -> r.getMainRate() == 1).count(); - long twoCnt = reviewList.stream().filter(r -> r.getMainRate() == 2).count(); - long threeCnt = reviewList.stream().filter(r -> r.getMainRate() == 3).count(); - long fourCnt = reviewList.stream().filter(r -> r.getMainRate() == 4).count(); - long fiveCnt = reviewList.stream().filter(r -> r.getMainRate() == 5).count(); - Map reviewRateCntMap = new HashMap<>(); - reviewRateCntMap.put(1, oneCnt); - reviewRateCntMap.put(2,twoCnt); - reviewRateCntMap.put(3,threeCnt); - reviewRateCntMap.put(4,fourCnt); - reviewRateCntMap.put(5,fiveCnt); - return reviewRateCntMap; + int reviewCount = ratesCalculator.mealTotalReviewCount(meal); + + AverageRates averageRate = ratesCalculator.mealAverageRates(meal); + + RateCountMap rateCountMap = ratesCalculator.mealRateCountMap(meal); + + return MealReviewInfo.of(meal.getMenuNameList(), reviewCount, averageRate, rateCountMap); } + /** * Slice를 Slice로 변환 */ - private SliceDto sliceReviewToSliceReviewDetail(Slice sliceReviewList){ + private SliceDto sliceReviewToSliceReviewDetail(Slice sliceReviewList) { Long userId = SecurityUtil.getLoginUserId(); List reviewDetailList = new ArrayList<>(); - for(Review review : sliceReviewList){ + for (Review review : sliceReviewList) { ReviewDetail reviewDetail = ReviewDetail.from(review, userId); reviewDetailList.add(reviewDetail); } @@ -191,19 +171,19 @@ private SliceDto sliceReviewToSliceReviewDetail(Slice slic */ public SliceDto findReviewListByMenuId(Long menuId, Pageable pageable, Long lastReviewId) { Menu menu = menuRepository.findById(menuId) - .orElseThrow(()->new BaseException(NOT_FOUND_MENU)); + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); //pageable에서 sort값 가져옴 String sortBy = pageable.getSort().get().findFirst().orElseThrow().getProperty(); //pageable에서 direction값 가져옴 Sort.Direction direction = pageable.getSort().get().findFirst().orElseThrow().getDirection(); Slice sliceReviewList; - if (sortBy.equals("date")){ //리뷰 날짜가 기준 - if(direction.isDescending()){ //최신순 정렬 + if (sortBy.equals("date")) { //리뷰 날짜가 기준 + if (direction.isDescending()) { //최신순 정렬 sliceReviewList = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, pageable); - }else{ + } else { sliceReviewList = reviewRepository.findAllByMenuOrderByIdAsc(menu, lastReviewId, pageable); } - }else{ //TODO 날짜 외에 정렬 기준 추가 + } else { //TODO 날짜 외에 정렬 기준 추가 sliceReviewList = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, pageable); } return sliceReviewToSliceReviewDetail(sliceReviewList); @@ -214,19 +194,19 @@ public SliceDto findReviewListByMenuId(Long menuId, Pageable pagea */ public SliceDto findReviewListByMealId(Long mealId, Pageable pageable, Long lastReviewId) { Meal meal = mealRepository.findById(mealId) - .orElseThrow(()->new BaseException(NOT_FOUND_MEAL)); + .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); //pageable에서 sort값 가져옴 String sortBy = pageable.getSort().get().findFirst().orElseThrow().getProperty(); //pageable에서 direction값 가져옴 Sort.Direction direction = pageable.getSort().get().findFirst().orElseThrow().getDirection(); Slice sliceReviewList; - if (sortBy.equals("date")){ //리뷰 날짜가 기준 - if(direction.isDescending()){ //최신순 정렬 + if (sortBy.equals("date")) { //리뷰 날짜가 기준 + if (direction.isDescending()) { //최신순 정렬 sliceReviewList = reviewRepository.findAllByMealOrderByIdDesc(meal, lastReviewId, pageable); - }else{ + } else { sliceReviewList = reviewRepository.findAllByMealOrderByIdAsc(meal, lastReviewId, pageable); } - }else{ //TODO 날짜 외에 정렬 기준 추가 + } else { //TODO 날짜 외에 정렬 기준 추가 sliceReviewList = reviewRepository.findAllByMealOrderByIdDesc(meal, lastReviewId, pageable); } return sliceReviewToSliceReviewDetail(sliceReviewList); diff --git a/src/main/java/ssu/eatssu/service/UserService.java b/src/main/java/ssu/eatssu/service/UserService.java index 6cd90b3c..c0a45799 100644 --- a/src/main/java/ssu/eatssu/service/UserService.java +++ b/src/main/java/ssu/eatssu/service/UserService.java @@ -1,6 +1,5 @@ package ssu.eatssu.service; -import com.fasterxml.jackson.core.JsonProcessingException; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -8,7 +7,7 @@ import org.springframework.security.core.Authentication; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; -import ssu.eatssu.domain.Review; +import ssu.eatssu.domain.review.Review; import ssu.eatssu.domain.ReviewReport; import ssu.eatssu.domain.User; import ssu.eatssu.domain.repository.ReviewReportRepository; diff --git a/src/main/java/ssu/eatssu/service/vo/OauthInfo.java b/src/main/java/ssu/eatssu/service/vo/OauthInfo.java deleted file mode 100644 index 33af4335..00000000 --- a/src/main/java/ssu/eatssu/service/vo/OauthInfo.java +++ /dev/null @@ -1,3 +0,0 @@ -package ssu.eatssu.service.vo; - -public record OauthInfo(String email, String providerId) {} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/service/vo/OauthInfoVo.java b/src/main/java/ssu/eatssu/service/vo/OauthInfoVo.java new file mode 100644 index 00000000..1772e111 --- /dev/null +++ b/src/main/java/ssu/eatssu/service/vo/OauthInfoVo.java @@ -0,0 +1,4 @@ +package ssu.eatssu.service.vo; + +public record OauthInfoVo(String email, String providerId) { +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/slack/SlackMessageFormat.java b/src/main/java/ssu/eatssu/slack/SlackMessageFormat.java index 814074ce..5e0c20fd 100644 --- a/src/main/java/ssu/eatssu/slack/SlackMessageFormat.java +++ b/src/main/java/ssu/eatssu/slack/SlackMessageFormat.java @@ -1,7 +1,7 @@ package ssu.eatssu.slack; import org.springframework.stereotype.Component; -import ssu.eatssu.domain.Review; +import ssu.eatssu.domain.review.Review; import ssu.eatssu.domain.ReviewReport; import ssu.eatssu.domain.User; import ssu.eatssu.domain.UserInquiry; diff --git a/src/main/java/ssu/eatssu/utils/RatesCalculator.java b/src/main/java/ssu/eatssu/utils/RatesCalculator.java new file mode 100644 index 00000000..64326313 --- /dev/null +++ b/src/main/java/ssu/eatssu/utils/RatesCalculator.java @@ -0,0 +1,152 @@ +package ssu.eatssu.utils; + +import org.springframework.stereotype.Component; +import ssu.eatssu.domain.Meal; +import ssu.eatssu.domain.MealMenu; +import ssu.eatssu.domain.Menu; +import ssu.eatssu.vo.AverageRates; +import ssu.eatssu.vo.RateCountMap; + +import java.util.HashMap; +import java.util.Map; + +@Component +public class RatesCalculator { + + // 식단 각 평점별 개수 계산 + public RateCountMap mealRateCountMap(Meal meal) { + + RateCountMap rateCountMap = new RateCountMap(); + + meal.getMealMenus().forEach(mealMenu -> rateCountMap.append(menuRateCountMap(mealMenu.getMenu()))); + + return rateCountMap; + } + + // 메뉴 각 평점별 개수 계산 + public RateCountMap menuRateCountMap(Menu menu) { + Map rateCountMap = new HashMap<>(); + + menu.getReviews().forEach(review -> { + int rate = review.getRates().getMainRate(); + rateCountMap.put(rate, rateCountMap.getOrDefault(rate, 0) + 1); + }); + + return new RateCountMap(rateCountMap); + } + + // 식단 평균 평점 세트 계산 + public AverageRates mealAverageRates(Meal meal) { + int totalReviewCount = mealTotalReviewCount(meal); + + if (totalReviewCount == 0) + return new AverageRates(null, null, null); + + return AverageRates.builder() + .mainRate(averageRate(mealTotalMainRate(meal), totalReviewCount)) + .amountRate(averageRate(mealTotalAmountRate(meal), totalReviewCount)) + .tasteRate(averageRate(mealTotalTasteRate(meal), totalReviewCount)) + .build(); + } + + // 메뉴 평균 평점 세트 계산 + public AverageRates menuAverageRates(Menu menu) { + int totalReviewCount = menu.getReviews().size(); + + if (totalReviewCount == 0) + return new AverageRates(null, null, null); + + return AverageRates.builder() + .mainRate(averageRate(menuTotalMainRate(menu), totalReviewCount)) + .amountRate(averageRate(menuTotalAmountRate(menu), totalReviewCount)) + .tasteRate(averageRate(menuTotalTasteRate(menu), totalReviewCount)) + .build(); + } + + // 식단 메인 평점 평균 계산 + public Double mealAverageMainRate(Meal meal) { + int totalReviewCount = mealTotalReviewCount(meal); + + if (totalReviewCount == 0) { + return null; + } + + return averageRate(mealTotalMainRate(meal), totalReviewCount); + } + + // 메뉴 메인 평점 평균 계산 + public Double menuAverageMainRate(Menu menu) { + if (menu.getReviews().isEmpty()) { + return null; + } + + return averageRate(menuTotalMainRate(menu), menu.getReviews().size()); + } + + // 식단 총 리뷰 개수 + public int mealTotalReviewCount(Meal meal) { + return (int) meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(Menu::getReviews).count(); + } + + // 평균 평점 계산 + private Double averageRate(Integer totalRate, int totalReviewCount) { + if (totalRate == null || totalReviewCount == 0) { + return null; + } + return totalRate / (double) totalReviewCount; + } + + // 식단 메인 평점 총합 + private Integer mealTotalMainRate(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(menu -> menu.getReviews().stream() + .map(review -> review.getRates().getMainRate()) + .reduce(null, Integer::sum)) + .reduce(null, Integer::sum); + } + + // 식단 양 평점 총합 + private Integer mealTotalAmountRate(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(menu -> menu.getReviews().stream() + .map(review -> review.getRates().getAmountRate()) + .reduce(null, Integer::sum)) + .reduce(null, Integer::sum); + } + + // 식단 맛 평점 총합 + private Integer mealTotalTasteRate(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(menu -> menu.getReviews().stream() + .map(review -> review.getRates().getTasteRate()) + .reduce(null, Integer::sum)) + .reduce(null, Integer::sum); + } + + // 메뉴 메인 평점 총합 + private Integer menuTotalMainRate(Menu menu) { + return menu.getReviews().stream() + .map(review -> review.getRates().getMainRate()) + .reduce(null, Integer::sum); + } + + // 메뉴 양 평점 총합 + private Integer menuTotalAmountRate(Menu menu) { + return menu.getReviews().stream() + .map(review -> review.getRates().getAmountRate()) + .reduce(null, Integer::sum); + } + + // 메뉴 맛 평점 총합 + private Integer menuTotalTasteRate(Menu menu) { + return menu.getReviews().stream() + .map(review -> review.getRates().getTasteRate()) + .reduce(null, Integer::sum); + } + +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/vo/AverageRates.java b/src/main/java/ssu/eatssu/vo/AverageRates.java new file mode 100644 index 00000000..46d1dbce --- /dev/null +++ b/src/main/java/ssu/eatssu/vo/AverageRates.java @@ -0,0 +1,9 @@ +package ssu.eatssu.vo; + +import lombok.Builder; + +public record AverageRates(Double mainRate, Double amountRate, Double tasteRate) { + @Builder + public AverageRates { + } +} diff --git a/src/main/java/ssu/eatssu/vo/RateCountMap.java b/src/main/java/ssu/eatssu/vo/RateCountMap.java new file mode 100644 index 00000000..e8a4b641 --- /dev/null +++ b/src/main/java/ssu/eatssu/vo/RateCountMap.java @@ -0,0 +1,30 @@ +package ssu.eatssu.vo; + +import java.util.HashMap; +import java.util.Map; + +public class RateCountMap { + private Map rateCountMap = new HashMap<>(); + + public RateCountMap(Map rateCountMap) { + // TODO: key 값이 1~5가 아닌 경우 예외처리 + this.rateCountMap = rateCountMap; + } + + public RateCountMap() { + this.rateCountMap = new HashMap<>(Map.of(1, 0, 2, 0, 3, 0, 4, 0, 5, 0)); + } + + private Map getMap() { + return this.rateCountMap; + } + + public void append(RateCountMap map) { + map.getMap().forEach((key, value) -> rateCountMap.merge(key, value, Integer::sum)); + } + + public int get(int rate) { + return rateCountMap.get(rate); + } + +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/web/menu/MenuController.java b/src/main/java/ssu/eatssu/web/menu/MenuController.java index 26ed7a39..a925740a 100644 --- a/src/main/java/ssu/eatssu/web/menu/MenuController.java +++ b/src/main/java/ssu/eatssu/web/menu/MenuController.java @@ -10,8 +10,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.Meal; -import ssu.eatssu.domain.Menu; import ssu.eatssu.domain.enums.MenuTypeGroup; import ssu.eatssu.domain.enums.RestaurantName; import ssu.eatssu.domain.enums.TimePart; @@ -20,11 +18,8 @@ import ssu.eatssu.service.MenuService; import ssu.eatssu.web.menu.dto.MenuReqDto.AddTodayMenuList; -import java.text.ParseException; -import java.util.ArrayList; import java.util.List; -import static ssu.eatssu.handler.response.BaseResponseStatus.INVALID_DATE; import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; import static ssu.eatssu.web.menu.dto.MenuResDto.*; @@ -48,9 +43,12 @@ public class MenuController { 일반적으로 학생식당과 도담의 경우 식단 여러개가 조회되고 기숙사식당은 한개만 조회됩니다.) """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정메뉴 식당)", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) }) @GetMapping("/today-meal") //todo today-meal은 아닌것 같음 public BaseResponse> getMealList(@Parameter(description = "날짜(yyyyMMdd)") @@ -75,14 +73,17 @@ public BaseResponse> getMealList(@Parameter(description = "날 메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 리스트를 조회합니다. """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) }) @GetMapping("/fix-menu") - public BaseResponse getFixMenuList(@Parameter(description = "식당이름") + public BaseResponse> getFixMenuList(@Parameter(description = "식당이름") @RequestParam("restaurant") RestaurantName restaurantName) { - if(MenuTypeGroup.isChange(restaurantName)) { + if (MenuTypeGroup.isChange(restaurantName)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } @@ -101,19 +102,23 @@ public BaseResponse getFixMenuList(@Parameter(description = "식당 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 추가 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "식단 추가 성공", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) }) @PostMapping("/") public BaseResponse addMeal(@Parameter(description = "날짜(yyyyMMdd)") - @RequestParam("date") String date, - @Parameter(description = "식당이름") - @RequestParam("restaurant") RestaurantName restaurantName, - @Parameter(description = "시간대") - @RequestParam("time") TimePart timePart, - @RequestBody AddTodayMenuList addTodayMenuList) { + @RequestParam("date") String date, + @Parameter(description = "식당이름") + @RequestParam("restaurant") RestaurantName restaurantName, + @Parameter(description = "시간대") + @RequestParam("time") TimePart timePart, + @RequestBody AddTodayMenuList addTodayMenuList) { if (MenuTypeGroup.isFix(restaurantName)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } @@ -131,8 +136,10 @@ public BaseResponse addMeal(@Parameter(description = "날짜(yyyyMMdd)") 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) }) @GetMapping("/menus") public BaseResponse getMenuListInMeal(@Parameter(description = "mealId") @@ -146,11 +153,14 @@ public BaseResponse getMenuListInMeal(@Parameter(description = "mealId */ @Operation(summary = "식단 삭제", description = "식단을 삭제하는 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 삭제 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "식단 삭제 성공", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) }) @DeleteMapping("/meal/{mealId}") - public BaseResponse deleteMeal(@Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { //todo : 관리자 API + public BaseResponse deleteMeal(@Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { + //todo : 관리자 API menuService.deleteMeal(mealId); return BaseResponse.success(); } diff --git a/src/main/java/ssu/eatssu/web/menu/dto/MenuResDto.java b/src/main/java/ssu/eatssu/web/menu/dto/MenuResDto.java index 00c01229..251b6354 100644 --- a/src/main/java/ssu/eatssu/web/menu/dto/MenuResDto.java +++ b/src/main/java/ssu/eatssu/web/menu/dto/MenuResDto.java @@ -30,35 +30,36 @@ public static class TodayMeal { @Schema(description = "식단 평점(평점이 없으면 null)", example = "4.4") private Double mainRate; - @Schema(description = "식단 속 메뉴 리스트") - private List changeMenuInfoList; + @Schema(description = "식단 속 메뉴 정보 리스트") + private List menuInfoList; + + public static TodayMeal from(Meal meal, Double mainRate) { + if (!meal.getMealMenus().isEmpty()) { + List menuInfoList = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(MenuInfo::new).toList(); + + return new TodayMeal(meal.getId(), meal.getRestaurant().getRestaurantName().getPrice() + , mainRate, menuInfoList); + } else { + return null; + } + } @Getter @NoArgsConstructor - @AllArgsConstructor - private static class ChangeMenuInfo { + private static class MenuInfo { @Schema(description = "메뉴 식별자", example = "2") private Long menuId; @Schema(description = "메뉴 이름", example = "돈까스") private String name; - } - - public static TodayMeal from (Meal meal){ - if(!meal.getMealMenus().isEmpty()){ - List mealMenuList = meal.getMealMenus(); - List changeMenuList = new ArrayList<>(); - for(MealMenu mealMenu : mealMenuList){ - Menu menu = mealMenu.getMenu(); - ChangeMenuInfo changeMenuInfo = new ChangeMenuInfo(menu.getId(), menu.getName()); - changeMenuList.add(changeMenuInfo); - } - return new TodayMeal(meal.getId(), meal.getRestaurant().getRestaurantName().getPrice() - , meal.getRateMap().get("mainRate"), changeMenuList); - }else{ - return null; + private MenuInfo(Menu menu) { + this.menuId = menu.getId(); + this.name = menu.getName(); } + } } @@ -66,32 +67,22 @@ public static TodayMeal from (Meal meal){ @Getter @NoArgsConstructor @AllArgsConstructor - public static class FixMenuList { - private List fixMenuInfoList; - @Getter - @NoArgsConstructor - @AllArgsConstructor - private static class FixMenuInfo{ - @Schema(description = "메뉴 식별자", example = "2") - private Long menuId; + public static class FixMenuInfo { - @Schema(description = "메뉴 이름", example = "돈까스") - private String name; + @Schema(description = "메뉴 식별자", example = "2") + private Long menuId; - @Schema(description = "메뉴 평점(평점이 없으면 null)", example = "4.4") - private Double mainRate; + @Schema(description = "메뉴 이름", example = "돈까스") + private String name; - @Schema(description = "가격", example = "5000") - private Integer price; - } + @Schema(description = "메뉴 평점(평점이 없으면 null)", example = "4.4") + private Double mainRate; - public static FixMenuList from(List menus){ - List fixMenuList = new ArrayList<>(); - for (Menu menu : menus) { - FixMenuInfo menuInfo = new FixMenuInfo(menu.getId(), menu.getName(), menu.getMainRate(), menu.getPrice()); - fixMenuList.add(menuInfo); - } - return new FixMenuList(fixMenuList); + @Schema(description = "가격", example = "5000") + private Integer price; + + public static FixMenuInfo from(Menu menu, Double mainRate) { + return new FixMenuInfo(menu.getId(), menu.getName(), mainRate, menu.getPrice()); } } @@ -101,30 +92,30 @@ public static FixMenuList from(List menus){ public static class MenuList { private List menuInfoList; - @Getter - @NoArgsConstructor - @AllArgsConstructor - private static class MenuInfo{ - @Schema(description = "메뉴 식별자", example = "2") - private Long menuId; - - @Schema(description = "메뉴 이름", example = "돈까스") - private String name; - } - - public static MenuList from (Meal meal){ - if(!meal.getMealMenus().isEmpty()){ + public static MenuList from(Meal meal) { + if (!meal.getMealMenus().isEmpty()) { List menuInfoList = new ArrayList<>(); - for(MealMenu mealMenu : meal.getMealMenus()){ + for (MealMenu mealMenu : meal.getMealMenus()) { Menu menu = mealMenu.getMenu(); MenuInfo menuInfo = new MenuInfo(menu.getId(), menu.getName()); menuInfoList.add(menuInfo); } return new MenuList(menuInfoList); - }else{ + } else { return null; } } + + @Getter + @NoArgsConstructor + @AllArgsConstructor + private static class MenuInfo { + @Schema(description = "메뉴 식별자", example = "2") + private Long menuId; + + @Schema(description = "메뉴 이름", example = "돈까스") + private String name; + } } } diff --git a/src/main/java/ssu/eatssu/web/mypage/dto/MyReviewDetail.java b/src/main/java/ssu/eatssu/web/mypage/dto/MyReviewDetail.java index 389a4502..419f3e1a 100644 --- a/src/main/java/ssu/eatssu/web/mypage/dto/MyReviewDetail.java +++ b/src/main/java/ssu/eatssu/web/mypage/dto/MyReviewDetail.java @@ -4,7 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.Review; +import ssu.eatssu.domain.review.Review; import java.time.LocalDate; import java.util.ArrayList; @@ -46,9 +46,14 @@ public static MyReviewDetail from(Review review){ review.getReviewImgs().forEach(i->imgUrlList.add(i.getImageUrl())); return MyReviewDetail.builder() - .reviewId(review.getId()).mainRate(review.getMainRate()).amountRate(review.getAmountRate()) - .tasteRate(review.getTasteRate()).writeDate(review.getCreatedDate().toLocalDate()) - .content(review.getContent()).imgUrlList(imgUrlList).menuName(review.getMenu().getName()) + .reviewId(review.getId()) + .mainRate(review.getRates().getMainRate()) + .amountRate(review.getRates().getAmountRate()) + .tasteRate(review.getRates().getTasteRate()) + .writeDate(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imgUrlList(imgUrlList) + .menuName(review.getMenu().getName()) .build(); } } diff --git a/src/main/java/ssu/eatssu/web/review/ReviewController.java b/src/main/java/ssu/eatssu/web/review/ReviewController.java index 5debb522..16306a65 100644 --- a/src/main/java/ssu/eatssu/web/review/ReviewController.java +++ b/src/main/java/ssu/eatssu/web/review/ReviewController.java @@ -20,14 +20,10 @@ import ssu.eatssu.domain.enums.MenuTypeGroup; import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponse; -import ssu.eatssu.service.RefreshingService; import ssu.eatssu.service.ReviewService; import ssu.eatssu.utils.SecurityUtil; import ssu.eatssu.web.SliceDto; -import ssu.eatssu.web.review.dto.MenuReviewInfo; -import ssu.eatssu.web.review.dto.ReviewCreate; -import ssu.eatssu.web.review.dto.ReviewDetail; -import ssu.eatssu.web.review.dto.ReviewUpdate; +import ssu.eatssu.web.review.dto.*; import java.util.List; @@ -43,7 +39,6 @@ public class ReviewController { private final ReviewService reviewService; - private final RefreshingService refreshingService; /** * 리뷰 작성 @@ -55,18 +50,22 @@ public class ReviewController { 사진은 여러장 첨부 가능합니다.(기획상으로는 한 장만 첨부하도록 제한이 있지만 API 스펙 자체는 여러 장 첨부 가능) """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 작성 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) }) @PostMapping(value = "/{menuId}", consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, produces = MediaType.APPLICATION_JSON_VALUE) public BaseResponse writeReview(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, - @RequestPart(value = "reviewCreate") ReviewCreate reviewCreate, - @RequestPart(value = "multipartFileList", required = false) - List multipartFileList) { + @RequestPart(value = "reviewCreate") ReviewCreate reviewCreate, + @RequestPart(value = "multipartFileList", required = false) + List multipartFileList) { Long userId = SecurityUtil.getLoginUserId(); reviewService.createReview(userId, menuId, reviewCreate, multipartFileList); return BaseResponse.success(); @@ -81,15 +80,19 @@ public BaseResponse writeReview(@Parameter(description = "menuId") @PathVaria 글 수정만 가능하며 사진 수정은 지원하지 않습니다. """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 수정 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 수정 성공", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) }) @PatchMapping("/{reviewId}") public BaseResponse updateReview(@Parameter(description = "reviewId") - @PathVariable("reviewId") Long reviewId, - @RequestBody ReviewUpdate reviewUpdate) { + @PathVariable("reviewId") Long reviewId, + @RequestBody ReviewUpdate reviewUpdate) { Long userId = SecurityUtil.getLoginUserId(); reviewService.updateReviewContent(userId, reviewId, reviewUpdate); return BaseResponse.success(); @@ -101,10 +104,14 @@ public BaseResponse updateReview(@Parameter(description = "reviewId") */ @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) }) @DeleteMapping("/{reviewId}") public BaseResponse deleteReview(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId) { @@ -114,47 +121,47 @@ public BaseResponse deleteReview(@Parameter(description = "reviewId") @PathVa } /** - * 리뷰 정보 조회 - *

식단(변동메뉴)리뷰 조회 시 메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 평점 별 개수를 조회한다.
- * 고정메뉴 리뷰 조회 시 메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 평점 별 개수를 조회한다.

+ * 식단(변동 메뉴) 리뷰 정보 조회 + *

메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 평점 별 개수를 조회한다.

*/ - @Operation(summary = "리뷰 정보 조회(평점 등등)", description = """ - 리뷰 정보를 조회하는 API 입니다.

- menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

- 고정메뉴 리뷰 조회 시 메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 평점 별 개수를 조회합니다. - menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

- 식단(변동메뉴)리뷰 조회 시 메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 평점 별 개수를 조회합니다.

- """) + @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회(메뉴명, 평점 등등)", description = """ + 식단 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) }) - @GetMapping("/info") - public BaseResponse getMenuReviewInfo(@Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") - @RequestParam("menuType") MenuTypeGroup menuTypeGroup, - @Parameter(description = "menuId(고정메뉴)") - @RequestParam(value = "menuId", required = false) Long menuId, - @Parameter(description = "mealId(고정메뉴)") - @RequestParam(value = "mealId", required = false) Long mealId) { - MenuReviewInfo menuReviewInfo; - if (menuTypeGroup == FIX) { - if (menuId == null) { - throw new BaseException(MISSING_REQUEST_PARAM); - } else { - menuReviewInfo = reviewService.findReviewInfoByMenuId(menuId); - } - } else if (menuTypeGroup == CHANGE) { - if (mealId == null) { - throw new BaseException(MISSING_REQUEST_PARAM); - } else { - menuReviewInfo = reviewService.findReviewInfoByMealId(mealId); - } - } else { - throw new BaseException(MISSING_REQUEST_PARAM); - } - return BaseResponse.success(menuReviewInfo); + @GetMapping("/meal-info") + public BaseResponse getMealReviewInfo(@Parameter(description = "mealId") + @RequestParam(value = "mealId") Long mealId) { + return BaseResponse.success(reviewService.findReviewInfoByMealId(mealId)); + } + + /** + * 고정 메뉴 리뷰 정보 조회 + *

메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 평점 별 개수를 조회한다.

+ */ + @Operation(summary = "고정 메뉴 리뷰 정보 조회(메뉴명, 평점 등등)", description = """ + 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/menu-info") + public BaseResponse getMenuReviewInfo(@Parameter(description = "menuId") + @RequestParam(value = "menuId") Long menuId) { + return BaseResponse.success(reviewService.findReviewInfoByMenuId(menuId)); } /** @@ -163,17 +170,21 @@ public BaseResponse getMenuReviewInfo(@Parameter(description = " * pageable default={size=20, sort=date, direction=desc}

*/ @Operation(summary = "리뷰 리스트 조회", description = """ - 리뷰 리스트를 조회하는 API 입니다.

- menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

- menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

- 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

- 페이징 기본 값 = {size=20, sort=date, direction=desc}

- """) + 리뷰 리스트를 조회하는 API 입니다.

+ menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

+ menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

+ 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

+ 페이징 기본 값 = {size=20, sort=date, direction=desc}

+ """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) }) @GetMapping("/list") public BaseResponse> getReviewList( @@ -202,14 +213,4 @@ public BaseResponse> getReviewList( return BaseResponse.success(reviewList); } - /* - review 갯수, 별점 refresh - //todo 관리자 api로 이동 필요 - */ - @GetMapping("/refresh") - public BaseResponse refreshReviewInfo() { - refreshingService.refreshAllReviews(); - return BaseResponse.success(); - } - } diff --git a/src/main/java/ssu/eatssu/web/review/dto/MealReviewInfo.java b/src/main/java/ssu/eatssu/web/review/dto/MealReviewInfo.java new file mode 100644 index 00000000..5fed2959 --- /dev/null +++ b/src/main/java/ssu/eatssu/web/review/dto/MealReviewInfo.java @@ -0,0 +1,72 @@ +package ssu.eatssu.web.review.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import ssu.eatssu.vo.AverageRates; +import ssu.eatssu.vo.RateCountMap; + +import java.util.List; + +@Schema(title = "식단 리뷰 정보(평점 등등)") +@Getter +@AllArgsConstructor +@Builder +public class MealReviewInfo { + @Schema(description = "메뉴명 리스트", example = "[\"고구마치즈돈까스\", \"막국수\", \"미니밥\", \"단무지\", \"요구르트\"]") + private List menuNameList; + + @Schema(description = "리뷰 개수", example = "15") + private Integer totalReviewCount; + + @Schema(description = "평점-메인", example = "4.4") + private Double mainRate; + + @Schema(description = "평점-양", example = "4.4") + private Double amountRate; + + @Schema(description = "평점-맛", example = "4.4") + private Double tasteRate; + + private MealReviewInfo.ReviewRateCnt reviewRateCnt; + + public static MealReviewInfo of(List menuNameList, Integer reviewCount, AverageRates rates, + RateCountMap rateCountMap) { + + return MealReviewInfo.builder() + .menuNameList(menuNameList) + .mainRate(rates.mainRate()).tasteRate(rates.tasteRate()).amountRate(rates.amountRate()) + .totalReviewCount(reviewCount) + .reviewRateCnt(new ReviewRateCnt(rateCountMap)) + .build(); + } + + @Getter + @AllArgsConstructor + @Builder + public static class ReviewRateCnt { + @Schema(description = "평점5 개수", example = "5") + private Integer fiveCnt; + + @Schema(description = "평점4 개수", example = "5") + private Integer fourCnt; + + @Schema(description = "평점3 개수", example = "5") + private Integer threeCnt; + + @Schema(description = "평점2 개수", example = "5") + private Integer twoCnt; + + @Schema(description = "평점1 개수", example = "5") + private Integer oneCnt; + + public ReviewRateCnt(RateCountMap rateCountMap) { + this.oneCnt = rateCountMap.get(1); + this.twoCnt = rateCountMap.get(2); + this.threeCnt = rateCountMap.get(3); + this.fourCnt = rateCountMap.get(4); + this.fiveCnt = rateCountMap.get(5); + } + } +} diff --git a/src/main/java/ssu/eatssu/web/review/dto/MenuReviewInfo.java b/src/main/java/ssu/eatssu/web/review/dto/MenuReviewInfo.java index 7514790d..31c38c45 100644 --- a/src/main/java/ssu/eatssu/web/review/dto/MenuReviewInfo.java +++ b/src/main/java/ssu/eatssu/web/review/dto/MenuReviewInfo.java @@ -4,17 +4,17 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; - -import java.util.List; -import java.util.Map; +import ssu.eatssu.domain.Menu; +import ssu.eatssu.vo.AverageRates; +import ssu.eatssu.vo.RateCountMap; @Schema(title = "메뉴 리뷰 정보(평점 등등)") @Getter @AllArgsConstructor @Builder public class MenuReviewInfo { - @Schema(description = "메뉴 리스트", example = "[\"고구마치즈돈까스\", \"막국수\", \"미니밥\", \"단무지\", \"요구르트\"]") - private List menuName; + @Schema(description = "메뉴명", example = "순대국밥") + private String menuName; @Schema(description = "리뷰 개수", example = "15") private Integer totalReviewCount; @@ -30,29 +30,41 @@ public class MenuReviewInfo { private ReviewRateCnt reviewRateCnt; + public static MenuReviewInfo of(Menu menu, AverageRates rates, RateCountMap rateCountMap) { + + return MenuReviewInfo.builder() + .menuName(menu.getName()) + .mainRate(rates.mainRate()).tasteRate(rates.tasteRate()).amountRate(rates.amountRate()) + .totalReviewCount(menu.getReviews().size()) + .reviewRateCnt(new ReviewRateCnt(rateCountMap)) + .build(); + } + @Getter @AllArgsConstructor @Builder - public static class ReviewRateCnt{ + public static class ReviewRateCnt { @Schema(description = "평점5 개수", example = "5") - private Long fiveCnt; + private Integer fiveCnt; @Schema(description = "평점4 개수", example = "5") - private Long fourCnt; + private Integer fourCnt; @Schema(description = "평점3 개수", example = "5") - private Long threeCnt; + private Integer threeCnt; @Schema(description = "평점2 개수", example = "5") - private Long twoCnt; + private Integer twoCnt; @Schema(description = "평점1 개수", example = "5") - private Long oneCnt; + private Integer oneCnt; - public static ReviewRateCnt fromMap (Map rateCntMap){ - return ReviewRateCnt.builder() - .oneCnt(rateCntMap.get(1)).twoCnt(rateCntMap.get(2)).threeCnt(rateCntMap.get(3)) - .fourCnt(rateCntMap.get(4)).fiveCnt(rateCntMap.get(5)).build(); + public ReviewRateCnt(RateCountMap rateCountMap) { + this.oneCnt = rateCountMap.get(1); + this.twoCnt = rateCountMap.get(2); + this.threeCnt = rateCountMap.get(3); + this.fourCnt = rateCountMap.get(4); + this.fiveCnt = rateCountMap.get(5); } } diff --git a/src/main/java/ssu/eatssu/web/review/dto/ReviewCreate.java b/src/main/java/ssu/eatssu/web/review/dto/ReviewCreate.java index 52a01fbb..98df8723 100644 --- a/src/main/java/ssu/eatssu/web/review/dto/ReviewCreate.java +++ b/src/main/java/ssu/eatssu/web/review/dto/ReviewCreate.java @@ -5,7 +5,8 @@ import lombok.Getter; import lombok.NoArgsConstructor; import ssu.eatssu.domain.Menu; -import ssu.eatssu.domain.Review; +import ssu.eatssu.domain.review.Rates; +import ssu.eatssu.domain.review.Review; import ssu.eatssu.domain.User; @Schema(title = "리뷰 작성") @@ -27,9 +28,10 @@ public class ReviewCreate { private String content; public Review toEntity(User user, Menu menu) { + Rates rates = new Rates(this.mainRate, this.amountRate, this.tasteRate); return Review.builder() - .user(user).content(this.content).mainRate(this.mainRate).amountRate(this.amountRate) - .tasteRate(this.tasteRate).menu(menu).build(); + .user(user).content(this.content).rates(rates).menu(menu) + .build(); } } diff --git a/src/main/java/ssu/eatssu/web/review/dto/ReviewDetail.java b/src/main/java/ssu/eatssu/web/review/dto/ReviewDetail.java index eb7240dd..7ba121ac 100644 --- a/src/main/java/ssu/eatssu/web/review/dto/ReviewDetail.java +++ b/src/main/java/ssu/eatssu/web/review/dto/ReviewDetail.java @@ -4,8 +4,8 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.Review; -import ssu.eatssu.domain.enums.UserStatus; +import ssu.eatssu.domain.ReviewImg; +import ssu.eatssu.domain.review.Review; import java.time.LocalDate; import java.util.ArrayList; @@ -52,14 +52,18 @@ public class ReviewDetail { public static ReviewDetail from(Review review, Long userId) { - List imgUrlList = new ArrayList<>(); - review.getReviewImgs().forEach(i -> imgUrlList.add(i.getImageUrl())); + List imgUrlList = review.getReviewImgs().stream() + .map(ReviewImg::getImageUrl).toList(); + if(review.getUser()== null){//탈퇴한 유저의 리뷰인 경우 return ReviewDetail.builder() .reviewId(review.getId()) .writerId(null).writerNickname("알 수 없음") - .mainRate(review.getMainRate()).amountRate(review.getAmountRate()).tasteRate(review.getTasteRate()) - .writeDate(review.getCreatedDate().toLocalDate()).content(review.getContent()) + .mainRate(review.getRates().getMainRate()) + .amountRate(review.getRates().getAmountRate()) + .tasteRate(review.getRates().getTasteRate()) + .writeDate(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) .isWriter(false).imgUrlList(imgUrlList).menu(review.getMenu().getName()) .build(); }else{ @@ -67,7 +71,9 @@ public static ReviewDetail from(Review review, Long userId) { return ReviewDetail.builder() .reviewId(review.getId()) .writerId(review.getUser().getId()).writerNickname(review.getUser().getNickname()) - .mainRate(review.getMainRate()).amountRate(review.getAmountRate()).tasteRate(review.getTasteRate()) + .mainRate(review.getRates().getMainRate()) + .amountRate(review.getRates().getAmountRate()) + .tasteRate(review.getRates().getTasteRate()) .writeDate(review.getCreatedDate().toLocalDate()).content(review.getContent()) .isWriter(isWriter).imgUrlList(imgUrlList).menu(review.getMenu().getName()) .build(); diff --git a/src/test/java/ssu/eatssu/domain/MenuTest.java b/src/test/java/ssu/eatssu/domain/MenuTest.java new file mode 100644 index 00000000..c477f39c --- /dev/null +++ b/src/test/java/ssu/eatssu/domain/MenuTest.java @@ -0,0 +1,19 @@ +package ssu.eatssu.domain; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class MenuTest { + + @DisplayName("변동 메뉴 생성 테스트") + @Test + void createChangeMenu() { + + } + + @Test + void createFixedMenu() { + } +} \ No newline at end of file From 594acbcf52af24730784d8c77f7f3a0e9cde2d1d Mon Sep 17 00:00:00 2001 From: SY2on Date: Sun, 7 Jan 2024 04:47:58 +0900 Subject: [PATCH 028/399] =?UTF-8?q?Fix:=20rateCalculator=20=EC=9E=90?= =?UTF-8?q?=EC=9E=98=ED=95=9C=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/utils/RatesCalculator.java | 28 +++++++++++-------- src/main/java/ssu/eatssu/vo/RateCountMap.java | 8 +++--- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/main/java/ssu/eatssu/utils/RatesCalculator.java b/src/main/java/ssu/eatssu/utils/RatesCalculator.java index 64326313..9671a877 100644 --- a/src/main/java/ssu/eatssu/utils/RatesCalculator.java +++ b/src/main/java/ssu/eatssu/utils/RatesCalculator.java @@ -85,9 +85,9 @@ public Double menuAverageMainRate(Menu menu) { // 식단 총 리뷰 개수 public int mealTotalReviewCount(Meal meal) { - return (int) meal.getMealMenus().stream() + return meal.getMealMenus().stream() .map(MealMenu::getMenu) - .map(Menu::getReviews).count(); + .mapToInt(menu -> menu.getReviews().size()).sum(); } // 평균 평점 계산 @@ -104,8 +104,8 @@ private Integer mealTotalMainRate(Meal meal) { .map(MealMenu::getMenu) .map(menu -> menu.getReviews().stream() .map(review -> review.getRates().getMainRate()) - .reduce(null, Integer::sum)) - .reduce(null, Integer::sum); + .reduce(null, this::sum)) + .reduce(null, this::sum); } // 식단 양 평점 총합 @@ -114,8 +114,8 @@ private Integer mealTotalAmountRate(Meal meal) { .map(MealMenu::getMenu) .map(menu -> menu.getReviews().stream() .map(review -> review.getRates().getAmountRate()) - .reduce(null, Integer::sum)) - .reduce(null, Integer::sum); + .reduce(null, this::sum)) + .reduce(null, this::sum); } // 식단 맛 평점 총합 @@ -124,29 +124,35 @@ private Integer mealTotalTasteRate(Meal meal) { .map(MealMenu::getMenu) .map(menu -> menu.getReviews().stream() .map(review -> review.getRates().getTasteRate()) - .reduce(null, Integer::sum)) - .reduce(null, Integer::sum); + .reduce(null, this::sum)) + .reduce(null, this::sum); } // 메뉴 메인 평점 총합 private Integer menuTotalMainRate(Menu menu) { return menu.getReviews().stream() .map(review -> review.getRates().getMainRate()) - .reduce(null, Integer::sum); + .reduce(null, this::sum); } // 메뉴 양 평점 총합 private Integer menuTotalAmountRate(Menu menu) { return menu.getReviews().stream() .map(review -> review.getRates().getAmountRate()) - .reduce(null, Integer::sum); + .reduce(null, this::sum); } // 메뉴 맛 평점 총합 private Integer menuTotalTasteRate(Menu menu) { return menu.getReviews().stream() .map(review -> review.getRates().getTasteRate()) - .reduce(null, Integer::sum); + .reduce(null, this::sum); + } + + private Integer sum(Integer a, Integer b) { + if (a == null) return b; + if (b == null) return a; + return a + b; } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/vo/RateCountMap.java b/src/main/java/ssu/eatssu/vo/RateCountMap.java index e8a4b641..ebf036fa 100644 --- a/src/main/java/ssu/eatssu/vo/RateCountMap.java +++ b/src/main/java/ssu/eatssu/vo/RateCountMap.java @@ -4,11 +4,11 @@ import java.util.Map; public class RateCountMap { - private Map rateCountMap = new HashMap<>(); + private Map rateCountMap; - public RateCountMap(Map rateCountMap) { - // TODO: key 값이 1~5가 아닌 경우 예외처리 - this.rateCountMap = rateCountMap; + public RateCountMap(Map map) { + this(); + map.forEach((key, value) -> rateCountMap.merge(key, value, Integer::sum)); } public RateCountMap() { From a35b03415172bb61448a7986e392df36657f2d34 Mon Sep 17 00:00:00 2001 From: SY2on Date: Wed, 10 Jan 2024 11:02:39 +0900 Subject: [PATCH 029/399] =?UTF-8?q?Refactor:=20rate=20->=20rating,=20Ratin?= =?UTF-8?q?gCalculator=20interface=20=EB=A1=9C=20=EB=94=B0=EB=A1=9C=20?= =?UTF-8?q?=EB=BA=8C=20=EB=8C=80=EC=B6=A9=20=EB=B4=89=ED=95=A9=EB=A7=8C=20?= =?UTF-8?q?=ED=95=B4=EB=91=94=20=EC=83=81=ED=83=9C=20=EC=A0=84=EC=B2=B4?= =?UTF-8?q?=EC=A0=81=EC=9C=BC=EB=A1=9C=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EB=B0=8F=20=EC=9D=B8=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC=20=ED=95=84=EC=9A=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/QBaseTimeEntity.java | 39 ----- .../generated/ssu/eatssu/domain/QMeal.java | 57 ------- .../ssu/eatssu/domain/QMealMenu.java | 54 ------ .../generated/ssu/eatssu/domain/QMenu.java | 59 ------- .../ssu/eatssu/domain/QRestaurant.java | 44 ----- .../ssu/eatssu/domain/QReviewImg.java | 53 ------ .../ssu/eatssu/domain/QReviewReport.java | 68 -------- .../generated/ssu/eatssu/domain/QUser.java | 66 -------- .../java/ssu/eatssu/domain/enums/DayType.java | 6 +- .../eatssu/domain/enums/MenuTypeGroup.java | 39 ----- .../ssu/eatssu/domain/enums/ReportStatus.java | 26 +-- .../eatssu/domain/enums/ReviewReportType.java | 14 +- .../ssu/eatssu/domain/enums/TimePart.java | 18 +- .../ssu/eatssu/domain/{ => menu}/Meal.java | 22 ++- .../eatssu/domain/{ => menu}/MealMenu.java | 2 +- .../ssu/eatssu/domain/{ => menu}/Menu.java | 32 ++-- .../java/ssu/eatssu/domain/menu/MenuType.java | 42 +++++ .../domain/rating/RatingCalculator.java | 62 +++++++ .../domain/rating/RatingCalculatorImpl.java | 134 +++++++++++++++ .../ssu/eatssu/domain/rating/Ratings.java | 31 ++++ .../eatssu/domain/rating/ReviewRating.java | 56 +++++++ .../domain/repository/MealMenuRepository.java | 2 +- .../domain/repository/MealRepository.java | 4 +- .../domain/repository/MenuRepository.java | 4 +- .../repository/RestaurantRepository.java | 5 +- .../repository/ReviewImageRepository.java | 7 + .../repository/ReviewImgRepository.java | 7 - .../repository/ReviewReportRepository.java | 2 +- .../domain/repository/ReviewRepository.java | 4 +- .../repository/ReviewRepositoryCustom.java | 7 +- .../repository/ReviewRepositoryImpl.java | 4 + .../repository/UserInquiryRepository.java | 2 +- .../domain/repository/UserRepository.java | 2 +- .../domain/{ => restaurant}/Restaurant.java | 5 +- .../{enums => restaurant}/RestaurantName.java | 12 +- .../java/ssu/eatssu/domain/review/Rates.java | 20 --- .../java/ssu/eatssu/domain/review/Review.java | 32 ++-- .../ReviewImage.java} | 6 +- .../domain/{ => review}/ReviewReport.java | 10 +- .../ssu/eatssu/domain/review/Reviews.java | 49 ++++++ .../domain/{ => user}/BaseTimeEntity.java | 2 +- .../domain/{enums => user}/OauthProvider.java | 2 +- .../eatssu/domain/{enums => user}/Role.java | 2 +- .../ssu/eatssu/domain/{ => user}/User.java | 22 +-- .../eatssu/domain/{ => user}/UserInquiry.java | 4 +- .../domain/{enums => user}/UserStatus.java | 4 +- .../handler/response/BaseResponseStatus.java | 2 +- .../eatssu/security/CustomUserDetails.java | 6 +- .../security/CustomUserDetailsService.java | 5 +- .../java/ssu/eatssu/service/MenuService.java | 62 +++---- .../ssu/eatssu/service/MyPageService.java | 2 +- .../java/ssu/eatssu/service/OauthService.java | 29 ++-- .../ssu/eatssu/service/ReportService.java | 4 +- .../ssu/eatssu/service/ReviewService.java | 102 +++++------ .../eatssu/service/UserInquiryService.java | 4 +- .../java/ssu/eatssu/service/UserService.java | 26 +-- .../ssu/eatssu/slack/SlackMessageFormat.java | 8 +- .../utils/{DateUtil.java => DateUtils.java} | 18 +- .../ssu/eatssu/utils/RatesCalculator.java | 158 ------------------ .../utils/validators/MenuValidator.java | 34 ++++ src/main/java/ssu/eatssu/vo/AverageRate.java | 9 + src/main/java/ssu/eatssu/vo/AverageRates.java | 9 - .../ssu/eatssu/web/menu/MenuController.java | 66 +++----- .../{MenuResDto.java => MenuResponse.java} | 10 +- .../eatssu/web/mypage/dto/MyReviewDetail.java | 14 +- .../ssu/eatssu/web/mypage/dto/MypageInfo.java | 2 +- .../eatssu/web/report/ReportController.java | 3 +- .../web/report/dto/ReviewReportTypeInfo.java | 3 +- .../eatssu/web/review/ReviewController.java | 119 ++++++------- .../web/review/dto/CreateReviewRequest.java | 49 ++++++ .../eatssu/web/review/dto/MealReviewInfo.java | 72 -------- .../dto/MealReviewInformationResponse.java | 45 +++++ .../eatssu/web/review/dto/MenuReviewInfo.java | 71 -------- .../dto/MenuReviewInformationResponse.java | 44 +++++ .../eatssu/web/review/dto/RatingAverages.java | 10 ++ .../eatssu/web/review/dto/ReviewCreate.java | 37 ---- .../eatssu/web/review/dto/ReviewDetail.java | 32 ++-- .../review/dto/ReviewInformationResponse.java | 5 + .../web/review/dto/ReviewRatingCount.java | 8 + ...ewUpdate.java => UpdateReviewRequest.java} | 4 +- .../userinquiry/UserInquiryController.java | 2 +- .../userinquiry/dto/UserInquiryDetail.java | 2 +- 82 files changed, 985 insertions(+), 1235 deletions(-) delete mode 100644 src/main/generated/ssu/eatssu/domain/QBaseTimeEntity.java delete mode 100644 src/main/generated/ssu/eatssu/domain/QMeal.java delete mode 100644 src/main/generated/ssu/eatssu/domain/QMealMenu.java delete mode 100644 src/main/generated/ssu/eatssu/domain/QMenu.java delete mode 100644 src/main/generated/ssu/eatssu/domain/QRestaurant.java delete mode 100644 src/main/generated/ssu/eatssu/domain/QReviewImg.java delete mode 100644 src/main/generated/ssu/eatssu/domain/QReviewReport.java delete mode 100644 src/main/generated/ssu/eatssu/domain/QUser.java delete mode 100644 src/main/java/ssu/eatssu/domain/enums/MenuTypeGroup.java rename src/main/java/ssu/eatssu/domain/{ => menu}/Meal.java (74%) rename src/main/java/ssu/eatssu/domain/{ => menu}/MealMenu.java (93%) rename src/main/java/ssu/eatssu/domain/{ => menu}/Menu.java (71%) create mode 100644 src/main/java/ssu/eatssu/domain/menu/MenuType.java create mode 100644 src/main/java/ssu/eatssu/domain/rating/RatingCalculator.java create mode 100644 src/main/java/ssu/eatssu/domain/rating/RatingCalculatorImpl.java create mode 100644 src/main/java/ssu/eatssu/domain/rating/Ratings.java create mode 100644 src/main/java/ssu/eatssu/domain/rating/ReviewRating.java create mode 100644 src/main/java/ssu/eatssu/domain/repository/ReviewImageRepository.java delete mode 100644 src/main/java/ssu/eatssu/domain/repository/ReviewImgRepository.java rename src/main/java/ssu/eatssu/domain/{ => restaurant}/Restaurant.java (85%) rename src/main/java/ssu/eatssu/domain/{enums => restaurant}/RestaurantName.java (57%) delete mode 100644 src/main/java/ssu/eatssu/domain/review/Rates.java rename src/main/java/ssu/eatssu/domain/{ReviewImg.java => review/ReviewImage.java} (80%) rename src/main/java/ssu/eatssu/domain/{ => review}/ReviewReport.java (74%) create mode 100644 src/main/java/ssu/eatssu/domain/review/Reviews.java rename src/main/java/ssu/eatssu/domain/{ => user}/BaseTimeEntity.java (95%) rename src/main/java/ssu/eatssu/domain/{enums => user}/OauthProvider.java (63%) rename src/main/java/ssu/eatssu/domain/{enums => user}/Role.java (93%) rename src/main/java/ssu/eatssu/domain/{ => user}/User.java (78%) rename src/main/java/ssu/eatssu/domain/{ => user}/UserInquiry.java (85%) rename src/main/java/ssu/eatssu/domain/{enums => user}/UserStatus.java (52%) rename src/main/java/ssu/eatssu/utils/{DateUtil.java => DateUtils.java} (59%) delete mode 100644 src/main/java/ssu/eatssu/utils/RatesCalculator.java create mode 100644 src/main/java/ssu/eatssu/utils/validators/MenuValidator.java create mode 100644 src/main/java/ssu/eatssu/vo/AverageRate.java delete mode 100644 src/main/java/ssu/eatssu/vo/AverageRates.java rename src/main/java/ssu/eatssu/web/menu/dto/{MenuResDto.java => MenuResponse.java} (95%) create mode 100644 src/main/java/ssu/eatssu/web/review/dto/CreateReviewRequest.java delete mode 100644 src/main/java/ssu/eatssu/web/review/dto/MealReviewInfo.java create mode 100644 src/main/java/ssu/eatssu/web/review/dto/MealReviewInformationResponse.java delete mode 100644 src/main/java/ssu/eatssu/web/review/dto/MenuReviewInfo.java create mode 100644 src/main/java/ssu/eatssu/web/review/dto/MenuReviewInformationResponse.java create mode 100644 src/main/java/ssu/eatssu/web/review/dto/RatingAverages.java delete mode 100644 src/main/java/ssu/eatssu/web/review/dto/ReviewCreate.java create mode 100644 src/main/java/ssu/eatssu/web/review/dto/ReviewInformationResponse.java create mode 100644 src/main/java/ssu/eatssu/web/review/dto/ReviewRatingCount.java rename src/main/java/ssu/eatssu/web/review/dto/{ReviewUpdate.java => UpdateReviewRequest.java} (94%) diff --git a/src/main/generated/ssu/eatssu/domain/QBaseTimeEntity.java b/src/main/generated/ssu/eatssu/domain/QBaseTimeEntity.java deleted file mode 100644 index 3349530e..00000000 --- a/src/main/generated/ssu/eatssu/domain/QBaseTimeEntity.java +++ /dev/null @@ -1,39 +0,0 @@ -package ssu.eatssu.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; - - -/** - * QBaseTimeEntity is a Querydsl query type for BaseTimeEntity - */ -@Generated("com.querydsl.codegen.DefaultSupertypeSerializer") -public class QBaseTimeEntity extends EntityPathBase { - - private static final long serialVersionUID = 1955086099L; - - public static final QBaseTimeEntity baseTimeEntity = new QBaseTimeEntity("baseTimeEntity"); - - public final DateTimePath createdDate = createDateTime("createdDate", java.time.LocalDateTime.class); - - public final DateTimePath modifiedDate = createDateTime("modifiedDate", java.time.LocalDateTime.class); - - public QBaseTimeEntity(String variable) { - super(BaseTimeEntity.class, forVariable(variable)); - } - - public QBaseTimeEntity(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QBaseTimeEntity(PathMetadata metadata) { - super(BaseTimeEntity.class, metadata); - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/QMeal.java b/src/main/generated/ssu/eatssu/domain/QMeal.java deleted file mode 100644 index 8bba9956..00000000 --- a/src/main/generated/ssu/eatssu/domain/QMeal.java +++ /dev/null @@ -1,57 +0,0 @@ -package ssu.eatssu.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QMeal is a Querydsl query type for Meal - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QMeal extends EntityPathBase { - - private static final long serialVersionUID = 2010434197L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QMeal meal = new QMeal("meal"); - - public final DatePath date = createDate("date", java.util.Date.class); - - public final NumberPath id = createNumber("id", Long.class); - - public final ListPath mealMenus = this.createList("mealMenus", MealMenu.class, QMealMenu.class, PathInits.DIRECT2); - - public final QRestaurant restaurant; - - public final EnumPath timePart = createEnum("timePart", ssu.eatssu.domain.enums.TimePart.class); - - public QMeal(String variable) { - this(Meal.class, forVariable(variable), INITS); - } - - public QMeal(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QMeal(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QMeal(PathMetadata metadata, PathInits inits) { - this(Meal.class, metadata, inits); - } - - public QMeal(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.restaurant = inits.isInitialized("restaurant") ? new QRestaurant(forProperty("restaurant")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/QMealMenu.java b/src/main/generated/ssu/eatssu/domain/QMealMenu.java deleted file mode 100644 index 787ef25c..00000000 --- a/src/main/generated/ssu/eatssu/domain/QMealMenu.java +++ /dev/null @@ -1,54 +0,0 @@ -package ssu.eatssu.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QMealMenu is a Querydsl query type for MealMenu - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QMealMenu extends EntityPathBase { - - private static final long serialVersionUID = -1799880300L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QMealMenu mealMenu = new QMealMenu("mealMenu"); - - public final NumberPath id = createNumber("id", Long.class); - - public final QMeal meal; - - public final QMenu menu; - - public QMealMenu(String variable) { - this(MealMenu.class, forVariable(variable), INITS); - } - - public QMealMenu(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QMealMenu(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QMealMenu(PathMetadata metadata, PathInits inits) { - this(MealMenu.class, metadata, inits); - } - - public QMealMenu(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.meal = inits.isInitialized("meal") ? new QMeal(forProperty("meal"), inits.get("meal")) : null; - this.menu = inits.isInitialized("menu") ? new QMenu(forProperty("menu"), inits.get("menu")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/QMenu.java b/src/main/generated/ssu/eatssu/domain/QMenu.java deleted file mode 100644 index b451c360..00000000 --- a/src/main/generated/ssu/eatssu/domain/QMenu.java +++ /dev/null @@ -1,59 +0,0 @@ -package ssu.eatssu.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QMenu is a Querydsl query type for Menu - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QMenu extends EntityPathBase { - - private static final long serialVersionUID = 2010434609L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QMenu menu = new QMenu("menu"); - - public final NumberPath id = createNumber("id", Long.class); - - public final ListPath mealMenus = this.createList("mealMenus", MealMenu.class, QMealMenu.class, PathInits.DIRECT2); - - public final StringPath name = createString("name"); - - public final NumberPath price = createNumber("price", Integer.class); - - public final QRestaurant restaurant; - - public final ListPath reviews = this.createList("reviews", ssu.eatssu.domain.review.Review.class, ssu.eatssu.domain.review.QReview.class, PathInits.DIRECT2); - - public QMenu(String variable) { - this(Menu.class, forVariable(variable), INITS); - } - - public QMenu(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QMenu(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QMenu(PathMetadata metadata, PathInits inits) { - this(Menu.class, metadata, inits); - } - - public QMenu(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.restaurant = inits.isInitialized("restaurant") ? new QRestaurant(forProperty("restaurant")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/QRestaurant.java b/src/main/generated/ssu/eatssu/domain/QRestaurant.java deleted file mode 100644 index edb9e14c..00000000 --- a/src/main/generated/ssu/eatssu/domain/QRestaurant.java +++ /dev/null @@ -1,44 +0,0 @@ -package ssu.eatssu.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QRestaurant is a Querydsl query type for Restaurant - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QRestaurant extends EntityPathBase { - - private static final long serialVersionUID = 607657103L; - - public static final QRestaurant restaurant = new QRestaurant("restaurant"); - - public final NumberPath id = createNumber("id", Long.class); - - public final ListPath meals = this.createList("meals", Meal.class, QMeal.class, PathInits.DIRECT2); - - public final ListPath menus = this.createList("menus", Menu.class, QMenu.class, PathInits.DIRECT2); - - public final EnumPath restaurantName = createEnum("restaurantName", ssu.eatssu.domain.enums.RestaurantName.class); - - public QRestaurant(String variable) { - super(Restaurant.class, forVariable(variable)); - } - - public QRestaurant(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QRestaurant(PathMetadata metadata) { - super(Restaurant.class, metadata); - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/QReviewImg.java b/src/main/generated/ssu/eatssu/domain/QReviewImg.java deleted file mode 100644 index 46895e5d..00000000 --- a/src/main/generated/ssu/eatssu/domain/QReviewImg.java +++ /dev/null @@ -1,53 +0,0 @@ -package ssu.eatssu.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QReviewImg is a Querydsl query type for ReviewImg - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QReviewImg extends EntityPathBase { - - private static final long serialVersionUID = 985433529L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QReviewImg reviewImg = new QReviewImg("reviewImg"); - - public final NumberPath id = createNumber("id", Long.class); - - public final StringPath imageUrl = createString("imageUrl"); - - public final ssu.eatssu.domain.review.QReview review; - - public QReviewImg(String variable) { - this(ReviewImg.class, forVariable(variable), INITS); - } - - public QReviewImg(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QReviewImg(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QReviewImg(PathMetadata metadata, PathInits inits) { - this(ReviewImg.class, metadata, inits); - } - - public QReviewImg(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.review = inits.isInitialized("review") ? new ssu.eatssu.domain.review.QReview(forProperty("review"), inits.get("review")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/QReviewReport.java b/src/main/generated/ssu/eatssu/domain/QReviewReport.java deleted file mode 100644 index 0486b54e..00000000 --- a/src/main/generated/ssu/eatssu/domain/QReviewReport.java +++ /dev/null @@ -1,68 +0,0 @@ -package ssu.eatssu.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QReviewReport is a Querydsl query type for ReviewReport - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QReviewReport extends EntityPathBase { - - private static final long serialVersionUID = 1199446910L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QReviewReport reviewReport = new QReviewReport("reviewReport"); - - public final QBaseTimeEntity _super = new QBaseTimeEntity(this); - - public final StringPath content = createString("content"); - - //inherited - public final DateTimePath createdDate = _super.createdDate; - - public final NumberPath id = createNumber("id", Long.class); - - //inherited - public final DateTimePath modifiedDate = _super.modifiedDate; - - public final EnumPath reportType = createEnum("reportType", ssu.eatssu.domain.enums.ReviewReportType.class); - - public final ssu.eatssu.domain.review.QReview review; - - public final EnumPath status = createEnum("status", ssu.eatssu.domain.enums.ReportStatus.class); - - public final QUser user; - - public QReviewReport(String variable) { - this(ReviewReport.class, forVariable(variable), INITS); - } - - public QReviewReport(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QReviewReport(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QReviewReport(PathMetadata metadata, PathInits inits) { - this(ReviewReport.class, metadata, inits); - } - - public QReviewReport(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.review = inits.isInitialized("review") ? new ssu.eatssu.domain.review.QReview(forProperty("review"), inits.get("review")) : null; - this.user = inits.isInitialized("user") ? new QUser(forProperty("user")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/QUser.java b/src/main/generated/ssu/eatssu/domain/QUser.java deleted file mode 100644 index 65941126..00000000 --- a/src/main/generated/ssu/eatssu/domain/QUser.java +++ /dev/null @@ -1,66 +0,0 @@ -package ssu.eatssu.domain; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QUser is a Querydsl query type for User - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QUser extends EntityPathBase { - - private static final long serialVersionUID = 2010686109L; - - public static final QUser user = new QUser("user"); - - public final QBaseTimeEntity _super = new QBaseTimeEntity(this); - - //inherited - public final DateTimePath createdDate = _super.createdDate; - - public final StringPath credentials = createString("credentials"); - - public final StringPath email = createString("email"); - - public final NumberPath id = createNumber("id", Long.class); - - //inherited - public final DateTimePath modifiedDate = _super.modifiedDate; - - public final StringPath nickname = createString("nickname"); - - public final EnumPath provider = createEnum("provider", ssu.eatssu.domain.enums.OauthProvider.class); - - public final StringPath providerId = createString("providerId"); - - public final ListPath reviewReports = this.createList("reviewReports", ReviewReport.class, QReviewReport.class, PathInits.DIRECT2); - - public final ListPath reviews = this.createList("reviews", ssu.eatssu.domain.review.Review.class, ssu.eatssu.domain.review.QReview.class, PathInits.DIRECT2); - - public final EnumPath role = createEnum("role", ssu.eatssu.domain.enums.Role.class); - - public final EnumPath status = createEnum("status", ssu.eatssu.domain.enums.UserStatus.class); - - public final ListPath userInquiry = this.createList("userInquiry", UserInquiry.class, QUserInquiry.class, PathInits.DIRECT2); - - public QUser(String variable) { - super(User.class, forVariable(variable)); - } - - public QUser(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QUser(PathMetadata metadata) { - super(User.class, metadata); - } - -} - diff --git a/src/main/java/ssu/eatssu/domain/enums/DayType.java b/src/main/java/ssu/eatssu/domain/enums/DayType.java index e331cdfe..7af30b22 100644 --- a/src/main/java/ssu/eatssu/domain/enums/DayType.java +++ b/src/main/java/ssu/eatssu/domain/enums/DayType.java @@ -8,10 +8,10 @@ public enum DayType { WEEKDAY("주중"), HOLIDAY("주말, 공휴일"); - private String krName; + private final String description; - DayType(String krName) { - this.krName = krName; + DayType(String description) { + this.description = description; } } diff --git a/src/main/java/ssu/eatssu/domain/enums/MenuTypeGroup.java b/src/main/java/ssu/eatssu/domain/enums/MenuTypeGroup.java deleted file mode 100644 index 841cd697..00000000 --- a/src/main/java/ssu/eatssu/domain/enums/MenuTypeGroup.java +++ /dev/null @@ -1,39 +0,0 @@ -package ssu.eatssu.domain.enums; - -import com.fasterxml.jackson.annotation.JsonCreator; -import lombok.Getter; - -import java.util.Arrays; -import java.util.List; -import java.util.Locale; - -import static ssu.eatssu.domain.enums.RestaurantName.*; - - -@Getter -public enum MenuTypeGroup { - FIX("고정 메뉴", Arrays.asList(FOOD_COURT, SNACK_CORNER)), - CHANGE("변동 메뉴", Arrays.asList(DODAM, DORMITORY, HAKSIK)); - - - - private String krName; - private List restaurantList; - - MenuTypeGroup(String krName, List restaurantList){ - this.krName = krName; - this.restaurantList = restaurantList; - } - - public static boolean isFix(RestaurantName restaurant){ - return FIX.getRestaurantList().contains(restaurant); - } - public static boolean isChange(RestaurantName restaurant){ - return CHANGE.getRestaurantList().contains(restaurant); - } - - @JsonCreator - public static MenuTypeGroup from(String s){ - return MenuTypeGroup.valueOf(s.toUpperCase(Locale.ROOT)); - } -} diff --git a/src/main/java/ssu/eatssu/domain/enums/ReportStatus.java b/src/main/java/ssu/eatssu/domain/enums/ReportStatus.java index fbca546f..36429a08 100644 --- a/src/main/java/ssu/eatssu/domain/enums/ReportStatus.java +++ b/src/main/java/ssu/eatssu/domain/enums/ReportStatus.java @@ -1,26 +1,28 @@ package ssu.eatssu.domain.enums; import com.fasterxml.jackson.annotation.JsonCreator; +import java.util.Arrays; import lombok.Getter; -import java.util.Locale; - @Getter public enum ReportStatus { - PENDING ("대기 중"), - IN_PROGRESS ("진행 중"), - RESOLVED ("해결됨"), - REJECTED ("거절됨"), - FALSE_REPORT ("거짓 신고"); + PENDING("대기 중"), + IN_PROGRESS("진행 중"), + RESOLVED("해결됨"), + REJECTED("거절됨"), + FALSE_REPORT("거짓 신고"); - private final String krName; + private final String description; - ReportStatus(String krName){ - this.krName = krName; + ReportStatus(final String description) { + this.description = description; } @JsonCreator - public static ReportStatus from(String s){ - return ReportStatus.valueOf(s.toUpperCase(Locale.ROOT)); + public static ReportStatus from(final String description) { + return Arrays.stream(ReportStatus.values()) + .filter(v -> v.getDescription().equals(description)) + .findAny() + .orElseThrow(IllegalArgumentException::new); } } diff --git a/src/main/java/ssu/eatssu/domain/enums/ReviewReportType.java b/src/main/java/ssu/eatssu/domain/enums/ReviewReportType.java index 3d9db994..db9a1636 100644 --- a/src/main/java/ssu/eatssu/domain/enums/ReviewReportType.java +++ b/src/main/java/ssu/eatssu/domain/enums/ReviewReportType.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.enums; import com.fasterxml.jackson.annotation.JsonCreator; +import java.util.Arrays; import lombok.Getter; import java.util.Locale; @@ -14,14 +15,17 @@ public enum ReviewReportType { COPYRIGHT("저작권 도용 의심(사진 등)"), ETC("기타 (하단 내용 작성)"); - private final String krName; + private final String description; - ReviewReportType(String krName){ - this.krName = krName; + ReviewReportType(String description) { + this.description = description; } @JsonCreator - public static ReviewReportType from(String s){ - return ReviewReportType.valueOf(s.toUpperCase(Locale.ROOT)); + public static ReviewReportType from(final String description) { + return Arrays.stream(ReviewReportType.values()) + .filter(v -> v.getDescription().equals(description)) + .findAny() + .orElseThrow(IllegalArgumentException::new); } } diff --git a/src/main/java/ssu/eatssu/domain/enums/TimePart.java b/src/main/java/ssu/eatssu/domain/enums/TimePart.java index 3e3d1258..50026c4b 100644 --- a/src/main/java/ssu/eatssu/domain/enums/TimePart.java +++ b/src/main/java/ssu/eatssu/domain/enums/TimePart.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.enums; import com.fasterxml.jackson.annotation.JsonCreator; +import java.util.Arrays; import lombok.Getter; import java.util.Locale; @@ -11,14 +12,17 @@ public enum TimePart { LUNCH("중식"), DINNER("석식"); - @JsonCreator - public static TimePart from(String s){ - return TimePart.valueOf(s.toUpperCase(Locale.ROOT)); - } + private final String description; - private String krName; + TimePart(String description) { + this.description = description; + } - TimePart(String krName){ - this.krName = krName; + @JsonCreator + public static TimePart from(String description) { + return Arrays.stream(TimePart.values()) + .filter(d -> d.getDescription().equals(description)) + .findAny() + .orElseThrow(IllegalArgumentException::new); } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/Meal.java b/src/main/java/ssu/eatssu/domain/menu/Meal.java similarity index 74% rename from src/main/java/ssu/eatssu/domain/Meal.java rename to src/main/java/ssu/eatssu/domain/menu/Meal.java index 6fe87881..ffff5277 100644 --- a/src/main/java/ssu/eatssu/domain/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/Meal.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain; +package ssu.eatssu.domain.menu; import jakarta.persistence.*; import lombok.AccessLevel; @@ -6,7 +6,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; -import ssu.eatssu.domain.review.Rates; +import ssu.eatssu.domain.restaurant.Restaurant; import ssu.eatssu.domain.enums.TimePart; import java.util.*; @@ -15,12 +15,12 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Meal { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "meal_id") private Long id; - // @JsonFormat(shape= JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone="Asia/Seoul") @DateTimeFormat(pattern = "yyyyMMdd") @Temporal(TemporalType.DATE) private Date date; @@ -28,7 +28,7 @@ public class Meal { @Enumerated(EnumType.STRING) private TimePart timePart; - @ManyToOne(fetch=FetchType.LAZY) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "restaurant_id") private Restaurant restaurant; @@ -36,13 +36,23 @@ public class Meal { private List mealMenus = new ArrayList<>(); @Builder - public Meal(Date date, TimePart timePart, Restaurant restaurant){ + public Meal(Date date, TimePart timePart, Restaurant restaurant) { this.date = date; this.timePart = timePart; this.restaurant = restaurant; } - public List getMenuNameList(){ + + public List getMenus() { + List menus = new ArrayList<>(); + for (MealMenu mealMenu : mealMenus) { + menus.add(mealMenu.getMenu()); + } + return menus; + } + + public List getMenuNames() { return mealMenus.stream().map(mealMenu -> mealMenu.getMenu().getName()).toList(); } + } diff --git a/src/main/java/ssu/eatssu/domain/MealMenu.java b/src/main/java/ssu/eatssu/domain/menu/MealMenu.java similarity index 93% rename from src/main/java/ssu/eatssu/domain/MealMenu.java rename to src/main/java/ssu/eatssu/domain/menu/MealMenu.java index a146eb13..5c2d2b19 100644 --- a/src/main/java/ssu/eatssu/domain/MealMenu.java +++ b/src/main/java/ssu/eatssu/domain/menu/MealMenu.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain; +package ssu.eatssu.domain.menu; import jakarta.persistence.*; import lombok.*; diff --git a/src/main/java/ssu/eatssu/domain/Menu.java b/src/main/java/ssu/eatssu/domain/menu/Menu.java similarity index 71% rename from src/main/java/ssu/eatssu/domain/Menu.java rename to src/main/java/ssu/eatssu/domain/menu/Menu.java index a49aa539..c4e41f20 100644 --- a/src/main/java/ssu/eatssu/domain/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/Menu.java @@ -1,14 +1,13 @@ -package ssu.eatssu.domain; +package ssu.eatssu.domain.menu; import jakarta.persistence.*; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import ssu.eatssu.domain.enums.MenuTypeGroup; -import ssu.eatssu.domain.review.Review; +import lombok.*; +import ssu.eatssu.domain.restaurant.Restaurant; import java.util.ArrayList; import java.util.List; +import ssu.eatssu.domain.review.Review; +import ssu.eatssu.domain.review.Reviews; @Entity @Getter @@ -24,6 +23,9 @@ public class Menu { private Integer price; + @Enumerated(EnumType.STRING) + private MenuType menuType; + @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) private List mealMenus = new ArrayList<>(); @@ -31,10 +33,9 @@ public class Menu { @JoinColumn(name = "restaurant_id") private Restaurant restaurant; - @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) - private List reviews = new ArrayList<>(); + @Embedded + private Reviews reviews = new Reviews(); - //정적 팩토리 메서드 private Menu(String name, Restaurant restaurant, Integer price) { this.name = name; this.restaurant = restaurant; @@ -47,7 +48,7 @@ private Menu(String name, Restaurant restaurant, Integer price) { */ public static Menu createChangeMenu(String name, Restaurant restaurant) { int price = 0; - if (MenuTypeGroup.isChange(restaurant.getRestaurantName())) { + if (MenuType.isChanged(restaurant.getRestaurantName())) { price = restaurant.getRestaurantName().getPrice(); } return new Menu(name, restaurant, price); @@ -60,4 +61,13 @@ public static Menu createChangeMenu(String name, Restaurant restaurant) { public static Menu createFixedMenu(String name, Restaurant restaurant, Integer price) { return new Menu(name, restaurant, price); } -} + + // COMMENT: CASCADE.PERSIST 를 사용하면, Menu 를 저장할 때 Review 도 같이 저장된다. + public void addReview(Review review) { + reviews.add(review); + } + + public int getTotalReviewCount() { + return reviews.size(); + } +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/menu/MenuType.java b/src/main/java/ssu/eatssu/domain/menu/MenuType.java new file mode 100644 index 00000000..bbd47c26 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/MenuType.java @@ -0,0 +1,42 @@ +package ssu.eatssu.domain.menu; + +import com.fasterxml.jackson.annotation.JsonCreator; +import lombok.Getter; + +import java.util.Arrays; +import java.util.List; +import java.util.Locale; +import ssu.eatssu.domain.restaurant.RestaurantName; + +import static ssu.eatssu.domain.restaurant.RestaurantName.*; + + +@Getter +public enum MenuType { + FIXED("고정 메뉴", Arrays.asList(FOOD_COURT, SNACK_CORNER)), + CHANGED("변동 메뉴", Arrays.asList(DODAM, DORMITORY, HAKSIK)); + + private final String description; + private final List restaurants; + + MenuType(String description, List restaurants) { + this.description = description; + this.restaurants = restaurants; + } + + public static boolean isFixed(RestaurantName restaurant) { + return FIXED.getRestaurants().contains(restaurant); + } + + public static boolean isChanged(RestaurantName restaurant) { + return CHANGED.getRestaurants().contains(restaurant); + } + + @JsonCreator + public static MenuType from(String description) { + return Arrays.stream(MenuType.values()) + .filter(d -> d.getDescription().equals(description)) + .findAny() + .orElseThrow(IllegalArgumentException::new); + } +} diff --git a/src/main/java/ssu/eatssu/domain/rating/RatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/RatingCalculator.java new file mode 100644 index 00000000..be12a54f --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/rating/RatingCalculator.java @@ -0,0 +1,62 @@ +package ssu.eatssu.domain.rating; + +import ssu.eatssu.domain.menu.Meal; +import ssu.eatssu.domain.menu.Menu; +import ssu.eatssu.web.review.dto.RatingAverages; +import ssu.eatssu.web.review.dto.ReviewRatingCount; + +public interface RatingCalculator { + + // 식단에 포함된 메뉴들의 평점 별 리뷰 개수 계산 + ReviewRatingCount mealRatingCount(Meal meal); + + // 각 메뉴의 평점 별 개수 계산 + ReviewRatingCount menuRatingCount(Menu menu); + + // 식단 평균 평점 세트 계산 + RatingAverages mealAverageRatings(Meal meal); + + // 메뉴 평균 평점 세트 계산 + RatingAverages menuAverageRatings(Menu menu); + + // 식단 메인 평점 평균 계산 + Double mealAverageMainRating(Meal meal); + + // 메뉴 메인 평점 평균 계산 + Double menuAverageMainRating(Menu menu); + + // 식단 총 리뷰 개수 + int mealTotalReviewCount(Meal meal); + + // 평균 평점 계산 + Double averageRating(Integer totalRating, int totalReviewCount); + + // 식단 메인 평점 총합 + Integer mealTotalMainRating(Meal meal); + + // 식단 양 평점 총합 + Integer mealTotalAmountRating(Meal meal); + + // 식단 맛 평점 총합 + Integer mealTotalTasteRating(Meal meal); + + // 메뉴 메인 평점 총합 + Integer menuTotalMainRating(Menu menu); + + // 메뉴 양 평점 총합 + Integer menuTotalAmountRating(Menu menu); + + // 메뉴 맛 평점 총합 + Integer menuTotalTasteRating(Menu menu); + + /** + * 리뷰 평접 총합 계산용 + * nullable 의 합 계산을 위한 메소드입니다. + */ + default Integer sum(Integer a, Integer b) { + if (a == null) return b; + if (b == null) return a; + return a + b; + } + +} diff --git a/src/main/java/ssu/eatssu/domain/rating/RatingCalculatorImpl.java b/src/main/java/ssu/eatssu/domain/rating/RatingCalculatorImpl.java new file mode 100644 index 00000000..62e60813 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/rating/RatingCalculatorImpl.java @@ -0,0 +1,134 @@ +package ssu.eatssu.domain.rating; + +import org.springframework.stereotype.Component; +import ssu.eatssu.domain.menu.Meal; +import ssu.eatssu.domain.menu.MealMenu; +import ssu.eatssu.domain.menu.Menu; +import ssu.eatssu.web.review.dto.RatingAverages; +import ssu.eatssu.web.review.dto.ReviewRatingCount; + +@Component +public class RatingCalculatorImpl implements RatingCalculator { + + // 식단에 포함된 메뉴들의 평점 별 리뷰 개수 계산 + public ReviewRatingCount mealRatingCount(Meal meal) { + ReviewRating.resetAll(); + + meal.getMealMenus().forEach(mealMenu -> mealMenu.getMenu().getReviews().calculateReviewRatings()); + + return ReviewRating.toResponse(); + } + + // 각 메뉴의 평점 별 개수 계산 + public ReviewRatingCount menuRatingCount(Menu menu) { + ReviewRating.resetAll(); + + menu.getReviews().calculateReviewRatings(); + + return ReviewRating.toResponse(); + } + + // 식단 평균 평점 세트 계산 + public RatingAverages mealAverageRatings(Meal meal) { + int totalReviewCount = mealTotalReviewCount(meal); + + if (totalReviewCount == 0) + return new RatingAverages(null, null, null); + + return RatingAverages.builder() + .mainRating(averageRating(mealTotalMainRating(meal), totalReviewCount)) + .amountRating(averageRating(mealTotalAmountRating(meal), totalReviewCount)) + .tasteRating(averageRating(mealTotalTasteRating(meal), totalReviewCount)) + .build(); + } + + // 메뉴 평균 평점 세트 계산 + public RatingAverages menuAverageRatings(Menu menu) { + int totalReviewCount = menu.getTotalReviewCount(); + + if (totalReviewCount == 0) { + return new RatingAverages(null, null, null); + } + + return RatingAverages.builder() + .mainRating(averageRating(menuTotalMainRating(menu), totalReviewCount)) + .amountRating(averageRating(menuTotalAmountRating(menu), totalReviewCount)) + .tasteRating(averageRating(menuTotalTasteRating(menu), totalReviewCount)) + .build(); + } + + // 식단 메인 평점 평균 계산 + public Double mealAverageMainRating(Meal meal) { + int totalReviewCount = mealTotalReviewCount(meal); + + if (totalReviewCount == 0) { + return null; + } + + return averageRating(mealTotalMainRating(meal), totalReviewCount); + } + + // 메뉴 메인 평점 평균 계산 + public Double menuAverageMainRating(Menu menu) { + if (menu.getReviews().size()==0) { + return null; + } + + return averageRating(menuTotalMainRating(menu), menu.getReviews().size()); + } + + // 식단 총 리뷰 개수 + public int mealTotalReviewCount(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .mapToInt(menu -> menu.getReviews().size()).sum(); + } + + // 평균 평점 계산 + public Double averageRating(Integer totalRating, int totalReviewCount) { + if (totalRating == null || totalReviewCount == 0) { + return null; + } + return totalRating / (double) totalReviewCount; + } + + // 식단 메인 평점 총합 + public Integer mealTotalMainRating(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(menu -> menu.getReviews().getTotalMainRating()) + .reduce(null, this::sum); + } + + // 식단 양 평점 총합 + public Integer mealTotalAmountRating(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(menu -> menu.getReviews().getTotalAmountRating()) + .reduce(null, this::sum); + } + + // 식단 맛 평점 총합 + public Integer mealTotalTasteRating(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(menu -> menu.getReviews().getTotalTasteRating()) + .reduce(null, this::sum); + } + + // 메뉴 메인 평점 총합 + public Integer menuTotalMainRating(Menu menu) { + return menu.getReviews().getTotalMainRating(); + } + + // 메뉴 양 평점 총합 + public Integer menuTotalAmountRating(Menu menu) { + return menu.getReviews().getTotalAmountRating(); + } + + // 메뉴 맛 평점 총합 + public Integer menuTotalTasteRating(Menu menu) { + return menu.getReviews().getTotalTasteRating(); + } + +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/rating/Ratings.java b/src/main/java/ssu/eatssu/domain/rating/Ratings.java new file mode 100644 index 00000000..8cd3ffaf --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/rating/Ratings.java @@ -0,0 +1,31 @@ +package ssu.eatssu.domain.rating; + +import io.jsonwebtoken.lang.Assert; +import jakarta.persistence.Embeddable; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +@Getter +@Embeddable +public class Ratings { + + private Integer mainRating; + + private Integer amountRating; + + private Integer tasteRating; + + private Ratings(Integer mainRating, Integer amountRating, Integer tasteRating) { + Assert.isTrue(mainRating >= 0 && mainRating <= 5, "mainRating must be between 0 and 5"); + Assert.isTrue(amountRating >= 0 && amountRating <= 5, "amountRating must be between 0 and 5"); + Assert.isTrue(tasteRating >= 0 && tasteRating <= 5, "tasteRating must be between 0 and 5"); + this.mainRating = mainRating; + this.amountRating = amountRating; + this.tasteRating = tasteRating; + } + + public static Ratings of(Integer mainRating, Integer amountRating, Integer tasteRating) { + return new Ratings(mainRating, amountRating, tasteRating); + } +} diff --git a/src/main/java/ssu/eatssu/domain/rating/ReviewRating.java b/src/main/java/ssu/eatssu/domain/rating/ReviewRating.java new file mode 100644 index 00000000..a0518545 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/rating/ReviewRating.java @@ -0,0 +1,56 @@ +package ssu.eatssu.domain.rating; + +import ssu.eatssu.web.review.dto.ReviewRatingCount; + +public enum ReviewRating { + RATING_1(1), + RATING_2(2), + RATING_3(3), + RATING_4(4), + RATING_5(5); + + private final int value; + private int count; + + ReviewRating(int value) { + this.value = value; + this.count = 0; + } + + public static void resetAll() { + for (ReviewRating RATING : ReviewRating.values()) { + RATING.resetCount(); + } + } + + public static ReviewRating fromValue(int value) { + for (ReviewRating RATING : ReviewRating.values()) { + if (RATING.value == value) { + return RATING; + } + } + throw new IllegalArgumentException("Invalid ratings value: " + value); + } + + public static ReviewRatingCount toResponse() { + return new ReviewRatingCount( + RATING_1.getCount(), + RATING_2.getCount(), + RATING_3.getCount(), + RATING_4.getCount(), + RATING_5.getCount() + ); + } + + public void incrementCount() { + this.count++; + } + + public int getCount() { + return count; + } + + private void resetCount() { + this.count = 0; + } +} diff --git a/src/main/java/ssu/eatssu/domain/repository/MealMenuRepository.java b/src/main/java/ssu/eatssu/domain/repository/MealMenuRepository.java index 99b87951..18f77dfc 100644 --- a/src/main/java/ssu/eatssu/domain/repository/MealMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/repository/MealMenuRepository.java @@ -1,7 +1,7 @@ package ssu.eatssu.domain.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.MealMenu; +import ssu.eatssu.domain.menu.MealMenu; public interface MealMenuRepository extends JpaRepository { } diff --git a/src/main/java/ssu/eatssu/domain/repository/MealRepository.java b/src/main/java/ssu/eatssu/domain/repository/MealRepository.java index 88d62bfb..456b0c14 100644 --- a/src/main/java/ssu/eatssu/domain/repository/MealRepository.java +++ b/src/main/java/ssu/eatssu/domain/repository/MealRepository.java @@ -1,8 +1,8 @@ package ssu.eatssu.domain.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.Meal; -import ssu.eatssu.domain.Restaurant; +import ssu.eatssu.domain.menu.Meal; +import ssu.eatssu.domain.restaurant.Restaurant; import ssu.eatssu.domain.enums.TimePart; import java.util.Date; diff --git a/src/main/java/ssu/eatssu/domain/repository/MenuRepository.java b/src/main/java/ssu/eatssu/domain/repository/MenuRepository.java index 419a4d76..b6019039 100644 --- a/src/main/java/ssu/eatssu/domain/repository/MenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/repository/MenuRepository.java @@ -1,8 +1,8 @@ package ssu.eatssu.domain.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.Menu; -import ssu.eatssu.domain.Restaurant; +import ssu.eatssu.domain.menu.Menu; +import ssu.eatssu.domain.restaurant.Restaurant; import java.util.List; import java.util.Optional; diff --git a/src/main/java/ssu/eatssu/domain/repository/RestaurantRepository.java b/src/main/java/ssu/eatssu/domain/repository/RestaurantRepository.java index 7768f422..95e30337 100644 --- a/src/main/java/ssu/eatssu/domain/repository/RestaurantRepository.java +++ b/src/main/java/ssu/eatssu/domain/repository/RestaurantRepository.java @@ -1,12 +1,13 @@ package ssu.eatssu.domain.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.Restaurant; -import ssu.eatssu.domain.enums.RestaurantName; +import ssu.eatssu.domain.restaurant.Restaurant; +import ssu.eatssu.domain.restaurant.RestaurantName; import java.util.Optional; public interface RestaurantRepository extends JpaRepository { Optional findByRestaurantName(RestaurantName restaurantName); + } diff --git a/src/main/java/ssu/eatssu/domain/repository/ReviewImageRepository.java b/src/main/java/ssu/eatssu/domain/repository/ReviewImageRepository.java new file mode 100644 index 00000000..39b28a82 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/repository/ReviewImageRepository.java @@ -0,0 +1,7 @@ +package ssu.eatssu.domain.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.review.ReviewImage; + +public interface ReviewImageRepository extends JpaRepository { +} diff --git a/src/main/java/ssu/eatssu/domain/repository/ReviewImgRepository.java b/src/main/java/ssu/eatssu/domain/repository/ReviewImgRepository.java deleted file mode 100644 index 90464de6..00000000 --- a/src/main/java/ssu/eatssu/domain/repository/ReviewImgRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package ssu.eatssu.domain.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.ReviewImg; - -public interface ReviewImgRepository extends JpaRepository { -} diff --git a/src/main/java/ssu/eatssu/domain/repository/ReviewReportRepository.java b/src/main/java/ssu/eatssu/domain/repository/ReviewReportRepository.java index d68e1ab3..14dcb086 100644 --- a/src/main/java/ssu/eatssu/domain/repository/ReviewReportRepository.java +++ b/src/main/java/ssu/eatssu/domain/repository/ReviewReportRepository.java @@ -1,7 +1,7 @@ package ssu.eatssu.domain.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.ReviewReport; +import ssu.eatssu.domain.review.ReviewReport; public interface ReviewReportRepository extends JpaRepository{ } diff --git a/src/main/java/ssu/eatssu/domain/repository/ReviewRepository.java b/src/main/java/ssu/eatssu/domain/repository/ReviewRepository.java index 9e72c63f..57399fde 100644 --- a/src/main/java/ssu/eatssu/domain/repository/ReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/repository/ReviewRepository.java @@ -1,11 +1,11 @@ package ssu.eatssu.domain.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.Menu; +import ssu.eatssu.domain.menu.Menu; import ssu.eatssu.domain.review.Review; import java.util.List; -public interface ReviewRepository extends JpaRepository, ReviewRepositoryCustom{ +public interface ReviewRepository extends JpaRepository, ReviewRepositoryCustom { List findAllByMenu(Menu menu); } diff --git a/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryCustom.java b/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryCustom.java index b5b84ced..d291d77d 100644 --- a/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryCustom.java +++ b/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryCustom.java @@ -2,10 +2,11 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; -import ssu.eatssu.domain.Meal; -import ssu.eatssu.domain.Menu; import ssu.eatssu.domain.review.Review; -import ssu.eatssu.domain.User; +import ssu.eatssu.domain.menu.Meal; +import ssu.eatssu.domain.menu.Menu; +import ssu.eatssu.domain.review.Review; +import ssu.eatssu.domain.user.User; public interface ReviewRepositoryCustom { //특정 메뉴 리뷰 - 최신순 정렬 diff --git a/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryImpl.java b/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryImpl.java index 41e7c6ba..7b0e6ba6 100644 --- a/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryImpl.java +++ b/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryImpl.java @@ -14,6 +14,10 @@ import java.util.ArrayList; import java.util.List; +import ssu.eatssu.domain.menu.Meal; +import ssu.eatssu.domain.menu.Menu; +import ssu.eatssu.domain.review.Review; +import ssu.eatssu.domain.user.User; @Repository @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/repository/UserInquiryRepository.java b/src/main/java/ssu/eatssu/domain/repository/UserInquiryRepository.java index 1328a078..ed288bd1 100644 --- a/src/main/java/ssu/eatssu/domain/repository/UserInquiryRepository.java +++ b/src/main/java/ssu/eatssu/domain/repository/UserInquiryRepository.java @@ -1,7 +1,7 @@ package ssu.eatssu.domain.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.UserInquiry; +import ssu.eatssu.domain.user.UserInquiry; public interface UserInquiryRepository extends JpaRepository{ } diff --git a/src/main/java/ssu/eatssu/domain/repository/UserRepository.java b/src/main/java/ssu/eatssu/domain/repository/UserRepository.java index 42960fd8..1bb5eccc 100644 --- a/src/main/java/ssu/eatssu/domain/repository/UserRepository.java +++ b/src/main/java/ssu/eatssu/domain/repository/UserRepository.java @@ -1,7 +1,7 @@ package ssu.eatssu.domain.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.User; +import ssu.eatssu.domain.user.User; import java.util.Optional; diff --git a/src/main/java/ssu/eatssu/domain/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/Restaurant.java similarity index 85% rename from src/main/java/ssu/eatssu/domain/Restaurant.java rename to src/main/java/ssu/eatssu/domain/restaurant/Restaurant.java index c3c23805..1e0de588 100644 --- a/src/main/java/ssu/eatssu/domain/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/Restaurant.java @@ -1,12 +1,13 @@ -package ssu.eatssu.domain; +package ssu.eatssu.domain.restaurant; import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; -import ssu.eatssu.domain.enums.RestaurantName; import java.util.List; +import ssu.eatssu.domain.menu.Meal; +import ssu.eatssu.domain.menu.Menu; @Entity @Getter diff --git a/src/main/java/ssu/eatssu/domain/enums/RestaurantName.java b/src/main/java/ssu/eatssu/domain/restaurant/RestaurantName.java similarity index 57% rename from src/main/java/ssu/eatssu/domain/enums/RestaurantName.java rename to src/main/java/ssu/eatssu/domain/restaurant/RestaurantName.java index a38ef39a..12df9835 100644 --- a/src/main/java/ssu/eatssu/domain/enums/RestaurantName.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/RestaurantName.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.enums; +package ssu.eatssu.domain.restaurant; import com.fasterxml.jackson.annotation.JsonCreator; import lombok.Getter; @@ -13,16 +13,16 @@ public enum RestaurantName { SNACK_CORNER("스낵 코너", 0), HAKSIK("학생 식당", 5000); - private String krName; + private String description; private Integer price; @JsonCreator - public static RestaurantName from(String s){ - return RestaurantName.valueOf(s.toUpperCase(Locale.ROOT)); + public static RestaurantName from(String description) { + return RestaurantName.valueOf(description.toUpperCase(Locale.ROOT)); } - RestaurantName(String krName, Integer price) { - this.krName = krName; + RestaurantName(String description, Integer price) { + this.description = description; this.price = price; } diff --git a/src/main/java/ssu/eatssu/domain/review/Rates.java b/src/main/java/ssu/eatssu/domain/review/Rates.java deleted file mode 100644 index e38893f6..00000000 --- a/src/main/java/ssu/eatssu/domain/review/Rates.java +++ /dev/null @@ -1,20 +0,0 @@ -package ssu.eatssu.domain.review; - -import jakarta.persistence.Embeddable; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@AllArgsConstructor -@NoArgsConstructor -@Getter -@Embeddable -public class Rates { - - Integer mainRate; - - Integer amountRate; - - Integer tasteRate; - -} diff --git a/src/main/java/ssu/eatssu/domain/review/Review.java b/src/main/java/ssu/eatssu/domain/review/Review.java index 66aaa6ff..0473ac36 100644 --- a/src/main/java/ssu/eatssu/domain/review/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/Review.java @@ -2,10 +2,10 @@ import jakarta.persistence.*; import lombok.*; -import ssu.eatssu.domain.BaseTimeEntity; -import ssu.eatssu.domain.Menu; -import ssu.eatssu.domain.ReviewImg; -import ssu.eatssu.domain.User; +import ssu.eatssu.domain.menu.Menu; +import ssu.eatssu.domain.rating.Ratings; +import ssu.eatssu.domain.user.BaseTimeEntity; +import ssu.eatssu.domain.user.User; import java.util.List; @@ -24,6 +24,9 @@ public class Review extends BaseTimeEntity { private String content; + @Embedded + private Ratings ratings; + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private User user; @@ -32,18 +35,27 @@ public class Review extends BaseTimeEntity { @JoinColumn(name = "menu_id") private Menu menu; - @Embedded - private Rates rates; - @OneToMany(mappedBy = "review", cascade = CascadeType.ALL) - private List reviewImgs; + private List reviewImages; + //Entity -> Dto 방향 의존관계 제거 public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { this.content = content; - this.rates = new Rates(mainRate, amountRate, tasteRate); + this.ratings = Ratings.of(mainRate, amountRate, tasteRate); + } + + /* + public void update(UpdateReviewRequest request) { + this.content = request.getContent(); + this.ratings = Ratings.of(request.getMainRate(), request.getAmountRate(), request.getTasteRate()); + } + */ + + public boolean isDifferentUser(User user) { + return !this.user.equals(user); } - public void signoutUser() { + public void clearUser() { this.user = null; } diff --git a/src/main/java/ssu/eatssu/domain/ReviewImg.java b/src/main/java/ssu/eatssu/domain/review/ReviewImage.java similarity index 80% rename from src/main/java/ssu/eatssu/domain/ReviewImg.java rename to src/main/java/ssu/eatssu/domain/review/ReviewImage.java index b4ec51a3..50dcf9cf 100644 --- a/src/main/java/ssu/eatssu/domain/ReviewImg.java +++ b/src/main/java/ssu/eatssu/domain/review/ReviewImage.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain; +package ssu.eatssu.domain.review; import jakarta.persistence.*; import lombok.*; @@ -9,11 +9,11 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Builder @AllArgsConstructor -public class ReviewImg { +public class ReviewImage { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "review_img_id") + @Column(name = "review_image_id") private Long id; @ManyToOne(fetch=FetchType.LAZY) diff --git a/src/main/java/ssu/eatssu/domain/ReviewReport.java b/src/main/java/ssu/eatssu/domain/review/ReviewReport.java similarity index 74% rename from src/main/java/ssu/eatssu/domain/ReviewReport.java rename to src/main/java/ssu/eatssu/domain/review/ReviewReport.java index 5d21ed58..a28ee200 100644 --- a/src/main/java/ssu/eatssu/domain/ReviewReport.java +++ b/src/main/java/ssu/eatssu/domain/review/ReviewReport.java @@ -1,7 +1,9 @@ -package ssu.eatssu.domain; +package ssu.eatssu.domain.review; import jakarta.persistence.*; import lombok.*; +import ssu.eatssu.domain.user.BaseTimeEntity; +import ssu.eatssu.domain.user.User; import ssu.eatssu.domain.enums.ReportStatus; import ssu.eatssu.domain.enums.ReviewReportType; import ssu.eatssu.domain.review.Review; @@ -11,18 +13,18 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor -public class ReviewReport extends BaseTimeEntity{ +public class ReviewReport extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "review_report_id") private Long id; - @ManyToOne(fetch= FetchType.LAZY) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "reporter_id") private User user; - @ManyToOne(fetch= FetchType.LAZY) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "review_id") private Review review; diff --git a/src/main/java/ssu/eatssu/domain/review/Reviews.java b/src/main/java/ssu/eatssu/domain/review/Reviews.java new file mode 100644 index 00000000..3a7dbb8e --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/Reviews.java @@ -0,0 +1,49 @@ +package ssu.eatssu.domain.review; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Embeddable; +import jakarta.persistence.OneToMany; +import java.util.ArrayList; +import java.util.List; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import ssu.eatssu.domain.rating.ReviewRating; + +@Getter +@NoArgsConstructor(access = AccessLevel.PUBLIC) +@Embeddable +public class Reviews { + + @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) + private List reviews = new ArrayList<>(); + + public void add(Review review) { + reviews.add(review); + } + + public int size() { + return reviews.size(); + } + + public void calculateReviewRatings() { + this.reviews.forEach(review -> { + int rateValue = review.getRatings().getMainRating(); + ReviewRating.fromValue(rateValue).incrementCount(); + }); + } + + + public int getTotalMainRating() { + return this.reviews.stream().mapToInt(review -> review.getRatings().getMainRating()).sum(); + } + + public int getTotalAmountRating() { + return this.reviews.stream().mapToInt(review -> review.getRatings().getAmountRating()).sum(); + } + + public int getTotalTasteRating() { + return this.reviews.stream().mapToInt(review -> review.getRatings().getTasteRating()).sum(); + } +} + diff --git a/src/main/java/ssu/eatssu/domain/BaseTimeEntity.java b/src/main/java/ssu/eatssu/domain/user/BaseTimeEntity.java similarity index 95% rename from src/main/java/ssu/eatssu/domain/BaseTimeEntity.java rename to src/main/java/ssu/eatssu/domain/user/BaseTimeEntity.java index aeb32814..a82f86f6 100644 --- a/src/main/java/ssu/eatssu/domain/BaseTimeEntity.java +++ b/src/main/java/ssu/eatssu/domain/user/BaseTimeEntity.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain; +package ssu.eatssu.domain.user; import jakarta.persistence.Column; import jakarta.persistence.EntityListeners; diff --git a/src/main/java/ssu/eatssu/domain/enums/OauthProvider.java b/src/main/java/ssu/eatssu/domain/user/OauthProvider.java similarity index 63% rename from src/main/java/ssu/eatssu/domain/enums/OauthProvider.java rename to src/main/java/ssu/eatssu/domain/user/OauthProvider.java index a125b2d4..eac15f3e 100644 --- a/src/main/java/ssu/eatssu/domain/enums/OauthProvider.java +++ b/src/main/java/ssu/eatssu/domain/user/OauthProvider.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.enums; +package ssu.eatssu.domain.user; public enum OauthProvider { EATSSU, KAKAO, APPLE; diff --git a/src/main/java/ssu/eatssu/domain/enums/Role.java b/src/main/java/ssu/eatssu/domain/user/Role.java similarity index 93% rename from src/main/java/ssu/eatssu/domain/enums/Role.java rename to src/main/java/ssu/eatssu/domain/user/Role.java index 1f053968..bf6580f9 100644 --- a/src/main/java/ssu/eatssu/domain/enums/Role.java +++ b/src/main/java/ssu/eatssu/domain/user/Role.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.enums; +package ssu.eatssu.domain.user; import lombok.Getter; import org.springframework.security.core.GrantedAuthority; diff --git a/src/main/java/ssu/eatssu/domain/User.java b/src/main/java/ssu/eatssu/domain/user/User.java similarity index 78% rename from src/main/java/ssu/eatssu/domain/User.java rename to src/main/java/ssu/eatssu/domain/user/User.java index 8e649d47..364c0f06 100644 --- a/src/main/java/ssu/eatssu/domain/User.java +++ b/src/main/java/ssu/eatssu/domain/user/User.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain; +package ssu.eatssu.domain.user; import jakarta.persistence.*; @@ -6,10 +6,8 @@ import lombok.Getter; import lombok.NoArgsConstructor; import org.jetbrains.annotations.NotNull; -import ssu.eatssu.domain.enums.OauthProvider; -import ssu.eatssu.domain.enums.Role; -import ssu.eatssu.domain.enums.UserStatus; import ssu.eatssu.domain.review.Review; +import ssu.eatssu.domain.review.ReviewReport; import java.util.List; @@ -18,7 +16,8 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) public class User extends BaseTimeEntity { - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "user_id") private Long id; @@ -40,8 +39,8 @@ public class User extends BaseTimeEntity { @Enumerated(EnumType.STRING) private UserStatus status; - @OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.DETACH,CascadeType.MERGE - ,CascadeType.REFRESH}) + @OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE + , CascadeType.REFRESH}) private List reviews; @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) @@ -50,12 +49,11 @@ public class User extends BaseTimeEntity { @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) private List userInquiry; - /** * Oauth 회원가입 용 생성자 */ private User(@NotNull String email, @NotNull Role role, @NotNull OauthProvider provider, - @NotNull String providerId, @NotNull UserStatus status, @NotNull String credentials){ + @NotNull String providerId, @NotNull UserStatus status, @NotNull String credentials) { this.email = email; this.role = role; this.provider = provider; @@ -70,13 +68,15 @@ private User(@NotNull String email, @NotNull Role role, @NotNull OauthProvider p */ public static User oAuthJoin(@NotNull String email, @NotNull OauthProvider provider, String providerId, String credentials) { - return new User(email, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials); + return new User(email, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials); } public void updateNickname(@NotNull String nickname) { this.nickname = nickname; } - public void updateEmail(String email) { this.email = email; } + public void updateEmail(String email) { + this.email = email; + } } diff --git a/src/main/java/ssu/eatssu/domain/UserInquiry.java b/src/main/java/ssu/eatssu/domain/user/UserInquiry.java similarity index 85% rename from src/main/java/ssu/eatssu/domain/UserInquiry.java rename to src/main/java/ssu/eatssu/domain/user/UserInquiry.java index 88b99b04..6e01a9d9 100644 --- a/src/main/java/ssu/eatssu/domain/UserInquiry.java +++ b/src/main/java/ssu/eatssu/domain/user/UserInquiry.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain; +package ssu.eatssu.domain.user; import jakarta.persistence.*; import lombok.*; @@ -8,7 +8,7 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Builder @AllArgsConstructor -public class UserInquiry extends BaseTimeEntity{ +public class UserInquiry extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "user_inquiry_id") diff --git a/src/main/java/ssu/eatssu/domain/enums/UserStatus.java b/src/main/java/ssu/eatssu/domain/user/UserStatus.java similarity index 52% rename from src/main/java/ssu/eatssu/domain/enums/UserStatus.java rename to src/main/java/ssu/eatssu/domain/user/UserStatus.java index 368e3a2c..fadda7ea 100644 --- a/src/main/java/ssu/eatssu/domain/enums/UserStatus.java +++ b/src/main/java/ssu/eatssu/domain/user/UserStatus.java @@ -1,8 +1,8 @@ -package ssu.eatssu.domain.enums; +package ssu.eatssu.domain.user; import lombok.Getter; @Getter public enum UserStatus { - ACTIVE,INACTIVE + ACTIVE, INACTIVE } diff --git a/src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java index 2f3e5fa3..23527e86 100644 --- a/src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java @@ -79,7 +79,7 @@ public enum BaseResponseStatus { * 500 INTERNAL_SERVER_ERROR 서버 내부 에러 */ INTERNAL_SERVER_ERROR(false, HttpStatus.INTERNAL_SERVER_ERROR, 500, "서버 내부 에러입니다"), - FAIL_IMG_UPLOAD(false, HttpStatus.INTERNAL_SERVER_ERROR, 50001, "이미지 업로드에 실패했습니다."), + FAIL_IMAGE_UPLOAD(false, HttpStatus.INTERNAL_SERVER_ERROR, 50001, "이미지 업로드에 실패했습니다."), /** * 503 SERVICE_UNAVAILABLE 서버 내부 에러 diff --git a/src/main/java/ssu/eatssu/security/CustomUserDetails.java b/src/main/java/ssu/eatssu/security/CustomUserDetails.java index 9e76a5e5..a7b0f1b2 100644 --- a/src/main/java/ssu/eatssu/security/CustomUserDetails.java +++ b/src/main/java/ssu/eatssu/security/CustomUserDetails.java @@ -5,7 +5,7 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; -import ssu.eatssu.domain.User; +import ssu.eatssu.domain.user.User; import java.util.ArrayList; import java.util.Collection; @@ -13,13 +13,13 @@ @RequiredArgsConstructor @Getter public class CustomUserDetails implements UserDetails { - private final Long Id; + private final Long id; private final String email; private final String credentials; private final GrantedAuthority role; public CustomUserDetails(User user){ - this.Id = user.getId(); + this.id = user.getId(); this.email = user.getEmail(); this.credentials = user.getCredentials(); this.role = user.getRole(); diff --git a/src/main/java/ssu/eatssu/security/CustomUserDetailsService.java b/src/main/java/ssu/eatssu/security/CustomUserDetailsService.java index 7009c6c2..2862df77 100644 --- a/src/main/java/ssu/eatssu/security/CustomUserDetailsService.java +++ b/src/main/java/ssu/eatssu/security/CustomUserDetailsService.java @@ -4,15 +4,12 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Component; -import ssu.eatssu.domain.User; +import ssu.eatssu.domain.user.User; import ssu.eatssu.domain.repository.UserRepository; import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponseStatus; -import java.util.List; - @Slf4j @Component @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/service/MenuService.java b/src/main/java/ssu/eatssu/service/MenuService.java index 5c50848a..e5c5041c 100644 --- a/src/main/java/ssu/eatssu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/service/MenuService.java @@ -4,11 +4,12 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import ssu.eatssu.domain.Meal; -import ssu.eatssu.domain.MealMenu; -import ssu.eatssu.domain.Menu; -import ssu.eatssu.domain.Restaurant; -import ssu.eatssu.domain.enums.RestaurantName; +import ssu.eatssu.domain.menu.Meal; +import ssu.eatssu.domain.menu.MealMenu; +import ssu.eatssu.domain.menu.Menu; +import ssu.eatssu.domain.rating.RatingCalculatorImpl; +import ssu.eatssu.domain.restaurant.Restaurant; +import ssu.eatssu.domain.restaurant.RestaurantName; import ssu.eatssu.domain.enums.TimePart; import ssu.eatssu.domain.repository.MealMenuRepository; import ssu.eatssu.domain.repository.MealRepository; @@ -16,16 +17,14 @@ import ssu.eatssu.domain.repository.RestaurantRepository; import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponseStatus; -import ssu.eatssu.utils.DateUtil; -import ssu.eatssu.utils.RatesCalculator; +import ssu.eatssu.utils.validators.MenuValidator; import ssu.eatssu.web.menu.dto.MenuReqDto; -import java.text.ParseException; import java.util.Collections; -import java.util.Date; import java.util.List; -import static ssu.eatssu.web.menu.dto.MenuResDto.*; +import static ssu.eatssu.utils.DateUtils.toDate; +import static ssu.eatssu.web.menu.dto.MenuResponse.*; @Slf4j @Service @@ -38,7 +37,7 @@ public class MenuService { private final MealMenuRepository mealMenuRepository; private final RestaurantRepository restaurantRepository; - private final RatesCalculator ratesCalculator; + private final RatingCalculatorImpl ratingCalculator; /** * 고정 메뉴 조회 @@ -51,7 +50,7 @@ public List findFixMenuList(RestaurantName restaurantName) { List menuList = menuRepository.findAllByRestaurant(restaurant); return menuList.stream() - .map(menu -> FixMenuInfo.from(menu, ratesCalculator.menuAverageMainRate(menu))) + .map(menu -> FixMenuInfo.from(menu, ratingCalculator.menuAverageMainRating(menu))) .toList(); } @@ -68,7 +67,7 @@ public List findMealList(TimePart timePart, String date, RestaurantNa //mealList 를 TodayMeal 로 매핑 후 반환 return mealList.stream() - .map(meal -> TodayMeal.from(meal, ratesCalculator.mealAverageMainRate(meal))) + .map(meal -> TodayMeal.from(meal, ratingCalculator.mealAverageMainRating(meal))) .toList(); } @@ -80,30 +79,33 @@ public void createMeal(TimePart timePart, String date, RestaurantName restaurant MenuReqDto.AddTodayMenuList addTodayMenuList) { Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); + + List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(toDate(date), + timePart, restaurant); - //이미 추가된 식단이면 생성하지 않음 - if (isExistMeal(timePart, date, restaurant, addTodayMenuList)) { + if (MenuValidator.validateExistedMeal(meals, timePart, date, restaurant, + addTodayMenuList)) { return; } //식단 생성 - Meal newMeal = Meal.builder().date(toDate(date)).restaurant(restaurant).timePart(timePart).build(); + Meal newMeal = Meal.builder().date(toDate(date)).restaurant(restaurant).timePart(timePart) + .build(); mealRepository.save(newMeal); //식단에 메뉴 추가 addMenu(newMeal, addTodayMenuList); - } /** * 식단에 메뉴 추가 */ private void addMenu(Meal meal, MenuReqDto.AddTodayMenuList addTodayMenuList) { - Restaurant restaurant = meal.getRestaurant(); for (String addMenuName : addTodayMenuList.getTodayMenuList()) { + //메뉴 체크 (기존에 없던 새로운 메뉴라면 생성) checkAndCreateMenu(addMenuName, restaurant); //메뉴 찾아서 @@ -144,7 +146,7 @@ public boolean isExistMeal(TimePart timePart, String date, Restaurant restaurant //식단 목록을 돌면서 메뉴 목록을 정렬하고 비교 for (Meal meal : meals) { - List menuNameList = meal.getMenuNameList(); + List menuNameList = meal.getMenuNames(); Collections.sort(menuNameList); //메뉴 목록이 같다면 이미 존재하는 식단 @@ -162,7 +164,7 @@ public boolean isExistMeal(TimePart timePart, String date, Restaurant restaurant public MenuList findMenuListInMeal(Long mealId) { Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); return MenuList.from(meal); } @@ -192,24 +194,10 @@ public void deleteMeal(Long mealId) { */ public void cleanupGarbageMenu(List menuList) { - for (Menu menu : menuList) { - if (menu.getMealMenus().isEmpty()) { + for(Menu menu : menuList){ + if(menu.getMealMenus().isEmpty()) { menuRepository.delete(menu); } } } - - /** - * yyyyMMdd -> Date 형 변환 - */ - public Date toDate(String date) throws BaseException { - - try { - return DateUtil.toDate("yyyyMMdd", date); - } catch (ParseException e) { - throw new BaseException(BaseResponseStatus.INVALID_DATE); - } - - } - } diff --git a/src/main/java/ssu/eatssu/service/MyPageService.java b/src/main/java/ssu/eatssu/service/MyPageService.java index bd7db483..828c70b4 100644 --- a/src/main/java/ssu/eatssu/service/MyPageService.java +++ b/src/main/java/ssu/eatssu/service/MyPageService.java @@ -7,7 +7,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.review.Review; -import ssu.eatssu.domain.User; +import ssu.eatssu.domain.user.User; import ssu.eatssu.domain.repository.ReviewRepository; import ssu.eatssu.domain.repository.UserRepository; import ssu.eatssu.handler.response.BaseException; diff --git a/src/main/java/ssu/eatssu/service/OauthService.java b/src/main/java/ssu/eatssu/service/OauthService.java index 6e526f97..d40bb4ca 100644 --- a/src/main/java/ssu/eatssu/service/OauthService.java +++ b/src/main/java/ssu/eatssu/service/OauthService.java @@ -15,8 +15,8 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; -import ssu.eatssu.domain.User; -import ssu.eatssu.domain.enums.OauthProvider; +import ssu.eatssu.domain.user.User; +import ssu.eatssu.domain.user.OauthProvider; import ssu.eatssu.domain.repository.UserRepository; import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponseStatus; @@ -63,6 +63,7 @@ public Tokens kakaoLogin(String email, String providerId) { /** * 애플 로그인 */ + public Tokens appleLogin(String identityToken) { //애플 유저 정보 조회 @@ -73,6 +74,7 @@ public Tokens appleLogin(String identityToken) { User user = userRepository.findByProviderId(oauthInfo.providerId()) .orElseGet(() -> join(oauthInfo.email(), OauthProvider.APPLE, oauthInfo.providerId())); + //이메일 갱신 updateAppleUserEmail(user, oauthInfo.email()); @@ -83,8 +85,8 @@ public Tokens appleLogin(String identityToken) { /** * 회원가입 */ - private User join(String email, OauthProvider provider, String providerId) { + private User join(String email, OauthProvider provider, String providerId) { String credentials = createCredentials(provider, providerId); //회원가입 @@ -95,6 +97,7 @@ private User join(String email, OauthProvider provider, String providerId) { /** * Credentials 생성 */ + private String createCredentials(OauthProvider provider, String providerId) { return passwordEncoder.encode(provider + "_" + providerId); } @@ -127,10 +130,10 @@ private OauthInfo getUserInfoByPublicKey(String identityToken, PublicKey publicK // identityToken 에서 publicKey 서명을 통해 Claims 를 추출한다. Claims claims = Jwts.parserBuilder() - .setSigningKey(publicKey) - .build() - .parseClaimsJws(identityToken) - .getBody(); + .setSigningKey(publicKey) + .build() + .parseClaimsJws(identityToken) + .getBody(); //Claims 에서 email, providerId(사용자 식별값) 를 추출한다. try { @@ -202,7 +205,7 @@ private AppleKeys.Key selectMatchedKey(String identityToken, AppleKeys candidate //후보키 중에서 정답키를 찾아서 반환한다. return candidateKeys.findKeyBy(headerMap.get("kid"), headerMap.get("alg")) - .orElseThrow(() -> new BaseException(BaseResponseStatus.INVALID_IDENTITY_TOKEN)); + .orElseThrow(() -> new BaseException(BaseResponseStatus.INVALID_IDENTITY_TOKEN)); } /** @@ -211,11 +214,11 @@ private AppleKeys.Key selectMatchedKey(String identityToken, AppleKeys candidate private AppleKeys getAppleKeys() { URI uri = UriComponentsBuilder - .fromUriString("https://appleid.apple.com") - .path("/auth/keys") - .encode() - .build() - .toUri(); + .fromUriString("https://appleid.apple.com") + .path("/auth/keys") + .encode() + .build() + .toUri(); ResponseEntity response = restTemplate.getForEntity(uri, AppleKeys.class); return response.getBody(); diff --git a/src/main/java/ssu/eatssu/service/ReportService.java b/src/main/java/ssu/eatssu/service/ReportService.java index f37f1d44..eddbac48 100644 --- a/src/main/java/ssu/eatssu/service/ReportService.java +++ b/src/main/java/ssu/eatssu/service/ReportService.java @@ -4,8 +4,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.review.Review; -import ssu.eatssu.domain.ReviewReport; -import ssu.eatssu.domain.User; +import ssu.eatssu.domain.review.ReviewReport; +import ssu.eatssu.domain.user.User; import ssu.eatssu.domain.enums.ReportStatus; import ssu.eatssu.domain.repository.ReviewReportRepository; import ssu.eatssu.domain.repository.ReviewRepository; diff --git a/src/main/java/ssu/eatssu/service/ReviewService.java b/src/main/java/ssu/eatssu/service/ReviewService.java index 4d6158e0..1307545c 100644 --- a/src/main/java/ssu/eatssu/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/service/ReviewService.java @@ -7,18 +7,16 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; -import ssu.eatssu.domain.Meal; -import ssu.eatssu.domain.Menu; -import ssu.eatssu.domain.ReviewImg; -import ssu.eatssu.domain.User; +import ssu.eatssu.domain.menu.Meal; +import ssu.eatssu.domain.menu.Menu; +import ssu.eatssu.domain.rating.RatingCalculator; import ssu.eatssu.domain.repository.*; import ssu.eatssu.domain.review.Review; +import ssu.eatssu.domain.review.ReviewImage; +import ssu.eatssu.domain.user.User; import ssu.eatssu.handler.response.BaseException; -import ssu.eatssu.utils.RatesCalculator; import ssu.eatssu.utils.S3Uploader; import ssu.eatssu.utils.SecurityUtil; -import ssu.eatssu.vo.AverageRates; -import ssu.eatssu.vo.RateCountMap; import ssu.eatssu.web.SliceDto; import ssu.eatssu.web.review.dto.*; @@ -35,44 +33,56 @@ public class ReviewService { private final UserRepository userRepository; private final ReviewRepository reviewRepository; - private final ReviewImgRepository reviewImgRepository; + private final ReviewImageRepository reviewImageRepository; private final MenuRepository menuRepository; private final MealRepository mealRepository; + private final RatingCalculator ratingCalculator; + private final S3Uploader s3Uploader; - private final RatesCalculator ratesCalculator; /** * 리뷰 작성 */ - public void createReview(Long userId, Long menuId, ReviewCreate reviewCreate, List imgList) { + public void write(Long userId, Long menuId, CreateReviewRequest request, + List images) { + User user = userRepository.findById(userId) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Menu menu = menuRepository.findById(menuId) .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - Review review = reviewCreate.toEntity(user, menu); + Review review = request.toEntity(user, menu); + + menu.addReview(review); + processReviewImages(images, review); + reviewRepository.save(review); + } - if (imgList != null && !imgList.isEmpty()) { - for (MultipartFile img : imgList) { - addReviewImg(review, img); - } + public void processReviewImages(List images, Review review) { + if (images == null || !images.isEmpty()) { + return; + } + for (MultipartFile image : images) { + addReviewImage(review, image); } } /** * 리뷰 이미지 추가 */ - public void addReviewImg(Review review, MultipartFile image) { + public void addReviewImage(Review review, MultipartFile image) { if (!image.isEmpty()) { try { - String reviewImgUrl = s3Uploader.upload(image, "reviewImg"); - ReviewImg reviewImg = ReviewImg.builder().review(review).imageUrl(reviewImgUrl).build(); - reviewImgRepository.save(reviewImg); + String reviewImageUrl = s3Uploader.upload(image, "reviewImg"); + ReviewImage reviewImage = ReviewImage.builder().review(review) + .imageUrl(reviewImageUrl) + .build(); + reviewImageRepository.save(reviewImage); } catch (IOException e) { - throw new BaseException(FAIL_IMG_UPLOAD); + throw new BaseException(FAIL_IMAGE_UPLOAD); } } } @@ -80,78 +90,66 @@ public void addReviewImg(Review review, MultipartFile image) { /** * 리뷰 문장 및 별점 수정 */ - public void updateReviewContent(Long userId, Long reviewId, ReviewUpdate reviewUpdate) { + public void update(Long userId, Long reviewId, UpdateReviewRequest request) { User user = userRepository.findById(userId) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Review review = reviewRepository.findById(reviewId) .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - if (isWriterOrAdmin(review, user)) { - review.update(reviewUpdate.getContent() - , reviewUpdate.getMainRate(), reviewUpdate.getAmountRate(), reviewUpdate.getTasteRate()); - } else { + if (review.isDifferentUser(user)) { throw new BaseException(REVIEW_PERMISSION_DENIED); } + + review.update(request.getContent(), request.getMainRate(), request.getAmountRate(), request.getTasteRate()); } /** * 리뷰 삭제 */ - public void deleteReview(Long userId, Long reviewId) { + public void delete(Long userId, Long reviewId) { User user = userRepository.findById(userId) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Review review = reviewRepository.findById(reviewId) .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - if (isWriterOrAdmin(review, user)) { - reviewRepository.delete(review); - reviewRepository.flush(); - } else { + if (review.isDifferentUser(user)) { throw new BaseException(REVIEW_PERMISSION_DENIED); } - } - - /** - * 리뷰 작성자/관리자 인지 확인 //todo 관리자인지는 빼도 될듯 - */ - public boolean isWriterOrAdmin(Review review, User user) { - return review.getUser() == user; + reviewRepository.delete(review); + reviewRepository.flush(); } /** * 고정메뉴 - 리뷰 정보 조회 */ - public MenuReviewInfo findReviewInfoByMenuId(Long menuId) { + public MenuReviewInformationResponse findReviewInformationByMenuId(Long menuId) { Menu menu = menuRepository.findById(menuId) .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - AverageRates averageRate = ratesCalculator.menuAverageRates(menu); + RatingAverages ratingAverages = ratingCalculator.menuAverageRatings(menu); + ReviewRatingCount ratingCount = ratingCalculator.menuRatingCount(menu); - RateCountMap rateCountMap = ratesCalculator.menuRateCountMap(menu); - - return MenuReviewInfo.of(menu, averageRate, rateCountMap); + return MenuReviewInformationResponse.of(menu, ratingAverages, ratingCount); } /** * 변동메뉴 - 리뷰 정보 조회 */ - public MealReviewInfo findReviewInfoByMealId(Long mealId) { + public MealReviewInformationResponse findReviewInformationByMealId(Long mealId) { Meal meal = mealRepository.findById(mealId) .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); - int reviewCount = ratesCalculator.mealTotalReviewCount(meal); - - AverageRates averageRate = ratesCalculator.mealAverageRates(meal); + int reviewCount = ratingCalculator.mealTotalReviewCount(meal); - RateCountMap rateCountMap = ratesCalculator.mealRateCountMap(meal); + RatingAverages averageRating = ratingCalculator.mealAverageRatings(meal); + ReviewRatingCount ratingCountMap = ratingCalculator.mealRatingCount(meal); - return MealReviewInfo.of(meal.getMenuNameList(), reviewCount, averageRate, rateCountMap); + return MealReviewInformationResponse.of(reviewCount, meal.getMenuNames(), averageRating, ratingCountMap); } - /** * Slice를 Slice로 변환 */ @@ -169,13 +167,15 @@ private SliceDto sliceReviewToSliceReviewDetail(Slice slic /** * 고정메뉴 - 리뷰 목록 조회 */ - public SliceDto findReviewListByMenuId(Long menuId, Pageable pageable, Long lastReviewId) { + public SliceDto findReviewListByMenuId(Long menuId, Pageable pageable, + Long lastReviewId) { Menu menu = menuRepository.findById(menuId) .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); //pageable에서 sort값 가져옴 String sortBy = pageable.getSort().get().findFirst().orElseThrow().getProperty(); //pageable에서 direction값 가져옴 - Sort.Direction direction = pageable.getSort().get().findFirst().orElseThrow().getDirection(); + Sort.Direction direction = pageable.getSort().get().findFirst().orElseThrow() + .getDirection(); Slice sliceReviewList; if (sortBy.equals("date")) { //리뷰 날짜가 기준 if (direction.isDescending()) { //최신순 정렬 diff --git a/src/main/java/ssu/eatssu/service/UserInquiryService.java b/src/main/java/ssu/eatssu/service/UserInquiryService.java index edeb2048..3f9241de 100644 --- a/src/main/java/ssu/eatssu/service/UserInquiryService.java +++ b/src/main/java/ssu/eatssu/service/UserInquiryService.java @@ -3,8 +3,8 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import ssu.eatssu.domain.User; -import ssu.eatssu.domain.UserInquiry; +import ssu.eatssu.domain.user.User; +import ssu.eatssu.domain.user.UserInquiry; import ssu.eatssu.domain.repository.UserInquiryRepository; import ssu.eatssu.domain.repository.UserRepository; import ssu.eatssu.handler.response.BaseException; diff --git a/src/main/java/ssu/eatssu/service/UserService.java b/src/main/java/ssu/eatssu/service/UserService.java index e9fcf2da..cdd2c984 100644 --- a/src/main/java/ssu/eatssu/service/UserService.java +++ b/src/main/java/ssu/eatssu/service/UserService.java @@ -8,18 +8,18 @@ import org.springframework.security.core.Authentication; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; -import ssu.eatssu.domain.review.Review; -import ssu.eatssu.domain.ReviewReport; -import ssu.eatssu.domain.User; -import ssu.eatssu.domain.enums.OauthProvider; import ssu.eatssu.domain.repository.ReviewReportRepository; import ssu.eatssu.domain.repository.UserRepository; +import ssu.eatssu.domain.review.Review; +import ssu.eatssu.domain.review.ReviewReport; +import ssu.eatssu.domain.user.OauthProvider; +import ssu.eatssu.domain.user.User; +import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponseStatus; import ssu.eatssu.jwt.JwtTokenProvider; -import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.web.user.dto.Tokens; -import static ssu.eatssu.handler.response.BaseResponseStatus.*; +import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_FOUND_USER; @Slf4j @Service @@ -38,7 +38,7 @@ public class UserService { public void updateNickname(Long userId, String nickname) { User user = userRepository.findById(userId) - .orElseThrow(()-> new BaseException(BaseResponseStatus.NOT_FOUND_USER)); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_USER)); user.updateNickname(nickname); userRepository.save(user); @@ -64,7 +64,7 @@ public Tokens generateOauthJwtTokens(String email, OauthProvider provider, Strin } private String makeOauthCredentials(OauthProvider provider, String providerId) { - return provider+"_"+providerId; + return provider + "_" + providerId; } /** @@ -77,15 +77,15 @@ public Tokens refreshTokens(Authentication authentication) { /** * 유저 탈퇴 */ - public void signout (Long userId) { - User user = userRepository.findById(userId).orElseThrow(()-> new BaseException(NOT_FOUND_USER)); + public void signout(Long userId) { + User user = userRepository.findById(userId).orElseThrow(() -> new BaseException(NOT_FOUND_USER)); //작성한 리뷰 삭제 - for(Review review: user.getReviews()) { - review.signoutUser(); + for (Review review : user.getReviews()) { + review.clearUser(); } //작성한 신고 삭제 - for(ReviewReport report: user.getReviewReports()){ + for (ReviewReport report : user.getReviewReports()) { reviewReportRepository.delete(report); } /* diff --git a/src/main/java/ssu/eatssu/slack/SlackMessageFormat.java b/src/main/java/ssu/eatssu/slack/SlackMessageFormat.java index 5e0c20fd..06a09a9b 100644 --- a/src/main/java/ssu/eatssu/slack/SlackMessageFormat.java +++ b/src/main/java/ssu/eatssu/slack/SlackMessageFormat.java @@ -2,9 +2,9 @@ import org.springframework.stereotype.Component; import ssu.eatssu.domain.review.Review; -import ssu.eatssu.domain.ReviewReport; -import ssu.eatssu.domain.User; -import ssu.eatssu.domain.UserInquiry; +import ssu.eatssu.domain.review.ReviewReport; +import ssu.eatssu.domain.user.User; +import ssu.eatssu.domain.user.UserInquiry; import java.text.MessageFormat; @@ -37,7 +37,7 @@ public static String sendReport(ReviewReport report) { ); Object[] args = {reporter.getId(), reporter.getNickname(), review.getId(), review.getUser().getId() , review.getUser().getNickname(), review.getMenu().getName(), review.getContent(), - review.getModifiedDate().toString(), report.getReportType().getKrName(), report.getCreatedDate()}; + review.getModifiedDate().toString(), report.getReportType().getDescription(), report.getCreatedDate()}; return messageFormat.format(args); } diff --git a/src/main/java/ssu/eatssu/utils/DateUtil.java b/src/main/java/ssu/eatssu/utils/DateUtils.java similarity index 59% rename from src/main/java/ssu/eatssu/utils/DateUtil.java rename to src/main/java/ssu/eatssu/utils/DateUtils.java index 7e53076d..23af8379 100644 --- a/src/main/java/ssu/eatssu/utils/DateUtil.java +++ b/src/main/java/ssu/eatssu/utils/DateUtils.java @@ -1,13 +1,23 @@ package ssu.eatssu.utils; -import ssu.eatssu.handler.response.BaseException; -import ssu.eatssu.handler.response.BaseResponseStatus; - import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; +import ssu.eatssu.handler.response.BaseException; +import ssu.eatssu.handler.response.BaseResponseStatus; + +public class DateUtils { + + private DateUtils() { } + + public static Date toDate(String date) throws BaseException { + try { + return DateUtils.toDate("yyyyMMdd", date); + } catch (ParseException e) { + throw new BaseException(BaseResponseStatus.INVALID_DATE); + } + } -public class DateUtil { public static Date toDate(String dateFormat, String dateString) throws ParseException { SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat); return simpleDateFormat.parse(dateString); diff --git a/src/main/java/ssu/eatssu/utils/RatesCalculator.java b/src/main/java/ssu/eatssu/utils/RatesCalculator.java deleted file mode 100644 index 9671a877..00000000 --- a/src/main/java/ssu/eatssu/utils/RatesCalculator.java +++ /dev/null @@ -1,158 +0,0 @@ -package ssu.eatssu.utils; - -import org.springframework.stereotype.Component; -import ssu.eatssu.domain.Meal; -import ssu.eatssu.domain.MealMenu; -import ssu.eatssu.domain.Menu; -import ssu.eatssu.vo.AverageRates; -import ssu.eatssu.vo.RateCountMap; - -import java.util.HashMap; -import java.util.Map; - -@Component -public class RatesCalculator { - - // 식단 각 평점별 개수 계산 - public RateCountMap mealRateCountMap(Meal meal) { - - RateCountMap rateCountMap = new RateCountMap(); - - meal.getMealMenus().forEach(mealMenu -> rateCountMap.append(menuRateCountMap(mealMenu.getMenu()))); - - return rateCountMap; - } - - // 메뉴 각 평점별 개수 계산 - public RateCountMap menuRateCountMap(Menu menu) { - Map rateCountMap = new HashMap<>(); - - menu.getReviews().forEach(review -> { - int rate = review.getRates().getMainRate(); - rateCountMap.put(rate, rateCountMap.getOrDefault(rate, 0) + 1); - }); - - return new RateCountMap(rateCountMap); - } - - // 식단 평균 평점 세트 계산 - public AverageRates mealAverageRates(Meal meal) { - int totalReviewCount = mealTotalReviewCount(meal); - - if (totalReviewCount == 0) - return new AverageRates(null, null, null); - - return AverageRates.builder() - .mainRate(averageRate(mealTotalMainRate(meal), totalReviewCount)) - .amountRate(averageRate(mealTotalAmountRate(meal), totalReviewCount)) - .tasteRate(averageRate(mealTotalTasteRate(meal), totalReviewCount)) - .build(); - } - - // 메뉴 평균 평점 세트 계산 - public AverageRates menuAverageRates(Menu menu) { - int totalReviewCount = menu.getReviews().size(); - - if (totalReviewCount == 0) - return new AverageRates(null, null, null); - - return AverageRates.builder() - .mainRate(averageRate(menuTotalMainRate(menu), totalReviewCount)) - .amountRate(averageRate(menuTotalAmountRate(menu), totalReviewCount)) - .tasteRate(averageRate(menuTotalTasteRate(menu), totalReviewCount)) - .build(); - } - - // 식단 메인 평점 평균 계산 - public Double mealAverageMainRate(Meal meal) { - int totalReviewCount = mealTotalReviewCount(meal); - - if (totalReviewCount == 0) { - return null; - } - - return averageRate(mealTotalMainRate(meal), totalReviewCount); - } - - // 메뉴 메인 평점 평균 계산 - public Double menuAverageMainRate(Menu menu) { - if (menu.getReviews().isEmpty()) { - return null; - } - - return averageRate(menuTotalMainRate(menu), menu.getReviews().size()); - } - - // 식단 총 리뷰 개수 - public int mealTotalReviewCount(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .mapToInt(menu -> menu.getReviews().size()).sum(); - } - - // 평균 평점 계산 - private Double averageRate(Integer totalRate, int totalReviewCount) { - if (totalRate == null || totalReviewCount == 0) { - return null; - } - return totalRate / (double) totalReviewCount; - } - - // 식단 메인 평점 총합 - private Integer mealTotalMainRate(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(menu -> menu.getReviews().stream() - .map(review -> review.getRates().getMainRate()) - .reduce(null, this::sum)) - .reduce(null, this::sum); - } - - // 식단 양 평점 총합 - private Integer mealTotalAmountRate(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(menu -> menu.getReviews().stream() - .map(review -> review.getRates().getAmountRate()) - .reduce(null, this::sum)) - .reduce(null, this::sum); - } - - // 식단 맛 평점 총합 - private Integer mealTotalTasteRate(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(menu -> menu.getReviews().stream() - .map(review -> review.getRates().getTasteRate()) - .reduce(null, this::sum)) - .reduce(null, this::sum); - } - - // 메뉴 메인 평점 총합 - private Integer menuTotalMainRate(Menu menu) { - return menu.getReviews().stream() - .map(review -> review.getRates().getMainRate()) - .reduce(null, this::sum); - } - - // 메뉴 양 평점 총합 - private Integer menuTotalAmountRate(Menu menu) { - return menu.getReviews().stream() - .map(review -> review.getRates().getAmountRate()) - .reduce(null, this::sum); - } - - // 메뉴 맛 평점 총합 - private Integer menuTotalTasteRate(Menu menu) { - return menu.getReviews().stream() - .map(review -> review.getRates().getTasteRate()) - .reduce(null, this::sum); - } - - private Integer sum(Integer a, Integer b) { - if (a == null) return b; - if (b == null) return a; - return a + b; - } - -} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/utils/validators/MenuValidator.java b/src/main/java/ssu/eatssu/utils/validators/MenuValidator.java new file mode 100644 index 00000000..8dc5ac9f --- /dev/null +++ b/src/main/java/ssu/eatssu/utils/validators/MenuValidator.java @@ -0,0 +1,34 @@ +package ssu.eatssu.utils.validators; + +import java.util.Collections; +import java.util.List; +import lombok.RequiredArgsConstructor; +import ssu.eatssu.domain.enums.TimePart; +import ssu.eatssu.domain.menu.Meal; +import ssu.eatssu.domain.restaurant.Restaurant; +import ssu.eatssu.web.menu.dto.MenuReqDto; + +@RequiredArgsConstructor +public class MenuValidator { + + public static boolean validateExistedMeal(List meals, TimePart timePart, String date, + Restaurant restaurant, + MenuReqDto.AddTodayMenuList addTodayMenuList) { + + //비교를 위한 정렬 + Collections.sort(addTodayMenuList.getTodayMenuList()); + + //식단 목록을 돌면서 메뉴 목록을 정렬하고 비교 + for (Meal meal : meals) { + List menuNameList = meal.getMenuNames(); + Collections.sort(menuNameList); + + //메뉴 목록이 같다면 이미 존재하는 식단 + if (menuNameList.equals(addTodayMenuList.getTodayMenuList())) { + return true; + } + } + + return false; + } +} diff --git a/src/main/java/ssu/eatssu/vo/AverageRate.java b/src/main/java/ssu/eatssu/vo/AverageRate.java new file mode 100644 index 00000000..7d24f5d8 --- /dev/null +++ b/src/main/java/ssu/eatssu/vo/AverageRate.java @@ -0,0 +1,9 @@ +package ssu.eatssu.vo; + +import lombok.Builder; + +public record AverageRate(Double mainRate, Double amountRate, Double tasteRate) { + @Builder + public AverageRate { + } +} diff --git a/src/main/java/ssu/eatssu/vo/AverageRates.java b/src/main/java/ssu/eatssu/vo/AverageRates.java deleted file mode 100644 index 46d1dbce..00000000 --- a/src/main/java/ssu/eatssu/vo/AverageRates.java +++ /dev/null @@ -1,9 +0,0 @@ -package ssu.eatssu.vo; - -import lombok.Builder; - -public record AverageRates(Double mainRate, Double amountRate, Double tasteRate) { - @Builder - public AverageRates { - } -} diff --git a/src/main/java/ssu/eatssu/web/menu/MenuController.java b/src/main/java/ssu/eatssu/web/menu/MenuController.java index a925740a..fe7bd26c 100644 --- a/src/main/java/ssu/eatssu/web/menu/MenuController.java +++ b/src/main/java/ssu/eatssu/web/menu/MenuController.java @@ -10,8 +10,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.enums.MenuTypeGroup; -import ssu.eatssu.domain.enums.RestaurantName; +import ssu.eatssu.domain.menu.MenuType; +import ssu.eatssu.domain.restaurant.RestaurantName; import ssu.eatssu.domain.enums.TimePart; import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponse; @@ -21,7 +21,7 @@ import java.util.List; import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; -import static ssu.eatssu.web.menu.dto.MenuResDto.*; +import static ssu.eatssu.web.menu.dto.MenuResponse.*; @Slf4j @RestController @@ -43,12 +43,9 @@ public class MenuController { 일반적으로 학생식당과 도담의 경우 식단 여러개가 조회되고 기숙사식당은 한개만 조회됩니다.) """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정메뉴 식당)", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("/today-meal") //todo today-meal은 아닌것 같음 public BaseResponse> getMealList(@Parameter(description = "날짜(yyyyMMdd)") @@ -57,7 +54,7 @@ public BaseResponse> getMealList(@Parameter(description = "날 @RequestParam("restaurant") RestaurantName restaurantName, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { - if (MenuTypeGroup.isFix(restaurantName)) { + if (MenuType.isFixed(restaurantName)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } @@ -73,17 +70,14 @@ public BaseResponse> getMealList(@Parameter(description = "날 메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 리스트를 조회합니다. """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("/fix-menu") public BaseResponse> getFixMenuList(@Parameter(description = "식당이름") @RequestParam("restaurant") RestaurantName restaurantName) { - if (MenuTypeGroup.isChange(restaurantName)) { + if(MenuType.isChanged(restaurantName)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } @@ -102,24 +96,20 @@ public BaseResponse> getFixMenuList(@Parameter(description = " 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 추가 성공", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "식단 추가 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping("/") public BaseResponse addMeal(@Parameter(description = "날짜(yyyyMMdd)") - @RequestParam("date") String date, - @Parameter(description = "식당이름") - @RequestParam("restaurant") RestaurantName restaurantName, - @Parameter(description = "시간대") - @RequestParam("time") TimePart timePart, - @RequestBody AddTodayMenuList addTodayMenuList) { - if (MenuTypeGroup.isFix(restaurantName)) { + @RequestParam("date") String date, + @Parameter(description = "식당이름") + @RequestParam("restaurant") RestaurantName restaurantName, + @Parameter(description = "시간대") + @RequestParam("time") TimePart timePart, + @RequestBody AddTodayMenuList addTodayMenuList) { + if (MenuType.isFixed(restaurantName)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } @@ -136,10 +126,8 @@ public BaseResponse addMeal(@Parameter(description = "날짜(yyyyMMdd)") 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("/menus") public BaseResponse getMenuListInMeal(@Parameter(description = "mealId") @@ -153,10 +141,8 @@ public BaseResponse getMenuListInMeal(@Parameter(description = "mealId */ @Operation(summary = "식단 삭제", description = "식단을 삭제하는 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 삭제 성공", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "식단 삭제 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @DeleteMapping("/meal/{mealId}") public BaseResponse deleteMeal(@Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { diff --git a/src/main/java/ssu/eatssu/web/menu/dto/MenuResDto.java b/src/main/java/ssu/eatssu/web/menu/dto/MenuResponse.java similarity index 95% rename from src/main/java/ssu/eatssu/web/menu/dto/MenuResDto.java rename to src/main/java/ssu/eatssu/web/menu/dto/MenuResponse.java index 251b6354..256113e6 100644 --- a/src/main/java/ssu/eatssu/web/menu/dto/MenuResDto.java +++ b/src/main/java/ssu/eatssu/web/menu/dto/MenuResponse.java @@ -4,16 +4,16 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; -import ssu.eatssu.domain.Meal; -import ssu.eatssu.domain.MealMenu; -import ssu.eatssu.domain.Menu; +import ssu.eatssu.domain.menu.Meal; +import ssu.eatssu.domain.menu.MealMenu; +import ssu.eatssu.domain.menu.Menu; import java.util.ArrayList; import java.util.List; -public class MenuResDto { +public class MenuResponse { - private MenuResDto() { + private MenuResponse() { } @Schema(title = "오늘의 식단 리스트 조회 Res") diff --git a/src/main/java/ssu/eatssu/web/mypage/dto/MyReviewDetail.java b/src/main/java/ssu/eatssu/web/mypage/dto/MyReviewDetail.java index 419f3e1a..e4d5b821 100644 --- a/src/main/java/ssu/eatssu/web/mypage/dto/MyReviewDetail.java +++ b/src/main/java/ssu/eatssu/web/mypage/dto/MyReviewDetail.java @@ -20,13 +20,13 @@ public class MyReviewDetail { Long reviewId; @Schema(description = "평점-메인", example = "4") - private Integer mainRate; + private Integer mainRating; @Schema(description = "평점-양", example = "4") - private Integer amountRate; + private Integer amountRating; @Schema(description = "평점-맛", example = "4") - private Integer tasteRate; + private Integer tasteRating; @Schema(description = "리뷰 작성 날짜(format = yyyyMMdd)", example = "20230407") private LocalDate writeDate; @@ -43,13 +43,13 @@ public class MyReviewDetail { public static MyReviewDetail from(Review review){ List imgUrlList = new ArrayList<>(); - review.getReviewImgs().forEach(i->imgUrlList.add(i.getImageUrl())); + review.getReviewImages().forEach(i->imgUrlList.add(i.getImageUrl())); return MyReviewDetail.builder() .reviewId(review.getId()) - .mainRate(review.getRates().getMainRate()) - .amountRate(review.getRates().getAmountRate()) - .tasteRate(review.getRates().getTasteRate()) + .mainRating(review.getRatings().getMainRating()) + .amountRating(review.getRatings().getAmountRating()) + .tasteRating(review.getRatings().getTasteRating()) .writeDate(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imgUrlList(imgUrlList) diff --git a/src/main/java/ssu/eatssu/web/mypage/dto/MypageInfo.java b/src/main/java/ssu/eatssu/web/mypage/dto/MypageInfo.java index d5d969b4..99def1e8 100644 --- a/src/main/java/ssu/eatssu/web/mypage/dto/MypageInfo.java +++ b/src/main/java/ssu/eatssu/web/mypage/dto/MypageInfo.java @@ -4,7 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.enums.OauthProvider; +import ssu.eatssu.domain.user.OauthProvider; @AllArgsConstructor @Builder diff --git a/src/main/java/ssu/eatssu/web/report/ReportController.java b/src/main/java/ssu/eatssu/web/report/ReportController.java index a955b179..5b6d20e4 100644 --- a/src/main/java/ssu/eatssu/web/report/ReportController.java +++ b/src/main/java/ssu/eatssu/web/report/ReportController.java @@ -9,11 +9,10 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.ReviewReport; +import ssu.eatssu.domain.review.ReviewReport; import ssu.eatssu.domain.enums.ReviewReportType; import ssu.eatssu.domain.repository.ReviewRepository; import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponse; import ssu.eatssu.service.ReportService; import ssu.eatssu.slack.SlackChannel; diff --git a/src/main/java/ssu/eatssu/web/report/dto/ReviewReportTypeInfo.java b/src/main/java/ssu/eatssu/web/report/dto/ReviewReportTypeInfo.java index 671ec248..156dc70f 100644 --- a/src/main/java/ssu/eatssu/web/report/dto/ReviewReportTypeInfo.java +++ b/src/main/java/ssu/eatssu/web/report/dto/ReviewReportTypeInfo.java @@ -1,6 +1,5 @@ package ssu.eatssu.web.report.dto; -import lombok.AllArgsConstructor; import lombok.Getter; import ssu.eatssu.domain.enums.ReviewReportType; @@ -11,6 +10,6 @@ public class ReviewReportTypeInfo { public ReviewReportTypeInfo(ReviewReportType reportType) { this.reportType = reportType; - this.typeDescription = reportType.getKrName(); + this.typeDescription = reportType.getDescription(); } } diff --git a/src/main/java/ssu/eatssu/web/review/ReviewController.java b/src/main/java/ssu/eatssu/web/review/ReviewController.java index 16306a65..257a85d5 100644 --- a/src/main/java/ssu/eatssu/web/review/ReviewController.java +++ b/src/main/java/ssu/eatssu/web/review/ReviewController.java @@ -17,7 +17,7 @@ import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import ssu.eatssu.domain.enums.MenuTypeGroup; +import ssu.eatssu.domain.menu.MenuType; import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponse; import ssu.eatssu.service.ReviewService; @@ -27,8 +27,6 @@ import java.util.List; -import static ssu.eatssu.domain.enums.MenuTypeGroup.CHANGE; -import static ssu.eatssu.domain.enums.MenuTypeGroup.FIX; import static ssu.eatssu.handler.response.BaseResponseStatus.MISSING_REQUEST_PARAM; @Slf4j @@ -50,24 +48,21 @@ public class ReviewController { 사진은 여러장 첨부 가능합니다.(기획상으로는 한 장만 첨부하도록 제한이 있지만 API 스펙 자체는 여러 장 첨부 가능) """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 작성 성공", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping(value = "/{menuId}", - consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, - produces = MediaType.APPLICATION_JSON_VALUE) - public BaseResponse writeReview(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, - @RequestPart(value = "reviewCreate") ReviewCreate reviewCreate, - @RequestPart(value = "multipartFileList", required = false) - List multipartFileList) { + consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, + produces = MediaType.APPLICATION_JSON_VALUE) + public BaseResponse writeReview( + @Parameter(description = "menuId") @PathVariable("menuId") Long menuId, + @RequestPart(value = "reviewCreate") CreateReviewRequest request, + @RequestPart(value = "multipartFileList", required = false) + List multipartFileList) { Long userId = SecurityUtil.getLoginUserId(); - reviewService.createReview(userId, menuId, reviewCreate, multipartFileList); + reviewService.write(userId, menuId, request, multipartFileList); return BaseResponse.success(); } @@ -80,21 +75,17 @@ public BaseResponse writeReview(@Parameter(description = "menuId") @PathVaria 글 수정만 가능하며 사진 수정은 지원하지 않습니다. """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 수정 성공", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 수정 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PatchMapping("/{reviewId}") public BaseResponse updateReview(@Parameter(description = "reviewId") - @PathVariable("reviewId") Long reviewId, - @RequestBody ReviewUpdate reviewUpdate) { + @PathVariable("reviewId") Long reviewId, + @RequestBody UpdateReviewRequest request) { Long userId = SecurityUtil.getLoginUserId(); - reviewService.updateReviewContent(userId, reviewId, reviewUpdate); + reviewService.update(userId, reviewId, request); return BaseResponse.success(); } @@ -104,19 +95,15 @@ public BaseResponse updateReview(@Parameter(description = "reviewId") */ @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @DeleteMapping("/{reviewId}") public BaseResponse deleteReview(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId) { Long userId = SecurityUtil.getLoginUserId(); - reviewService.deleteReview(userId, reviewId); + reviewService.delete(userId, reviewId); return BaseResponse.success(); } @@ -137,9 +124,9 @@ public BaseResponse deleteReview(@Parameter(description = "reviewId") @PathVa @Schema(implementation = BaseResponse.class))) }) @GetMapping("/meal-info") - public BaseResponse getMealReviewInfo(@Parameter(description = "mealId") + public BaseResponse getMealReviewInfo(@Parameter(description = "mealId") @RequestParam(value = "mealId") Long mealId) { - return BaseResponse.success(reviewService.findReviewInfoByMealId(mealId)); + return BaseResponse.success(reviewService.findReviewInformationByMealId(mealId)); } /** @@ -159,9 +146,9 @@ public BaseResponse getMealReviewInfo(@Parameter(description = " @Schema(implementation = BaseResponse.class))) }) @GetMapping("/menu-info") - public BaseResponse getMenuReviewInfo(@Parameter(description = "menuId") + public BaseResponse getMenuReviewInfo(@Parameter(description = "menuId") @RequestParam(value = "menuId") Long menuId) { - return BaseResponse.success(reviewService.findReviewInfoByMenuId(menuId)); + return BaseResponse.success(reviewService.findReviewInformationByMenuId(menuId)); } /** @@ -170,42 +157,38 @@ public BaseResponse getMenuReviewInfo(@Parameter(description = " * pageable default={size=20, sort=date, direction=desc}

*/ @Operation(summary = "리뷰 리스트 조회", description = """ - 리뷰 리스트를 조회하는 API 입니다.

- menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

- menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

- 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

- 페이징 기본 값 = {size=20, sort=date, direction=desc}

- """) + 리뷰 리스트를 조회하는 API 입니다.

+ menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

+ menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

+ 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

+ 페이징 기본 값 = {size=20, sort=date, direction=desc}

+ """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("/list") public BaseResponse> getReviewList( - @Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") MenuTypeGroup menuTypeGroup, - @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) Long menuId, - @Parameter(description = "mealId(변동메뉴)") @RequestParam(value = "mealId", required = false) Long mealId, - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) - @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable) { + @Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") MenuType menuType, + @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) Long menuId, + @Parameter(description = "mealId(변동메뉴)") @RequestParam(value = "mealId", required = false) Long mealId, + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) + @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable) { SliceDto reviewList; - if (menuTypeGroup == FIX) { + if (menuType == MenuType.FIXED) { if (menuId == null) { - throw new BaseException(MISSING_REQUEST_PARAM); + throw new BaseException(MISSING_REQUEST_PARAM); } else { - reviewList = reviewService.findReviewListByMenuId(menuId, pageable, lastReviewId); + reviewList = reviewService.findReviewListByMenuId(menuId, pageable, lastReviewId); } - } else if (menuTypeGroup == CHANGE) { + } else if (menuType == MenuType.CHANGED) { if (mealId == null) { - throw new BaseException(MISSING_REQUEST_PARAM); + throw new BaseException(MISSING_REQUEST_PARAM); } else { - reviewList = reviewService.findReviewListByMealId(mealId, pageable, lastReviewId); + reviewList = reviewService.findReviewListByMealId(mealId, pageable, lastReviewId); } } else { throw new BaseException(MISSING_REQUEST_PARAM); diff --git a/src/main/java/ssu/eatssu/web/review/dto/CreateReviewRequest.java b/src/main/java/ssu/eatssu/web/review/dto/CreateReviewRequest.java new file mode 100644 index 00000000..9cb61356 --- /dev/null +++ b/src/main/java/ssu/eatssu/web/review/dto/CreateReviewRequest.java @@ -0,0 +1,49 @@ +package ssu.eatssu.web.review.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Max; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.springframework.util.Assert; +import ssu.eatssu.domain.menu.Menu; +import ssu.eatssu.domain.rating.Ratings; +import ssu.eatssu.domain.review.Review; +import ssu.eatssu.domain.user.User; + +@Schema(title = "리뷰 작성") +@NoArgsConstructor +@Getter +public class CreateReviewRequest { + + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; + + @Schema(description = "평점-양", example = "4") + private Integer amountRating; + + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; + + @Max(150) + @Schema(description = "한줄평", example = "맛있어용") + private String content; + + public CreateReviewRequest(int mainRating, int amountRating, int tasteRating, String content) { + Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); + this.mainRating = mainRating; + this.amountRating = amountRating; + this.tasteRating = tasteRating; + this.content = content; + } + + public Review toEntity(User user, Menu menu) { + Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + return Review.builder() + .user(user).content(this.content).ratings(ratings).menu(menu) + .build(); + } + +} diff --git a/src/main/java/ssu/eatssu/web/review/dto/MealReviewInfo.java b/src/main/java/ssu/eatssu/web/review/dto/MealReviewInfo.java deleted file mode 100644 index 5fed2959..00000000 --- a/src/main/java/ssu/eatssu/web/review/dto/MealReviewInfo.java +++ /dev/null @@ -1,72 +0,0 @@ -package ssu.eatssu.web.review.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import ssu.eatssu.vo.AverageRates; -import ssu.eatssu.vo.RateCountMap; - -import java.util.List; - -@Schema(title = "식단 리뷰 정보(평점 등등)") -@Getter -@AllArgsConstructor -@Builder -public class MealReviewInfo { - @Schema(description = "메뉴명 리스트", example = "[\"고구마치즈돈까스\", \"막국수\", \"미니밥\", \"단무지\", \"요구르트\"]") - private List menuNameList; - - @Schema(description = "리뷰 개수", example = "15") - private Integer totalReviewCount; - - @Schema(description = "평점-메인", example = "4.4") - private Double mainRate; - - @Schema(description = "평점-양", example = "4.4") - private Double amountRate; - - @Schema(description = "평점-맛", example = "4.4") - private Double tasteRate; - - private MealReviewInfo.ReviewRateCnt reviewRateCnt; - - public static MealReviewInfo of(List menuNameList, Integer reviewCount, AverageRates rates, - RateCountMap rateCountMap) { - - return MealReviewInfo.builder() - .menuNameList(menuNameList) - .mainRate(rates.mainRate()).tasteRate(rates.tasteRate()).amountRate(rates.amountRate()) - .totalReviewCount(reviewCount) - .reviewRateCnt(new ReviewRateCnt(rateCountMap)) - .build(); - } - - @Getter - @AllArgsConstructor - @Builder - public static class ReviewRateCnt { - @Schema(description = "평점5 개수", example = "5") - private Integer fiveCnt; - - @Schema(description = "평점4 개수", example = "5") - private Integer fourCnt; - - @Schema(description = "평점3 개수", example = "5") - private Integer threeCnt; - - @Schema(description = "평점2 개수", example = "5") - private Integer twoCnt; - - @Schema(description = "평점1 개수", example = "5") - private Integer oneCnt; - - public ReviewRateCnt(RateCountMap rateCountMap) { - this.oneCnt = rateCountMap.get(1); - this.twoCnt = rateCountMap.get(2); - this.threeCnt = rateCountMap.get(3); - this.fourCnt = rateCountMap.get(4); - this.fiveCnt = rateCountMap.get(5); - } - } -} diff --git a/src/main/java/ssu/eatssu/web/review/dto/MealReviewInformationResponse.java b/src/main/java/ssu/eatssu/web/review/dto/MealReviewInformationResponse.java new file mode 100644 index 00000000..be835fdb --- /dev/null +++ b/src/main/java/ssu/eatssu/web/review/dto/MealReviewInformationResponse.java @@ -0,0 +1,45 @@ +package ssu.eatssu.web.review.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +import java.util.List; + +@Schema(title = "식단 리뷰 정보(평점 등등)") +@Getter +@AllArgsConstructor +@Builder +public class MealReviewInformationResponse implements ReviewInformationResponse{ + + @Schema(description = "메뉴명 리스트", example = "[\"고구마치즈돈까스\", \"막국수\", \"미니밥\", \"단무지\", \"요구르트\"]") + private List menuNames; + + @Schema(description = "리뷰 개수", example = "15") + private Integer totalReviewCount; + + @Schema(description = "평점-메인", example = "4.4") + private Double mainRating; + + @Schema(description = "평점-양", example = "4.4") + private Double amountRating; + + @Schema(description = "평점-맛", example = "4.4") + private Double tasteRating; + + private ReviewRatingCount reviewRatingCount; + + public static MealReviewInformationResponse of(Integer totalReviewCount, List menuNames, + RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { + + return MealReviewInformationResponse.builder() + .menuNames(menuNames) + .mainRating(ratingAverages.mainRating()) + .amountRating(ratingAverages.amountRating()) + .tasteRating(ratingAverages.tasteRating()) + .totalReviewCount(totalReviewCount) + .reviewRatingCount(reviewRatingCount) + .build(); + } +} diff --git a/src/main/java/ssu/eatssu/web/review/dto/MenuReviewInfo.java b/src/main/java/ssu/eatssu/web/review/dto/MenuReviewInfo.java deleted file mode 100644 index 31c38c45..00000000 --- a/src/main/java/ssu/eatssu/web/review/dto/MenuReviewInfo.java +++ /dev/null @@ -1,71 +0,0 @@ -package ssu.eatssu.web.review.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import ssu.eatssu.domain.Menu; -import ssu.eatssu.vo.AverageRates; -import ssu.eatssu.vo.RateCountMap; - -@Schema(title = "메뉴 리뷰 정보(평점 등등)") -@Getter -@AllArgsConstructor -@Builder -public class MenuReviewInfo { - @Schema(description = "메뉴명", example = "순대국밥") - private String menuName; - - @Schema(description = "리뷰 개수", example = "15") - private Integer totalReviewCount; - - @Schema(description = "평점-메인", example = "4.4") - private Double mainRate; - - @Schema(description = "평점-양", example = "4.4") - private Double amountRate; - - @Schema(description = "평점-맛", example = "4.4") - private Double tasteRate; - - private ReviewRateCnt reviewRateCnt; - - public static MenuReviewInfo of(Menu menu, AverageRates rates, RateCountMap rateCountMap) { - - return MenuReviewInfo.builder() - .menuName(menu.getName()) - .mainRate(rates.mainRate()).tasteRate(rates.tasteRate()).amountRate(rates.amountRate()) - .totalReviewCount(menu.getReviews().size()) - .reviewRateCnt(new ReviewRateCnt(rateCountMap)) - .build(); - } - - @Getter - @AllArgsConstructor - @Builder - public static class ReviewRateCnt { - @Schema(description = "평점5 개수", example = "5") - private Integer fiveCnt; - - @Schema(description = "평점4 개수", example = "5") - private Integer fourCnt; - - @Schema(description = "평점3 개수", example = "5") - private Integer threeCnt; - - @Schema(description = "평점2 개수", example = "5") - private Integer twoCnt; - - @Schema(description = "평점1 개수", example = "5") - private Integer oneCnt; - - public ReviewRateCnt(RateCountMap rateCountMap) { - this.oneCnt = rateCountMap.get(1); - this.twoCnt = rateCountMap.get(2); - this.threeCnt = rateCountMap.get(3); - this.fourCnt = rateCountMap.get(4); - this.fiveCnt = rateCountMap.get(5); - } - } - -} diff --git a/src/main/java/ssu/eatssu/web/review/dto/MenuReviewInformationResponse.java b/src/main/java/ssu/eatssu/web/review/dto/MenuReviewInformationResponse.java new file mode 100644 index 00000000..3087f5c9 --- /dev/null +++ b/src/main/java/ssu/eatssu/web/review/dto/MenuReviewInformationResponse.java @@ -0,0 +1,44 @@ +package ssu.eatssu.web.review.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +import ssu.eatssu.domain.menu.Menu; + +@Schema(title = "메뉴 리뷰 정보(평점 등등)") +@Getter +@AllArgsConstructor +@Builder +public class MenuReviewInformationResponse implements ReviewInformationResponse { + + @Schema(description = "메뉴 리스트", example = "[\"고구마치즈돈까스\", \"막국수\", \"미니밥\", \"단무지\", \"요구르트\"]") + private String menuName; + + @Schema(description = "리뷰 개수", example = "15") + private Integer totalReviewCount; + + @Schema(description = "평점-메인", example = "4.4") + private Double mainRating; + + @Schema(description = "평점-양", example = "4.4") + private Double amountRating; + + @Schema(description = "평점-맛", example = "4.4") + private Double tasteRating; + private ReviewRatingCount reviewRatingCount; + + public static MenuReviewInformationResponse of(Menu menu, + RatingAverages ratingAverages, + ReviewRatingCount reviewRatingCount) { + return MenuReviewInformationResponse.builder() + .menuName(menu.getName()) + .totalReviewCount(menu.getTotalReviewCount()) + .mainRating(ratingAverages.mainRating()) + .amountRating(ratingAverages.amountRating()) + .tasteRating(ratingAverages.tasteRating()) + .reviewRatingCount(reviewRatingCount) + .build(); + } +} diff --git a/src/main/java/ssu/eatssu/web/review/dto/RatingAverages.java b/src/main/java/ssu/eatssu/web/review/dto/RatingAverages.java new file mode 100644 index 00000000..2813b79d --- /dev/null +++ b/src/main/java/ssu/eatssu/web/review/dto/RatingAverages.java @@ -0,0 +1,10 @@ +package ssu.eatssu.web.review.dto; + +import lombok.Builder; + +public record RatingAverages(Double mainRating, Double amountRating, Double tasteRating) { + + @Builder + public RatingAverages { + } +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/web/review/dto/ReviewCreate.java b/src/main/java/ssu/eatssu/web/review/dto/ReviewCreate.java deleted file mode 100644 index 98df8723..00000000 --- a/src/main/java/ssu/eatssu/web/review/dto/ReviewCreate.java +++ /dev/null @@ -1,37 +0,0 @@ -package ssu.eatssu.web.review.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.Max; -import lombok.Getter; -import lombok.NoArgsConstructor; -import ssu.eatssu.domain.Menu; -import ssu.eatssu.domain.review.Rates; -import ssu.eatssu.domain.review.Review; -import ssu.eatssu.domain.User; - -@Schema(title = "리뷰 작성") -@NoArgsConstructor -@Getter -public class ReviewCreate { - - @Schema(description = "평점-메인", example = "4") - private Integer mainRate; - - @Schema(description = "평점-양", example = "4") - private Integer amountRate; - - @Schema(description = "평점-맛", example = "4") - private Integer tasteRate; - - @Max(150) - @Schema(description = "한줄평", example = "맛있어용") - private String content; - - public Review toEntity(User user, Menu menu) { - Rates rates = new Rates(this.mainRate, this.amountRate, this.tasteRate); - return Review.builder() - .user(user).content(this.content).rates(rates).menu(menu) - .build(); - } - -} diff --git a/src/main/java/ssu/eatssu/web/review/dto/ReviewDetail.java b/src/main/java/ssu/eatssu/web/review/dto/ReviewDetail.java index 7ba121ac..3dd7b3a3 100644 --- a/src/main/java/ssu/eatssu/web/review/dto/ReviewDetail.java +++ b/src/main/java/ssu/eatssu/web/review/dto/ReviewDetail.java @@ -4,7 +4,6 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.ReviewImg; import ssu.eatssu.domain.review.Review; import java.time.LocalDate; @@ -33,13 +32,13 @@ public class ReviewDetail { private String writerNickname; @Schema(description = "평점-메인", example = "4") - private Integer mainRate; + private Integer mainRating; @Schema(description = "평점-양", example = "4") - private Integer amountRate; + private Integer amountRating; @Schema(description = "평점-맛", example = "4") - private Integer tasteRate; + private Integer tasteRating; @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") private LocalDate writeDate; @@ -52,32 +51,35 @@ public class ReviewDetail { public static ReviewDetail from(Review review, Long userId) { - List imgUrlList = review.getReviewImgs().stream() - .map(ReviewImg::getImageUrl).toList(); - + List imgUrlList = new ArrayList<>(); + review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); if(review.getUser()== null){//탈퇴한 유저의 리뷰인 경우 return ReviewDetail.builder() .reviewId(review.getId()) .writerId(null).writerNickname("알 수 없음") - .mainRate(review.getRates().getMainRate()) - .amountRate(review.getRates().getAmountRate()) - .tasteRate(review.getRates().getTasteRate()) + .mainRating(review.getRatings().getMainRating()) + .amountRating(review.getRatings().getAmountRating()) + .tasteRating(review.getRatings().getTasteRating()) .writeDate(review.getCreatedDate().toLocalDate()) .content(review.getContent()) - .isWriter(false).imgUrlList(imgUrlList).menu(review.getMenu().getName()) + .isWriter(false) + .imgUrlList(imgUrlList) + .menu(review.getMenu().getName()) .build(); }else{ boolean isWriter = review.getUser().getId().equals(userId); return ReviewDetail.builder() .reviewId(review.getId()) .writerId(review.getUser().getId()).writerNickname(review.getUser().getNickname()) - .mainRate(review.getRates().getMainRate()) - .amountRate(review.getRates().getAmountRate()) - .tasteRate(review.getRates().getTasteRate()) - .writeDate(review.getCreatedDate().toLocalDate()).content(review.getContent()) + .mainRating(review.getRatings().getMainRating()) + .amountRating(review.getRatings().getAmountRating()) + .tasteRating(review.getRatings().getTasteRating()) + .writeDate(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) .isWriter(isWriter).imgUrlList(imgUrlList).menu(review.getMenu().getName()) .build(); } } + } diff --git a/src/main/java/ssu/eatssu/web/review/dto/ReviewInformationResponse.java b/src/main/java/ssu/eatssu/web/review/dto/ReviewInformationResponse.java new file mode 100644 index 00000000..fe36247f --- /dev/null +++ b/src/main/java/ssu/eatssu/web/review/dto/ReviewInformationResponse.java @@ -0,0 +1,5 @@ +package ssu.eatssu.web.review.dto; + +public interface ReviewInformationResponse { + +} diff --git a/src/main/java/ssu/eatssu/web/review/dto/ReviewRatingCount.java b/src/main/java/ssu/eatssu/web/review/dto/ReviewRatingCount.java new file mode 100644 index 00000000..e16456c4 --- /dev/null +++ b/src/main/java/ssu/eatssu/web/review/dto/ReviewRatingCount.java @@ -0,0 +1,8 @@ +package ssu.eatssu.web.review.dto; + +//COMMENT: 더 좋은 매개변수 명이 있을 것 같은데 제 머리로는 이게 한계입니다... 멋진 변수명으로 바꿔주세요 +public record ReviewRatingCount(int oneStarCount, int twoStarCount, int threeStarCount, int fourStarCount, int fiveStarCount) { + + public ReviewRatingCount { + } +} diff --git a/src/main/java/ssu/eatssu/web/review/dto/ReviewUpdate.java b/src/main/java/ssu/eatssu/web/review/dto/UpdateReviewRequest.java similarity index 94% rename from src/main/java/ssu/eatssu/web/review/dto/ReviewUpdate.java rename to src/main/java/ssu/eatssu/web/review/dto/UpdateReviewRequest.java index b975afec..f8064b60 100644 --- a/src/main/java/ssu/eatssu/web/review/dto/ReviewUpdate.java +++ b/src/main/java/ssu/eatssu/web/review/dto/UpdateReviewRequest.java @@ -8,7 +8,7 @@ @Schema(title = "리뷰 수정(글)") @NoArgsConstructor @Getter -public class ReviewUpdate { +public class UpdateReviewRequest { @Schema(description = "평점-메인", example = "4") private Integer mainRate; @@ -22,4 +22,4 @@ public class ReviewUpdate { @Max(150) @Schema(description = "한줄평", example = "맛있어용") private String content; -} +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java b/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java index 05191271..3324adf5 100644 --- a/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java +++ b/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java @@ -10,7 +10,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.UserInquiry; +import ssu.eatssu.domain.user.UserInquiry; import ssu.eatssu.domain.repository.UserInquiryRepository; import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponse; diff --git a/src/main/java/ssu/eatssu/web/userinquiry/dto/UserInquiryDetail.java b/src/main/java/ssu/eatssu/web/userinquiry/dto/UserInquiryDetail.java index 5b6646f3..02c08303 100644 --- a/src/main/java/ssu/eatssu/web/userinquiry/dto/UserInquiryDetail.java +++ b/src/main/java/ssu/eatssu/web/userinquiry/dto/UserInquiryDetail.java @@ -4,7 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.UserInquiry; +import ssu.eatssu.domain.user.UserInquiry; @AllArgsConstructor @Builder From 67fadb6626faeafc9fb6f7ae4669cf72b214c73f Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 13 Jan 2024 10:14:11 +0900 Subject: [PATCH 030/399] =?UTF-8?q?Refactor:=20JPA=20Projection=20?= =?UTF-8?q?=EC=9D=84=20=EC=9D=B4=EC=9A=A9=ED=95=98=EC=97=AC=20RatingCalcul?= =?UTF-8?q?ator=20=EA=B5=AC=ED=98=84=20JPA=20=EA=B0=9D=EC=B2=B4=20?= =?UTF-8?q?=EC=B0=B8=EC=A1=B0=EB=A5=BC=20=EC=9D=B4=EC=9A=A9=ED=95=9C=20?= =?UTF-8?q?=EA=B8=B0=EC=A1=B4=EC=9D=98=20RatingCalculator(JpaLoadCollectio?= =?UTF-8?q?nRatingCalculator)=20=EA=B3=BC=EC=9D=98=20=EC=84=B1=EB=8A=A5=20?= =?UTF-8?q?=EB=B9=84=EA=B5=90=20=ED=95=84=EC=9A=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...=> JpaLoadCollectionRatingCalculator.java} | 7 +- .../rating/JpaProjectionRatingCalculator.java | 125 ++++++++++++++++++ .../domain/repository/ReviewRepository.java | 10 ++ .../domain/repository/dto/RatingsDto.java | 17 +++ .../repository/dto/ReviewMainRating.java | 8 ++ .../java/ssu/eatssu/service/MenuService.java | 4 +- 6 files changed, 167 insertions(+), 4 deletions(-) rename src/main/java/ssu/eatssu/domain/rating/{RatingCalculatorImpl.java => JpaLoadCollectionRatingCalculator.java} (95%) create mode 100644 src/main/java/ssu/eatssu/domain/rating/JpaProjectionRatingCalculator.java create mode 100644 src/main/java/ssu/eatssu/domain/repository/dto/RatingsDto.java create mode 100644 src/main/java/ssu/eatssu/domain/repository/dto/ReviewMainRating.java diff --git a/src/main/java/ssu/eatssu/domain/rating/RatingCalculatorImpl.java b/src/main/java/ssu/eatssu/domain/rating/JpaLoadCollectionRatingCalculator.java similarity index 95% rename from src/main/java/ssu/eatssu/domain/rating/RatingCalculatorImpl.java rename to src/main/java/ssu/eatssu/domain/rating/JpaLoadCollectionRatingCalculator.java index 62e60813..5ae35f9d 100644 --- a/src/main/java/ssu/eatssu/domain/rating/RatingCalculatorImpl.java +++ b/src/main/java/ssu/eatssu/domain/rating/JpaLoadCollectionRatingCalculator.java @@ -7,8 +7,11 @@ import ssu.eatssu.web.review.dto.RatingAverages; import ssu.eatssu.web.review.dto.ReviewRatingCount; +/** + * JPA 의 OneToMany객체참조를 이용하여 구현한 클래스입니다. + */ @Component -public class RatingCalculatorImpl implements RatingCalculator { +public class JpaLoadCollectionRatingCalculator implements RatingCalculator { // 식단에 포함된 메뉴들의 평점 별 리뷰 개수 계산 public ReviewRatingCount mealRatingCount(Meal meal) { @@ -70,7 +73,7 @@ public Double mealAverageMainRating(Meal meal) { // 메뉴 메인 평점 평균 계산 public Double menuAverageMainRating(Menu menu) { - if (menu.getReviews().size()==0) { + if (menu.getReviews().size() == 0) { return null; } diff --git a/src/main/java/ssu/eatssu/domain/rating/JpaProjectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/JpaProjectionRatingCalculator.java new file mode 100644 index 00000000..d5fc7932 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/rating/JpaProjectionRatingCalculator.java @@ -0,0 +1,125 @@ +package ssu.eatssu.domain.rating; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import ssu.eatssu.domain.menu.Meal; +import ssu.eatssu.domain.menu.Menu; +import ssu.eatssu.domain.repository.ReviewRepository; +import ssu.eatssu.domain.repository.dto.RatingsDto; +import ssu.eatssu.web.review.dto.RatingAverages; +import ssu.eatssu.web.review.dto.ReviewRatingCount; + +import java.util.Collection; + +/** + * Jpa projection 을 이용하여 구현한 클래스입니다. + * 더미 데이터 + * JpaLoadCollectionRatingCalculator : 253 lines + * JpaProjectionRatingCalculator : 174 lines + */ + +@Component +@RequiredArgsConstructor +public class JpaProjectionRatingCalculator implements RatingCalculator { + + private final ReviewRepository reviewRepository; + + @Override + public ReviewRatingCount mealRatingCount(Meal meal) { + ReviewRating.resetAll(); + + Collection mealRatings = reviewRepository.findByMenu_MealMenus_Meal(meal, RatingsDto.class); + mealRatings.forEach(ratings -> ReviewRating.fromValue(ratings.getMainRating()).incrementCount()); + + return ReviewRating.toResponse(); + } + + @Override + public ReviewRatingCount menuRatingCount(Menu menu) { + return null; + } + + @Override + public RatingAverages mealAverageRatings(Meal meal) { + int totalReviewCount = mealTotalReviewCount(meal); + + if (totalReviewCount == 0) + return new RatingAverages(null, null, null); + + Collection mealRatings = reviewRepository.findByMenu_MealMenus_Meal(meal, RatingsDto.class); + + Integer totalMainRating = mealRatings.stream().mapToInt(RatingsDto::getMainRating).sum(); + Integer totalTasteRating = mealRatings.stream().mapToInt(RatingsDto::getTasteRating).sum(); + Integer totalAmountRating = mealRatings.stream().mapToInt(RatingsDto::getAmountRating).sum(); + + return RatingAverages.builder() + .mainRating(averageRating(totalMainRating, totalReviewCount)) + .tasteRating(averageRating(totalTasteRating, totalReviewCount)) + .amountRating(averageRating(totalAmountRating, totalReviewCount)) + .build(); + } + + @Override + public RatingAverages menuAverageRatings(Menu menu) { + return null; + } + + @Override + public Double mealAverageMainRating(Meal meal) { + int totalReviewCount = mealTotalReviewCount(meal); + + if (totalReviewCount == 0) { + return null; + } + + return averageRating(mealTotalMainRating(meal), totalReviewCount); + } + + @Override + public Double menuAverageMainRating(Menu menu) { + return null; + } + + @Override + public int mealTotalReviewCount(Meal meal) { + return reviewRepository.countByMenu_MealMenus_Meal(meal).intValue(); + } + + @Override + public Double averageRating(Integer totalRating, int totalReviewCount) { + if (totalRating == null || totalReviewCount == 0) { + return null; + } + return totalRating / (double) totalReviewCount; + } + + @Override + public Integer mealTotalMainRating(Meal meal) { + return null; + } + + @Override + public Integer mealTotalAmountRating(Meal meal) { + return null; + } + + @Override + public Integer mealTotalTasteRating(Meal meal) { + return null; + } + + @Override + public Integer menuTotalMainRating(Menu menu) { + return null; + } + + @Override + public Integer menuTotalAmountRating(Menu menu) { + return null; + } + + @Override + public Integer menuTotalTasteRating(Menu menu) { + return null; + } +} diff --git a/src/main/java/ssu/eatssu/domain/repository/ReviewRepository.java b/src/main/java/ssu/eatssu/domain/repository/ReviewRepository.java index 57399fde..0f9b78fc 100644 --- a/src/main/java/ssu/eatssu/domain/repository/ReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/repository/ReviewRepository.java @@ -1,11 +1,21 @@ package ssu.eatssu.domain.repository; import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.menu.Meal; import ssu.eatssu.domain.menu.Menu; import ssu.eatssu.domain.review.Review; +import java.util.Collection; import java.util.List; public interface ReviewRepository extends JpaRepository, ReviewRepositoryCustom { List findAllByMenu(Menu menu); + + /** + * dto projection + */ + Collection findByMenu_MealMenus_Meal(Meal meal, Class type); + + Long countByMenu_MealMenus_Meal(Meal meal); + } diff --git a/src/main/java/ssu/eatssu/domain/repository/dto/RatingsDto.java b/src/main/java/ssu/eatssu/domain/repository/dto/RatingsDto.java new file mode 100644 index 00000000..7fb7879d --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/repository/dto/RatingsDto.java @@ -0,0 +1,17 @@ +package ssu.eatssu.domain.repository.dto; + + +import ssu.eatssu.domain.rating.Ratings; +public record RatingsDto (Ratings ratings){ + + public Integer getMainRating() { + return ratings.getMainRating(); + } + public Integer getTasteRating() { + return ratings.getTasteRating(); + } + public Integer getAmountRating() { + return ratings.getAmountRating(); + } + +} diff --git a/src/main/java/ssu/eatssu/domain/repository/dto/ReviewMainRating.java b/src/main/java/ssu/eatssu/domain/repository/dto/ReviewMainRating.java new file mode 100644 index 00000000..f6728f3c --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/repository/dto/ReviewMainRating.java @@ -0,0 +1,8 @@ +package ssu.eatssu.domain.repository.dto; + +import lombok.Value; + +@Value +public class ReviewMainRating { + private final Integer mainRating; +} diff --git a/src/main/java/ssu/eatssu/service/MenuService.java b/src/main/java/ssu/eatssu/service/MenuService.java index e5c5041c..6b444dad 100644 --- a/src/main/java/ssu/eatssu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/service/MenuService.java @@ -7,7 +7,7 @@ import ssu.eatssu.domain.menu.Meal; import ssu.eatssu.domain.menu.MealMenu; import ssu.eatssu.domain.menu.Menu; -import ssu.eatssu.domain.rating.RatingCalculatorImpl; +import ssu.eatssu.domain.rating.RatingCalculator; import ssu.eatssu.domain.restaurant.Restaurant; import ssu.eatssu.domain.restaurant.RestaurantName; import ssu.eatssu.domain.enums.TimePart; @@ -37,7 +37,7 @@ public class MenuService { private final MealMenuRepository mealMenuRepository; private final RestaurantRepository restaurantRepository; - private final RatingCalculatorImpl ratingCalculator; + private final RatingCalculator ratingCalculator; /** * 고정 메뉴 조회 From 838938e2d1a178f42d38235f2baf34e976fd0bcf Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Mon, 15 Jan 2024 15:19:05 +0900 Subject: [PATCH 031/399] =?UTF-8?q?[#83]=20Feat=20:=20MenuController?= =?UTF-8?q?=EC=99=80=20MealController=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu/presentation/MealController.java | 114 +++++++++++++ .../menu/presentation/MenuController.java | 62 +++++++ .../ssu/eatssu/web/menu/MenuController.java | 154 ------------------ 3 files changed, 176 insertions(+), 154 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java create mode 100644 src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java delete mode 100644 src/main/java/ssu/eatssu/web/menu/MenuController.java diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java new file mode 100644 index 00000000..a5960411 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java @@ -0,0 +1,114 @@ +package ssu.eatssu.domain.menu.presentation; + +import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import ssu.eatssu.domain.enums.TimePart; +import ssu.eatssu.domain.menu.dto.MenuRequest.AddTodayMenuList; +import ssu.eatssu.domain.menu.dto.MenuResponse.TodayMeal; +import ssu.eatssu.domain.menu.entity.MenuType; +import ssu.eatssu.domain.menu.service.MenuService; +import ssu.eatssu.domain.restaurant.RestaurantName; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.handler.response.BaseResponse; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/meals") +@Tag(name = "Menu", description = "메뉴 API") +public class MealController { + + private final MenuService menuService; + + /** + * 식단 추가 + *

변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가. + * 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리한다.(별도의 ErrorResponse 응답 X)

+ */ + @Operation(summary = "식단 추가", description = """ + 식단을 추가하는 API 입니다.

+ 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

+ 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 추가 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/create") + public BaseResponse createMeal(@Parameter(description = "날짜(yyyyMMdd)") + @RequestParam("date") String date, + @Parameter(description = "식당이름") + @RequestParam("restaurant") RestaurantName restaurantName, + @Parameter(description = "시간대") + @RequestParam("time") TimePart timePart, + @RequestBody AddTodayMenuList addTodayMenuList) { + if (MenuType.isFixed(restaurantName)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } + + menuService.createMeal(timePart, date, restaurantName, addTodayMenuList); + return BaseResponse.success(); + } + + @Operation(summary = "변동 메뉴 식단 리스트 조회", description = """ + 변동 메뉴 식단 리스트를 조회하는 API 입니다. + 변동 메뉴 식당 (학생 식당, 도담, 기숙사 식당) 의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회합니다. + 일반적으로 학생식당과 도담의 경우 식단 여러개가 조회되고 기숙사식당은 한개만 조회됩니다.) + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공", content = @Content(schema = @Schema(implementation = ssu.eatssu.handler.response.BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "지원 하지 않는 식당 (고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = ssu.eatssu.handler.response.BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = ssu.eatssu.handler.response.BaseResponse.class))) + }) + @GetMapping("/list") + public BaseResponse> getMeal( + @Parameter(description = "날짜(yyyyMMdd)") + @RequestParam("date") String date, + @Parameter(description = "식당이름") + @RequestParam("restaurant") RestaurantName restaurantName, + @Parameter(description = "시간대") + @RequestParam("time") TimePart timePart) { + if (MenuType.isFixed(restaurantName)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } + + return ssu.eatssu.handler.response.BaseResponse.success( + menuService.findMealList(timePart, date, restaurantName)); + } + + + /** + * 식단 삭제 + *

식단식별자(mealId)에 해당하는 식단을 삭제한다.

+ */ + @Operation(summary = "식단 삭제", description = "식단을 삭제하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 삭제 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("/meal/{mealId}") + public BaseResponse deleteMeal( + @Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { + //todo : 관리자 API + menuService.deleteMeal(mealId); + return BaseResponse.success(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java new file mode 100644 index 00000000..d185e0dd --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java @@ -0,0 +1,62 @@ +package ssu.eatssu.domain.menu.presentation; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; +import ssu.eatssu.domain.menu.dto.MenuResponse.FixMenuInfo; +import ssu.eatssu.domain.menu.dto.MenuResponse.MenuList; +import ssu.eatssu.domain.restaurant.RestaurantName; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.handler.response.BaseResponse; +import ssu.eatssu.domain.menu.service.MenuService; + +import java.util.List; + +import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/menus") +@Tag(name = "Menu", description = "메뉴 API") +public class MenuController { + + private final MenuService menuService; + + @Operation(summary = "고정 메뉴 리스트 조회", description = """ + 고정 메뉴 리스트를 조회하는 API 입니다. + 메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 리스트를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/list") + public BaseResponse> getMenus( + @RequestParam("restaurant") RestaurantName restaurantName) { + if (RestaurantName.isVariable(restaurantName)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } + return BaseResponse.success(menuService.findMenus(restaurantName)); + } + + @Operation(summary = "메뉴 정보 리스트 조회", description = """ + 메뉴 정보 리스트를 조회하는 API 입니다.

+ 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/in-meal") + public BaseResponse getMenusInMeal(@Parameter(description = "mealId") + @RequestParam("mealId") Long mealId) { + return BaseResponse.success(menuService.findMenuListInMeal(mealId)); + } +} diff --git a/src/main/java/ssu/eatssu/web/menu/MenuController.java b/src/main/java/ssu/eatssu/web/menu/MenuController.java deleted file mode 100644 index fe7bd26c..00000000 --- a/src/main/java/ssu/eatssu/web/menu/MenuController.java +++ /dev/null @@ -1,154 +0,0 @@ -package ssu.eatssu.web.menu; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.menu.MenuType; -import ssu.eatssu.domain.restaurant.RestaurantName; -import ssu.eatssu.domain.enums.TimePart; -import ssu.eatssu.handler.response.BaseException; -import ssu.eatssu.handler.response.BaseResponse; -import ssu.eatssu.service.MenuService; -import ssu.eatssu.web.menu.dto.MenuReqDto.AddTodayMenuList; - -import java.util.List; - -import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; -import static ssu.eatssu.web.menu.dto.MenuResponse.*; - -@Slf4j -@RestController -@RequestMapping("/menu") -@RequiredArgsConstructor -@Tag(name = "Menu", description = "메뉴 API") -public class MenuController { - - private final MenuService menuService; - - /** - * 식단 목록 조회 - *

변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회한다. - * 일반적으로 학생식당과 도담의 경우 식단 여러개가 조회되고 기숙사식당은 한개만 조회된다.

- */ - @Operation(summary = "변동메뉴 식단 리스트 조회", description = """ - 변동메뉴 식단 리스트를 조회하는 API 입니다. - 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회합니다. - 일반적으로 학생식당과 도담의 경우 식단 여러개가 조회되고 기숙사식당은 한개만 조회됩니다.) - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/today-meal") //todo today-meal은 아닌것 같음 - public BaseResponse> getMealList(@Parameter(description = "날짜(yyyyMMdd)") - @RequestParam("date") String date, - @Parameter(description = "식당이름") - @RequestParam("restaurant") RestaurantName restaurantName, - @Parameter(description = "시간대") - @RequestParam("time") TimePart timePart) { - if (MenuType.isFixed(restaurantName)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } - - return BaseResponse.success(menuService.findMealList(timePart, date, restaurantName)); - } - - /** - * 고정 메뉴 목록 조회 - *

메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 목록을 조회한다.

- */ - @Operation(summary = "고정 메뉴 리스트 조회", description = """ - 고정 메뉴 리스트를 조회하는 API 입니다. - 메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 리스트를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/fix-menu") - public BaseResponse> getFixMenuList(@Parameter(description = "식당이름") - @RequestParam("restaurant") RestaurantName restaurantName) { - if(MenuType.isChanged(restaurantName)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } - - return BaseResponse.success(menuService.findFixMenuList(restaurantName)); - } - - - /** - * 식단 추가 - *

변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가. - * 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리한다.(별도의 ErrorResponse 응답 X)

- */ - @Operation(summary = "식단 추가", description = """ - 식단을 추가하는 API 입니다.

- 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

- 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 추가 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/") - public BaseResponse addMeal(@Parameter(description = "날짜(yyyyMMdd)") - @RequestParam("date") String date, - @Parameter(description = "식당이름") - @RequestParam("restaurant") RestaurantName restaurantName, - @Parameter(description = "시간대") - @RequestParam("time") TimePart timePart, - @RequestBody AddTodayMenuList addTodayMenuList) { - if (MenuType.isFixed(restaurantName)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } - - menuService.createMeal(timePart, date, restaurantName, addTodayMenuList); - return BaseResponse.success(); - } - - /** - * 식단의 메뉴정보 목록 조회 - *

식단식별자(mealId)로 식단에 속하는 메뉴정보(menuId, name) 목록을 조회한다.

- */ - @Operation(summary = "메뉴 정보 리스트 조회", description = """ - 메뉴 정보 리스트를 조회하는 API 입니다.

- 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/menus") - public BaseResponse getMenuListInMeal(@Parameter(description = "mealId") - @RequestParam("mealId") Long mealId) { - return BaseResponse.success(menuService.findMenuListInMeal(mealId)); - } - - /** - * 식단 삭제 - *

식단식별자(mealId)에 해당하는 식단을 삭제한다.

- */ - @Operation(summary = "식단 삭제", description = "식단을 삭제하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 삭제 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("/meal/{mealId}") - public BaseResponse deleteMeal(@Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { - //todo : 관리자 API - menuService.deleteMeal(mealId); - return BaseResponse.success(); - } - -} From 54eed6e4dc06e9161791686f311580e26b90920e Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Mon, 15 Jan 2024 15:20:00 +0900 Subject: [PATCH 032/399] =?UTF-8?q?[#83]=20Feat=20:=20RestaurantType?= =?UTF-8?q?=EC=9D=84=20=EC=83=9D=EC=84=B1=ED=95=98=EA=B3=A0=20RestaurantNa?= =?UTF-8?q?me=EC=97=90=EC=84=9C=20=EC=8B=9D=EB=8B=A8=EC=9D=84=20=EC=A0=9C?= =?UTF-8?q?=EA=B3=B5=20=ED=95=98=EB=8A=94=20=EC=8B=9D=EB=8B=B9=EC=9D=B8?= =?UTF-8?q?=EC=A7=80=20=EA=B3=A0=EC=A0=95=20=EB=A9=94=EB=89=B4=EB=A5=BC=20?= =?UTF-8?q?=EC=A0=9C=EA=B3=B5=ED=95=98=EB=8A=94=20=EC=8B=9D=EB=8B=B9?= =?UTF-8?q?=EC=9D=B8=EC=A7=80=20=ED=99=95=EC=9D=B8=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RestaurantNotFoundException.java | 16 +++++++++++ .../eatssu/domain/restaurant/Restaurant.java | 4 +-- .../domain/restaurant/RestaurantName.java | 28 ++++++++++++++----- .../domain/restaurant/RestaurantType.java | 6 ++++ 4 files changed, 45 insertions(+), 9 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/menu/exception/RestaurantNotFoundException.java create mode 100644 src/main/java/ssu/eatssu/domain/restaurant/RestaurantType.java diff --git a/src/main/java/ssu/eatssu/domain/menu/exception/RestaurantNotFoundException.java b/src/main/java/ssu/eatssu/domain/menu/exception/RestaurantNotFoundException.java new file mode 100644 index 00000000..b5653bf1 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/exception/RestaurantNotFoundException.java @@ -0,0 +1,16 @@ +package ssu.eatssu.domain.menu.exception; + +public class RestaurantNotFoundException extends IllegalArgumentException { + + public RestaurantNotFoundException() { + super("해당 식당이 존재하지 않습니다."); + } + + public RestaurantNotFoundException(String s) { + super(s); + } + + public RestaurantNotFoundException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/main/java/ssu/eatssu/domain/restaurant/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/Restaurant.java index 1e0de588..e55455b4 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/Restaurant.java @@ -6,8 +6,8 @@ import lombok.NoArgsConstructor; import java.util.List; -import ssu.eatssu.domain.menu.Meal; -import ssu.eatssu.domain.menu.Menu; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.Menu; @Entity @Getter diff --git a/src/main/java/ssu/eatssu/domain/restaurant/RestaurantName.java b/src/main/java/ssu/eatssu/domain/restaurant/RestaurantName.java index 12df9835..a35dca62 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/RestaurantName.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/RestaurantName.java @@ -1,29 +1,43 @@ package ssu.eatssu.domain.restaurant; import com.fasterxml.jackson.annotation.JsonCreator; +import java.util.Arrays; import lombok.Getter; import java.util.Locale; +import ssu.eatssu.domain.menu.exception.RestaurantNotFoundException; @Getter public enum RestaurantName { - DODAM("도담 식당", 6000), - DORMITORY("기숙사 식당", 5000), - FOOD_COURT("푸드 코트", 0), - SNACK_CORNER("스낵 코너", 0), - HAKSIK("학생 식당", 5000); + DODAM(RestaurantType.VARIABLE, "도담 식당", 6000), + DORMITORY(RestaurantType.VARIABLE, "기숙사 식당", 5000), + FOOD_COURT(RestaurantType.FIXED, "푸드 코트", 0), + SNACK_CORNER(RestaurantType.FIXED, "스낵 코너", 0), + HAKSIK(RestaurantType.VARIABLE, "학생 식당", 5000); + private RestaurantType restaurantType; private String description; private Integer price; @JsonCreator public static RestaurantName from(String description) { - return RestaurantName.valueOf(description.toUpperCase(Locale.ROOT)); + return Arrays.stream(RestaurantName.values()) + .filter(d -> d.getDescription().equals(description)) + .findAny() + .orElseThrow(RestaurantNotFoundException::new); } - RestaurantName(String description, Integer price) { + RestaurantName(RestaurantType restaurantType, String description, Integer price) { + this.restaurantType = restaurantType; this.description = description; this.price = price; } + public static boolean isFixed(RestaurantName restaurantName) { + return restaurantName.getRestaurantType() == RestaurantType.FIXED; + } + + public static boolean isVariable(RestaurantName restaurantName) { + return restaurantName.getRestaurantType() == RestaurantType.VARIABLE; + } } diff --git a/src/main/java/ssu/eatssu/domain/restaurant/RestaurantType.java b/src/main/java/ssu/eatssu/domain/restaurant/RestaurantType.java new file mode 100644 index 00000000..f0f60405 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/restaurant/RestaurantType.java @@ -0,0 +1,6 @@ +package ssu.eatssu.domain.restaurant; + +public enum RestaurantType { + FIXED, + VARIABLE +} From a5af8de5aa5a25b0294a3d89ebe69b91cd44cfa7 Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Mon, 15 Jan 2024 15:21:02 +0900 Subject: [PATCH 033/399] =?UTF-8?q?[#83]=20Refactor=20:=20menu=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=EB=A1=9C=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EA=B2=BD=EB=A1=9C=EB=A5=BC=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81=20=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu/dto/MenuRequest.java} | 11 ++- .../menu/dto/MenuResponse.java | 13 ++-- .../eatssu/domain/menu/{ => entity}/Meal.java | 2 +- .../domain/menu/{ => entity}/MealMenu.java | 2 +- .../eatssu/domain/menu/{ => entity}/Menu.java | 2 +- .../domain/menu/{ => entity}/MenuType.java | 3 +- .../repository/MealMenuRepository.java | 4 +- .../{ => menu}/repository/MealRepository.java | 4 +- .../{ => menu}/repository/MenuRepository.java | 4 +- .../menu}/service/MenuService.java | 73 ++++++++++--------- 10 files changed, 60 insertions(+), 58 deletions(-) rename src/main/java/ssu/eatssu/{web/menu/dto/MenuReqDto.java => domain/menu/dto/MenuRequest.java} (82%) rename src/main/java/ssu/eatssu/{web => domain}/menu/dto/MenuResponse.java (95%) rename src/main/java/ssu/eatssu/domain/menu/{ => entity}/Meal.java (97%) rename src/main/java/ssu/eatssu/domain/menu/{ => entity}/MealMenu.java (92%) rename src/main/java/ssu/eatssu/domain/menu/{ => entity}/Menu.java (98%) rename src/main/java/ssu/eatssu/domain/menu/{ => entity}/MenuType.java (95%) rename src/main/java/ssu/eatssu/domain/{ => menu}/repository/MealMenuRepository.java (61%) rename src/main/java/ssu/eatssu/domain/{ => menu}/repository/MealRepository.java (81%) rename src/main/java/ssu/eatssu/domain/{ => menu}/repository/MenuRepository.java (84%) rename src/main/java/ssu/eatssu/{ => domain/menu}/service/MenuService.java (72%) diff --git a/src/main/java/ssu/eatssu/web/menu/dto/MenuReqDto.java b/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java similarity index 82% rename from src/main/java/ssu/eatssu/web/menu/dto/MenuReqDto.java rename to src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java index a62f2a6e..264e4752 100644 --- a/src/main/java/ssu/eatssu/web/menu/dto/MenuReqDto.java +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java @@ -1,15 +1,15 @@ -package ssu.eatssu.web.menu.dto; +package ssu.eatssu.domain.menu.dto; import io.swagger.v3.oas.annotations.media.Schema; +import java.util.List; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; -import java.util.List; - -public class MenuReqDto { +public class MenuRequest { - private MenuReqDto() {} + private MenuRequest() { + } @Schema(title = "식단 추가") @Getter @@ -19,6 +19,5 @@ public static class AddTodayMenuList { @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") private List todayMenuList; - } } diff --git a/src/main/java/ssu/eatssu/web/menu/dto/MenuResponse.java b/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java similarity index 95% rename from src/main/java/ssu/eatssu/web/menu/dto/MenuResponse.java rename to src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java index 256113e6..cd13d752 100644 --- a/src/main/java/ssu/eatssu/web/menu/dto/MenuResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java @@ -1,15 +1,14 @@ -package ssu.eatssu.web.menu.dto; +package ssu.eatssu.domain.menu.dto; import io.swagger.v3.oas.annotations.media.Schema; +import java.util.ArrayList; +import java.util.List; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; -import ssu.eatssu.domain.menu.Meal; -import ssu.eatssu.domain.menu.MealMenu; -import ssu.eatssu.domain.menu.Menu; - -import java.util.ArrayList; -import java.util.List; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.MealMenu; +import ssu.eatssu.domain.menu.entity.Menu; public class MenuResponse { diff --git a/src/main/java/ssu/eatssu/domain/menu/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java similarity index 97% rename from src/main/java/ssu/eatssu/domain/menu/Meal.java rename to src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index ffff5277..013f5a5a 100644 --- a/src/main/java/ssu/eatssu/domain/menu/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu; +package ssu.eatssu.domain.menu.entity; import jakarta.persistence.*; import lombok.AccessLevel; diff --git a/src/main/java/ssu/eatssu/domain/menu/MealMenu.java b/src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java similarity index 92% rename from src/main/java/ssu/eatssu/domain/menu/MealMenu.java rename to src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java index 5c2d2b19..218d35e2 100644 --- a/src/main/java/ssu/eatssu/domain/menu/MealMenu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu; +package ssu.eatssu.domain.menu.entity; import jakarta.persistence.*; import lombok.*; diff --git a/src/main/java/ssu/eatssu/domain/menu/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java similarity index 98% rename from src/main/java/ssu/eatssu/domain/menu/Menu.java rename to src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index c4e41f20..4ebd929a 100644 --- a/src/main/java/ssu/eatssu/domain/menu/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu; +package ssu.eatssu.domain.menu.entity; import jakarta.persistence.*; import lombok.*; diff --git a/src/main/java/ssu/eatssu/domain/menu/MenuType.java b/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java similarity index 95% rename from src/main/java/ssu/eatssu/domain/menu/MenuType.java rename to src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java index bbd47c26..1069befc 100644 --- a/src/main/java/ssu/eatssu/domain/menu/MenuType.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java @@ -1,11 +1,10 @@ -package ssu.eatssu.domain.menu; +package ssu.eatssu.domain.menu.entity; import com.fasterxml.jackson.annotation.JsonCreator; import lombok.Getter; import java.util.Arrays; import java.util.List; -import java.util.Locale; import ssu.eatssu.domain.restaurant.RestaurantName; import static ssu.eatssu.domain.restaurant.RestaurantName.*; diff --git a/src/main/java/ssu/eatssu/domain/repository/MealMenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/repository/MealMenuRepository.java similarity index 61% rename from src/main/java/ssu/eatssu/domain/repository/MealMenuRepository.java rename to src/main/java/ssu/eatssu/domain/menu/repository/MealMenuRepository.java index 18f77dfc..8ebf0bbd 100644 --- a/src/main/java/ssu/eatssu/domain/repository/MealMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/MealMenuRepository.java @@ -1,7 +1,7 @@ -package ssu.eatssu.domain.repository; +package ssu.eatssu.domain.menu.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.menu.MealMenu; +import ssu.eatssu.domain.menu.entity.MealMenu; public interface MealMenuRepository extends JpaRepository { } diff --git a/src/main/java/ssu/eatssu/domain/repository/MealRepository.java b/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java similarity index 81% rename from src/main/java/ssu/eatssu/domain/repository/MealRepository.java rename to src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java index 456b0c14..ab25a5f6 100644 --- a/src/main/java/ssu/eatssu/domain/repository/MealRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java @@ -1,7 +1,7 @@ -package ssu.eatssu.domain.repository; +package ssu.eatssu.domain.menu.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.menu.Meal; +import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.restaurant.Restaurant; import ssu.eatssu.domain.enums.TimePart; diff --git a/src/main/java/ssu/eatssu/domain/repository/MenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java similarity index 84% rename from src/main/java/ssu/eatssu/domain/repository/MenuRepository.java rename to src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java index b6019039..6714cc84 100644 --- a/src/main/java/ssu/eatssu/domain/repository/MenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java @@ -1,7 +1,7 @@ -package ssu.eatssu.domain.repository; +package ssu.eatssu.domain.menu.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.menu.Menu; +import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.restaurant.Restaurant; import java.util.List; diff --git a/src/main/java/ssu/eatssu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java similarity index 72% rename from src/main/java/ssu/eatssu/service/MenuService.java rename to src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index 6b444dad..e33aa624 100644 --- a/src/main/java/ssu/eatssu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -1,30 +1,33 @@ -package ssu.eatssu.service; +package ssu.eatssu.domain.menu.service; + +import static ssu.eatssu.global.util.DateUtils.toDate; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import ssu.eatssu.domain.menu.Meal; -import ssu.eatssu.domain.menu.MealMenu; -import ssu.eatssu.domain.menu.Menu; -import ssu.eatssu.domain.rating.RatingCalculator; +import ssu.eatssu.domain.menu.dto.MenuRequest; +import ssu.eatssu.domain.menu.dto.MenuResponse.FixMenuInfo; +import ssu.eatssu.domain.menu.dto.MenuResponse.MenuList; +import ssu.eatssu.domain.menu.dto.MenuResponse.TodayMeal; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.MealMenu; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.rating.JpaProjectionRatingCalculator; import ssu.eatssu.domain.restaurant.Restaurant; import ssu.eatssu.domain.restaurant.RestaurantName; import ssu.eatssu.domain.enums.TimePart; -import ssu.eatssu.domain.repository.MealMenuRepository; -import ssu.eatssu.domain.repository.MealRepository; -import ssu.eatssu.domain.repository.MenuRepository; +import ssu.eatssu.domain.menu.repository.MealMenuRepository; +import ssu.eatssu.domain.menu.repository.MealRepository; +import ssu.eatssu.domain.menu.repository.MenuRepository; import ssu.eatssu.domain.repository.RestaurantRepository; -import ssu.eatssu.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponseStatus; import ssu.eatssu.utils.validators.MenuValidator; -import ssu.eatssu.web.menu.dto.MenuReqDto; import java.util.Collections; import java.util.List; -import static ssu.eatssu.utils.DateUtils.toDate; -import static ssu.eatssu.web.menu.dto.MenuResponse.*; @Slf4j @Service @@ -36,39 +39,40 @@ public class MenuService { private final MealRepository mealRepository; private final MealMenuRepository mealMenuRepository; private final RestaurantRepository restaurantRepository; - - private final RatingCalculator ratingCalculator; + private final JpaProjectionRatingCalculator ratingCalculator; /** * 고정 메뉴 조회 *

특정 식당에 해당하는 고정메뉴 목록을 조회합니다.

*/ - public List findFixMenuList(RestaurantName restaurantName) { + public List findMenus(RestaurantName restaurantName) { Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); List menuList = menuRepository.findAllByRestaurant(restaurant); return menuList.stream() - .map(menu -> FixMenuInfo.from(menu, ratingCalculator.menuAverageMainRating(menu))) - .toList(); + .map(menu -> FixMenuInfo.from(menu, ratingCalculator.menuAverageMainRating(menu))) + .toList(); } /** * 식단 목록 조회 *

변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회한다.

*/ - public List findMealList(TimePart timePart, String date, RestaurantName restaurantName) { + public List findMealList(TimePart timePart, String date, + RestaurantName restaurantName) { Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); - List mealList = mealRepository.findAllByDateAndTimePartAndRestaurant(toDate(date), timePart, restaurant); + List mealList = mealRepository.findAllByDateAndTimePartAndRestaurant(toDate(date), + timePart, restaurant); //mealList 를 TodayMeal 로 매핑 후 반환 return mealList.stream() - .map(meal -> TodayMeal.from(meal, ratingCalculator.mealAverageMainRating(meal))) - .toList(); + .map(meal -> TodayMeal.from(meal, ratingCalculator.mealAverageMainRating(meal))) + .toList(); } @@ -76,7 +80,7 @@ public List findMealList(TimePart timePart, String date, RestaurantNa * 식단 등록 */ public void createMeal(TimePart timePart, String date, RestaurantName restaurantName, - MenuReqDto.AddTodayMenuList addTodayMenuList) { + MenuRequest.AddTodayMenuList addTodayMenuList) { Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); @@ -101,7 +105,7 @@ public void createMeal(TimePart timePart, String date, RestaurantName restaurant /** * 식단에 메뉴 추가 */ - private void addMenu(Meal meal, MenuReqDto.AddTodayMenuList addTodayMenuList) { + private void addMenu(Meal meal, MenuRequest.AddTodayMenuList addTodayMenuList) { Restaurant restaurant = meal.getRestaurant(); for (String addMenuName : addTodayMenuList.getTodayMenuList()) { @@ -110,7 +114,7 @@ private void addMenu(Meal meal, MenuReqDto.AddTodayMenuList addTodayMenuList) { //메뉴 찾아서 Menu menu = menuRepository.findByNameAndRestaurant(addMenuName, restaurant) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); //식단에 메뉴 추가 MealMenu mealMenu = MealMenu.builder().menu(menu).meal(meal).build(); @@ -137,9 +141,10 @@ private void checkAndCreateMenu(String menuName, Restaurant restaurant) { * 이미 존재하는 식단인지 확인 */ public boolean isExistMeal(TimePart timePart, String date, Restaurant restaurant, - MenuReqDto.AddTodayMenuList addTodayMenuList) { + MenuRequest.AddTodayMenuList addTodayMenuList) { - List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(toDate(date), timePart, restaurant); + List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(toDate(date), + timePart, restaurant); //비교를 위한 정렬 Collections.sort(addTodayMenuList.getTodayMenuList()); @@ -151,7 +156,7 @@ public boolean isExistMeal(TimePart timePart, String date, Restaurant restaurant //메뉴 목록이 같다면 이미 존재하는 식단 if (menuNameList.equals(addTodayMenuList.getTodayMenuList())) { - return true; + return true; } } @@ -164,7 +169,7 @@ public boolean isExistMeal(TimePart timePart, String date, Restaurant restaurant public MenuList findMenuListInMeal(Long mealId) { Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); return MenuList.from(meal); } @@ -175,7 +180,7 @@ public MenuList findMenuListInMeal(Long mealId) { public void deleteMeal(Long mealId) { Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); //식단에 포함된 메뉴 목록 조회 List menuList = meal.getMealMenus().stream().map(MealMenu::getMenu).toList(); @@ -194,9 +199,9 @@ public void deleteMeal(Long mealId) { */ public void cleanupGarbageMenu(List menuList) { - for(Menu menu : menuList){ - if(menu.getMealMenus().isEmpty()) { - menuRepository.delete(menu); + for (Menu menu : menuList) { + if (menu.getMealMenus().isEmpty()) { + menuRepository.delete(menu); } } } From c2f0e5ff1bddf6dae75299075a677428cc9558ac Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Mon, 15 Jan 2024 16:15:47 +0900 Subject: [PATCH 034/399] =?UTF-8?q?[#83]=20Refactor=20:=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=EB=B0=8F=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=20?= =?UTF-8?q?=EB=84=A4=EC=9D=B4=EB=B0=8D=EC=9D=84=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu/presentation/MealController.java | 47 ++++++------------- .../menu/presentation/MenuController.java | 2 +- 2 files changed, 16 insertions(+), 33 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java index a5960411..9a2d1a5b 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java @@ -20,9 +20,8 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.enums.TimePart; -import ssu.eatssu.domain.menu.dto.MenuRequest.AddTodayMenuList; +import ssu.eatssu.domain.menu.dto.MenuRequest.CreateMealRequest; import ssu.eatssu.domain.menu.dto.MenuResponse.TodayMeal; -import ssu.eatssu.domain.menu.entity.MenuType; import ssu.eatssu.domain.menu.service.MenuService; import ssu.eatssu.domain.restaurant.RestaurantName; import ssu.eatssu.global.handler.response.BaseException; @@ -36,11 +35,6 @@ public class MealController { private final MenuService menuService; - /** - * 식단 추가 - *

변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가. - * 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리한다.(별도의 ErrorResponse 응답 X)

- */ @Operation(summary = "식단 추가", description = """ 식단을 추가하는 API 입니다.

변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

@@ -53,18 +47,16 @@ public class MealController { @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping("/create") - public BaseResponse createMeal(@Parameter(description = "날짜(yyyyMMdd)") - @RequestParam("date") String date, - @Parameter(description = "식당이름") - @RequestParam("restaurant") RestaurantName restaurantName, - @Parameter(description = "시간대") - @RequestParam("time") TimePart timePart, - @RequestBody AddTodayMenuList addTodayMenuList) { - if (MenuType.isFixed(restaurantName)) { + public BaseResponse createMeal( + @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") String date, + @Parameter(description = "식당이름") @RequestParam("restaurant") RestaurantName restaurantName, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, + @RequestBody CreateMealRequest createMealRequest) { + if (RestaurantName.isFixed(restaurantName)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } - menuService.createMeal(timePart, date, restaurantName, addTodayMenuList); + menuService.createMeal(timePart, date, restaurantName, createMealRequest); return BaseResponse.success(); } @@ -80,34 +72,25 @@ public BaseResponse createMeal(@Parameter(description = "날짜(yyyyMMdd)") }) @GetMapping("/list") public BaseResponse> getMeal( - @Parameter(description = "날짜(yyyyMMdd)") - @RequestParam("date") String date, - @Parameter(description = "식당이름") - @RequestParam("restaurant") RestaurantName restaurantName, - @Parameter(description = "시간대") - @RequestParam("time") TimePart timePart) { - if (MenuType.isFixed(restaurantName)) { + @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") String date, + @Parameter(description = "식당 이름") @RequestParam("restaurant") RestaurantName restaurantName, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { + if (RestaurantName.isFixed(restaurantName)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } - return ssu.eatssu.handler.response.BaseResponse.success( - menuService.findMealList(timePart, date, restaurantName)); + return BaseResponse.success( + menuService.findMeal(timePart, date, restaurantName)); } - - /** - * 식단 삭제 - *

식단식별자(mealId)에 해당하는 식단을 삭제한다.

- */ @Operation(summary = "식단 삭제", description = "식단을 삭제하는 API 입니다.") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "식단 삭제 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) - @DeleteMapping("/meal/{mealId}") + @DeleteMapping("/{mealId}") public BaseResponse deleteMeal( @Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { - //todo : 관리자 API menuService.deleteMeal(mealId); return BaseResponse.success(); } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java index d185e0dd..e59ccfd3 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java @@ -57,6 +57,6 @@ public BaseResponse> getMenus( @GetMapping("/in-meal") public BaseResponse getMenusInMeal(@Parameter(description = "mealId") @RequestParam("mealId") Long mealId) { - return BaseResponse.success(menuService.findMenuListInMeal(mealId)); + return BaseResponse.success(menuService.findMenusInMeal(mealId)); } } From f878c586248bb61a77c201f9c41617af38549eee Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Mon, 15 Jan 2024 18:21:34 +0900 Subject: [PATCH 035/399] =?UTF-8?q?[#83]=20Refactor=20:=20Menu=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20Service=EC=99=80=20Dto=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EB=A5=BC=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/menu/dto/MenuRequest.java | 4 +- .../eatssu/domain/menu/dto/MenuResponse.java | 96 +++++----- .../ssu/eatssu/domain/menu/entity/Meal.java | 14 +- .../menu/presentation/MealController.java | 14 +- .../menu/presentation/MenuController.java | 10 +- .../domain/menu/service/MenuService.java | 173 ++++++------------ .../global/util/validator/MenuValidator.java | 31 ++++ .../utils/validators/MenuValidator.java | 34 ---- 8 files changed, 153 insertions(+), 223 deletions(-) create mode 100644 src/main/java/ssu/eatssu/global/util/validator/MenuValidator.java delete mode 100644 src/main/java/ssu/eatssu/utils/validators/MenuValidator.java diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java b/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java index 264e4752..040d83ab 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java @@ -15,9 +15,9 @@ private MenuRequest() { @Getter @NoArgsConstructor @AllArgsConstructor - public static class AddTodayMenuList { + public static class CreateMealRequest { @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") - private List todayMenuList; + private List menuNames; } } diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java b/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java index cd13d752..f8b33544 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java @@ -19,7 +19,8 @@ private MenuResponse() { @Getter @NoArgsConstructor @AllArgsConstructor - public static class TodayMeal { + public static class MealInformationResponse { + @Schema(description = "식단 식별자 mealId", example = "12") private Long mealId; @@ -27,46 +28,31 @@ public static class TodayMeal { private Integer price; @Schema(description = "식단 평점(평점이 없으면 null)", example = "4.4") - private Double mainRate; + private Double mainRating; @Schema(description = "식단 속 메뉴 정보 리스트") - private List menuInfoList; + private List menusInformation; + - public static TodayMeal from(Meal meal, Double mainRate) { + public static MealInformationResponse from(Meal meal) { if (!meal.getMealMenus().isEmpty()) { - List menuInfoList = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(MenuInfo::new).toList(); + List menusInformation = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(BreifMenuInformation::new).toList(); - return new TodayMeal(meal.getId(), meal.getRestaurant().getRestaurantName().getPrice() - , mainRate, menuInfoList); + return new MealInformationResponse(meal.getId(), + meal.getRestaurant().getRestaurantName().getPrice(), + meal.getAverateMainRating(), menusInformation); } else { - return null; + return null; } } - - @Getter - @NoArgsConstructor - private static class MenuInfo { - @Schema(description = "메뉴 식별자", example = "2") - private Long menuId; - - @Schema(description = "메뉴 이름", example = "돈까스") - private String name; - - private MenuInfo(Menu menu) { - this.menuId = menu.getId(); - this.name = menu.getName(); - } - - } - } @Getter @NoArgsConstructor @AllArgsConstructor - public static class FixMenuInfo { + public static class MenuInformationResponse { @Schema(description = "메뉴 식별자", example = "2") private Long menuId; @@ -74,47 +60,51 @@ public static class FixMenuInfo { @Schema(description = "메뉴 이름", example = "돈까스") private String name; - @Schema(description = "메뉴 평점(평점이 없으면 null)", example = "4.4") - private Double mainRate; - @Schema(description = "가격", example = "5000") private Integer price; - public static FixMenuInfo from(Menu menu, Double mainRate) { - return new FixMenuInfo(menu.getId(), menu.getName(), mainRate, menu.getPrice()); + @Schema(description = "메뉴 평점(평점이 없으면 null)", example = "4.4") + private Double mainRating; + + + public static MenuInformationResponse from(Menu menu) { + return new MenuInformationResponse(menu.getId(), menu.getName(), + menu.getPrice(), menu.getReviews().getAverageMainRating()); } } @Getter @NoArgsConstructor @AllArgsConstructor - public static class MenuList { - private List menuInfoList; + public static class MenusInformationResponse { + + private List menusInformation; - public static MenuList from(Meal meal) { + public static MenusInformationResponse from(Meal meal) { if (!meal.getMealMenus().isEmpty()) { - List menuInfoList = new ArrayList<>(); - for (MealMenu mealMenu : meal.getMealMenus()) { - Menu menu = mealMenu.getMenu(); - MenuInfo menuInfo = new MenuInfo(menu.getId(), menu.getName()); - menuInfoList.add(menuInfo); - } - return new MenuList(menuInfoList); + List menusInformation = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(BreifMenuInformation::new).toList(); + return new MenusInformationResponse(menusInformation); } else { - return null; + return null; } } + } + + @Getter + @NoArgsConstructor + private static class BreifMenuInformation { - @Getter - @NoArgsConstructor - @AllArgsConstructor - private static class MenuInfo { - @Schema(description = "메뉴 식별자", example = "2") - private Long menuId; + @Schema(description = "메뉴 식별자", example = "2") + private Long menuId; + + @Schema(description = "메뉴 이름", example = "돈까스") + private String name; - @Schema(description = "메뉴 이름", example = "돈까스") - private String name; + private BreifMenuInformation(Menu menu) { + this.menuId = menu.getId(); + this.name = menu.getName(); } } - } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index 013f5a5a..5870ff87 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -42,17 +42,13 @@ public Meal(Date date, TimePart timePart, Restaurant restaurant) { this.restaurant = restaurant; } - - public List getMenus() { - List menus = new ArrayList<>(); - for (MealMenu mealMenu : mealMenus) { - menus.add(mealMenu.getMenu()); - } - return menus; - } - public List getMenuNames() { return mealMenus.stream().map(mealMenu -> mealMenu.getMenu().getName()).toList(); } + public Double getAverateMainRating() { + return mealMenus.stream() + .mapToDouble(mealMenu -> mealMenu.getMenu().getReviews().getAverageMainRating()) + .average().orElse(0); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java index 9a2d1a5b..f89a12b1 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java @@ -9,8 +9,10 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.Date; import java.util.List; import lombok.RequiredArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -21,7 +23,7 @@ import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.enums.TimePart; import ssu.eatssu.domain.menu.dto.MenuRequest.CreateMealRequest; -import ssu.eatssu.domain.menu.dto.MenuResponse.TodayMeal; +import ssu.eatssu.domain.menu.dto.MenuResponse.MealInformationResponse; import ssu.eatssu.domain.menu.service.MenuService; import ssu.eatssu.domain.restaurant.RestaurantName; import ssu.eatssu.global.handler.response.BaseException; @@ -48,7 +50,7 @@ public class MealController { }) @PostMapping("/create") public BaseResponse createMeal( - @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") String date, + @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, @Parameter(description = "식당이름") @RequestParam("restaurant") RestaurantName restaurantName, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, @RequestBody CreateMealRequest createMealRequest) { @@ -56,7 +58,7 @@ public BaseResponse createMeal( throw new BaseException(NOT_SUPPORT_RESTAURANT); } - menuService.createMeal(timePart, date, restaurantName, createMealRequest); + menuService.createMeal(date, restaurantName, timePart, createMealRequest); return BaseResponse.success(); } @@ -71,8 +73,8 @@ public BaseResponse createMeal( @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = ssu.eatssu.handler.response.BaseResponse.class))) }) @GetMapping("/list") - public BaseResponse> getMeal( - @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") String date, + public BaseResponse> getMeal( + @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, @Parameter(description = "식당 이름") @RequestParam("restaurant") RestaurantName restaurantName, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { if (RestaurantName.isFixed(restaurantName)) { @@ -80,7 +82,7 @@ public BaseResponse> getMeal( } return BaseResponse.success( - menuService.findMeal(timePart, date, restaurantName)); + menuService.findSpecificMeals(date, restaurantName, timePart)); } @Operation(summary = "식단 삭제", description = "식단을 삭제하는 API 입니다.") diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java index e59ccfd3..376f818d 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java @@ -9,8 +9,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.menu.dto.MenuResponse.FixMenuInfo; -import ssu.eatssu.domain.menu.dto.MenuResponse.MenuList; +import ssu.eatssu.domain.menu.dto.MenuResponse.MenuInformationResponse; +import ssu.eatssu.domain.menu.dto.MenuResponse.MenusInformationResponse; import ssu.eatssu.domain.restaurant.RestaurantName; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponse; @@ -38,12 +38,12 @@ public class MenuController { @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("/list") - public BaseResponse> getMenus( + public BaseResponse> getMenus( @RequestParam("restaurant") RestaurantName restaurantName) { if (RestaurantName.isVariable(restaurantName)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } - return BaseResponse.success(menuService.findMenus(restaurantName)); + return BaseResponse.success(menuService.findMenusByRestaurant(restaurantName)); } @Operation(summary = "메뉴 정보 리스트 조회", description = """ @@ -55,7 +55,7 @@ public BaseResponse> getMenus( @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("/in-meal") - public BaseResponse getMenusInMeal(@Parameter(description = "mealId") + public BaseResponse getMenusInMeal(@Parameter(description = "mealId") @RequestParam("mealId") Long mealId) { return BaseResponse.success(menuService.findMenusInMeal(mealId)); } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index e33aa624..32c16e5a 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -3,17 +3,18 @@ import static ssu.eatssu.global.util.DateUtils.toDate; import jakarta.transaction.Transactional; +import java.util.Date; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import ssu.eatssu.domain.menu.dto.MenuRequest; -import ssu.eatssu.domain.menu.dto.MenuResponse.FixMenuInfo; -import ssu.eatssu.domain.menu.dto.MenuResponse.MenuList; -import ssu.eatssu.domain.menu.dto.MenuResponse.TodayMeal; +import ssu.eatssu.domain.menu.dto.MenuRequest.CreateMealRequest; +import ssu.eatssu.domain.menu.dto.MenuResponse.MenuInformationResponse; +import ssu.eatssu.domain.menu.dto.MenuResponse.MenusInformationResponse; +import ssu.eatssu.domain.menu.dto.MenuResponse.MealInformationResponse; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; -import ssu.eatssu.domain.rating.JpaProjectionRatingCalculator; +import ssu.eatssu.domain.menu.exception.RestaurantNotFoundException; import ssu.eatssu.domain.restaurant.Restaurant; import ssu.eatssu.domain.restaurant.RestaurantName; import ssu.eatssu.domain.enums.TimePart; @@ -22,11 +23,10 @@ import ssu.eatssu.domain.menu.repository.MenuRepository; import ssu.eatssu.domain.repository.RestaurantRepository; import ssu.eatssu.global.handler.response.BaseException; -import ssu.eatssu.handler.response.BaseResponseStatus; -import ssu.eatssu.utils.validators.MenuValidator; -import java.util.Collections; import java.util.List; +import ssu.eatssu.global.handler.response.BaseResponseStatus; +import ssu.eatssu.global.util.validator.MenuValidator; @Slf4j @@ -39,170 +39,115 @@ public class MenuService { private final MealRepository mealRepository; private final MealMenuRepository mealMenuRepository; private final RestaurantRepository restaurantRepository; - private final JpaProjectionRatingCalculator ratingCalculator; - /** - * 고정 메뉴 조회 - *

특정 식당에 해당하는 고정메뉴 목록을 조회합니다.

- */ - public List findMenus(RestaurantName restaurantName) { - - Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); + public List findMenusByRestaurant(RestaurantName restaurantName) { + Restaurant restaurant = getRestaurant(restaurantName); + List menus = menuRepository.findAllByRestaurant(restaurant); - List menuList = menuRepository.findAllByRestaurant(restaurant); - return menuList.stream() - .map(menu -> FixMenuInfo.from(menu, ratingCalculator.menuAverageMainRating(menu))) + return menus.stream() + .map(menu -> MenuInformationResponse.from(menu)) .toList(); } - /** - * 식단 목록 조회 - *

변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회한다.

- */ - public List findMealList(TimePart timePart, String date, - RestaurantName restaurantName) { - - Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); - - List mealList = mealRepository.findAllByDateAndTimePartAndRestaurant(toDate(date), - timePart, restaurant); + public List findSpecificMeals(Date date, + RestaurantName restaurantName, + TimePart timePart) { + Restaurant restaurant = getRestaurant(restaurantName); + List meals = getMeals(date, timePart, restaurant); - //mealList 를 TodayMeal 로 매핑 후 반환 - return mealList.stream() - .map(meal -> TodayMeal.from(meal, ratingCalculator.mealAverageMainRating(meal))) + return meals.stream() + .map(meal -> MealInformationResponse.from(meal)) .toList(); } - - /** - * 식단 등록 - */ - public void createMeal(TimePart timePart, String date, RestaurantName restaurantName, - MenuRequest.AddTodayMenuList addTodayMenuList) { - - Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); - - List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(toDate(date), - timePart, restaurant); + public void createMeal(Date date, RestaurantName restaurantName, TimePart timePart, + CreateMealRequest request) { + Restaurant restaurant = getRestaurant(restaurantName); + List meals = getMeals(date, timePart, restaurant); if (MenuValidator.validateExistedMeal(meals, timePart, date, restaurant, - addTodayMenuList)) { + request)) { return; } - //식단 생성 - Meal newMeal = Meal.builder().date(toDate(date)).restaurant(restaurant).timePart(timePart) + Meal newMeal = Meal.builder() + .date(date) + .restaurant(restaurant) + .timePart(timePart) .build(); mealRepository.save(newMeal); - //식단에 메뉴 추가 - addMenu(newMeal, addTodayMenuList); + addMenu(newMeal, request); } /** * 식단에 메뉴 추가 */ - private void addMenu(Meal meal, MenuRequest.AddTodayMenuList addTodayMenuList) { + private void addMenu(Meal meal, CreateMealRequest request) { Restaurant restaurant = meal.getRestaurant(); - for (String addMenuName : addTodayMenuList.getTodayMenuList()) { - //메뉴 체크 (기존에 없던 새로운 메뉴라면 생성) + for (String addMenuName : request.getMenuNames()) { checkAndCreateMenu(addMenuName, restaurant); - //메뉴 찾아서 Menu menu = menuRepository.findByNameAndRestaurant(addMenuName, restaurant) .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); - //식단에 메뉴 추가 - MealMenu mealMenu = MealMenu.builder().menu(menu).meal(meal).build(); + MealMenu mealMenu = MealMenu.builder() + .menu(menu) + .meal(meal) + .build(); mealMenuRepository.save(mealMenu); } } - /** - * 기존에 존재하는 메뉴인지 체크 후 없으면 메뉴 등록 - */ private void checkAndCreateMenu(String menuName, Restaurant restaurant) { - - //메뉴 체크 (기존에 없던 새로운 메뉴인지) if (!menuRepository.existsByNameAndRestaurant(menuName, restaurant)) { - //메뉴 등록 menuRepository.save(Menu.createChangeMenu(menuName, restaurant)); } - //메뉴 등록 menuRepository.save(Menu.createChangeMenu(menuName, restaurant)); } - /** - * 이미 존재하는 식단인지 확인 - */ - public boolean isExistMeal(TimePart timePart, String date, Restaurant restaurant, - MenuRequest.AddTodayMenuList addTodayMenuList) { - - List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(toDate(date), - timePart, restaurant); - - //비교를 위한 정렬 - Collections.sort(addTodayMenuList.getTodayMenuList()); - - //식단 목록을 돌면서 메뉴 목록을 정렬하고 비교 - for (Meal meal : meals) { - List menuNameList = meal.getMenuNames(); - Collections.sort(menuNameList); - - //메뉴 목록이 같다면 이미 존재하는 식단 - if (menuNameList.equals(addTodayMenuList.getTodayMenuList())) { - return true; - } - } - - return false; + public MenusInformationResponse findMenusInMeal(Long mealId) { + Meal meal = getMeal(mealId); + return MenusInformationResponse.from(meal); } - /** - * 식단 속 메뉴 목록 조회 - */ - public MenuList findMenuListInMeal(Long mealId) { - - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); - - return MenuList.from(meal); + private Meal getMeal(Long mealId) { + Meal meal = getMeal(mealId); + return meal; } - /** - * 식단 삭제 - */ public void deleteMeal(Long mealId) { + Meal meal = getMeal(mealId); - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); - - //식단에 포함된 메뉴 목록 조회 - List menuList = meal.getMealMenus().stream().map(MealMenu::getMenu).toList(); + List menus = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .toList(); mealRepository.delete(meal); - - //식단 삭제 -> mealMenu 삭제 반영 mealRepository.flush(); - //고아 변동 메뉴 정리 - cleanupGarbageMenu(menuList); + cleanupGarbageMenu(menus); } - /** - * 변동 메뉴 중 어떤 식단에도 포함되지 않는 메뉴를 찾아 삭제한다. - */ public void cleanupGarbageMenu(List menuList) { - for (Menu menu : menuList) { if (menu.getMealMenus().isEmpty()) { menuRepository.delete(menu); } } } + + private Restaurant getRestaurant(RestaurantName restaurantName) { + Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) + .orElseThrow(() -> new RestaurantNotFoundException()); + return restaurant; + } + + private List getMeals(Date date, TimePart timePart, Restaurant restaurant) { + List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(date, + timePart, restaurant); + return meals; + } } diff --git a/src/main/java/ssu/eatssu/global/util/validator/MenuValidator.java b/src/main/java/ssu/eatssu/global/util/validator/MenuValidator.java new file mode 100644 index 00000000..61991234 --- /dev/null +++ b/src/main/java/ssu/eatssu/global/util/validator/MenuValidator.java @@ -0,0 +1,31 @@ +package ssu.eatssu.global.util.validator; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import lombok.RequiredArgsConstructor; +import ssu.eatssu.domain.enums.TimePart; +import ssu.eatssu.domain.menu.dto.MenuRequest.CreateMealRequest; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.restaurant.Restaurant; + +@RequiredArgsConstructor +public class MenuValidator { + + public static boolean validateExistedMeal(List meals, TimePart timePart, Date date, + Restaurant restaurant, CreateMealRequest request) { + Collections.sort(request.getMenuNames()); + + meals.stream().forEach( + meal -> { + List menuNames = meal.getMenuNames(); + Collections.sort(menuNames); + + if (menuNames.equals(request.getMenuNames())) { + return; + } + } + ); + return false; + } +} diff --git a/src/main/java/ssu/eatssu/utils/validators/MenuValidator.java b/src/main/java/ssu/eatssu/utils/validators/MenuValidator.java deleted file mode 100644 index 8dc5ac9f..00000000 --- a/src/main/java/ssu/eatssu/utils/validators/MenuValidator.java +++ /dev/null @@ -1,34 +0,0 @@ -package ssu.eatssu.utils.validators; - -import java.util.Collections; -import java.util.List; -import lombok.RequiredArgsConstructor; -import ssu.eatssu.domain.enums.TimePart; -import ssu.eatssu.domain.menu.Meal; -import ssu.eatssu.domain.restaurant.Restaurant; -import ssu.eatssu.web.menu.dto.MenuReqDto; - -@RequiredArgsConstructor -public class MenuValidator { - - public static boolean validateExistedMeal(List meals, TimePart timePart, String date, - Restaurant restaurant, - MenuReqDto.AddTodayMenuList addTodayMenuList) { - - //비교를 위한 정렬 - Collections.sort(addTodayMenuList.getTodayMenuList()); - - //식단 목록을 돌면서 메뉴 목록을 정렬하고 비교 - for (Meal meal : meals) { - List menuNameList = meal.getMenuNames(); - Collections.sort(menuNameList); - - //메뉴 목록이 같다면 이미 존재하는 식단 - if (menuNameList.equals(addTodayMenuList.getTodayMenuList())) { - return true; - } - } - - return false; - } -} From fe715fa70317e37cf2f2726e0d854500b2c41933 Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Tue, 16 Jan 2024 11:33:11 +0900 Subject: [PATCH 036/399] =?UTF-8?q?[#83]=20Refactor=20:=20=EA=B8=B0?= =?UTF-8?q?=ED=83=80=20=EC=98=88=EC=99=B8=EB=A5=BC=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/menu/dto/MenuResponse.java | 17 +++++----- .../ssu/eatssu/domain/menu/entity/Meal.java | 3 +- .../ssu/eatssu/domain/menu/entity/Menu.java | 6 ++-- .../eatssu/domain/menu/entity/MenuType.java | 4 +-- .../menu/presentation/MealController.java | 15 ++++----- .../menu/presentation/MenuController.java | 8 ++--- .../menu/repository/MealRepository.java | 4 +-- .../menu/repository/MenuRepository.java | 2 +- .../domain/menu/service/MenuService.java | 17 ++++------ .../domain/menu/util/MenuValidator.java | 27 ++++++++++++++++ .../dto/MealReviewInformationResponse.java | 4 +-- .../dto/MenuReviewInformationResponse.java | 4 +-- .../global/util/validator/MenuValidator.java | 31 ------------------- 13 files changed, 66 insertions(+), 76 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java rename src/main/java/ssu/eatssu/{web => domain}/review/dto/MealReviewInformationResponse.java (96%) rename src/main/java/ssu/eatssu/{web => domain}/review/dto/MenuReviewInformationResponse.java (94%) delete mode 100644 src/main/java/ssu/eatssu/global/util/validator/MenuValidator.java diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java b/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java index f8b33544..202d197b 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.menu.dto; import io.swagger.v3.oas.annotations.media.Schema; -import java.util.ArrayList; import java.util.List; import lombok.AllArgsConstructor; import lombok.Getter; @@ -31,14 +30,14 @@ public static class MealInformationResponse { private Double mainRating; @Schema(description = "식단 속 메뉴 정보 리스트") - private List menusInformation; + private List menusInformation; public static MealInformationResponse from(Meal meal) { if (!meal.getMealMenus().isEmpty()) { - List menusInformation = meal.getMealMenus().stream() + List menusInformation = meal.getMealMenus().stream() .map(MealMenu::getMenu) - .map(BreifMenuInformation::new).toList(); + .map(BriefMenuInformation::new).toList(); return new MealInformationResponse(meal.getId(), meal.getRestaurant().getRestaurantName().getPrice(), @@ -78,13 +77,13 @@ public static MenuInformationResponse from(Menu menu) { @AllArgsConstructor public static class MenusInformationResponse { - private List menusInformation; + private List menusInformation; public static MenusInformationResponse from(Meal meal) { if (!meal.getMealMenus().isEmpty()) { - List menusInformation = meal.getMealMenus().stream() + List menusInformation = meal.getMealMenus().stream() .map(MealMenu::getMenu) - .map(BreifMenuInformation::new).toList(); + .map(BriefMenuInformation::new).toList(); return new MenusInformationResponse(menusInformation); } else { return null; @@ -94,7 +93,7 @@ public static MenusInformationResponse from(Meal meal) { @Getter @NoArgsConstructor - private static class BreifMenuInformation { + private static class BriefMenuInformation { @Schema(description = "메뉴 식별자", example = "2") private Long menuId; @@ -102,7 +101,7 @@ private static class BreifMenuInformation { @Schema(description = "메뉴 이름", example = "돈까스") private String name; - private BreifMenuInformation(Menu menu) { + private BriefMenuInformation(Menu menu) { this.menuId = menu.getId(); this.name = menu.getName(); } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index 5870ff87..406f218a 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -6,8 +6,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; -import ssu.eatssu.domain.restaurant.Restaurant; -import ssu.eatssu.domain.enums.TimePart; +import ssu.eatssu.domain.restaurant.entity.Restaurant; import java.util.*; diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index 4ebd929a..7c43e365 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -2,12 +2,12 @@ import jakarta.persistence.*; import lombok.*; -import ssu.eatssu.domain.restaurant.Restaurant; +import ssu.eatssu.domain.restaurant.entity.Restaurant; import java.util.ArrayList; import java.util.List; -import ssu.eatssu.domain.review.Review; -import ssu.eatssu.domain.review.Reviews; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.entity.Reviews; @Entity @Getter diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java b/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java index 1069befc..7fc2d20e 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java @@ -5,9 +5,9 @@ import java.util.Arrays; import java.util.List; -import ssu.eatssu.domain.restaurant.RestaurantName; +import ssu.eatssu.domain.restaurant.entity.RestaurantName; -import static ssu.eatssu.domain.restaurant.RestaurantName.*; +import static ssu.eatssu.domain.restaurant.entity.RestaurantName.*; @Getter diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java index f89a12b1..66b32bb8 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.menu.presentation; -import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -21,13 +22,13 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import ssu.eatssu.domain.enums.TimePart; +import ssu.eatssu.domain.menu.entity.TimePart; import ssu.eatssu.domain.menu.dto.MenuRequest.CreateMealRequest; import ssu.eatssu.domain.menu.dto.MenuResponse.MealInformationResponse; import ssu.eatssu.domain.menu.service.MenuService; -import ssu.eatssu.domain.restaurant.RestaurantName; +import ssu.eatssu.domain.restaurant.entity.RestaurantName; import ssu.eatssu.global.handler.response.BaseException; -import ssu.eatssu.handler.response.BaseResponse; +import ssu.eatssu.global.handler.response.BaseResponse; @RestController @RequiredArgsConstructor @@ -68,9 +69,9 @@ public BaseResponse createMeal( 일반적으로 학생식당과 도담의 경우 식단 여러개가 조회되고 기숙사식당은 한개만 조회됩니다.) """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공", content = @Content(schema = @Schema(implementation = ssu.eatssu.handler.response.BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "지원 하지 않는 식당 (고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = ssu.eatssu.handler.response.BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = ssu.eatssu.handler.response.BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "지원 하지 않는 식당 (고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("/list") public BaseResponse> getMeal( diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java index 376f818d..408afb4c 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java @@ -1,5 +1,7 @@ package ssu.eatssu.domain.menu.presentation; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; @@ -11,14 +13,12 @@ import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.menu.dto.MenuResponse.MenuInformationResponse; import ssu.eatssu.domain.menu.dto.MenuResponse.MenusInformationResponse; -import ssu.eatssu.domain.restaurant.RestaurantName; +import ssu.eatssu.domain.restaurant.entity.RestaurantName; import ssu.eatssu.global.handler.response.BaseException; -import ssu.eatssu.handler.response.BaseResponse; import ssu.eatssu.domain.menu.service.MenuService; import java.util.List; - -import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; +import ssu.eatssu.global.handler.response.BaseResponse; @RestController @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java b/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java index ab25a5f6..29cb3c56 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java @@ -2,8 +2,8 @@ import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.menu.entity.Meal; -import ssu.eatssu.domain.restaurant.Restaurant; -import ssu.eatssu.domain.enums.TimePart; +import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.menu.entity.TimePart; import java.util.Date; import java.util.List; diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java index 6714cc84..da3b7605 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java @@ -2,7 +2,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.menu.entity.Menu; -import ssu.eatssu.domain.restaurant.Restaurant; +import ssu.eatssu.domain.restaurant.entity.Restaurant; import java.util.List; import java.util.Optional; diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index 32c16e5a..a715b99a 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -1,7 +1,5 @@ package ssu.eatssu.domain.menu.service; -import static ssu.eatssu.global.util.DateUtils.toDate; - import jakarta.transaction.Transactional; import java.util.Date; import lombok.RequiredArgsConstructor; @@ -15,18 +13,18 @@ import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.exception.RestaurantNotFoundException; -import ssu.eatssu.domain.restaurant.Restaurant; -import ssu.eatssu.domain.restaurant.RestaurantName; -import ssu.eatssu.domain.enums.TimePart; +import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.restaurant.entity.RestaurantName; +import ssu.eatssu.domain.menu.entity.TimePart; import ssu.eatssu.domain.menu.repository.MealMenuRepository; import ssu.eatssu.domain.menu.repository.MealRepository; import ssu.eatssu.domain.menu.repository.MenuRepository; -import ssu.eatssu.domain.repository.RestaurantRepository; +import ssu.eatssu.domain.restaurant.repository.RestaurantRepository; import ssu.eatssu.global.handler.response.BaseException; import java.util.List; import ssu.eatssu.global.handler.response.BaseResponseStatus; -import ssu.eatssu.global.util.validator.MenuValidator; +import ssu.eatssu.domain.menu.util.MenuValidator; @Slf4j @@ -65,7 +63,7 @@ public void createMeal(Date date, RestaurantName restaurantName, TimePart timePa Restaurant restaurant = getRestaurant(restaurantName); List meals = getMeals(date, timePart, restaurant); - if (MenuValidator.validateExistedMeal(meals, timePart, date, restaurant, + if (MenuValidator.validateExistedMeal(meals, request)) { return; } @@ -80,9 +78,6 @@ public void createMeal(Date date, RestaurantName restaurantName, TimePart timePa addMenu(newMeal, request); } - /** - * 식단에 메뉴 추가 - */ private void addMenu(Meal meal, CreateMealRequest request) { Restaurant restaurant = meal.getRestaurant(); diff --git a/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java b/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java new file mode 100644 index 00000000..05d6b01d --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java @@ -0,0 +1,27 @@ +package ssu.eatssu.domain.menu.util; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import lombok.RequiredArgsConstructor; +import ssu.eatssu.domain.menu.entity.TimePart; +import ssu.eatssu.domain.menu.dto.MenuRequest.CreateMealRequest; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.restaurant.entity.Restaurant; + +@RequiredArgsConstructor +public class MenuValidator { + + public static boolean validateExistedMeal(List meals, CreateMealRequest request) { + + List sortedRequestMenuNames = new ArrayList<>(request.getMenuNames()); + Collections.sort(sortedRequestMenuNames); + + return meals.stream().anyMatch(meal -> { + List sortedMenuNames = new ArrayList<>(meal.getMenuNames()); + Collections.sort(sortedMenuNames); + return sortedMenuNames.equals(sortedRequestMenuNames); + }); + } +} diff --git a/src/main/java/ssu/eatssu/web/review/dto/MealReviewInformationResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewInformationResponse.java similarity index 96% rename from src/main/java/ssu/eatssu/web/review/dto/MealReviewInformationResponse.java rename to src/main/java/ssu/eatssu/domain/review/dto/MealReviewInformationResponse.java index be835fdb..12585a62 100644 --- a/src/main/java/ssu/eatssu/web/review/dto/MealReviewInformationResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewInformationResponse.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.review.dto; +package ssu.eatssu.domain.review.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; @@ -11,7 +11,7 @@ @Getter @AllArgsConstructor @Builder -public class MealReviewInformationResponse implements ReviewInformationResponse{ +public class MealReviewInformationResponse implements ReviewInformationResponse { @Schema(description = "메뉴명 리스트", example = "[\"고구마치즈돈까스\", \"막국수\", \"미니밥\", \"단무지\", \"요구르트\"]") private List menuNames; diff --git a/src/main/java/ssu/eatssu/web/review/dto/MenuReviewInformationResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewInformationResponse.java similarity index 94% rename from src/main/java/ssu/eatssu/web/review/dto/MenuReviewInformationResponse.java rename to src/main/java/ssu/eatssu/domain/review/dto/MenuReviewInformationResponse.java index 3087f5c9..cb5d5ced 100644 --- a/src/main/java/ssu/eatssu/web/review/dto/MenuReviewInformationResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewInformationResponse.java @@ -1,11 +1,11 @@ -package ssu.eatssu.web.review.dto; +package ssu.eatssu.domain.review.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.menu.Menu; +import ssu.eatssu.domain.menu.entity.Menu; @Schema(title = "메뉴 리뷰 정보(평점 등등)") @Getter diff --git a/src/main/java/ssu/eatssu/global/util/validator/MenuValidator.java b/src/main/java/ssu/eatssu/global/util/validator/MenuValidator.java deleted file mode 100644 index 61991234..00000000 --- a/src/main/java/ssu/eatssu/global/util/validator/MenuValidator.java +++ /dev/null @@ -1,31 +0,0 @@ -package ssu.eatssu.global.util.validator; - -import java.util.Collections; -import java.util.Date; -import java.util.List; -import lombok.RequiredArgsConstructor; -import ssu.eatssu.domain.enums.TimePart; -import ssu.eatssu.domain.menu.dto.MenuRequest.CreateMealRequest; -import ssu.eatssu.domain.menu.entity.Meal; -import ssu.eatssu.domain.restaurant.Restaurant; - -@RequiredArgsConstructor -public class MenuValidator { - - public static boolean validateExistedMeal(List meals, TimePart timePart, Date date, - Restaurant restaurant, CreateMealRequest request) { - Collections.sort(request.getMenuNames()); - - meals.stream().forEach( - meal -> { - List menuNames = meal.getMenuNames(); - Collections.sort(menuNames); - - if (menuNames.equals(request.getMenuNames())) { - return; - } - } - ); - return false; - } -} From b6f56a687c148a1f2ad026e2867c937e0a323cfd Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Tue, 16 Jan 2024 11:33:34 +0900 Subject: [PATCH 037/399] =?UTF-8?q?[#83]=20Refactor=20:=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EA=B5=AC=EC=A1=B0=EB=A5=BC=20=EC=A0=84?= =?UTF-8?q?=EC=B2=B4=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EB=A6=AC=ED=8C=A9?= =?UTF-8?q?=ED=86=A0=EB=A7=81=20=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oauth => domain/auth}/dto/AppleKeys.java | 2 +- .../oauth => domain/auth}/dto/AppleLogin.java | 4 +- .../oauth => domain/auth}/dto/KakaoLogin.java | 2 +- .../vo => domain/auth/dto}/OauthInfo.java | 2 +- .../auth/dto}/UserPrincipalDto.java | 3 +- .../auth/entity}/CustomUserDetails.java | 4 +- .../entity}/CustomUserDetailsService.java | 8 ++-- .../auth/entity}/JwtAuthenticationFilter.java | 2 +- .../auth/entity}/JwtTokenProvider.java | 14 +++---- .../auth/infrastructure}/OauthConfig.java | 2 +- .../auth/infrastructure}/SecurityConfig.java | 10 ++--- .../auth/infrastructure}/SecurityUtil.java | 6 +-- .../auth/presentation}/OauthController.java | 15 ++++---- .../auth}/service/OauthService.java | 13 ++++--- .../java/ssu/eatssu/domain/enums/DayType.java | 17 --------- .../inquiry}/dto/UserInquiryCreate.java | 2 +- .../inquiry}/dto/UserInquiryDetail.java | 4 +- .../presentation}/UserInquiryController.java | 24 ++++++------ .../inquiry}/service/UserInquiryService.java | 11 +++--- .../{enums => menu/entity}/TimePart.java | 4 +- .../page}/dto/MyReviewDetail.java | 4 +- .../page}/dto/MypageInfo.java | 4 +- .../page/presentation}/MyPageController.java | 10 ++--- .../page}/service/MyPageService.java | 19 +++++----- .../JpaLoadCollectionRatingCalculator.java | 10 ++--- .../rating/JpaProjectionRatingCalculator.java | 10 ++--- .../domain/rating/RatingCalculator.java | 8 ++-- .../eatssu/domain/rating/ReviewRating.java | 2 +- .../report/dto/ReviewReportCreate.java | 4 +- .../report/dto/ReviewReportTypeInfo.java | 4 +- .../entity}/ReportStatus.java | 2 +- .../entity}/ReviewReportType.java | 4 +- .../presentation}/ReportController.java | 16 ++++---- .../report}/service/ReportService.java | 23 ++++++------ .../repository/UserInquiryRepository.java | 2 +- .../domain/repository/UserRepository.java | 2 +- .../restaurant/{ => entity}/Restaurant.java | 2 +- .../{ => entity}/RestaurantName.java | 3 +- .../{ => entity}/RestaurantType.java | 2 +- .../repository/RestaurantRepository.java | 6 +-- .../review/dto/CreateReviewRequest.java | 8 ++-- .../review/dto/RatingAverages.java | 2 +- .../review/dto/ReviewDetail.java | 4 +- .../review/dto/ReviewInformationResponse.java | 2 +- .../review/dto/ReviewRatingCount.java | 2 +- .../review/dto/UpdateReviewRequest.java | 2 +- .../domain/review/{ => entity}/Review.java | 8 ++-- .../review/{ => entity}/ReviewImage.java | 3 +- .../review/{ => entity}/ReviewReport.java | 11 +++--- .../domain/review/{ => entity}/Reviews.java | 18 +++++++-- .../presentation}/ReviewController.java | 19 ++++++---- .../repository/ReviewImageRepository.java | 4 +- .../repository/ReviewReportRepository.java | 4 +- .../repository/ReviewRepository.java | 8 ++-- .../repository/ReviewRepositoryCustom.java | 11 +++--- .../repository/ReviewRepositoryImpl.java | 12 +++--- .../review}/service/ReviewService.java | 37 +++++++++++++------ .../domain/slack/entity/SlackChannel.java | 18 +++++++++ .../slack/entity}/SlackMessageFormat.java | 10 ++--- .../slack/entity}/SlackService.java | 14 +++---- .../{web => domain/slice/dto}/SliceDto.java | 2 +- .../eatssu/{web => domain}/user/dto/Join.java | 2 +- .../{web => domain}/user/dto/Login.java | 2 +- .../user/dto/NicknameEdit.java | 2 +- .../user/dto/PasswordChange.java | 2 +- .../{web => domain}/user/dto/Tokens.java | 2 +- .../user/{ => entity}/BaseTimeEntity.java | 2 +- .../user/{ => entity}/OauthProvider.java | 2 +- .../eatssu/domain/user/{ => entity}/Role.java | 2 +- .../eatssu/domain/user/{ => entity}/User.java | 6 +-- .../domain/user/{ => entity}/UserInquiry.java | 2 +- .../domain/user/{ => entity}/UserStatus.java | 2 +- .../user/presentation}/UserController.java | 8 ++-- .../user}/service/UserService.java | 26 ++++++------- .../{ => global}/config/OpenApiConfig.java | 0 .../{ => global}/config/QueryDslConfig.java | 0 .../eatssu/{ => global}/config/S3Config.java | 0 .../handler/GlobalExceptionHandler.java | 13 +++---- .../handler/JwtAccessDeniedHandler.java | 6 +-- .../handler/JwtAuthenticationEntryPoint.java | 6 +-- .../handler/response/BaseException.java | 2 +- .../handler/response/BaseResponse.java | 2 +- .../handler/response/BaseResponseStatus.java | 4 +- .../{utils => global/util}/S3Uploader.java | 0 .../java/ssu/eatssu/slack/SlackChannel.java | 15 -------- src/main/java/ssu/eatssu/utils/DateUtils.java | 25 ------------- src/main/java/ssu/eatssu/vo/AverageRate.java | 9 ----- src/main/java/ssu/eatssu/vo/RateCountMap.java | 30 --------------- .../ssu/eatssu/service/UserServiceTest.java | 1 + 89 files changed, 300 insertions(+), 358 deletions(-) rename src/main/java/ssu/eatssu/{web/oauth => domain/auth}/dto/AppleKeys.java (94%) rename src/main/java/ssu/eatssu/{web/oauth => domain/auth}/dto/AppleLogin.java (75%) rename src/main/java/ssu/eatssu/{web/oauth => domain/auth}/dto/KakaoLogin.java (95%) rename src/main/java/ssu/eatssu/{service/vo => domain/auth/dto}/OauthInfo.java (62%) rename src/main/java/ssu/eatssu/{security => domain/auth/dto}/UserPrincipalDto.java (86%) rename src/main/java/ssu/eatssu/{security => domain/auth/entity}/CustomUserDetails.java (94%) rename src/main/java/ssu/eatssu/{security => domain/auth/entity}/CustomUserDetailsService.java (78%) rename src/main/java/ssu/eatssu/{jwt => domain/auth/entity}/JwtAuthenticationFilter.java (98%) rename src/main/java/ssu/eatssu/{jwt => domain/auth/entity}/JwtTokenProvider.java (94%) rename src/main/java/ssu/eatssu/{config => domain/auth/infrastructure}/OauthConfig.java (96%) rename src/main/java/ssu/eatssu/{config => domain/auth/infrastructure}/SecurityConfig.java (88%) rename src/main/java/ssu/eatssu/{utils => domain/auth/infrastructure}/SecurityUtil.java (90%) rename src/main/java/ssu/eatssu/{web/oauth => domain/auth/presentation}/OauthController.java (89%) rename src/main/java/ssu/eatssu/{ => domain/auth}/service/OauthService.java (96%) delete mode 100644 src/main/java/ssu/eatssu/domain/enums/DayType.java rename src/main/java/ssu/eatssu/{web/userinquiry => domain/inquiry}/dto/UserInquiryCreate.java (89%) rename src/main/java/ssu/eatssu/{web/userinquiry => domain/inquiry}/dto/UserInquiryDetail.java (92%) rename src/main/java/ssu/eatssu/{web/userinquiry => domain/inquiry/presentation}/UserInquiryController.java (83%) rename src/main/java/ssu/eatssu/{ => domain/inquiry}/service/UserInquiryService.java (75%) rename src/main/java/ssu/eatssu/domain/{enums => menu/entity}/TimePart.java (90%) rename src/main/java/ssu/eatssu/{web/mypage => domain/page}/dto/MyReviewDetail.java (95%) rename src/main/java/ssu/eatssu/{web/mypage => domain/page}/dto/MypageInfo.java (83%) rename src/main/java/ssu/eatssu/{web/mypage => domain/page/presentation}/MyPageController.java (93%) rename src/main/java/ssu/eatssu/{ => domain/page}/service/MyPageService.java (85%) rename src/main/java/ssu/eatssu/{web => domain}/report/dto/ReviewReportCreate.java (84%) rename src/main/java/ssu/eatssu/{web => domain}/report/dto/ReviewReportTypeInfo.java (76%) rename src/main/java/ssu/eatssu/domain/{enums => report/entity}/ReportStatus.java (94%) rename src/main/java/ssu/eatssu/domain/{enums => report/entity}/ReviewReportType.java (93%) rename src/main/java/ssu/eatssu/{web/report => domain/report/presentation}/ReportController.java (85%) rename src/main/java/ssu/eatssu/{ => domain/report}/service/ReportService.java (64%) rename src/main/java/ssu/eatssu/domain/restaurant/{ => entity}/Restaurant.java (94%) rename src/main/java/ssu/eatssu/domain/restaurant/{ => entity}/RestaurantName.java (95%) rename src/main/java/ssu/eatssu/domain/restaurant/{ => entity}/RestaurantType.java (55%) rename src/main/java/ssu/eatssu/domain/{ => restaurant}/repository/RestaurantRepository.java (60%) rename src/main/java/ssu/eatssu/{web => domain}/review/dto/CreateReviewRequest.java (90%) rename src/main/java/ssu/eatssu/{web => domain}/review/dto/RatingAverages.java (81%) rename src/main/java/ssu/eatssu/{web => domain}/review/dto/ReviewDetail.java (97%) rename src/main/java/ssu/eatssu/{web => domain}/review/dto/ReviewInformationResponse.java (56%) rename src/main/java/ssu/eatssu/{web => domain}/review/dto/ReviewRatingCount.java (89%) rename src/main/java/ssu/eatssu/{web => domain}/review/dto/UpdateReviewRequest.java (94%) rename src/main/java/ssu/eatssu/domain/review/{ => entity}/Review.java (88%) rename src/main/java/ssu/eatssu/domain/review/{ => entity}/ReviewImage.java (85%) rename src/main/java/ssu/eatssu/domain/review/{ => entity}/ReviewReport.java (73%) rename src/main/java/ssu/eatssu/domain/review/{ => entity}/Reviews.java (74%) rename src/main/java/ssu/eatssu/{web/review => domain/review/presentation}/ReviewController.java (94%) rename src/main/java/ssu/eatssu/domain/{ => review}/repository/ReviewImageRepository.java (60%) rename src/main/java/ssu/eatssu/domain/{ => review}/repository/ReviewReportRepository.java (60%) rename src/main/java/ssu/eatssu/domain/{ => review}/repository/ReviewRepository.java (70%) rename src/main/java/ssu/eatssu/domain/{ => review}/repository/ReviewRepositoryCustom.java (78%) rename src/main/java/ssu/eatssu/domain/{ => review}/repository/ReviewRepositoryImpl.java (94%) rename src/main/java/ssu/eatssu/{ => domain/review}/service/ReviewService.java (83%) create mode 100644 src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java rename src/main/java/ssu/eatssu/{slack => domain/slack/entity}/SlackMessageFormat.java (89%) rename src/main/java/ssu/eatssu/{slack => domain/slack/entity}/SlackService.java (86%) rename src/main/java/ssu/eatssu/{web => domain/slice/dto}/SliceDto.java (94%) rename src/main/java/ssu/eatssu/{web => domain}/user/dto/Join.java (95%) rename src/main/java/ssu/eatssu/{web => domain}/user/dto/Login.java (95%) rename src/main/java/ssu/eatssu/{web => domain}/user/dto/NicknameEdit.java (91%) rename src/main/java/ssu/eatssu/{web => domain}/user/dto/PasswordChange.java (92%) rename src/main/java/ssu/eatssu/{web => domain}/user/dto/Tokens.java (96%) rename src/main/java/ssu/eatssu/domain/user/{ => entity}/BaseTimeEntity.java (94%) rename src/main/java/ssu/eatssu/domain/user/{ => entity}/OauthProvider.java (59%) rename src/main/java/ssu/eatssu/domain/user/{ => entity}/Role.java (92%) rename src/main/java/ssu/eatssu/domain/user/{ => entity}/User.java (93%) rename src/main/java/ssu/eatssu/domain/user/{ => entity}/UserInquiry.java (92%) rename src/main/java/ssu/eatssu/domain/user/{ => entity}/UserStatus.java (67%) rename src/main/java/ssu/eatssu/{web/user => domain/user/presentation}/UserController.java (96%) rename src/main/java/ssu/eatssu/{ => domain/user}/service/UserService.java (82%) rename src/main/java/ssu/eatssu/{ => global}/config/OpenApiConfig.java (100%) rename src/main/java/ssu/eatssu/{ => global}/config/QueryDslConfig.java (100%) rename src/main/java/ssu/eatssu/{ => global}/config/S3Config.java (100%) rename src/main/java/ssu/eatssu/{ => global}/handler/GlobalExceptionHandler.java (95%) rename src/main/java/ssu/eatssu/{ => global}/handler/JwtAccessDeniedHandler.java (89%) rename src/main/java/ssu/eatssu/{ => global}/handler/JwtAuthenticationEntryPoint.java (90%) rename src/main/java/ssu/eatssu/{ => global}/handler/response/BaseException.java (83%) rename src/main/java/ssu/eatssu/{ => global}/handler/response/BaseResponse.java (97%) rename src/main/java/ssu/eatssu/{ => global}/handler/response/BaseResponseStatus.java (97%) rename src/main/java/ssu/eatssu/{utils => global/util}/S3Uploader.java (100%) delete mode 100644 src/main/java/ssu/eatssu/slack/SlackChannel.java delete mode 100644 src/main/java/ssu/eatssu/utils/DateUtils.java delete mode 100644 src/main/java/ssu/eatssu/vo/AverageRate.java delete mode 100644 src/main/java/ssu/eatssu/vo/RateCountMap.java diff --git a/src/main/java/ssu/eatssu/web/oauth/dto/AppleKeys.java b/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java similarity index 94% rename from src/main/java/ssu/eatssu/web/oauth/dto/AppleKeys.java rename to src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java index 2593714a..17b84161 100644 --- a/src/main/java/ssu/eatssu/web/oauth/dto/AppleKeys.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.oauth.dto; +package ssu.eatssu.domain.auth.dto; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/src/main/java/ssu/eatssu/web/oauth/dto/AppleLogin.java b/src/main/java/ssu/eatssu/domain/auth/dto/AppleLogin.java similarity index 75% rename from src/main/java/ssu/eatssu/web/oauth/dto/AppleLogin.java rename to src/main/java/ssu/eatssu/domain/auth/dto/AppleLogin.java index 4572415a..f00905d7 100644 --- a/src/main/java/ssu/eatssu/web/oauth/dto/AppleLogin.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/AppleLogin.java @@ -1,8 +1,6 @@ -package ssu.eatssu.web.oauth.dto; +package ssu.eatssu.domain.auth.dto; import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.Email; -import jakarta.validation.constraints.NotBlank; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/src/main/java/ssu/eatssu/web/oauth/dto/KakaoLogin.java b/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLogin.java similarity index 95% rename from src/main/java/ssu/eatssu/web/oauth/dto/KakaoLogin.java rename to src/main/java/ssu/eatssu/domain/auth/dto/KakaoLogin.java index 04410d0c..044c689d 100644 --- a/src/main/java/ssu/eatssu/web/oauth/dto/KakaoLogin.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLogin.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.oauth.dto; +package ssu.eatssu.domain.auth.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Email; diff --git a/src/main/java/ssu/eatssu/service/vo/OauthInfo.java b/src/main/java/ssu/eatssu/domain/auth/dto/OauthInfo.java similarity index 62% rename from src/main/java/ssu/eatssu/service/vo/OauthInfo.java rename to src/main/java/ssu/eatssu/domain/auth/dto/OauthInfo.java index 17a96ffa..752bd85b 100644 --- a/src/main/java/ssu/eatssu/service/vo/OauthInfo.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/OauthInfo.java @@ -1,4 +1,4 @@ -package ssu.eatssu.service.vo; +package ssu.eatssu.domain.auth.dto; public record OauthInfo(String email, String providerId) { } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/security/UserPrincipalDto.java b/src/main/java/ssu/eatssu/domain/auth/dto/UserPrincipalDto.java similarity index 86% rename from src/main/java/ssu/eatssu/security/UserPrincipalDto.java rename to src/main/java/ssu/eatssu/domain/auth/dto/UserPrincipalDto.java index 11f78f34..a3d33095 100644 --- a/src/main/java/ssu/eatssu/security/UserPrincipalDto.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/UserPrincipalDto.java @@ -1,9 +1,10 @@ -package ssu.eatssu.security; +package ssu.eatssu.domain.auth.dto; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import ssu.eatssu.domain.auth.entity.CustomUserDetails; @Getter @Builder diff --git a/src/main/java/ssu/eatssu/security/CustomUserDetails.java b/src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetails.java similarity index 94% rename from src/main/java/ssu/eatssu/security/CustomUserDetails.java rename to src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetails.java index a7b0f1b2..93fc3a03 100644 --- a/src/main/java/ssu/eatssu/security/CustomUserDetails.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetails.java @@ -1,11 +1,11 @@ -package ssu.eatssu.security; +package ssu.eatssu.domain.auth.entity; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; -import ssu.eatssu.domain.user.User; +import ssu.eatssu.domain.user.entity.User; import java.util.ArrayList; import java.util.Collection; diff --git a/src/main/java/ssu/eatssu/security/CustomUserDetailsService.java b/src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetailsService.java similarity index 78% rename from src/main/java/ssu/eatssu/security/CustomUserDetailsService.java rename to src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetailsService.java index 2862df77..9a44c3c1 100644 --- a/src/main/java/ssu/eatssu/security/CustomUserDetailsService.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetailsService.java @@ -1,14 +1,14 @@ -package ssu.eatssu.security; +package ssu.eatssu.domain.auth.entity; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.stereotype.Component; -import ssu.eatssu.domain.user.User; +import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.handler.response.BaseException; -import ssu.eatssu.handler.response.BaseResponseStatus; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponseStatus; @Slf4j @Component diff --git a/src/main/java/ssu/eatssu/jwt/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/domain/auth/entity/JwtAuthenticationFilter.java similarity index 98% rename from src/main/java/ssu/eatssu/jwt/JwtAuthenticationFilter.java rename to src/main/java/ssu/eatssu/domain/auth/entity/JwtAuthenticationFilter.java index 255894c4..0698aba8 100644 --- a/src/main/java/ssu/eatssu/jwt/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/JwtAuthenticationFilter.java @@ -1,4 +1,4 @@ -package ssu.eatssu.jwt; +package ssu.eatssu.domain.auth.entity; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; diff --git a/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java b/src/main/java/ssu/eatssu/domain/auth/entity/JwtTokenProvider.java similarity index 94% rename from src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java rename to src/main/java/ssu/eatssu/domain/auth/entity/JwtTokenProvider.java index d2f125ba..813141d2 100644 --- a/src/main/java/ssu/eatssu/jwt/JwtTokenProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/JwtTokenProvider.java @@ -1,4 +1,4 @@ -package ssu.eatssu.jwt; +package ssu.eatssu.domain.auth.entity; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -14,17 +14,16 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.stereotype.Component; -import ssu.eatssu.handler.response.BaseException; -import ssu.eatssu.handler.response.BaseResponseStatus; -import ssu.eatssu.security.CustomUserDetails; -import ssu.eatssu.security.UserPrincipalDto; -import ssu.eatssu.web.user.dto.Tokens; +import ssu.eatssu.domain.auth.dto.UserPrincipalDto; +import ssu.eatssu.domain.user.dto.Tokens; import java.security.Key; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.stream.Collectors; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponseStatus; @Slf4j @Component @@ -38,9 +37,6 @@ public class JwtTokenProvider { private final ObjectMapper objectMapper = new ObjectMapper(); - /*@Autowired - private final RedisTemplate redisTemplate;*/ - @Autowired public JwtTokenProvider(@Value("${jwt.secret.key}") String secret, @Value("${jwt.token-validity-in-seconds}") long accessTokenValidityInSeconds, diff --git a/src/main/java/ssu/eatssu/config/OauthConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/OauthConfig.java similarity index 96% rename from src/main/java/ssu/eatssu/config/OauthConfig.java rename to src/main/java/ssu/eatssu/domain/auth/infrastructure/OauthConfig.java index 2548d91a..07aa2f9c 100644 --- a/src/main/java/ssu/eatssu/config/OauthConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/OauthConfig.java @@ -1,4 +1,4 @@ -package ssu.eatssu.config; +package ssu.eatssu.domain.auth.infrastructure; import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; diff --git a/src/main/java/ssu/eatssu/config/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java similarity index 88% rename from src/main/java/ssu/eatssu/config/SecurityConfig.java rename to src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index be97f1ae..58923b98 100644 --- a/src/main/java/ssu/eatssu/config/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -1,4 +1,4 @@ -package ssu.eatssu.config; +package ssu.eatssu.domain.auth.infrastructure; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; @@ -9,10 +9,10 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import ssu.eatssu.handler.JwtAccessDeniedHandler; -import ssu.eatssu.handler.JwtAuthenticationEntryPoint; -import ssu.eatssu.jwt.JwtAuthenticationFilter; -import ssu.eatssu.jwt.JwtTokenProvider; +import ssu.eatssu.domain.auth.entity.JwtAuthenticationFilter; +import ssu.eatssu.domain.auth.entity.JwtTokenProvider; +import ssu.eatssu.global.handler.JwtAccessDeniedHandler; +import ssu.eatssu.global.handler.JwtAuthenticationEntryPoint; @EnableWebSecurity diff --git a/src/main/java/ssu/eatssu/utils/SecurityUtil.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java similarity index 90% rename from src/main/java/ssu/eatssu/utils/SecurityUtil.java rename to src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java index 09306c25..0a9cca15 100644 --- a/src/main/java/ssu/eatssu/utils/SecurityUtil.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java @@ -1,12 +1,12 @@ -package ssu.eatssu.utils; +package ssu.eatssu.domain.auth.infrastructure; import org.springframework.security.access.AuthorizationServiceException; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Component; -import ssu.eatssu.security.CustomUserDetails; -import ssu.eatssu.security.UserPrincipalDto; +import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.auth.dto.UserPrincipalDto; @Component public class SecurityUtil { diff --git a/src/main/java/ssu/eatssu/web/oauth/OauthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OauthController.java similarity index 89% rename from src/main/java/ssu/eatssu/web/oauth/OauthController.java rename to src/main/java/ssu/eatssu/domain/auth/presentation/OauthController.java index 8f0c2b7f..9cb46c3f 100644 --- a/src/main/java/ssu/eatssu/web/oauth/OauthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OauthController.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.oauth; +package ssu.eatssu.domain.auth.presentation; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -14,16 +14,15 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.handler.response.BaseException; -import ssu.eatssu.handler.response.BaseResponse; -import ssu.eatssu.service.OauthService; -import ssu.eatssu.utils.SecurityUtil; -import ssu.eatssu.web.oauth.dto.AppleLogin; -import ssu.eatssu.web.oauth.dto.KakaoLogin; -import ssu.eatssu.web.user.dto.Tokens; +import ssu.eatssu.domain.auth.service.OauthService; +import ssu.eatssu.global.handler.response.BaseResponse; +import ssu.eatssu.domain.auth.dto.AppleLogin; +import ssu.eatssu.domain.auth.dto.KakaoLogin; +import ssu.eatssu.domain.user.dto.Tokens; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; +import ssu.eatssu.domain.auth.infrastructure.SecurityUtil; @Slf4j @RestController diff --git a/src/main/java/ssu/eatssu/service/OauthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OauthService.java similarity index 96% rename from src/main/java/ssu/eatssu/service/OauthService.java rename to src/main/java/ssu/eatssu/domain/auth/service/OauthService.java index d40bb4ca..aa474078 100644 --- a/src/main/java/ssu/eatssu/service/OauthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/OauthService.java @@ -1,4 +1,4 @@ -package ssu.eatssu.service; +package ssu.eatssu.domain.auth.service; import com.fasterxml.jackson.core.JsonProcessingException; @@ -15,14 +15,15 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; -import ssu.eatssu.domain.user.User; -import ssu.eatssu.domain.user.OauthProvider; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.user.entity.OauthProvider; import ssu.eatssu.domain.repository.UserRepository; +import ssu.eatssu.domain.user.service.UserService; import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponseStatus; -import ssu.eatssu.service.vo.OauthInfo; -import ssu.eatssu.web.oauth.dto.AppleKeys; -import ssu.eatssu.web.user.dto.Tokens; +import ssu.eatssu.domain.auth.dto.OauthInfo; +import ssu.eatssu.domain.auth.dto.AppleKeys; +import ssu.eatssu.domain.user.dto.Tokens; import java.math.BigInteger; import java.net.URI; diff --git a/src/main/java/ssu/eatssu/domain/enums/DayType.java b/src/main/java/ssu/eatssu/domain/enums/DayType.java deleted file mode 100644 index 7af30b22..00000000 --- a/src/main/java/ssu/eatssu/domain/enums/DayType.java +++ /dev/null @@ -1,17 +0,0 @@ -package ssu.eatssu.domain.enums; - -import lombok.Getter; - -@Getter -public enum DayType { - - WEEKDAY("주중"), - HOLIDAY("주말, 공휴일"); - - private final String description; - - DayType(String description) { - this.description = description; - } - -} diff --git a/src/main/java/ssu/eatssu/web/userinquiry/dto/UserInquiryCreate.java b/src/main/java/ssu/eatssu/domain/inquiry/dto/UserInquiryCreate.java similarity index 89% rename from src/main/java/ssu/eatssu/web/userinquiry/dto/UserInquiryCreate.java rename to src/main/java/ssu/eatssu/domain/inquiry/dto/UserInquiryCreate.java index 901e0c85..7cfe9c3d 100644 --- a/src/main/java/ssu/eatssu/web/userinquiry/dto/UserInquiryCreate.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/dto/UserInquiryCreate.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.userinquiry.dto; +package ssu.eatssu.domain.inquiry.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; diff --git a/src/main/java/ssu/eatssu/web/userinquiry/dto/UserInquiryDetail.java b/src/main/java/ssu/eatssu/domain/inquiry/dto/UserInquiryDetail.java similarity index 92% rename from src/main/java/ssu/eatssu/web/userinquiry/dto/UserInquiryDetail.java rename to src/main/java/ssu/eatssu/domain/inquiry/dto/UserInquiryDetail.java index 02c08303..d57a1cd4 100644 --- a/src/main/java/ssu/eatssu/web/userinquiry/dto/UserInquiryDetail.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/dto/UserInquiryDetail.java @@ -1,10 +1,10 @@ -package ssu.eatssu.web.userinquiry.dto; +package ssu.eatssu.domain.inquiry.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.user.UserInquiry; +import ssu.eatssu.domain.user.entity.UserInquiry; @AllArgsConstructor @Builder diff --git a/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java b/src/main/java/ssu/eatssu/domain/inquiry/presentation/UserInquiryController.java similarity index 83% rename from src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java rename to src/main/java/ssu/eatssu/domain/inquiry/presentation/UserInquiryController.java index 3324adf5..ae23642b 100644 --- a/src/main/java/ssu/eatssu/web/userinquiry/UserInquiryController.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/presentation/UserInquiryController.java @@ -1,4 +1,6 @@ -package ssu.eatssu.web.userinquiry; +package ssu.eatssu.domain.inquiry.presentation; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER_INQUIRY; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -10,19 +12,17 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.user.UserInquiry; +import ssu.eatssu.domain.user.entity.UserInquiry; import ssu.eatssu.domain.repository.UserInquiryRepository; -import ssu.eatssu.handler.response.BaseException; -import ssu.eatssu.handler.response.BaseResponse; -import ssu.eatssu.service.UserInquiryService; -import ssu.eatssu.slack.SlackChannel; -import ssu.eatssu.slack.SlackMessageFormat; -import ssu.eatssu.slack.SlackService; +import ssu.eatssu.domain.inquiry.service.UserInquiryService; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponse; +import ssu.eatssu.domain.slack.entity.SlackChannel; +import ssu.eatssu.domain.slack.entity.SlackService; +import ssu.eatssu.domain.slack.entity.SlackMessageFormat; import ssu.eatssu.utils.SecurityUtil; -import ssu.eatssu.web.userinquiry.dto.UserInquiryCreate; -import ssu.eatssu.web.userinquiry.dto.UserInquiryDetail; - -import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_FOUND_USER_INQUIRY; +import ssu.eatssu.domain.inquiry.dto.UserInquiryCreate; +import ssu.eatssu.domain.inquiry.dto.UserInquiryDetail; @Slf4j @RestController diff --git a/src/main/java/ssu/eatssu/service/UserInquiryService.java b/src/main/java/ssu/eatssu/domain/inquiry/service/UserInquiryService.java similarity index 75% rename from src/main/java/ssu/eatssu/service/UserInquiryService.java rename to src/main/java/ssu/eatssu/domain/inquiry/service/UserInquiryService.java index 3f9241de..cfb25c19 100644 --- a/src/main/java/ssu/eatssu/service/UserInquiryService.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/service/UserInquiryService.java @@ -1,15 +1,16 @@ -package ssu.eatssu.service; +package ssu.eatssu.domain.inquiry.service; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import ssu.eatssu.domain.user.User; -import ssu.eatssu.domain.user.UserInquiry; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.user.entity.UserInquiry; import ssu.eatssu.domain.repository.UserInquiryRepository; import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseException; -import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_FOUND_USER; @RequiredArgsConstructor @Service diff --git a/src/main/java/ssu/eatssu/domain/enums/TimePart.java b/src/main/java/ssu/eatssu/domain/menu/entity/TimePart.java similarity index 90% rename from src/main/java/ssu/eatssu/domain/enums/TimePart.java rename to src/main/java/ssu/eatssu/domain/menu/entity/TimePart.java index 50026c4b..6ade3857 100644 --- a/src/main/java/ssu/eatssu/domain/enums/TimePart.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/TimePart.java @@ -1,11 +1,9 @@ -package ssu.eatssu.domain.enums; +package ssu.eatssu.domain.menu.entity; import com.fasterxml.jackson.annotation.JsonCreator; import java.util.Arrays; import lombok.Getter; -import java.util.Locale; - @Getter public enum TimePart { MORNING("조식"), diff --git a/src/main/java/ssu/eatssu/web/mypage/dto/MyReviewDetail.java b/src/main/java/ssu/eatssu/domain/page/dto/MyReviewDetail.java similarity index 95% rename from src/main/java/ssu/eatssu/web/mypage/dto/MyReviewDetail.java rename to src/main/java/ssu/eatssu/domain/page/dto/MyReviewDetail.java index e4d5b821..06f0a050 100644 --- a/src/main/java/ssu/eatssu/web/mypage/dto/MyReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/page/dto/MyReviewDetail.java @@ -1,10 +1,10 @@ -package ssu.eatssu.web.mypage.dto; +package ssu.eatssu.domain.page.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.review.Review; +import ssu.eatssu.domain.review.entity.Review; import java.time.LocalDate; import java.util.ArrayList; diff --git a/src/main/java/ssu/eatssu/web/mypage/dto/MypageInfo.java b/src/main/java/ssu/eatssu/domain/page/dto/MypageInfo.java similarity index 83% rename from src/main/java/ssu/eatssu/web/mypage/dto/MypageInfo.java rename to src/main/java/ssu/eatssu/domain/page/dto/MypageInfo.java index 99def1e8..9238c53c 100644 --- a/src/main/java/ssu/eatssu/web/mypage/dto/MypageInfo.java +++ b/src/main/java/ssu/eatssu/domain/page/dto/MypageInfo.java @@ -1,10 +1,10 @@ -package ssu.eatssu.web.mypage.dto; +package ssu.eatssu.domain.page.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.user.OauthProvider; +import ssu.eatssu.domain.user.entity.OauthProvider; @AllArgsConstructor @Builder diff --git a/src/main/java/ssu/eatssu/web/mypage/MyPageController.java b/src/main/java/ssu/eatssu/domain/page/presentation/MyPageController.java similarity index 93% rename from src/main/java/ssu/eatssu/web/mypage/MyPageController.java rename to src/main/java/ssu/eatssu/domain/page/presentation/MyPageController.java index e95516a7..6ecf9351 100644 --- a/src/main/java/ssu/eatssu/web/mypage/MyPageController.java +++ b/src/main/java/ssu/eatssu/domain/page/presentation/MyPageController.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.mypage; +package ssu.eatssu.domain.page.presentation; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -20,11 +20,11 @@ import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponse; -import ssu.eatssu.service.MyPageService; +import ssu.eatssu.domain.page.service.MyPageService; import ssu.eatssu.utils.SecurityUtil; -import ssu.eatssu.web.SliceDto; -import ssu.eatssu.web.mypage.dto.MyReviewDetail; -import ssu.eatssu.web.mypage.dto.MypageInfo; +import ssu.eatssu.domain.slice.dto.SliceDto; +import ssu.eatssu.domain.page.dto.MyReviewDetail; +import ssu.eatssu.domain.page.dto.MypageInfo; @Slf4j @RestController diff --git a/src/main/java/ssu/eatssu/service/MyPageService.java b/src/main/java/ssu/eatssu/domain/page/service/MyPageService.java similarity index 85% rename from src/main/java/ssu/eatssu/service/MyPageService.java rename to src/main/java/ssu/eatssu/domain/page/service/MyPageService.java index 828c70b4..a2d33801 100644 --- a/src/main/java/ssu/eatssu/service/MyPageService.java +++ b/src/main/java/ssu/eatssu/domain/page/service/MyPageService.java @@ -1,4 +1,6 @@ -package ssu.eatssu.service; +package ssu.eatssu.domain.page.service; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; @@ -6,19 +8,18 @@ import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import ssu.eatssu.domain.review.Review; -import ssu.eatssu.domain.user.User; -import ssu.eatssu.domain.repository.ReviewRepository; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.handler.response.BaseException; -import ssu.eatssu.web.SliceDto; -import ssu.eatssu.web.mypage.dto.MyReviewDetail; -import ssu.eatssu.web.mypage.dto.MypageInfo; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.domain.slice.dto.SliceDto; +import ssu.eatssu.domain.page.dto.MyReviewDetail; +import ssu.eatssu.domain.page.dto.MypageInfo; import java.util.ArrayList; import java.util.List; -import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_FOUND_USER; @RequiredArgsConstructor @Service diff --git a/src/main/java/ssu/eatssu/domain/rating/JpaLoadCollectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/JpaLoadCollectionRatingCalculator.java index 5ae35f9d..521e99fa 100644 --- a/src/main/java/ssu/eatssu/domain/rating/JpaLoadCollectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/JpaLoadCollectionRatingCalculator.java @@ -1,11 +1,11 @@ package ssu.eatssu.domain.rating; import org.springframework.stereotype.Component; -import ssu.eatssu.domain.menu.Meal; -import ssu.eatssu.domain.menu.MealMenu; -import ssu.eatssu.domain.menu.Menu; -import ssu.eatssu.web.review.dto.RatingAverages; -import ssu.eatssu.web.review.dto.ReviewRatingCount; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.MealMenu; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.review.dto.RatingAverages; +import ssu.eatssu.domain.review.dto.ReviewRatingCount; /** * JPA 의 OneToMany객체참조를 이용하여 구현한 클래스입니다. diff --git a/src/main/java/ssu/eatssu/domain/rating/JpaProjectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/JpaProjectionRatingCalculator.java index d5fc7932..bda21d93 100644 --- a/src/main/java/ssu/eatssu/domain/rating/JpaProjectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/JpaProjectionRatingCalculator.java @@ -2,12 +2,12 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; -import ssu.eatssu.domain.menu.Meal; -import ssu.eatssu.domain.menu.Menu; -import ssu.eatssu.domain.repository.ReviewRepository; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.repository.dto.RatingsDto; -import ssu.eatssu.web.review.dto.RatingAverages; -import ssu.eatssu.web.review.dto.ReviewRatingCount; +import ssu.eatssu.domain.review.dto.RatingAverages; +import ssu.eatssu.domain.review.dto.ReviewRatingCount; import java.util.Collection; diff --git a/src/main/java/ssu/eatssu/domain/rating/RatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/RatingCalculator.java index be12a54f..73a3484c 100644 --- a/src/main/java/ssu/eatssu/domain/rating/RatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/RatingCalculator.java @@ -1,9 +1,9 @@ package ssu.eatssu.domain.rating; -import ssu.eatssu.domain.menu.Meal; -import ssu.eatssu.domain.menu.Menu; -import ssu.eatssu.web.review.dto.RatingAverages; -import ssu.eatssu.web.review.dto.ReviewRatingCount; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.review.dto.RatingAverages; +import ssu.eatssu.domain.review.dto.ReviewRatingCount; public interface RatingCalculator { diff --git a/src/main/java/ssu/eatssu/domain/rating/ReviewRating.java b/src/main/java/ssu/eatssu/domain/rating/ReviewRating.java index a0518545..d458541a 100644 --- a/src/main/java/ssu/eatssu/domain/rating/ReviewRating.java +++ b/src/main/java/ssu/eatssu/domain/rating/ReviewRating.java @@ -1,6 +1,6 @@ package ssu.eatssu.domain.rating; -import ssu.eatssu.web.review.dto.ReviewRatingCount; +import ssu.eatssu.domain.review.dto.ReviewRatingCount; public enum ReviewRating { RATING_1(1), diff --git a/src/main/java/ssu/eatssu/web/report/dto/ReviewReportCreate.java b/src/main/java/ssu/eatssu/domain/report/dto/ReviewReportCreate.java similarity index 84% rename from src/main/java/ssu/eatssu/web/report/dto/ReviewReportCreate.java rename to src/main/java/ssu/eatssu/domain/report/dto/ReviewReportCreate.java index 393e2c4e..641c73cf 100644 --- a/src/main/java/ssu/eatssu/web/report/dto/ReviewReportCreate.java +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReviewReportCreate.java @@ -1,9 +1,9 @@ -package ssu.eatssu.web.report.dto; +package ssu.eatssu.domain.report.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import lombok.NoArgsConstructor; -import ssu.eatssu.domain.enums.ReviewReportType; +import ssu.eatssu.domain.report.entity.ReviewReportType; @Schema(title = "리뷰 신고하기") @NoArgsConstructor diff --git a/src/main/java/ssu/eatssu/web/report/dto/ReviewReportTypeInfo.java b/src/main/java/ssu/eatssu/domain/report/dto/ReviewReportTypeInfo.java similarity index 76% rename from src/main/java/ssu/eatssu/web/report/dto/ReviewReportTypeInfo.java rename to src/main/java/ssu/eatssu/domain/report/dto/ReviewReportTypeInfo.java index 156dc70f..dda5725d 100644 --- a/src/main/java/ssu/eatssu/web/report/dto/ReviewReportTypeInfo.java +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReviewReportTypeInfo.java @@ -1,7 +1,7 @@ -package ssu.eatssu.web.report.dto; +package ssu.eatssu.domain.report.dto; import lombok.Getter; -import ssu.eatssu.domain.enums.ReviewReportType; +import ssu.eatssu.domain.report.entity.ReviewReportType; @Getter public class ReviewReportTypeInfo { diff --git a/src/main/java/ssu/eatssu/domain/enums/ReportStatus.java b/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java similarity index 94% rename from src/main/java/ssu/eatssu/domain/enums/ReportStatus.java rename to src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java index 36429a08..56fad27d 100644 --- a/src/main/java/ssu/eatssu/domain/enums/ReportStatus.java +++ b/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.enums; +package ssu.eatssu.domain.report.entity; import com.fasterxml.jackson.annotation.JsonCreator; import java.util.Arrays; diff --git a/src/main/java/ssu/eatssu/domain/enums/ReviewReportType.java b/src/main/java/ssu/eatssu/domain/report/entity/ReviewReportType.java similarity index 93% rename from src/main/java/ssu/eatssu/domain/enums/ReviewReportType.java rename to src/main/java/ssu/eatssu/domain/report/entity/ReviewReportType.java index db9a1636..fffab989 100644 --- a/src/main/java/ssu/eatssu/domain/enums/ReviewReportType.java +++ b/src/main/java/ssu/eatssu/domain/report/entity/ReviewReportType.java @@ -1,11 +1,9 @@ -package ssu.eatssu.domain.enums; +package ssu.eatssu.domain.report.entity; import com.fasterxml.jackson.annotation.JsonCreator; import java.util.Arrays; import lombok.Getter; -import java.util.Locale; - @Getter public enum ReviewReportType { CONTENT("메뉴와 관련없는 내용"), diff --git a/src/main/java/ssu/eatssu/web/report/ReportController.java b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java similarity index 85% rename from src/main/java/ssu/eatssu/web/report/ReportController.java rename to src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java index 5b6d20e4..e8cb1d91 100644 --- a/src/main/java/ssu/eatssu/web/report/ReportController.java +++ b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.report; +package ssu.eatssu.domain.report.presentation; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -9,18 +9,18 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.review.ReviewReport; -import ssu.eatssu.domain.enums.ReviewReportType; -import ssu.eatssu.domain.repository.ReviewRepository; +import ssu.eatssu.domain.review.entity.ReviewReport; +import ssu.eatssu.domain.report.entity.ReviewReportType; +import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.repository.UserRepository; import ssu.eatssu.handler.response.BaseResponse; -import ssu.eatssu.service.ReportService; +import ssu.eatssu.domain.report.service.ReportService; import ssu.eatssu.slack.SlackChannel; -import ssu.eatssu.slack.SlackMessageFormat; +import ssu.eatssu.domain.slack.entity.SlackMessageFormat; import ssu.eatssu.slack.SlackService; import ssu.eatssu.utils.SecurityUtil; -import ssu.eatssu.web.report.dto.ReviewReportCreate; -import ssu.eatssu.web.report.dto.ReviewReportTypeInfo; +import ssu.eatssu.domain.report.dto.ReviewReportCreate; +import ssu.eatssu.domain.report.dto.ReviewReportTypeInfo; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/ssu/eatssu/service/ReportService.java b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java similarity index 64% rename from src/main/java/ssu/eatssu/service/ReportService.java rename to src/main/java/ssu/eatssu/domain/report/service/ReportService.java index eddbac48..5beffa9c 100644 --- a/src/main/java/ssu/eatssu/service/ReportService.java +++ b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java @@ -1,20 +1,21 @@ -package ssu.eatssu.service; +package ssu.eatssu.domain.report.service; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import ssu.eatssu.domain.review.Review; -import ssu.eatssu.domain.review.ReviewReport; -import ssu.eatssu.domain.user.User; -import ssu.eatssu.domain.enums.ReportStatus; -import ssu.eatssu.domain.repository.ReviewReportRepository; -import ssu.eatssu.domain.repository.ReviewRepository; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.entity.ReviewReport; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.report.entity.ReportStatus; +import ssu.eatssu.domain.review.repository.ReviewReportRepository; +import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.handler.response.BaseException; -import ssu.eatssu.web.report.dto.ReviewReportCreate; +import ssu.eatssu.domain.report.dto.ReviewReportCreate; +import ssu.eatssu.global.handler.response.BaseException; -import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; -import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_FOUND_USER; @RequiredArgsConstructor @Service diff --git a/src/main/java/ssu/eatssu/domain/repository/UserInquiryRepository.java b/src/main/java/ssu/eatssu/domain/repository/UserInquiryRepository.java index ed288bd1..573ffe96 100644 --- a/src/main/java/ssu/eatssu/domain/repository/UserInquiryRepository.java +++ b/src/main/java/ssu/eatssu/domain/repository/UserInquiryRepository.java @@ -1,7 +1,7 @@ package ssu.eatssu.domain.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.user.UserInquiry; +import ssu.eatssu.domain.user.entity.UserInquiry; public interface UserInquiryRepository extends JpaRepository{ } diff --git a/src/main/java/ssu/eatssu/domain/repository/UserRepository.java b/src/main/java/ssu/eatssu/domain/repository/UserRepository.java index 1bb5eccc..af0dc140 100644 --- a/src/main/java/ssu/eatssu/domain/repository/UserRepository.java +++ b/src/main/java/ssu/eatssu/domain/repository/UserRepository.java @@ -1,7 +1,7 @@ package ssu.eatssu.domain.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.user.User; +import ssu.eatssu.domain.user.entity.User; import java.util.Optional; diff --git a/src/main/java/ssu/eatssu/domain/restaurant/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java similarity index 94% rename from src/main/java/ssu/eatssu/domain/restaurant/Restaurant.java rename to src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index e55455b4..73b9f05b 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.restaurant; +package ssu.eatssu.domain.restaurant.entity; import jakarta.persistence.*; import lombok.AccessLevel; diff --git a/src/main/java/ssu/eatssu/domain/restaurant/RestaurantName.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java similarity index 95% rename from src/main/java/ssu/eatssu/domain/restaurant/RestaurantName.java rename to src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java index a35dca62..cdf372b9 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/RestaurantName.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java @@ -1,10 +1,9 @@ -package ssu.eatssu.domain.restaurant; +package ssu.eatssu.domain.restaurant.entity; import com.fasterxml.jackson.annotation.JsonCreator; import java.util.Arrays; import lombok.Getter; -import java.util.Locale; import ssu.eatssu.domain.menu.exception.RestaurantNotFoundException; @Getter diff --git a/src/main/java/ssu/eatssu/domain/restaurant/RestaurantType.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java similarity index 55% rename from src/main/java/ssu/eatssu/domain/restaurant/RestaurantType.java rename to src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java index f0f60405..f10c6399 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/RestaurantType.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.restaurant; +package ssu.eatssu.domain.restaurant.entity; public enum RestaurantType { FIXED, diff --git a/src/main/java/ssu/eatssu/domain/repository/RestaurantRepository.java b/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java similarity index 60% rename from src/main/java/ssu/eatssu/domain/repository/RestaurantRepository.java rename to src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java index 95e30337..c70df859 100644 --- a/src/main/java/ssu/eatssu/domain/repository/RestaurantRepository.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java @@ -1,8 +1,8 @@ -package ssu.eatssu.domain.repository; +package ssu.eatssu.domain.restaurant.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.restaurant.Restaurant; -import ssu.eatssu.domain.restaurant.RestaurantName; +import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.restaurant.entity.RestaurantName; import java.util.Optional; diff --git a/src/main/java/ssu/eatssu/web/review/dto/CreateReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateReviewRequest.java similarity index 90% rename from src/main/java/ssu/eatssu/web/review/dto/CreateReviewRequest.java rename to src/main/java/ssu/eatssu/domain/review/dto/CreateReviewRequest.java index 9cb61356..c638796f 100644 --- a/src/main/java/ssu/eatssu/web/review/dto/CreateReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateReviewRequest.java @@ -1,14 +1,14 @@ -package ssu.eatssu.web.review.dto; +package ssu.eatssu.domain.review.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; import lombok.Getter; import lombok.NoArgsConstructor; import org.springframework.util.Assert; -import ssu.eatssu.domain.menu.Menu; +import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.rating.Ratings; -import ssu.eatssu.domain.review.Review; -import ssu.eatssu.domain.user.User; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.user.entity.User; @Schema(title = "리뷰 작성") @NoArgsConstructor diff --git a/src/main/java/ssu/eatssu/web/review/dto/RatingAverages.java b/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java similarity index 81% rename from src/main/java/ssu/eatssu/web/review/dto/RatingAverages.java rename to src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java index 2813b79d..d96d03eb 100644 --- a/src/main/java/ssu/eatssu/web/review/dto/RatingAverages.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.review.dto; +package ssu.eatssu.domain.review.dto; import lombok.Builder; diff --git a/src/main/java/ssu/eatssu/web/review/dto/ReviewDetail.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java similarity index 97% rename from src/main/java/ssu/eatssu/web/review/dto/ReviewDetail.java rename to src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java index 3dd7b3a3..83bb9f77 100644 --- a/src/main/java/ssu/eatssu/web/review/dto/ReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java @@ -1,10 +1,10 @@ -package ssu.eatssu.web.review.dto; +package ssu.eatssu.domain.review.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.review.Review; +import ssu.eatssu.domain.review.entity.Review; import java.time.LocalDate; import java.util.ArrayList; diff --git a/src/main/java/ssu/eatssu/web/review/dto/ReviewInformationResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewInformationResponse.java similarity index 56% rename from src/main/java/ssu/eatssu/web/review/dto/ReviewInformationResponse.java rename to src/main/java/ssu/eatssu/domain/review/dto/ReviewInformationResponse.java index fe36247f..0a9607fe 100644 --- a/src/main/java/ssu/eatssu/web/review/dto/ReviewInformationResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewInformationResponse.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.review.dto; +package ssu.eatssu.domain.review.dto; public interface ReviewInformationResponse { diff --git a/src/main/java/ssu/eatssu/web/review/dto/ReviewRatingCount.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java similarity index 89% rename from src/main/java/ssu/eatssu/web/review/dto/ReviewRatingCount.java rename to src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java index e16456c4..689b71ba 100644 --- a/src/main/java/ssu/eatssu/web/review/dto/ReviewRatingCount.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.review.dto; +package ssu.eatssu.domain.review.dto; //COMMENT: 더 좋은 매개변수 명이 있을 것 같은데 제 머리로는 이게 한계입니다... 멋진 변수명으로 바꿔주세요 public record ReviewRatingCount(int oneStarCount, int twoStarCount, int threeStarCount, int fourStarCount, int fiveStarCount) { diff --git a/src/main/java/ssu/eatssu/web/review/dto/UpdateReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UpdateReviewRequest.java similarity index 94% rename from src/main/java/ssu/eatssu/web/review/dto/UpdateReviewRequest.java rename to src/main/java/ssu/eatssu/domain/review/dto/UpdateReviewRequest.java index f8064b60..f44ecfda 100644 --- a/src/main/java/ssu/eatssu/web/review/dto/UpdateReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/UpdateReviewRequest.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.review.dto; +package ssu.eatssu.domain.review.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; diff --git a/src/main/java/ssu/eatssu/domain/review/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java similarity index 88% rename from src/main/java/ssu/eatssu/domain/review/Review.java rename to src/main/java/ssu/eatssu/domain/review/entity/Review.java index 0473ac36..4c346e7f 100644 --- a/src/main/java/ssu/eatssu/domain/review/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -1,11 +1,11 @@ -package ssu.eatssu.domain.review; +package ssu.eatssu.domain.review.entity; import jakarta.persistence.*; import lombok.*; -import ssu.eatssu.domain.menu.Menu; +import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.rating.Ratings; -import ssu.eatssu.domain.user.BaseTimeEntity; -import ssu.eatssu.domain.user.User; +import ssu.eatssu.domain.user.entity.BaseTimeEntity; +import ssu.eatssu.domain.user.entity.User; import java.util.List; diff --git a/src/main/java/ssu/eatssu/domain/review/ReviewImage.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java similarity index 85% rename from src/main/java/ssu/eatssu/domain/review/ReviewImage.java rename to src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java index 50dcf9cf..d3247703 100644 --- a/src/main/java/ssu/eatssu/domain/review/ReviewImage.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java @@ -1,8 +1,7 @@ -package ssu.eatssu.domain.review; +package ssu.eatssu.domain.review.entity; import jakarta.persistence.*; import lombok.*; -import ssu.eatssu.domain.review.Review; @Entity @Getter diff --git a/src/main/java/ssu/eatssu/domain/review/ReviewReport.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewReport.java similarity index 73% rename from src/main/java/ssu/eatssu/domain/review/ReviewReport.java rename to src/main/java/ssu/eatssu/domain/review/entity/ReviewReport.java index a28ee200..1630bd91 100644 --- a/src/main/java/ssu/eatssu/domain/review/ReviewReport.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewReport.java @@ -1,12 +1,11 @@ -package ssu.eatssu.domain.review; +package ssu.eatssu.domain.review.entity; import jakarta.persistence.*; import lombok.*; -import ssu.eatssu.domain.user.BaseTimeEntity; -import ssu.eatssu.domain.user.User; -import ssu.eatssu.domain.enums.ReportStatus; -import ssu.eatssu.domain.enums.ReviewReportType; -import ssu.eatssu.domain.review.Review; +import ssu.eatssu.domain.user.entity.BaseTimeEntity; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.report.entity.ReportStatus; +import ssu.eatssu.domain.report.entity.ReviewReportType; @Builder @Entity diff --git a/src/main/java/ssu/eatssu/domain/review/Reviews.java b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java similarity index 74% rename from src/main/java/ssu/eatssu/domain/review/Reviews.java rename to src/main/java/ssu/eatssu/domain/review/entity/Reviews.java index 3a7dbb8e..9989b168 100644 --- a/src/main/java/ssu/eatssu/domain/review/Reviews.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.review; +package ssu.eatssu.domain.review.entity; import jakarta.persistence.CascadeType; import jakarta.persistence.Embeddable; @@ -33,17 +33,29 @@ public void calculateReviewRatings() { }); } - public int getTotalMainRating() { return this.reviews.stream().mapToInt(review -> review.getRatings().getMainRating()).sum(); } public int getTotalAmountRating() { - return this.reviews.stream().mapToInt(review -> review.getRatings().getAmountRating()).sum(); + return this.reviews.stream().mapToInt(review -> review.getRatings().getAmountRating()) + .sum(); } public int getTotalTasteRating() { return this.reviews.stream().mapToInt(review -> review.getRatings().getTasteRating()).sum(); } + + public double getAverageMainRating() { + return (double) this.getTotalMainRating() / this.size(); + } + + public double getAverageAmountRating() { + return (double) this.getTotalAmountRating() / this.size(); + } + + public double getAverageTasteRating() { + return (double) this.getTotalTasteRating() / this.size(); + } } diff --git a/src/main/java/ssu/eatssu/web/review/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java similarity index 94% rename from src/main/java/ssu/eatssu/web/review/ReviewController.java rename to src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index 257a85d5..b2f7e131 100644 --- a/src/main/java/ssu/eatssu/web/review/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.review; +package ssu.eatssu.domain.review.presentation; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -17,18 +17,21 @@ import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import ssu.eatssu.domain.menu.MenuType; -import ssu.eatssu.handler.response.BaseException; +import ssu.eatssu.domain.menu.entity.MenuType; +import ssu.eatssu.domain.review.dto.CreateReviewRequest; +import ssu.eatssu.domain.review.dto.MealReviewInformationResponse; +import ssu.eatssu.domain.review.dto.MenuReviewInformationResponse; +import ssu.eatssu.domain.review.dto.ReviewDetail; +import ssu.eatssu.domain.review.dto.UpdateReviewRequest; +import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponse; -import ssu.eatssu.service.ReviewService; +import ssu.eatssu.domain.review.service.ReviewService; import ssu.eatssu.utils.SecurityUtil; -import ssu.eatssu.web.SliceDto; -import ssu.eatssu.web.review.dto.*; +import ssu.eatssu.domain.slice.dto.SliceDto; import java.util.List; -import static ssu.eatssu.handler.response.BaseResponseStatus.MISSING_REQUEST_PARAM; - +import static ssu.eatssu.global.handler.response.BaseResponseStatus.MISSING_REQUEST_PARAM; @Slf4j @RestController @RequestMapping("/review") diff --git a/src/main/java/ssu/eatssu/domain/repository/ReviewImageRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewImageRepository.java similarity index 60% rename from src/main/java/ssu/eatssu/domain/repository/ReviewImageRepository.java rename to src/main/java/ssu/eatssu/domain/review/repository/ReviewImageRepository.java index 39b28a82..b608010f 100644 --- a/src/main/java/ssu/eatssu/domain/repository/ReviewImageRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewImageRepository.java @@ -1,7 +1,7 @@ -package ssu.eatssu.domain.repository; +package ssu.eatssu.domain.review.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.review.ReviewImage; +import ssu.eatssu.domain.review.entity.ReviewImage; public interface ReviewImageRepository extends JpaRepository { } diff --git a/src/main/java/ssu/eatssu/domain/repository/ReviewReportRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewReportRepository.java similarity index 60% rename from src/main/java/ssu/eatssu/domain/repository/ReviewReportRepository.java rename to src/main/java/ssu/eatssu/domain/review/repository/ReviewReportRepository.java index 14dcb086..b354505d 100644 --- a/src/main/java/ssu/eatssu/domain/repository/ReviewReportRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewReportRepository.java @@ -1,7 +1,7 @@ -package ssu.eatssu.domain.repository; +package ssu.eatssu.domain.review.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.review.ReviewReport; +import ssu.eatssu.domain.review.entity.ReviewReport; public interface ReviewReportRepository extends JpaRepository{ } diff --git a/src/main/java/ssu/eatssu/domain/repository/ReviewRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java similarity index 70% rename from src/main/java/ssu/eatssu/domain/repository/ReviewRepository.java rename to src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java index 0f9b78fc..201623f1 100644 --- a/src/main/java/ssu/eatssu/domain/repository/ReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java @@ -1,9 +1,9 @@ -package ssu.eatssu.domain.repository; +package ssu.eatssu.domain.review.repository; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.menu.Meal; -import ssu.eatssu.domain.menu.Menu; -import ssu.eatssu.domain.review.Review; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.review.entity.Review; import java.util.Collection; import java.util.List; diff --git a/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryCustom.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java similarity index 78% rename from src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryCustom.java rename to src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java index d291d77d..6d8b2fd8 100644 --- a/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryCustom.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java @@ -1,12 +1,11 @@ -package ssu.eatssu.domain.repository; +package ssu.eatssu.domain.review.repository; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; -import ssu.eatssu.domain.review.Review; -import ssu.eatssu.domain.menu.Meal; -import ssu.eatssu.domain.menu.Menu; -import ssu.eatssu.domain.review.Review; -import ssu.eatssu.domain.user.User; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.user.entity.User; public interface ReviewRepositoryCustom { //특정 메뉴 리뷰 - 최신순 정렬 diff --git a/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryImpl.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java similarity index 94% rename from src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryImpl.java rename to src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java index 7b0e6ba6..f1df1f5d 100644 --- a/src/main/java/ssu/eatssu/domain/repository/ReviewRepositoryImpl.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.repository; +package ssu.eatssu.domain.review.repository; import com.querydsl.core.types.dsl.BooleanExpression; @@ -8,16 +8,14 @@ import org.springframework.data.domain.Slice; import org.springframework.data.domain.SliceImpl; import org.springframework.stereotype.Repository; -import ssu.eatssu.domain.*; import ssu.eatssu.domain.review.QReview; -import ssu.eatssu.domain.review.Review; +import ssu.eatssu.domain.review.entity.Review; import java.util.ArrayList; import java.util.List; -import ssu.eatssu.domain.menu.Meal; -import ssu.eatssu.domain.menu.Menu; -import ssu.eatssu.domain.review.Review; -import ssu.eatssu.domain.user.User; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.user.entity.User; @Repository @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java similarity index 83% rename from src/main/java/ssu/eatssu/service/ReviewService.java rename to src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index 1307545c..3ff7f9ea 100644 --- a/src/main/java/ssu/eatssu/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -1,4 +1,11 @@ -package ssu.eatssu.service; +package ssu.eatssu.domain.review.service; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.FAIL_IMAGE_UPLOAD; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MEAL; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; @@ -7,25 +14,33 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; -import ssu.eatssu.domain.menu.Meal; -import ssu.eatssu.domain.menu.Menu; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.menu.repository.MealRepository; +import ssu.eatssu.domain.menu.repository.MenuRepository; import ssu.eatssu.domain.rating.RatingCalculator; import ssu.eatssu.domain.repository.*; -import ssu.eatssu.domain.review.Review; -import ssu.eatssu.domain.review.ReviewImage; -import ssu.eatssu.domain.user.User; -import ssu.eatssu.handler.response.BaseException; +import ssu.eatssu.domain.review.dto.CreateReviewRequest; +import ssu.eatssu.domain.review.dto.MealReviewInformationResponse; +import ssu.eatssu.domain.review.dto.MenuReviewInformationResponse; +import ssu.eatssu.domain.review.dto.RatingAverages; +import ssu.eatssu.domain.review.dto.ReviewDetail; +import ssu.eatssu.domain.review.dto.ReviewRatingCount; +import ssu.eatssu.domain.review.dto.UpdateReviewRequest; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.entity.ReviewImage; +import ssu.eatssu.domain.review.repository.ReviewImageRepository; +import ssu.eatssu.domain.review.repository.ReviewRepository; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.utils.S3Uploader; import ssu.eatssu.utils.SecurityUtil; -import ssu.eatssu.web.SliceDto; -import ssu.eatssu.web.review.dto.*; +import ssu.eatssu.domain.slice.dto.SliceDto; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import static ssu.eatssu.handler.response.BaseResponseStatus.*; - @RequiredArgsConstructor @Service @Transactional diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java new file mode 100644 index 00000000..e5e04583 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java @@ -0,0 +1,18 @@ +package ssu.eatssu.domain.slack.entity; + +import lombok.Getter; + +public enum SlackChannel { + + REPORT_CHANNEL("#신고"), + ADDMENU_CHANNEL("#메뉴_추가"), + ERROR_CHANNEL("#장애"), + USER_INQUIRY_CHANNEL("#유저-문의"); + + @Getter + private String krName; + + SlackChannel(String krName){ + this.krName = krName; + } +} diff --git a/src/main/java/ssu/eatssu/slack/SlackMessageFormat.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java similarity index 89% rename from src/main/java/ssu/eatssu/slack/SlackMessageFormat.java rename to src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java index 06a09a9b..6bfbb60c 100644 --- a/src/main/java/ssu/eatssu/slack/SlackMessageFormat.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java @@ -1,10 +1,10 @@ -package ssu.eatssu.slack; +package ssu.eatssu.domain.slack.entity; import org.springframework.stereotype.Component; -import ssu.eatssu.domain.review.Review; -import ssu.eatssu.domain.review.ReviewReport; -import ssu.eatssu.domain.user.User; -import ssu.eatssu.domain.user.UserInquiry; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.entity.ReviewReport; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.user.entity.UserInquiry; import java.text.MessageFormat; diff --git a/src/main/java/ssu/eatssu/slack/SlackService.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackService.java similarity index 86% rename from src/main/java/ssu/eatssu/slack/SlackService.java rename to src/main/java/ssu/eatssu/domain/slack/entity/SlackService.java index c3a45261..2d9dd2b6 100644 --- a/src/main/java/ssu/eatssu/slack/SlackService.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackService.java @@ -1,4 +1,4 @@ -package ssu.eatssu.slack; +package ssu.eatssu.domain.slack.entity; import com.slack.api.Slack; import com.slack.api.methods.MethodsClient; @@ -13,21 +13,21 @@ @Slf4j @Service public class SlackService { + @Value(value = "${slack.token}") String slackToken; - public void sendSlackMessage(String message, SlackChannel channel){ + public void sendSlackMessage(String message, SlackChannel channel) { String channelAddress = channel.getKrName(); - - try{ + try { MethodsClient methods = Slack.getInstance().methods(slackToken); ChatPostMessageRequest request = ChatPostMessageRequest.builder() - .channel(channelAddress) - .text(message) - .build(); + .channel(channelAddress) + .text(message) + .build(); methods.chatPostMessage(request); diff --git a/src/main/java/ssu/eatssu/web/SliceDto.java b/src/main/java/ssu/eatssu/domain/slice/dto/SliceDto.java similarity index 94% rename from src/main/java/ssu/eatssu/web/SliceDto.java rename to src/main/java/ssu/eatssu/domain/slice/dto/SliceDto.java index 9e4ce9a6..8a9d58c5 100644 --- a/src/main/java/ssu/eatssu/web/SliceDto.java +++ b/src/main/java/ssu/eatssu/domain/slice/dto/SliceDto.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web; +package ssu.eatssu.domain.slice.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; diff --git a/src/main/java/ssu/eatssu/web/user/dto/Join.java b/src/main/java/ssu/eatssu/domain/user/dto/Join.java similarity index 95% rename from src/main/java/ssu/eatssu/web/user/dto/Join.java rename to src/main/java/ssu/eatssu/domain/user/dto/Join.java index 97e0dae8..361d9aad 100644 --- a/src/main/java/ssu/eatssu/web/user/dto/Join.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/Join.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.user.dto; +package ssu.eatssu.domain.user.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Email; diff --git a/src/main/java/ssu/eatssu/web/user/dto/Login.java b/src/main/java/ssu/eatssu/domain/user/dto/Login.java similarity index 95% rename from src/main/java/ssu/eatssu/web/user/dto/Login.java rename to src/main/java/ssu/eatssu/domain/user/dto/Login.java index 65c81bc7..5c2b3671 100644 --- a/src/main/java/ssu/eatssu/web/user/dto/Login.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/Login.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.user.dto; +package ssu.eatssu.domain.user.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Email; diff --git a/src/main/java/ssu/eatssu/web/user/dto/NicknameEdit.java b/src/main/java/ssu/eatssu/domain/user/dto/NicknameEdit.java similarity index 91% rename from src/main/java/ssu/eatssu/web/user/dto/NicknameEdit.java rename to src/main/java/ssu/eatssu/domain/user/dto/NicknameEdit.java index 63925e75..a5a00ecc 100644 --- a/src/main/java/ssu/eatssu/web/user/dto/NicknameEdit.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/NicknameEdit.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.user.dto; +package ssu.eatssu.domain.user.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/src/main/java/ssu/eatssu/web/user/dto/PasswordChange.java b/src/main/java/ssu/eatssu/domain/user/dto/PasswordChange.java similarity index 92% rename from src/main/java/ssu/eatssu/web/user/dto/PasswordChange.java rename to src/main/java/ssu/eatssu/domain/user/dto/PasswordChange.java index 554a0a8a..500d8d74 100644 --- a/src/main/java/ssu/eatssu/web/user/dto/PasswordChange.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/PasswordChange.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.user.dto; +package ssu.eatssu.domain.user.dto; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; diff --git a/src/main/java/ssu/eatssu/web/user/dto/Tokens.java b/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java similarity index 96% rename from src/main/java/ssu/eatssu/web/user/dto/Tokens.java rename to src/main/java/ssu/eatssu/domain/user/dto/Tokens.java index 40b092bf..b848f223 100644 --- a/src/main/java/ssu/eatssu/web/user/dto/Tokens.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java @@ -1,4 +1,4 @@ -package ssu.eatssu.web.user.dto; +package ssu.eatssu.domain.user.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; diff --git a/src/main/java/ssu/eatssu/domain/user/BaseTimeEntity.java b/src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java similarity index 94% rename from src/main/java/ssu/eatssu/domain/user/BaseTimeEntity.java rename to src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java index a82f86f6..c975acf3 100644 --- a/src/main/java/ssu/eatssu/domain/user/BaseTimeEntity.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.user; +package ssu.eatssu.domain.user.entity; import jakarta.persistence.Column; import jakarta.persistence.EntityListeners; diff --git a/src/main/java/ssu/eatssu/domain/user/OauthProvider.java b/src/main/java/ssu/eatssu/domain/user/entity/OauthProvider.java similarity index 59% rename from src/main/java/ssu/eatssu/domain/user/OauthProvider.java rename to src/main/java/ssu/eatssu/domain/user/entity/OauthProvider.java index eac15f3e..9e44cb6d 100644 --- a/src/main/java/ssu/eatssu/domain/user/OauthProvider.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/OauthProvider.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.user; +package ssu.eatssu.domain.user.entity; public enum OauthProvider { EATSSU, KAKAO, APPLE; diff --git a/src/main/java/ssu/eatssu/domain/user/Role.java b/src/main/java/ssu/eatssu/domain/user/entity/Role.java similarity index 92% rename from src/main/java/ssu/eatssu/domain/user/Role.java rename to src/main/java/ssu/eatssu/domain/user/entity/Role.java index bf6580f9..19780594 100644 --- a/src/main/java/ssu/eatssu/domain/user/Role.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/Role.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.user; +package ssu.eatssu.domain.user.entity; import lombok.Getter; import org.springframework.security.core.GrantedAuthority; diff --git a/src/main/java/ssu/eatssu/domain/user/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java similarity index 93% rename from src/main/java/ssu/eatssu/domain/user/User.java rename to src/main/java/ssu/eatssu/domain/user/entity/User.java index 364c0f06..02a872fa 100644 --- a/src/main/java/ssu/eatssu/domain/user/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.user; +package ssu.eatssu.domain.user.entity; import jakarta.persistence.*; @@ -6,8 +6,8 @@ import lombok.Getter; import lombok.NoArgsConstructor; import org.jetbrains.annotations.NotNull; -import ssu.eatssu.domain.review.Review; -import ssu.eatssu.domain.review.ReviewReport; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.entity.ReviewReport; import java.util.List; diff --git a/src/main/java/ssu/eatssu/domain/user/UserInquiry.java b/src/main/java/ssu/eatssu/domain/user/entity/UserInquiry.java similarity index 92% rename from src/main/java/ssu/eatssu/domain/user/UserInquiry.java rename to src/main/java/ssu/eatssu/domain/user/entity/UserInquiry.java index 6e01a9d9..c9ca68c6 100644 --- a/src/main/java/ssu/eatssu/domain/user/UserInquiry.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/UserInquiry.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.user; +package ssu.eatssu.domain.user.entity; import jakarta.persistence.*; import lombok.*; diff --git a/src/main/java/ssu/eatssu/domain/user/UserStatus.java b/src/main/java/ssu/eatssu/domain/user/entity/UserStatus.java similarity index 67% rename from src/main/java/ssu/eatssu/domain/user/UserStatus.java rename to src/main/java/ssu/eatssu/domain/user/entity/UserStatus.java index fadda7ea..4f374c39 100644 --- a/src/main/java/ssu/eatssu/domain/user/UserStatus.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/UserStatus.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.user; +package ssu.eatssu.domain.user.entity; import lombok.Getter; diff --git a/src/main/java/ssu/eatssu/web/user/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java similarity index 96% rename from src/main/java/ssu/eatssu/web/user/UserController.java rename to src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 589a4630..f21e0f0c 100644 --- a/src/main/java/ssu/eatssu/web/user/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -1,6 +1,5 @@ -package ssu.eatssu.web.user; +package ssu.eatssu.domain.user.presentation; -import com.fasterxml.jackson.core.JsonProcessingException; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; @@ -13,11 +12,12 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.repository.UserRepository; +import ssu.eatssu.domain.user.dto.NicknameEdit; +import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.handler.response.BaseException; import ssu.eatssu.handler.response.BaseResponse; -import ssu.eatssu.service.UserService; +import ssu.eatssu.domain.user.service.UserService; import ssu.eatssu.utils.SecurityUtil; -import ssu.eatssu.web.user.dto.*; import static ssu.eatssu.utils.SecurityUtil.getLoginUser; import static ssu.eatssu.utils.SecurityUtil.getLoginUserId; diff --git a/src/main/java/ssu/eatssu/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java similarity index 82% rename from src/main/java/ssu/eatssu/service/UserService.java rename to src/main/java/ssu/eatssu/domain/user/service/UserService.java index cdd2c984..50e86bf9 100644 --- a/src/main/java/ssu/eatssu/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -1,4 +1,6 @@ -package ssu.eatssu.service; +package ssu.eatssu.domain.user.service; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; @@ -8,18 +10,16 @@ import org.springframework.security.core.Authentication; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; -import ssu.eatssu.domain.repository.ReviewReportRepository; +import ssu.eatssu.domain.review.repository.ReviewReportRepository; import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.domain.review.Review; -import ssu.eatssu.domain.review.ReviewReport; -import ssu.eatssu.domain.user.OauthProvider; -import ssu.eatssu.domain.user.User; -import ssu.eatssu.handler.response.BaseException; -import ssu.eatssu.handler.response.BaseResponseStatus; -import ssu.eatssu.jwt.JwtTokenProvider; -import ssu.eatssu.web.user.dto.Tokens; - -import static ssu.eatssu.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.entity.ReviewReport; +import ssu.eatssu.domain.user.entity.OauthProvider; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.auth.entity.JwtTokenProvider; +import ssu.eatssu.domain.user.dto.Tokens; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponseStatus; @Slf4j @Service @@ -38,7 +38,7 @@ public class UserService { public void updateNickname(Long userId, String nickname) { User user = userRepository.findById(userId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_USER)); + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); user.updateNickname(nickname); userRepository.save(user); diff --git a/src/main/java/ssu/eatssu/config/OpenApiConfig.java b/src/main/java/ssu/eatssu/global/config/OpenApiConfig.java similarity index 100% rename from src/main/java/ssu/eatssu/config/OpenApiConfig.java rename to src/main/java/ssu/eatssu/global/config/OpenApiConfig.java diff --git a/src/main/java/ssu/eatssu/config/QueryDslConfig.java b/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java similarity index 100% rename from src/main/java/ssu/eatssu/config/QueryDslConfig.java rename to src/main/java/ssu/eatssu/global/config/QueryDslConfig.java diff --git a/src/main/java/ssu/eatssu/config/S3Config.java b/src/main/java/ssu/eatssu/global/config/S3Config.java similarity index 100% rename from src/main/java/ssu/eatssu/config/S3Config.java rename to src/main/java/ssu/eatssu/global/config/S3Config.java diff --git a/src/main/java/ssu/eatssu/handler/GlobalExceptionHandler.java b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java similarity index 95% rename from src/main/java/ssu/eatssu/handler/GlobalExceptionHandler.java rename to src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java index a025879a..08f28d78 100644 --- a/src/main/java/ssu/eatssu/handler/GlobalExceptionHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java @@ -1,12 +1,10 @@ -package ssu.eatssu.handler; +package ssu.eatssu.global.handler; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.TypeMismatchException; import org.springframework.http.*; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.http.converter.HttpMessageNotWritableException; -import org.springframework.lang.Nullable; import org.springframework.web.HttpMediaTypeNotAcceptableException; import org.springframework.web.HttpMediaTypeNotSupportedException; import org.springframework.web.HttpRequestMethodNotSupportedException; @@ -21,9 +19,9 @@ import org.springframework.web.multipart.support.MissingServletRequestPartException; import org.springframework.web.servlet.NoHandlerFoundException; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; -import ssu.eatssu.handler.response.BaseException; -import ssu.eatssu.handler.response.BaseResponse; -import ssu.eatssu.handler.response.BaseResponseStatus; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponse; +import ssu.eatssu.global.handler.response.BaseResponseStatus; /** * 전역 Controller 예외처리 @@ -47,7 +45,8 @@ public ResponseEntity handleBaseException(BaseException e) { @Override protected ResponseEntity handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { - return ResponseEntity.status(HttpStatus.METHOD_NOT_ALLOWED).body(BaseResponse.fail(BaseResponseStatus.METHOD_NOT_ALLOWED)); + return ResponseEntity.status(HttpStatus.METHOD_NOT_ALLOWED).body(BaseResponse.fail( + BaseResponseStatus.METHOD_NOT_ALLOWED)); } /** diff --git a/src/main/java/ssu/eatssu/handler/JwtAccessDeniedHandler.java b/src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java similarity index 89% rename from src/main/java/ssu/eatssu/handler/JwtAccessDeniedHandler.java rename to src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java index d3acf661..1b390b61 100644 --- a/src/main/java/ssu/eatssu/handler/JwtAccessDeniedHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java @@ -1,4 +1,4 @@ -package ssu.eatssu.handler; +package ssu.eatssu.global.handler; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.ServletException; @@ -9,8 +9,8 @@ import org.springframework.security.access.AccessDeniedException; import org.springframework.security.web.access.AccessDeniedHandler; import org.springframework.stereotype.Component; -import ssu.eatssu.handler.response.BaseResponse; -import ssu.eatssu.handler.response.BaseResponseStatus; +import ssu.eatssu.global.handler.response.BaseResponse; +import ssu.eatssu.global.handler.response.BaseResponseStatus; import java.io.IOException; diff --git a/src/main/java/ssu/eatssu/handler/JwtAuthenticationEntryPoint.java b/src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java similarity index 90% rename from src/main/java/ssu/eatssu/handler/JwtAuthenticationEntryPoint.java rename to src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java index 4ccfc258..f8032dc3 100644 --- a/src/main/java/ssu/eatssu/handler/JwtAuthenticationEntryPoint.java +++ b/src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java @@ -1,4 +1,4 @@ -package ssu.eatssu.handler; +package ssu.eatssu.global.handler; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.ServletException; @@ -9,8 +9,8 @@ import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.stereotype.Component; -import ssu.eatssu.handler.response.BaseResponse; -import ssu.eatssu.handler.response.BaseResponseStatus; +import ssu.eatssu.global.handler.response.BaseResponse; +import ssu.eatssu.global.handler.response.BaseResponseStatus; import java.io.IOException; diff --git a/src/main/java/ssu/eatssu/handler/response/BaseException.java b/src/main/java/ssu/eatssu/global/handler/response/BaseException.java similarity index 83% rename from src/main/java/ssu/eatssu/handler/response/BaseException.java rename to src/main/java/ssu/eatssu/global/handler/response/BaseException.java index 8ada61b8..6ab7f076 100644 --- a/src/main/java/ssu/eatssu/handler/response/BaseException.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseException.java @@ -1,4 +1,4 @@ -package ssu.eatssu.handler.response; +package ssu.eatssu.global.handler.response; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/ssu/eatssu/handler/response/BaseResponse.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java similarity index 97% rename from src/main/java/ssu/eatssu/handler/response/BaseResponse.java rename to src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java index 836a778d..46ba76b4 100644 --- a/src/main/java/ssu/eatssu/handler/response/BaseResponse.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java @@ -1,4 +1,4 @@ -package ssu.eatssu.handler.response; +package ssu.eatssu.global.handler.response; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonPropertyOrder; diff --git a/src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java similarity index 97% rename from src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java rename to src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index 23527e86..25becb87 100644 --- a/src/main/java/ssu/eatssu/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -1,4 +1,4 @@ -package ssu.eatssu.handler.response; +package ssu.eatssu.global.handler.response; import lombok.Getter; import org.springframework.http.HttpStatus; @@ -28,6 +28,8 @@ public enum BaseResponseStatus { INVALID_DATE(false, HttpStatus.BAD_REQUEST, 40008, "잘못된 날짜형식입니다."), NOT_SUPPORT_RESTAURANT(false, HttpStatus.BAD_REQUEST, 40009, "해당 식당은 지원하지 않습니다."), INVALID_IDENTITY_TOKEN(false, HttpStatus.BAD_REQUEST, 40010, "잘못된 identityToken 입니다."), + EXISTED_MEAL(false, HttpStatus.BAD_REQUEST, 40011, "이미 존재하는 식단입니다."), + /** * 401 UNAUTHORIZED 권한없음(인증 실패) diff --git a/src/main/java/ssu/eatssu/utils/S3Uploader.java b/src/main/java/ssu/eatssu/global/util/S3Uploader.java similarity index 100% rename from src/main/java/ssu/eatssu/utils/S3Uploader.java rename to src/main/java/ssu/eatssu/global/util/S3Uploader.java diff --git a/src/main/java/ssu/eatssu/slack/SlackChannel.java b/src/main/java/ssu/eatssu/slack/SlackChannel.java deleted file mode 100644 index aec8edf5..00000000 --- a/src/main/java/ssu/eatssu/slack/SlackChannel.java +++ /dev/null @@ -1,15 +0,0 @@ -package ssu.eatssu.slack; - -import lombok.Getter; - -public enum SlackChannel { - - REPORT_CHANNEL("#신고"), ADDMENU_CHANNEL("#메뉴_추가"), ERROR_CHANNEL("#장애"), USER_INQUIRY_CHANNEL("#유저-문의"); - - @Getter - private String krName; - - SlackChannel(String krName){ - this.krName = krName; - } -} diff --git a/src/main/java/ssu/eatssu/utils/DateUtils.java b/src/main/java/ssu/eatssu/utils/DateUtils.java deleted file mode 100644 index 23af8379..00000000 --- a/src/main/java/ssu/eatssu/utils/DateUtils.java +++ /dev/null @@ -1,25 +0,0 @@ -package ssu.eatssu.utils; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import ssu.eatssu.handler.response.BaseException; -import ssu.eatssu.handler.response.BaseResponseStatus; - -public class DateUtils { - - private DateUtils() { } - - public static Date toDate(String date) throws BaseException { - try { - return DateUtils.toDate("yyyyMMdd", date); - } catch (ParseException e) { - throw new BaseException(BaseResponseStatus.INVALID_DATE); - } - } - - public static Date toDate(String dateFormat, String dateString) throws ParseException { - SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat); - return simpleDateFormat.parse(dateString); - } -} diff --git a/src/main/java/ssu/eatssu/vo/AverageRate.java b/src/main/java/ssu/eatssu/vo/AverageRate.java deleted file mode 100644 index 7d24f5d8..00000000 --- a/src/main/java/ssu/eatssu/vo/AverageRate.java +++ /dev/null @@ -1,9 +0,0 @@ -package ssu.eatssu.vo; - -import lombok.Builder; - -public record AverageRate(Double mainRate, Double amountRate, Double tasteRate) { - @Builder - public AverageRate { - } -} diff --git a/src/main/java/ssu/eatssu/vo/RateCountMap.java b/src/main/java/ssu/eatssu/vo/RateCountMap.java deleted file mode 100644 index ebf036fa..00000000 --- a/src/main/java/ssu/eatssu/vo/RateCountMap.java +++ /dev/null @@ -1,30 +0,0 @@ -package ssu.eatssu.vo; - -import java.util.HashMap; -import java.util.Map; - -public class RateCountMap { - private Map rateCountMap; - - public RateCountMap(Map map) { - this(); - map.forEach((key, value) -> rateCountMap.merge(key, value, Integer::sum)); - } - - public RateCountMap() { - this.rateCountMap = new HashMap<>(Map.of(1, 0, 2, 0, 3, 0, 4, 0, 5, 0)); - } - - private Map getMap() { - return this.rateCountMap; - } - - public void append(RateCountMap map) { - map.getMap().forEach((key, value) -> rateCountMap.merge(key, value, Integer::sum)); - } - - public int get(int rate) { - return rateCountMap.get(rate); - } - -} \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/service/UserServiceTest.java b/src/test/java/ssu/eatssu/service/UserServiceTest.java index a3bd6e27..e6fb9946 100644 --- a/src/test/java/ssu/eatssu/service/UserServiceTest.java +++ b/src/test/java/ssu/eatssu/service/UserServiceTest.java @@ -9,6 +9,7 @@ import ssu.eatssu.domain.repository.UserRepository; import java.util.Optional; +import ssu.eatssu.domain.user.service.UserService; import static org.assertj.core.api.Assertions.assertThat; From c6515b16e7253fd1aecb518508bf1da296c15217 Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Tue, 16 Jan 2024 16:05:50 +0900 Subject: [PATCH 038/399] =?UTF-8?q?[#83]=20Refactor=20:=20Report=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=ED=81=B4=EB=9E=98=EC=8A=A4=EB=93=A4?= =?UTF-8?q?=EC=9D=84=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/report/dto/ReportTypeResponse.java | 31 ++++++++++++ .../report/dto/ReviewReportTypeInfo.java | 15 ------ ...{ReviewReportType.java => ReportType.java} | 16 +++---- .../report/presentation/ReportController.java | 48 +++++++------------ .../domain/report/service/ReportService.java | 30 ++++++------ .../entity/{ReviewReport.java => Report.java} | 18 +++++-- 6 files changed, 87 insertions(+), 71 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/report/dto/ReportTypeResponse.java delete mode 100644 src/main/java/ssu/eatssu/domain/report/dto/ReviewReportTypeInfo.java rename src/main/java/ssu/eatssu/domain/report/entity/{ReviewReportType.java => ReportType.java} (56%) rename src/main/java/ssu/eatssu/domain/review/entity/{ReviewReport.java => Report.java} (59%) diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeResponse.java b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeResponse.java new file mode 100644 index 00000000..807944d6 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeResponse.java @@ -0,0 +1,31 @@ +package ssu.eatssu.domain.report.dto; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import lombok.Getter; +import ssu.eatssu.domain.report.entity.ReportType; + +@Getter +public class ReportTypeResponse { + + private final List response = new ArrayList<>(); + + public static ReportTypeResponse get() { + Arrays.stream(ReportType.values()) + .forEach(reportType -> get().response.add( + new Information(reportType.name(), reportType.getDescription()))); + return new ReportTypeResponse(); + } + + static class Information { + + private String type; + private String description; + + public Information(String type, String description) { + this.type = type; + this.description = description; + } + } +} diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReviewReportTypeInfo.java b/src/main/java/ssu/eatssu/domain/report/dto/ReviewReportTypeInfo.java deleted file mode 100644 index dda5725d..00000000 --- a/src/main/java/ssu/eatssu/domain/report/dto/ReviewReportTypeInfo.java +++ /dev/null @@ -1,15 +0,0 @@ -package ssu.eatssu.domain.report.dto; - -import lombok.Getter; -import ssu.eatssu.domain.report.entity.ReviewReportType; - -@Getter -public class ReviewReportTypeInfo { - private ReviewReportType reportType; - private String typeDescription; - - public ReviewReportTypeInfo(ReviewReportType reportType) { - this.reportType = reportType; - this.typeDescription = reportType.getDescription(); - } -} diff --git a/src/main/java/ssu/eatssu/domain/report/entity/ReviewReportType.java b/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java similarity index 56% rename from src/main/java/ssu/eatssu/domain/report/entity/ReviewReportType.java rename to src/main/java/ssu/eatssu/domain/report/entity/ReportType.java index fffab989..beb521c7 100644 --- a/src/main/java/ssu/eatssu/domain/report/entity/ReviewReportType.java +++ b/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java @@ -5,23 +5,23 @@ import lombok.Getter; @Getter -public enum ReviewReportType { - CONTENT("메뉴와 관련없는 내용"), - BAD_WORD("음란성, 욕설 등 부적절한 내용"), - AD("부적절한 홍보 및 광고"), +public enum ReportType { + NO_ASSOCIATE_CONTENT("메뉴와 관련 없는 내용"), + IMPROPER_CONTENT("음란성, 욕설 등 부적절한 내용"), + IMPROPER_ADVERTISEMENT("부적절한 홍보 및 광고"), COPY("리뷰 취지에 맞지 않는 행동(복사글 등)"), COPYRIGHT("저작권 도용 의심(사진 등)"), - ETC("기타 (하단 내용 작성)"); + EXTRA("기타 (하단 내용 작성)"); private final String description; - ReviewReportType(String description) { + ReportType(String description) { this.description = description; } @JsonCreator - public static ReviewReportType from(final String description) { - return Arrays.stream(ReviewReportType.values()) + public static ReportType from(final String description) { + return Arrays.stream(ReportType.values()) .filter(v -> v.getDescription().equals(description)) .findAny() .orElseThrow(IllegalArgumentException::new); diff --git a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java index e8cb1d91..a6ca467f 100644 --- a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java +++ b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java @@ -7,46 +7,31 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.review.entity.ReviewReport; -import ssu.eatssu.domain.report.entity.ReviewReportType; -import ssu.eatssu.domain.review.repository.ReviewRepository; -import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.handler.response.BaseResponse; +import ssu.eatssu.domain.auth.infrastructure.SecurityUtil; +import ssu.eatssu.domain.review.entity.Report; import ssu.eatssu.domain.report.service.ReportService; -import ssu.eatssu.slack.SlackChannel; +import ssu.eatssu.domain.slack.entity.SlackChannel; import ssu.eatssu.domain.slack.entity.SlackMessageFormat; -import ssu.eatssu.slack.SlackService; -import ssu.eatssu.utils.SecurityUtil; -import ssu.eatssu.domain.report.dto.ReviewReportCreate; -import ssu.eatssu.domain.report.dto.ReviewReportTypeInfo; +import ssu.eatssu.domain.report.dto.CreateReportRequest; +import ssu.eatssu.domain.report.dto.ReportTypeResponse; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import ssu.eatssu.domain.slack.entity.SlackService; +import ssu.eatssu.global.handler.response.BaseResponse; -@Slf4j @RestController -@RequestMapping("/report") @RequiredArgsConstructor +@RequestMapping("/reports") @Tag(name = "Report", description = "신고 API") public class ReportController { + private final ReportService reportService; private final SlackService slackService; - private final UserRepository userRepository; - private final ReviewRepository reviewRepository; - /** - * 리뷰 신고 사유 종류 조회 - */ @Operation(summary = "리뷰 신고 사유 종류 조회", description = "리뷰 신고 사유 종류를 조회하는 API 입니다.") @GetMapping("/type") - public BaseResponse> getReportType() { - List reportInfo = new ArrayList<>(); - Arrays.stream(ReviewReportType.values()) - .forEach(reportType -> reportInfo.add(new ReviewReportTypeInfo(reportType))); - return BaseResponse.success(reportInfo); + public BaseResponse getReportType() { + return BaseResponse.success(reportService.getReportType()); } /** @@ -55,13 +40,14 @@ public BaseResponse> getReportType() { @Operation(summary = "리뷰 신고하기", description = "리뷰를 신고하는 API 입니다.") @PostMapping("/") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 신고 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 신고 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) - public BaseResponse reportReview(@RequestBody ReviewReportCreate reviewReportCreate) { + public BaseResponse reportReview(@RequestBody CreateReportRequest reviewReportCreate) { Long userId = SecurityUtil.getLoginUserId(); - ReviewReport report = reportService.reportReview(userId, reviewReportCreate); - slackService.sendSlackMessage(SlackMessageFormat.sendReport(report), SlackChannel.REPORT_CHANNEL); + Report report = reportService.reportReview(userId, reviewReportCreate); + slackService.sendSlackMessage(SlackMessageFormat.sendReport(report), + SlackChannel.REPORT_CHANNEL); return BaseResponse.success(); } diff --git a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java index 5beffa9c..6f79a340 100644 --- a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java +++ b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java @@ -6,14 +6,15 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import ssu.eatssu.domain.report.dto.ReportTypeResponse; import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.review.entity.ReviewReport; +import ssu.eatssu.domain.review.entity.Report; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.report.entity.ReportStatus; import ssu.eatssu.domain.review.repository.ReviewReportRepository; import ssu.eatssu.domain.review.repository.ReviewRepository; -import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.domain.report.dto.ReviewReportCreate; +import ssu.eatssu.domain.user.repository.UserRepository; +import ssu.eatssu.domain.report.dto.CreateReportRequest; import ssu.eatssu.global.handler.response.BaseException; @@ -26,17 +27,18 @@ public class ReportService { private final UserRepository userRepository; private final ReviewReportRepository reviewReportRepository; - /** - * 리뷰 신고 - */ - public ReviewReport reportReview(Long userId, ReviewReportCreate reviewReportCreate) { - User user = userRepository.findById(userId).orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + public Report reportReview(Long userId, CreateReportRequest reviewReportCreate) { + User user = userRepository.findById(userId) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + Review review = reviewRepository.findById(reviewReportCreate.getReviewId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - ReviewReport reviewReport = ReviewReport.builder() - .review(review).user(user).reportType(reviewReportCreate.getReportType()) - .content(reviewReportCreate.getContent()).status(ReportStatus.PENDING) - .build(); - return reviewReportRepository.save(reviewReport); + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + Report report = Report.create(user, review, reviewReportCreate, ReportStatus.PENDING); + return reviewReportRepository.save(report); + } + + public ReportTypeResponse getReportType() { + return ReportTypeResponse.get(); } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewReport.java b/src/main/java/ssu/eatssu/domain/review/entity/Report.java similarity index 59% rename from src/main/java/ssu/eatssu/domain/review/entity/ReviewReport.java rename to src/main/java/ssu/eatssu/domain/review/entity/Report.java index 1630bd91..8d9deedd 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewReport.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Report.java @@ -2,17 +2,18 @@ import jakarta.persistence.*; import lombok.*; +import ssu.eatssu.domain.report.dto.CreateReportRequest; +import ssu.eatssu.domain.report.entity.ReportType; import ssu.eatssu.domain.user.entity.BaseTimeEntity; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.report.entity.ReportStatus; -import ssu.eatssu.domain.report.entity.ReviewReportType; @Builder @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor -public class ReviewReport extends BaseTimeEntity { +public class Report extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -28,10 +29,21 @@ public class ReviewReport extends BaseTimeEntity { private Review review; @Enumerated(EnumType.STRING) - private ReviewReportType reportType; + private ReportType reportType; private String content; @Enumerated(EnumType.STRING) private ReportStatus status; + + public static Report create(User user, Review review, CreateReportRequest request, + ReportStatus status) { + return Report.builder() + .user(user) + .review(review) + .reportType(request.getReportType()) + .content(request.getContent()) + .status(status) + .build(); + } } From 2e508b6ef44fa92f95e111ae577ac6c411907c90 Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Tue, 16 Jan 2024 16:10:51 +0900 Subject: [PATCH 039/399] =?UTF-8?q?[#83]=20Refactor=20:=20CustomUserDetail?= =?UTF-8?q?s=EB=A5=BC=20=EB=B0=9B=EC=95=84=EC=84=9C=20=EC=9C=A0=EC=A0=80?= =?UTF-8?q?=EB=A5=BC=20=EC=A1=B0=ED=9A=8C=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/report/presentation/ReportController.java | 9 +++++---- .../ssu/eatssu/domain/report/service/ReportService.java | 5 +++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java index a6ca467f..7c0d2fb8 100644 --- a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java +++ b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java @@ -7,8 +7,9 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.auth.infrastructure.SecurityUtil; +import ssu.eatssu.domain.auth.entity.CustomUserDetails; import ssu.eatssu.domain.review.entity.Report; import ssu.eatssu.domain.report.service.ReportService; import ssu.eatssu.domain.slack.entity.SlackChannel; @@ -43,9 +44,9 @@ public BaseResponse getReportType() { @ApiResponse(responseCode = "200", description = "리뷰 신고 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) - public BaseResponse reportReview(@RequestBody CreateReportRequest reviewReportCreate) { - Long userId = SecurityUtil.getLoginUserId(); - Report report = reportService.reportReview(userId, reviewReportCreate); + public BaseResponse reportReview(@RequestBody CreateReportRequest createReportRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + Report report = reportService.report(customUserDetails, createReportRequest); slackService.sendSlackMessage(SlackMessageFormat.sendReport(report), SlackChannel.REPORT_CHANNEL); return BaseResponse.success(); diff --git a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java index 6f79a340..7fd55ae1 100644 --- a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java +++ b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java @@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import ssu.eatssu.domain.auth.entity.CustomUserDetails; import ssu.eatssu.domain.report.dto.ReportTypeResponse; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.Report; @@ -27,8 +28,8 @@ public class ReportService { private final UserRepository userRepository; private final ReviewReportRepository reviewReportRepository; - public Report reportReview(Long userId, CreateReportRequest reviewReportCreate) { - User user = userRepository.findById(userId) + public Report report(CustomUserDetails userDetails, CreateReportRequest reviewReportCreate) { + User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Review review = reviewRepository.findById(reviewReportCreate.getReviewId()) From 70b8c3165902ffbad46829fb1a8ee2bbc4e10abb Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Tue, 16 Jan 2024 16:31:32 +0900 Subject: [PATCH 040/399] =?UTF-8?q?[#83]=20Refactor=20:=20Inquiry=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A5=BC=20?= =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...yCreate.java => CreateInquiryRequest.java} | 2 +- ...Detail.java => InquiryDetailResponse.java} | 8 +- .../entity/Inquiry.java} | 13 ++-- .../presentation/InquiryController.java | 61 +++++++++++++++ .../presentation/UserInquiryController.java | 74 ------------------- .../inquiry/repository/InquiryRepository.java | 7 ++ .../inquiry/service/InquiryService.java | 42 +++++++++++ .../inquiry/service/UserInquiryService.java | 31 -------- .../repository/UserInquiryRepository.java | 7 -- 9 files changed, 121 insertions(+), 124 deletions(-) rename src/main/java/ssu/eatssu/domain/inquiry/dto/{UserInquiryCreate.java => CreateInquiryRequest.java} (90%) rename src/main/java/ssu/eatssu/domain/inquiry/dto/{UserInquiryDetail.java => InquiryDetailResponse.java} (78%) rename src/main/java/ssu/eatssu/domain/{user/entity/UserInquiry.java => inquiry/entity/Inquiry.java} (61%) create mode 100644 src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java delete mode 100644 src/main/java/ssu/eatssu/domain/inquiry/presentation/UserInquiryController.java create mode 100644 src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java create mode 100644 src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java delete mode 100644 src/main/java/ssu/eatssu/domain/inquiry/service/UserInquiryService.java delete mode 100644 src/main/java/ssu/eatssu/domain/repository/UserInquiryRepository.java diff --git a/src/main/java/ssu/eatssu/domain/inquiry/dto/UserInquiryCreate.java b/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java similarity index 90% rename from src/main/java/ssu/eatssu/domain/inquiry/dto/UserInquiryCreate.java rename to src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java index 7cfe9c3d..dfdbc053 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/dto/UserInquiryCreate.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java @@ -7,7 +7,7 @@ @Schema(title = "문의 남기기") @NoArgsConstructor @Getter -public class UserInquiryCreate { +public class CreateInquiryRequest { @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의 남깁니다") private String content; } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/dto/UserInquiryDetail.java b/src/main/java/ssu/eatssu/domain/inquiry/dto/InquiryDetailResponse.java similarity index 78% rename from src/main/java/ssu/eatssu/domain/inquiry/dto/UserInquiryDetail.java rename to src/main/java/ssu/eatssu/domain/inquiry/dto/InquiryDetailResponse.java index d57a1cd4..c07337f7 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/dto/UserInquiryDetail.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/dto/InquiryDetailResponse.java @@ -4,13 +4,13 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.user.entity.UserInquiry; +import ssu.eatssu.domain.inquiry.entity.Inquiry; @AllArgsConstructor @Builder @Schema(title = "문의내역 상세") @Getter -public class UserInquiryDetail { +public class InquiryDetailResponse { @Schema(description = "문의 작성자 Id", example = "123") private Long writerId; @@ -24,8 +24,8 @@ public class UserInquiryDetail { @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의드립니다") private String content; - public static UserInquiryDetail fromUserInquiry(UserInquiry userInquiry) { - return UserInquiryDetail.builder().writerId(userInquiry.getUser().getId()) + public static InquiryDetailResponse from(Inquiry userInquiry) { + return InquiryDetailResponse.builder().writerId(userInquiry.getUser().getId()) .writerNickName(userInquiry.getUser().getNickname()) .writerEmail(userInquiry.getUser().getEmail()).content(userInquiry.getContent()).build(); } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/UserInquiry.java b/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java similarity index 61% rename from src/main/java/ssu/eatssu/domain/user/entity/UserInquiry.java rename to src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java index c9ca68c6..31f34978 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/UserInquiry.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java @@ -1,14 +1,17 @@ -package ssu.eatssu.domain.user.entity; +package ssu.eatssu.domain.inquiry.entity; import jakarta.persistence.*; import lombok.*; +import ssu.eatssu.domain.user.entity.BaseTimeEntity; +import ssu.eatssu.domain.user.entity.User; @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Builder @AllArgsConstructor -public class UserInquiry extends BaseTimeEntity { +public class Inquiry extends BaseTimeEntity { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "user_inquiry_id") @@ -16,11 +19,7 @@ public class UserInquiry extends BaseTimeEntity { private String content; - @ManyToOne(fetch=FetchType.LAZY) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private User user; -/* - public void signoutWriter() { - this.user = null; - }*/ } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java b/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java new file mode 100644 index 00000000..ec237328 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java @@ -0,0 +1,61 @@ +package ssu.eatssu.domain.inquiry.presentation; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.*; +import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.inquiry.entity.Inquiry; +import ssu.eatssu.domain.inquiry.service.InquiryService; +import ssu.eatssu.global.handler.response.BaseResponse; +import ssu.eatssu.domain.slack.entity.SlackChannel; +import ssu.eatssu.domain.slack.service.SlackService; +import ssu.eatssu.domain.slack.entity.SlackMessageFormat; +import ssu.eatssu.domain.inquiry.dto.CreateInquiryRequest; +import ssu.eatssu.domain.inquiry.dto.InquiryDetailResponse; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/inquiries") +@Tag(name = "Inquiry", description = "문의 API") +public class InquiryController { + + private final SlackService slackService; + private final InquiryService inquiryService; + + @Operation(summary = "문의 작성", description = "문의를 작성하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "문의 작성 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/") + public BaseResponse writeInquiry(@RequestBody CreateInquiryRequest createInquiryRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + Inquiry inquiry = inquiryService.createUserInquiry(customUserDetails, createInquiryRequest); + slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiry(inquiry) + , SlackChannel.USER_INQUIRY_CHANNEL); + return BaseResponse.success(); + } + + @Operation(summary = "문의 내용 조회", description = "문의 내용을 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "문의 작성 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 문의", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/{inquiryId}") + public BaseResponse getInquiryDetail( + @Parameter(description = "userInquiryId") + @PathVariable("inquiryId") Long inquiryId) { + Inquiry inquiry = inquiryService.getInquiryDetail(inquiryId); + slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiry(inquiry) + , SlackChannel.USER_INQUIRY_CHANNEL); + return BaseResponse.success(InquiryDetailResponse.from(inquiry)); + } + +} diff --git a/src/main/java/ssu/eatssu/domain/inquiry/presentation/UserInquiryController.java b/src/main/java/ssu/eatssu/domain/inquiry/presentation/UserInquiryController.java deleted file mode 100644 index ae23642b..00000000 --- a/src/main/java/ssu/eatssu/domain/inquiry/presentation/UserInquiryController.java +++ /dev/null @@ -1,74 +0,0 @@ -package ssu.eatssu.domain.inquiry.presentation; - -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER_INQUIRY; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.user.entity.UserInquiry; -import ssu.eatssu.domain.repository.UserInquiryRepository; -import ssu.eatssu.domain.inquiry.service.UserInquiryService; -import ssu.eatssu.global.handler.response.BaseException; -import ssu.eatssu.global.handler.response.BaseResponse; -import ssu.eatssu.domain.slack.entity.SlackChannel; -import ssu.eatssu.domain.slack.entity.SlackService; -import ssu.eatssu.domain.slack.entity.SlackMessageFormat; -import ssu.eatssu.utils.SecurityUtil; -import ssu.eatssu.domain.inquiry.dto.UserInquiryCreate; -import ssu.eatssu.domain.inquiry.dto.UserInquiryDetail; - -@Slf4j -@RestController -@RequestMapping("/inquiry") -@RequiredArgsConstructor -@Tag(name = "Inquiry", description = "문의 API") -public class UserInquiryController { - private final SlackService slackService; - private final UserInquiryRepository userInquiryRepository; - private final UserInquiryService userInquiryService; - - /** - * 문의 작성 - *

문의를 작성합니다.

- */ - @Operation(summary = "문의 작성", description = "문의를 작성하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "문의 작성 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/") - public BaseResponse writeInquiry(@RequestBody UserInquiryCreate userInquiryCreate) { - Long userId = SecurityUtil.getLoginUserId(); - UserInquiry inquiry = userInquiryService.createUserInquiry(userId, userInquiryCreate.getContent()); - slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiry(inquiry) - , SlackChannel.USER_INQUIRY_CHANNEL); - return BaseResponse.success(); - } - - /** - * 문의 내용 조회 - *

문의 식별자(userInquiryId)에 해당하는 문의 내용을 조회합니다.

- */ - @Operation(summary = "문의 내용 조회", description = "문의 내용을 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "문의 작성 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 문의", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/{userInquiryId}") - public BaseResponse getInquiryDetail(@Parameter(description = "userInquiryId") - @PathVariable("userInquiryId") Long userInquiryId) { - UserInquiry inquiry = - userInquiryRepository.findById(userInquiryId).orElseThrow(() -> new BaseException(NOT_FOUND_USER_INQUIRY)); - slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiry(inquiry) - , SlackChannel.USER_INQUIRY_CHANNEL); - return BaseResponse.success(UserInquiryDetail.fromUserInquiry(inquiry)); - } - -} diff --git a/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java b/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java new file mode 100644 index 00000000..f8f444ae --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java @@ -0,0 +1,7 @@ +package ssu.eatssu.domain.inquiry.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.inquiry.entity.Inquiry; + +public interface InquiryRepository extends JpaRepository{ +} diff --git a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java new file mode 100644 index 00000000..09b8cae8 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java @@ -0,0 +1,42 @@ +package ssu.eatssu.domain.inquiry.service; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER_INQUIRY; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.inquiry.dto.CreateInquiryRequest; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.inquiry.entity.Inquiry; +import ssu.eatssu.domain.inquiry.repository.InquiryRepository; +import ssu.eatssu.domain.user.repository.UserRepository; +import ssu.eatssu.global.handler.response.BaseException; + + +@RequiredArgsConstructor +@Service +@Transactional +public class InquiryService { + + private final UserRepository userRepository; + private final InquiryRepository inquiryRepository; + + public Inquiry createUserInquiry(CustomUserDetails userDetails, CreateInquiryRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Inquiry inquiry = Inquiry.builder() + .user(user) + .content(request.getContent()) + .build(); + + return inquiryRepository.save(inquiry); + } + + public Inquiry getInquiryDetail(Long inquiryId) { + return inquiryRepository.findById(inquiryId) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER_INQUIRY)); + } +} diff --git a/src/main/java/ssu/eatssu/domain/inquiry/service/UserInquiryService.java b/src/main/java/ssu/eatssu/domain/inquiry/service/UserInquiryService.java deleted file mode 100644 index cfb25c19..00000000 --- a/src/main/java/ssu/eatssu/domain/inquiry/service/UserInquiryService.java +++ /dev/null @@ -1,31 +0,0 @@ -package ssu.eatssu.domain.inquiry.service; - -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; - -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import ssu.eatssu.domain.user.entity.User; -import ssu.eatssu.domain.user.entity.UserInquiry; -import ssu.eatssu.domain.repository.UserInquiryRepository; -import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.global.handler.response.BaseException; - - -@RequiredArgsConstructor -@Service -@Transactional -public class UserInquiryService { - - private final UserRepository userRepository; - private final UserInquiryRepository userInquiryRepository; - - /** - * 문의 작성 - */ - public UserInquiry createUserInquiry(Long userId, String content) { - User user = userRepository.findById(userId).orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - UserInquiry userInquiry = UserInquiry.builder().user(user).content(content).build(); - return userInquiryRepository.save(userInquiry); - } -} diff --git a/src/main/java/ssu/eatssu/domain/repository/UserInquiryRepository.java b/src/main/java/ssu/eatssu/domain/repository/UserInquiryRepository.java deleted file mode 100644 index 573ffe96..00000000 --- a/src/main/java/ssu/eatssu/domain/repository/UserInquiryRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package ssu.eatssu.domain.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.user.entity.UserInquiry; - -public interface UserInquiryRepository extends JpaRepository{ -} From db420ce50313af31d1a4a15b0d9f21f08d1b0900 Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Tue, 16 Jan 2024 18:24:39 +0900 Subject: [PATCH 041/399] =?UTF-8?q?[#83]=20Refactor=20:=20MyPage=EB=A5=BC?= =?UTF-8?q?=20User=EB=A1=9C=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../page/presentation/MyPageController.java | 70 ---------- .../domain/page/service/MyPageService.java | 78 ----------- ...rtCreate.java => CreateReportRequest.java} | 6 +- .../repository/dto/ReviewMainRating.java | 8 -- .../slack/entity/SlackMessageFormat.java | 8 +- .../{entity => service}/SlackService.java | 3 +- .../dto/{SliceDto.java => SliceResponse.java} | 2 +- .../domain/slice/service/SliceService.java | 53 +++++++ .../java/ssu/eatssu/domain/user/dto/Join.java | 25 ---- .../ssu/eatssu/domain/user/dto/Login.java | 22 --- .../dto/MyPageResponse.java} | 8 +- .../{page => user}/dto/MyReviewDetail.java | 2 +- .../eatssu/domain/user/dto/NicknameEdit.java | 16 --- .../domain/user/dto/PasswordChange.java | 16 --- .../user/dto/UpdateNicknameRequest.java | 10 ++ .../ssu/eatssu/domain/user/entity/User.java | 11 +- .../user/presentation/UserController.java | 129 ++++++++++-------- .../{ => user}/repository/UserRepository.java | 2 +- .../domain/user/service/UserService.java | 64 ++++----- src/test/java/ssu/eatssu/domain/MenuTest.java | 19 --- .../ssu/eatssu/service/UserServiceTest.java | 40 ------ 21 files changed, 187 insertions(+), 405 deletions(-) delete mode 100644 src/main/java/ssu/eatssu/domain/page/presentation/MyPageController.java delete mode 100644 src/main/java/ssu/eatssu/domain/page/service/MyPageService.java rename src/main/java/ssu/eatssu/domain/report/dto/{ReviewReportCreate.java => CreateReportRequest.java} (79%) delete mode 100644 src/main/java/ssu/eatssu/domain/repository/dto/ReviewMainRating.java rename src/main/java/ssu/eatssu/domain/slack/{entity => service}/SlackService.java (91%) rename src/main/java/ssu/eatssu/domain/slice/dto/{SliceDto.java => SliceResponse.java} (95%) create mode 100644 src/main/java/ssu/eatssu/domain/slice/service/SliceService.java delete mode 100644 src/main/java/ssu/eatssu/domain/user/dto/Join.java delete mode 100644 src/main/java/ssu/eatssu/domain/user/dto/Login.java rename src/main/java/ssu/eatssu/domain/{page/dto/MypageInfo.java => user/dto/MyPageResponse.java} (71%) rename src/main/java/ssu/eatssu/domain/{page => user}/dto/MyReviewDetail.java (98%) delete mode 100644 src/main/java/ssu/eatssu/domain/user/dto/NicknameEdit.java delete mode 100644 src/main/java/ssu/eatssu/domain/user/dto/PasswordChange.java create mode 100644 src/main/java/ssu/eatssu/domain/user/dto/UpdateNicknameRequest.java rename src/main/java/ssu/eatssu/domain/{ => user}/repository/UserRepository.java (90%) delete mode 100644 src/test/java/ssu/eatssu/domain/MenuTest.java delete mode 100644 src/test/java/ssu/eatssu/service/UserServiceTest.java diff --git a/src/main/java/ssu/eatssu/domain/page/presentation/MyPageController.java b/src/main/java/ssu/eatssu/domain/page/presentation/MyPageController.java deleted file mode 100644 index 6ecf9351..00000000 --- a/src/main/java/ssu/eatssu/domain/page/presentation/MyPageController.java +++ /dev/null @@ -1,70 +0,0 @@ -package ssu.eatssu.domain.page.presentation; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.enums.ParameterIn; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springdoc.core.annotations.ParameterObject; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.web.PageableDefault; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; -import ssu.eatssu.handler.response.BaseException; -import ssu.eatssu.handler.response.BaseResponse; -import ssu.eatssu.domain.page.service.MyPageService; -import ssu.eatssu.utils.SecurityUtil; -import ssu.eatssu.domain.slice.dto.SliceDto; -import ssu.eatssu.domain.page.dto.MyReviewDetail; -import ssu.eatssu.domain.page.dto.MypageInfo; - -@Slf4j -@RestController -@RequestMapping("/mypage") -@RequiredArgsConstructor -@Tag(name = "MyPage", description = "마이페이지 API") -public class MyPageController { - private final MyPageService myPageService; - - /** - * 내가 쓴 리뷰 목록 조회 - */ - @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/myreview") - public BaseResponse> getMyReviewList( - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) - @RequestParam(required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable) { - Long userId = SecurityUtil.getLoginUserId(); - SliceDto myReviewList = myPageService.findMyReviewList(userId, pageable, lastReviewId); - return BaseResponse.success(myReviewList); - } - - /** - * 마이페이지 정보 조회 - */ - @Operation(summary = "마이페이지 정보 조회", description = "마이페이지 정보를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/info") - public BaseResponse getMyPageInfo() { - Long userId = SecurityUtil.getLoginUserId(); - MypageInfo mypageInfo = myPageService.findMyPageInfo(userId); - return BaseResponse.success(mypageInfo); - } - -} diff --git a/src/main/java/ssu/eatssu/domain/page/service/MyPageService.java b/src/main/java/ssu/eatssu/domain/page/service/MyPageService.java deleted file mode 100644 index a2d33801..00000000 --- a/src/main/java/ssu/eatssu/domain/page/service/MyPageService.java +++ /dev/null @@ -1,78 +0,0 @@ -package ssu.eatssu.domain.page.service; - -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; - -import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Slice; -import org.springframework.data.domain.Sort; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.user.entity.User; -import ssu.eatssu.domain.review.repository.ReviewRepository; -import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.global.handler.response.BaseException; -import ssu.eatssu.domain.slice.dto.SliceDto; -import ssu.eatssu.domain.page.dto.MyReviewDetail; -import ssu.eatssu.domain.page.dto.MypageInfo; - -import java.util.ArrayList; -import java.util.List; - - -@RequiredArgsConstructor -@Service -@Transactional -public class MyPageService { - - private final ReviewRepository reviewRepository; - private final UserRepository userRepository; - - /** - * 유저가 작성한 리뷰 목록 조회 - */ - public SliceDto findMyReviewList(Long userId, Pageable pageable, Long lastReviewId) { - User user = userRepository.findById(userId).orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - //pageable에서 sort값 가져옴 - String sortBy = pageable.getSort().get().findFirst().orElseThrow().getProperty(); - - //pageable에서 direction값 가져옴 - Sort.Direction direction = pageable.getSort().get().findFirst().orElseThrow().getDirection(); - - Slice sliceReviewList; - if (sortBy.equals("date")) { //리뷰 날짜가 기준 - if (direction.isDescending()) { //최신순 정렬 - sliceReviewList = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, pageable); - } else { //TODO 오래된 순 정렬 필요할까 ? - sliceReviewList = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, pageable); - } - } else { //TODO 최신 순 외에 정렬 기준 추가 ? - sliceReviewList = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, pageable); - } - return sliceReviewToSliceMyReviewDetail(sliceReviewList); - - } - - /** - * Slice를 Slice로 변환 - */ - private SliceDto sliceReviewToSliceMyReviewDetail(Slice sliceReviewList) { - List myReviewDetailList = new ArrayList<>(); - for (Review review : sliceReviewList) { - MyReviewDetail myReviewDetail = MyReviewDetail.from(review); - myReviewDetailList.add(myReviewDetail); - } - return new SliceDto<>(sliceReviewList.getNumberOfElements(), - sliceReviewList.hasNext(), myReviewDetailList); - } - - /** - * 마이페이지 정보(닉네임, OAuth 제공처) 조회 - */ - public MypageInfo findMyPageInfo(Long userId) { - User user = userRepository.findById(userId).orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - return new MypageInfo(user.getNickname(), user.getProvider()); - } -} diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReviewReportCreate.java b/src/main/java/ssu/eatssu/domain/report/dto/CreateReportRequest.java similarity index 79% rename from src/main/java/ssu/eatssu/domain/report/dto/ReviewReportCreate.java rename to src/main/java/ssu/eatssu/domain/report/dto/CreateReportRequest.java index 641c73cf..0e7c6c7c 100644 --- a/src/main/java/ssu/eatssu/domain/report/dto/ReviewReportCreate.java +++ b/src/main/java/ssu/eatssu/domain/report/dto/CreateReportRequest.java @@ -3,18 +3,18 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import lombok.NoArgsConstructor; -import ssu.eatssu.domain.report.entity.ReviewReportType; +import ssu.eatssu.domain.report.entity.ReportType; @Schema(title = "리뷰 신고하기") @NoArgsConstructor @Getter -public class ReviewReportCreate { +public class CreateReportRequest { @Schema(description = "신고할 리뷰 id", example = "4") private Long reviewId; @Schema(description = "신고 타입", example = "BAD_WORD") - private ReviewReportType reportType; + private ReportType reportType; @Schema(description = "신고 내용", example = "음란성, 욕설 등 부적절한 내용") private String content; diff --git a/src/main/java/ssu/eatssu/domain/repository/dto/ReviewMainRating.java b/src/main/java/ssu/eatssu/domain/repository/dto/ReviewMainRating.java deleted file mode 100644 index f6728f3c..00000000 --- a/src/main/java/ssu/eatssu/domain/repository/dto/ReviewMainRating.java +++ /dev/null @@ -1,8 +0,0 @@ -package ssu.eatssu.domain.repository.dto; - -import lombok.Value; - -@Value -public class ReviewMainRating { - private final Integer mainRating; -} diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java index 6bfbb60c..c06a0e7c 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java @@ -1,10 +1,10 @@ package ssu.eatssu.domain.slack.entity; import org.springframework.stereotype.Component; +import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.review.entity.ReviewReport; +import ssu.eatssu.domain.review.entity.Report; import ssu.eatssu.domain.user.entity.User; -import ssu.eatssu.domain.user.entity.UserInquiry; import java.text.MessageFormat; @@ -13,7 +13,7 @@ public class SlackMessageFormat { private SlackMessageFormat(){} - public static String sendReport(ReviewReport report) { + public static String sendReport(Report report) { User reporter = report.getUser(); Review review = report.getReview(); MessageFormat messageFormat = new MessageFormat( @@ -41,7 +41,7 @@ public static String sendReport(ReviewReport report) { return messageFormat.format(args); } - public static String sendUserInquiry(UserInquiry inquiry) { + public static String sendUserInquiry(Inquiry inquiry) { MessageFormat messageFormat = new MessageFormat( """ =================== diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackService.java b/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java similarity index 91% rename from src/main/java/ssu/eatssu/domain/slack/entity/SlackService.java rename to src/main/java/ssu/eatssu/domain/slack/service/SlackService.java index 2d9dd2b6..fd092498 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackService.java +++ b/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.slack.entity; +package ssu.eatssu.domain.slack.service; import com.slack.api.Slack; import com.slack.api.methods.MethodsClient; @@ -9,6 +9,7 @@ import org.springframework.stereotype.Service; import java.io.IOException; +import ssu.eatssu.domain.slack.entity.SlackChannel; @Slf4j @Service diff --git a/src/main/java/ssu/eatssu/domain/slice/dto/SliceDto.java b/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java similarity index 95% rename from src/main/java/ssu/eatssu/domain/slice/dto/SliceDto.java rename to src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java index 8a9d58c5..93e30eb7 100644 --- a/src/main/java/ssu/eatssu/domain/slice/dto/SliceDto.java +++ b/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java @@ -10,7 +10,7 @@ @AllArgsConstructor @Builder @Getter -public class SliceDto { +public class SliceResponse { @Schema(description = "현재 넘겨준 페이지에 넘어간 개수(마지막 페이지일시, size 보다 작을 수 있음)", example = "20") private int numberOfElements; diff --git a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java new file mode 100644 index 00000000..bdb9e629 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java @@ -0,0 +1,53 @@ +package ssu.eatssu.domain.slice.service; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; + +import java.util.List; +import java.util.stream.Collectors; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; +import org.springframework.stereotype.Service; +import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.user.dto.MyReviewDetail; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.repository.ReviewRepository; +import ssu.eatssu.domain.slice.dto.SliceResponse; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.user.repository.UserRepository; +import ssu.eatssu.global.handler.response.BaseException; + +@Service +@RequiredArgsConstructor +public class SliceService { + + private final UserRepository userRepository; + private final ReviewRepository reviewRepository; + + public SliceResponse findMyReviews( + CustomUserDetails userDetails, + Pageable pageable, + Long lastReviewId) { + + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, + pageable); + + return convertToMyReviewDetail(sliceReviews); + } + + private SliceResponse convertToMyReviewDetail(Slice sliceReviews) { + List myReviewDetails = sliceReviews.getContent().stream() + .map(MyReviewDetail::from) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(myReviewDetails) + .build(); + } +} + diff --git a/src/main/java/ssu/eatssu/domain/user/dto/Join.java b/src/main/java/ssu/eatssu/domain/user/dto/Join.java deleted file mode 100644 index 361d9aad..00000000 --- a/src/main/java/ssu/eatssu/domain/user/dto/Join.java +++ /dev/null @@ -1,25 +0,0 @@ -package ssu.eatssu.domain.user.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.Email; -import jakarta.validation.constraints.NotBlank; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Schema(title = "회원가입") -@Getter -@NoArgsConstructor -@AllArgsConstructor -public class Join { - @NotBlank(message = "이메일을 입력해주세요.") - @Email(message = "올바른 이메일 주소를 입력해주세요.") - @Schema(description = "이메일", example = "test@email.com") - private String email; - - @NotBlank(message = "비밀번호를 입력해주세요.") - @Schema(description = "비밀번호", example = "qlalfqjsgh") - //@Size(min = 8, max = 20, message = "비밀번호는 8자 이상 20자 이하로 입력해주세요.") - private String pwd; - -} diff --git a/src/main/java/ssu/eatssu/domain/user/dto/Login.java b/src/main/java/ssu/eatssu/domain/user/dto/Login.java deleted file mode 100644 index 5c2b3671..00000000 --- a/src/main/java/ssu/eatssu/domain/user/dto/Login.java +++ /dev/null @@ -1,22 +0,0 @@ -package ssu.eatssu.domain.user.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.Email; -import jakarta.validation.constraints.NotBlank; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Schema(title = "로그인") -@NoArgsConstructor -@Getter -public class Login { - - @NotBlank(message = "이메일을 입력해주세요.") - @Email(message = "올바른 이메일 주소를 입력해주세요.") - @Schema(description = "이메일", example = "test@email.com") - private String email; - - @NotBlank(message = "비밀번호를 입력해주세요.") - @Schema(description = "비밀번호", example = "qlalfqjsgh") - private String pwd; //8자 이상 13자 이하(영숫특) -} diff --git a/src/main/java/ssu/eatssu/domain/page/dto/MypageInfo.java b/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java similarity index 71% rename from src/main/java/ssu/eatssu/domain/page/dto/MypageInfo.java rename to src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java index 9238c53c..3af65b58 100644 --- a/src/main/java/ssu/eatssu/domain/page/dto/MypageInfo.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java @@ -1,19 +1,19 @@ -package ssu.eatssu.domain.page.dto; +package ssu.eatssu.domain.user.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.user.entity.OauthProvider; +import ssu.eatssu.domain.auth.entity.OauthProvider; @AllArgsConstructor @Builder @Schema(title = "마이페이지 정보") @Getter -public class MypageInfo { +public class MyPageResponse { @Schema(description = "닉네임", example = "피치푸치") private String nickname; @Schema(description = "연결 계정 정보", example = "피치푸치") - private OauthProvider accountFrom; + private OauthProvider provider; } diff --git a/src/main/java/ssu/eatssu/domain/page/dto/MyReviewDetail.java b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java similarity index 98% rename from src/main/java/ssu/eatssu/domain/page/dto/MyReviewDetail.java rename to src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java index 06f0a050..6db4e328 100644 --- a/src/main/java/ssu/eatssu/domain/page/dto/MyReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.page.dto; +package ssu.eatssu.domain.user.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; diff --git a/src/main/java/ssu/eatssu/domain/user/dto/NicknameEdit.java b/src/main/java/ssu/eatssu/domain/user/dto/NicknameEdit.java deleted file mode 100644 index a5a00ecc..00000000 --- a/src/main/java/ssu/eatssu/domain/user/dto/NicknameEdit.java +++ /dev/null @@ -1,16 +0,0 @@ -package ssu.eatssu.domain.user.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotBlank; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Schema(title = "닉네임 수정") -@NoArgsConstructor -@Getter -public class NicknameEdit { - - @NotBlank(message = "닉네임을 입력해주세요.") - @Schema(description = "닉네임", example = "jumukzzang") - private String nickname; -} diff --git a/src/main/java/ssu/eatssu/domain/user/dto/PasswordChange.java b/src/main/java/ssu/eatssu/domain/user/dto/PasswordChange.java deleted file mode 100644 index 500d8d74..00000000 --- a/src/main/java/ssu/eatssu/domain/user/dto/PasswordChange.java +++ /dev/null @@ -1,16 +0,0 @@ -package ssu.eatssu.domain.user.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotBlank; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Schema(title = "비밀번호 변경") -@NoArgsConstructor -@Getter -public class PasswordChange { - - @NotBlank(message = "변경할 비밀번호를 입력해주세요.") - @Schema(description = "변경할 비밀번호", example = "password1234") - private String pwd; //8자 이상 13자 이하(영숫특) -} diff --git a/src/main/java/ssu/eatssu/domain/user/dto/UpdateNicknameRequest.java b/src/main/java/ssu/eatssu/domain/user/dto/UpdateNicknameRequest.java new file mode 100644 index 00000000..99c4d920 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/user/dto/UpdateNicknameRequest.java @@ -0,0 +1,10 @@ +package ssu.eatssu.domain.user.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; + +@Schema(title = "닉네임 수정") +public record UpdateNicknameRequest( + @NotBlank(message = "닉네임을 입력해주세요.") @Schema(description = "닉네임", example = "jumukzzang") String nickname) { + +} diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index 02a872fa..eb3840e2 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -2,12 +2,15 @@ import jakarta.persistence.*; +import java.util.ArrayList; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import org.jetbrains.annotations.NotNull; +import ssu.eatssu.domain.auth.entity.OauthProvider; +import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.review.entity.ReviewReport; +import ssu.eatssu.domain.review.entity.Report; import java.util.List; @@ -41,13 +44,13 @@ public class User extends BaseTimeEntity { @OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE , CascadeType.REFRESH}) - private List reviews; + private List reviews = new ArrayList<>(); @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) - private List reviewReports; + private List reviewReports = new ArrayList<>(); @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) - private List userInquiry; + private List userInquiries = new ArrayList<>(); /** * Oauth 회원가입 용 생성자 diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index f21e0f0c..d0b3fcce 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -1,7 +1,10 @@ package ssu.eatssu.domain.user.presentation; +import static ssu.eatssu.domain.auth.infrastructure.SecurityUtil.getLoginUser; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; @@ -9,97 +12,98 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.web.PageableDefault; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.repository.UserRepository; -import ssu.eatssu.domain.user.dto.NicknameEdit; +import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.user.dto.MyReviewDetail; +import ssu.eatssu.domain.user.dto.MyPageResponse; +import ssu.eatssu.domain.page.service.MyPageService; +import ssu.eatssu.domain.slice.dto.SliceResponse; +import ssu.eatssu.domain.slice.service.SliceService; +import ssu.eatssu.domain.user.repository.UserRepository; +import ssu.eatssu.domain.user.dto.UpdateNicknameRequest; import ssu.eatssu.domain.user.dto.Tokens; -import ssu.eatssu.handler.response.BaseException; -import ssu.eatssu.handler.response.BaseResponse; import ssu.eatssu.domain.user.service.UserService; -import ssu.eatssu.utils.SecurityUtil; - -import static ssu.eatssu.utils.SecurityUtil.getLoginUser; -import static ssu.eatssu.utils.SecurityUtil.getLoginUserId; +import ssu.eatssu.global.handler.response.BaseResponse; -@Slf4j @RestController -@RequestMapping("/user") @RequiredArgsConstructor +@RequestMapping("/users") @Tag(name = "User", description = "유저 API") public class UserController { private final UserService userService; + private final MyPageService myPageService; private final UserRepository userRepository; - private final SecurityUtil securityUtil; + private final SliceService sliceService; + - /** - * 이메일 중복 검사 - *

중복되지 않은 이메일인 경우 true 를 반환합니다.

- */ @Operation(summary = "이메일 중복 체크", description = """ 이메일 중복 체크 API 입니다.

중복되지 않은 이메일이면 true 를 반환합니다 """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "중복되지 않은 이메일", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "중복되지 않은 이메일", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping("/user-emails/{email}/exist") //todo: 중복인 경우 error throw, 중복 아니면 ApiReposne return - public BaseResponse checkEmailDuplicate(@Parameter(description = "이메일") @PathVariable String email) { + public BaseResponse checkEmailDuplicate( + @Parameter(description = "이메일") @PathVariable String email) { boolean duplicated = userRepository.existsByEmail(email); if (!duplicated) { return BaseResponse.success(true); } else { - //throw new BaseException(EMAIL_DUPLICATE); return BaseResponse.success(false); } } - /** - * 닉네임 수정 - *

닉네임을 수정합니다.

- */ - @Operation(summary = "닉네임 수정", description = "닉네임 수정 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "닉네임 수정 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PatchMapping("/nickname") - public BaseResponse updateNickname(@Valid @RequestBody NicknameEdit nicknameEdit) { - userService.updateNickname(getLoginUserId(), nicknameEdit.getNickname()); - return BaseResponse.success(); - } - - /** - * 닉네임 중복 검사 - *

중복되지 않은 닉네임인 경우 true 를 반환합니다.

- */ @Operation(summary = "닉네임 중복 체크", description = """ 닉네임 중복 체크 API 입니다.

중복되지 않은 닉네임이면 true 를 반환합니다 """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("/check-nickname") public BaseResponse checkNicknameDuplicate(@Parameter(description = "닉네임") - @RequestParam(value = "nickname") String nickname) { + @RequestParam(value = "nickname") String nickname) { boolean duplicated = userRepository.existsByNickname(nickname); if (duplicated) { - //throw new BaseException(NICKNAME_DUPLICATE); return BaseResponse.success(false); } else { return BaseResponse.success(true); } } - /** - * AccessToken, RefreshToken 재발급 - *

유효한 Token을 받으면 AccessToken, RefreshToken을 새로 발급합니다.

- */ + @Operation(summary = "닉네임 수정", description = "닉네임 수정 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "닉네임 수정 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PatchMapping("/nickname") + public BaseResponse updateNickname( + @Valid @RequestBody UpdateNicknameRequest updateNicknameRequest, + @AuthenticationPrincipal CustomUserDetails userDetails) { + userService.updateNickname(userDetails, updateNicknameRequest); + return BaseResponse.success(); + } + + @Operation(summary = "유저 탈퇴", description = "유저 탈퇴 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("/withdraw") + public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(userService.withdraw(userDetails)); + } + @Operation(summary = "토큰 재발급", description = "accessToken, refreshToken 재발급 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "토큰 재발급 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "토큰 재발급 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping("/token/reissue") public BaseResponse refreshToken() { @@ -107,19 +111,30 @@ public BaseResponse refreshToken() { return BaseResponse.success(tokens); } - /** - * 유저 탈퇴 - *

유저를 탈퇴처리합니다.

- */ - @Operation(summary = "유저 탈퇴", description = "유저 탈퇴 API 입니다.") + @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) - @DeleteMapping("/signout") - public BaseResponse signout() { - userService.signout(getLoginUserId()); - return BaseResponse.success(true); + @GetMapping("/my-reviews") + public BaseResponse> getMyReviewList( + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = sliceService.findMyReviews(customUserDetails, + pageable, + lastReviewId); + return BaseResponse.success(myReviews); } + @Operation(summary = "마이페이지 정보 조회", description = "마이페이지 정보를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/my-page") + public BaseResponse getMyPage( + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + return BaseResponse.success(userService.findMyPageInfo(customUserDetails)); + } } diff --git a/src/main/java/ssu/eatssu/domain/repository/UserRepository.java b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java similarity index 90% rename from src/main/java/ssu/eatssu/domain/repository/UserRepository.java rename to src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java index af0dc140..ec57cbf6 100644 --- a/src/main/java/ssu/eatssu/domain/repository/UserRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.repository; +package ssu.eatssu.domain.user.repository; import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.user.entity.User; diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index 50e86bf9..bb59001d 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -10,37 +10,35 @@ import org.springframework.security.core.Authentication; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; -import ssu.eatssu.domain.review.repository.ReviewReportRepository; -import ssu.eatssu.domain.repository.UserRepository; +import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.user.dto.MyPageResponse; +import ssu.eatssu.domain.review.repository.ReviewRepository; +import ssu.eatssu.domain.user.dto.UpdateNicknameRequest; +import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.review.entity.ReviewReport; -import ssu.eatssu.domain.user.entity.OauthProvider; +import ssu.eatssu.domain.auth.entity.OauthProvider; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.auth.entity.JwtTokenProvider; import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.global.handler.response.BaseException; -import ssu.eatssu.global.handler.response.BaseResponseStatus; @Slf4j @Service @RequiredArgsConstructor @Transactional public class UserService { + private final UserRepository userRepository; - private final ReviewReportRepository reviewReportRepository; + private final ReviewRepository reviewRepository; private final PasswordEncoder passwordEncoder; private final AuthenticationManagerBuilder authenticationManagerBuilder; private final JwtTokenProvider jwtTokenProvider; - /** - * 닉네임 변경 - */ - public void updateNickname(Long userId, String nickname) { + public void updateNickname(CustomUserDetails userDetails, UpdateNicknameRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - User user = userRepository.findById(userId) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - user.updateNickname(nickname); + user.updateNickname(request.nickname()); userRepository.save(user); } @@ -53,11 +51,13 @@ public Tokens generateOauthJwtTokens(String email, OauthProvider provider, Strin // email, credentials 를 기반으로 Authentication 객체 생성 // 이때 authentication 은 인증 여부를 확인하는 authenticated 값이 false UsernamePasswordAuthenticationToken authenticationToken = - new UsernamePasswordAuthenticationToken(email, makeOauthCredentials(provider, providerId)); + new UsernamePasswordAuthenticationToken(email, + makeOauthCredentials(provider, providerId)); // 실제 검증 (사용자 비밀번호 체크) // authenticate 메서드 실행 => CustomUserDetailsService 에서 만든 loadUserByUsername 메서드 실행 - Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken); + Authentication authentication = authenticationManagerBuilder.getObject() + .authenticate(authenticationToken); // 인증 정보를 바탕으로 JWT 토큰 생성 return jwtTokenProvider.generateTokens(authentication); @@ -74,25 +74,19 @@ public Tokens refreshTokens(Authentication authentication) { return jwtTokenProvider.generateTokens(authentication); } - /** - * 유저 탈퇴 - */ - public void signout(Long userId) { - User user = userRepository.findById(userId).orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - //작성한 리뷰 삭제 - for (Review review : user.getReviews()) { - review.clearUser(); - } - //작성한 신고 삭제 - for (ReviewReport report : user.getReviewReports()) { - reviewReportRepository.delete(report); - } - /* - todo: 탈퇴한 유저의 문의내역은 어떻게 처리?? - for(UserInquiries inquiries : user.getUserInquiries()){ - inquiries.signoutWriter(); - }*/ + public boolean withdraw(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + user.getReviews().forEach(Review::clearUser); userRepository.delete(user); + + return true; + } + + public MyPageResponse findMyPageInfo(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + return new MyPageResponse(user.getNickname(), user.getProvider()); } } diff --git a/src/test/java/ssu/eatssu/domain/MenuTest.java b/src/test/java/ssu/eatssu/domain/MenuTest.java deleted file mode 100644 index c477f39c..00000000 --- a/src/test/java/ssu/eatssu/domain/MenuTest.java +++ /dev/null @@ -1,19 +0,0 @@ -package ssu.eatssu.domain; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class MenuTest { - - @DisplayName("변동 메뉴 생성 테스트") - @Test - void createChangeMenu() { - - } - - @Test - void createFixedMenu() { - } -} \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/service/UserServiceTest.java b/src/test/java/ssu/eatssu/service/UserServiceTest.java deleted file mode 100644 index e6fb9946..00000000 --- a/src/test/java/ssu/eatssu/service/UserServiceTest.java +++ /dev/null @@ -1,40 +0,0 @@ -package ssu.eatssu.service; - -import jakarta.transaction.Transactional; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import ssu.eatssu.domain.User; -import ssu.eatssu.domain.repository.UserRepository; - -import java.util.Optional; -import ssu.eatssu.domain.user.service.UserService; - -import static org.assertj.core.api.Assertions.assertThat; - -@Transactional -class UserServiceTest { - - @InjectMocks - UserService userService; - - @Mock - UserRepository userRepository; - - @Test - @DisplayName("회원 가입 테스트") - void join() { - //given - User user = User.join("email1", "pwd1"); - - //when - userRepository.save(user); - - //then - Optional findUser = userRepository.findByEmail(user.getEmail()); - assertThat(findUser.isPresent()).isTrue(); - assertThat(findUser.get()).isEqualTo(user); - - } -} \ No newline at end of file From cb5549777e9a359659e8af4b44f35c41f6d4b911 Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Tue, 16 Jan 2024 19:11:16 +0900 Subject: [PATCH 042/399] =?UTF-8?q?[#83]=20Refactor=20:=202=EC=B0=A8=20?= =?UTF-8?q?=EB=8C=80=EA=B7=9C=EB=AA=A8=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81=EC=9D=84=20=EC=A7=84=ED=96=89=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/entity/CustomUserDetailsService.java | 2 +- .../{user => auth}/entity/OauthProvider.java | 2 +- .../auth/infrastructure/OauthConfig.java | 6 - .../auth/presentation/OauthController.java | 29 ++- .../domain/auth/service/OauthService.java | 16 +- .../eatssu/domain/menu/entity/MenuType.java | 4 +- .../JpaLoadCollectionRatingCalculator.java | 2 +- .../JpaProjectionRatingCalculator.java | 4 +- .../rating/{ => entity}/RatingCalculator.java | 2 +- .../domain/rating/{ => entity}/Ratings.java | 2 +- .../rating/{ => entity}/ReviewRating.java | 24 +- .../report/presentation/ReportController.java | 2 +- .../report/repository/ReportRepository.java | 7 + .../domain/report/service/ReportService.java | 4 +- .../review/dto/CreateReviewRequest.java | 2 +- ...Response.java => MainReviewsResponse.java} | 6 +- ...Response.java => MealReviewsResponse.java} | 6 +- .../dto/RatingsDto.java | 4 +- .../domain/review/dto/ReviewDetail.java | 63 +++--- .../eatssu/domain/review/entity/Review.java | 2 +- .../eatssu/domain/review/entity/Reviews.java | 2 +- .../review/presentation/ReviewController.java | 208 ++++++++---------- .../repository/ReviewReportRepository.java | 7 - .../review/repository/ReviewRepository.java | 3 +- .../repository/ReviewRepositoryCustom.java | 10 +- .../domain/review/service/ReviewService.java | 156 +++---------- .../domain/slice/service/SliceService.java | 46 ++++ .../user/presentation/UserController.java | 49 ++--- .../domain/user/service/UserService.java | 44 ++-- ...{OpenApiConfig.java => SwaggerConfig.java} | 22 +- .../ssu/eatssu/global/util/S3Uploader.java | 16 +- src/test/java/ssu/eatssu/passwordEncoder.java | 23 -- 32 files changed, 336 insertions(+), 439 deletions(-) rename src/main/java/ssu/eatssu/domain/{user => auth}/entity/OauthProvider.java (59%) rename src/main/java/ssu/eatssu/domain/rating/{ => entity}/JpaLoadCollectionRatingCalculator.java (99%) rename src/main/java/ssu/eatssu/domain/rating/{ => entity}/JpaProjectionRatingCalculator.java (97%) rename src/main/java/ssu/eatssu/domain/rating/{ => entity}/RatingCalculator.java (97%) rename src/main/java/ssu/eatssu/domain/rating/{ => entity}/Ratings.java (95%) rename src/main/java/ssu/eatssu/domain/rating/{ => entity}/ReviewRating.java (73%) create mode 100644 src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java rename src/main/java/ssu/eatssu/domain/review/dto/{MenuReviewInformationResponse.java => MainReviewsResponse.java} (87%) rename src/main/java/ssu/eatssu/domain/review/dto/{MealReviewInformationResponse.java => MealReviewsResponse.java} (84%) rename src/main/java/ssu/eatssu/domain/{repository => review}/dto/RatingsDto.java (78%) delete mode 100644 src/main/java/ssu/eatssu/domain/review/repository/ReviewReportRepository.java rename src/main/java/ssu/eatssu/global/config/{OpenApiConfig.java => SwaggerConfig.java} (70%) delete mode 100644 src/test/java/ssu/eatssu/passwordEncoder.java diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetailsService.java b/src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetailsService.java index 9a44c3c1..6f929ebf 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetailsService.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetailsService.java @@ -6,7 +6,7 @@ import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.stereotype.Component; import ssu.eatssu.domain.user.entity.User; -import ssu.eatssu.domain.repository.UserRepository; +import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; diff --git a/src/main/java/ssu/eatssu/domain/user/entity/OauthProvider.java b/src/main/java/ssu/eatssu/domain/auth/entity/OauthProvider.java similarity index 59% rename from src/main/java/ssu/eatssu/domain/user/entity/OauthProvider.java rename to src/main/java/ssu/eatssu/domain/auth/entity/OauthProvider.java index 9e44cb6d..e548e97c 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/OauthProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/OauthProvider.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.user.entity; +package ssu.eatssu.domain.auth.entity; public enum OauthProvider { EATSSU, KAKAO, APPLE; diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/OauthConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/OauthConfig.java index 07aa2f9c..8c4d2f7e 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/OauthConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/OauthConfig.java @@ -13,12 +13,6 @@ public class OauthConfig { @Bean public RestTemplate restTemplate() { HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); - //SocketConfig socketConfig = SocketConfig.custom().setSoTimeout(5000).build(); //5s - /*HttpClient client = HttpClientBuilder.create() - .setMaxConnTotal(50) //연결을 유지할 최대 숫자 - .setMaxConnPerRoute(20) // 특정 경로당 최대 숫자 - .setDefaultSocketConfig(socketConfig) - .build();*/ CloseableHttpClient client = HttpClientBuilder.create().build(); factory.setConnectTimeout(3000); //3s factory.setHttpClient(client); diff --git a/src/main/java/ssu/eatssu/domain/auth/presentation/OauthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OauthController.java index 9cb46c3f..2f8fbdba 100644 --- a/src/main/java/ssu/eatssu/domain/auth/presentation/OauthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OauthController.java @@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import ssu.eatssu.domain.repository.UserRepository; +import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.auth.service.OauthService; import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.domain.auth.dto.AppleLogin; @@ -28,22 +28,20 @@ @RestController @RequestMapping("/oauth") @RequiredArgsConstructor -@Tag(name="Oauth",description = "Oauth API") +@Tag(name = "Oauth", description = "Oauth API") public class OauthController { private final OauthService oauthService; - private final UserRepository userRepository; - private final SecurityUtil securityUtil; /** * 카카오 회원가입, 로그인 */ @Operation(summary = "카카오 회원가입, 로그인", description = """ - 카카오 회원가입, 로그인 API 입니다.

- 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. - """) + 카카오 회원가입, 로그인 API 입니다.

+ 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "카카오 회원가입/로그인 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "카카오 회원가입/로그인 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping("/kakao") public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLogin login) { @@ -55,16 +53,17 @@ public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLogin login) { * 애플 회원가입, 로그인 */ @Operation(summary = "애플 회원가입, 로그인", description = """ - 애플 로그인, 회원가입 API 입니다.

- 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. - """) + 애플 로그인, 회원가입 API 입니다.

+ 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "애플 회원가입/로그인 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "애플 회원가입/로그인 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping("/apple") - public BaseResponse appleLogin(@Valid @RequestBody AppleLogin login) throws NoSuchAlgorithmException, - InvalidKeySpecException { + public BaseResponse appleLogin(@Valid @RequestBody AppleLogin login) + throws NoSuchAlgorithmException, + InvalidKeySpecException { Tokens tokens = oauthService.appleLogin(login.getIdentityToken()); return BaseResponse.success(tokens); } diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OauthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OauthService.java index aa474078..315cdefa 100644 --- a/src/main/java/ssu/eatssu/domain/auth/service/OauthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/OauthService.java @@ -1,6 +1,8 @@ package ssu.eatssu.domain.auth.service; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.INVALID_IDENTITY_TOKEN; + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; @@ -16,11 +18,9 @@ import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import ssu.eatssu.domain.user.entity.User; -import ssu.eatssu.domain.user.entity.OauthProvider; -import ssu.eatssu.domain.repository.UserRepository; +import ssu.eatssu.domain.auth.entity.OauthProvider; +import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.user.service.UserService; -import ssu.eatssu.handler.response.BaseException; -import ssu.eatssu.handler.response.BaseResponseStatus; import ssu.eatssu.domain.auth.dto.OauthInfo; import ssu.eatssu.domain.auth.dto.AppleKeys; import ssu.eatssu.domain.user.dto.Tokens; @@ -34,8 +34,8 @@ import java.security.spec.RSAPublicKeySpec; import java.util.Base64; import java.util.Map; +import ssu.eatssu.global.handler.response.BaseException; -import static ssu.eatssu.handler.response.BaseResponseStatus.INVALID_IDENTITY_TOKEN; @Slf4j @RequiredArgsConstructor @@ -182,7 +182,7 @@ private PublicKey generatePublicKeyWithApplePublicKey(AppleKeys.Key matchedKey) KeyFactory keyFactory = KeyFactory.getInstance(matchedKey.getKty()); return keyFactory.generatePublic(publicKeySpec); } catch (NoSuchAlgorithmException | InvalidKeySpecException ex) { - throw new BaseException(BaseResponseStatus.INVALID_IDENTITY_TOKEN); + throw new BaseException(INVALID_IDENTITY_TOKEN); } } @@ -201,12 +201,12 @@ private AppleKeys.Key selectMatchedKey(String identityToken, AppleKeys candidate headerMap = new ObjectMapper().readValue(decodedHeader, new TypeReference>() { }); } catch (JsonProcessingException e) { - throw new BaseException(BaseResponseStatus.INVALID_IDENTITY_TOKEN); + throw new BaseException(INVALID_IDENTITY_TOKEN); } //후보키 중에서 정답키를 찾아서 반환한다. return candidateKeys.findKeyBy(headerMap.get("kid"), headerMap.get("alg")) - .orElseThrow(() -> new BaseException(BaseResponseStatus.INVALID_IDENTITY_TOKEN)); + .orElseThrow(() -> new BaseException(INVALID_IDENTITY_TOKEN)); } /** diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java b/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java index 7fc2d20e..5c1b34ab 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java @@ -13,7 +13,7 @@ @Getter public enum MenuType { FIXED("고정 메뉴", Arrays.asList(FOOD_COURT, SNACK_CORNER)), - CHANGED("변동 메뉴", Arrays.asList(DODAM, DORMITORY, HAKSIK)); + VARIABLE("변동 메뉴", Arrays.asList(DODAM, DORMITORY, HAKSIK)); private final String description; private final List restaurants; @@ -28,7 +28,7 @@ public static boolean isFixed(RestaurantName restaurant) { } public static boolean isChanged(RestaurantName restaurant) { - return CHANGED.getRestaurants().contains(restaurant); + return VARIABLE.getRestaurants().contains(restaurant); } @JsonCreator diff --git a/src/main/java/ssu/eatssu/domain/rating/JpaLoadCollectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java similarity index 99% rename from src/main/java/ssu/eatssu/domain/rating/JpaLoadCollectionRatingCalculator.java rename to src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java index 521e99fa..4c035203 100644 --- a/src/main/java/ssu/eatssu/domain/rating/JpaLoadCollectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.rating; +package ssu.eatssu.domain.rating.entity; import org.springframework.stereotype.Component; import ssu.eatssu.domain.menu.entity.Meal; diff --git a/src/main/java/ssu/eatssu/domain/rating/JpaProjectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java similarity index 97% rename from src/main/java/ssu/eatssu/domain/rating/JpaProjectionRatingCalculator.java rename to src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java index bda21d93..fc04c4d8 100644 --- a/src/main/java/ssu/eatssu/domain/rating/JpaProjectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java @@ -1,11 +1,11 @@ -package ssu.eatssu.domain.rating; +package ssu.eatssu.domain.rating.entity; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.review.repository.ReviewRepository; -import ssu.eatssu.domain.repository.dto.RatingsDto; +import ssu.eatssu.domain.review.dto.RatingsDto; import ssu.eatssu.domain.review.dto.RatingAverages; import ssu.eatssu.domain.review.dto.ReviewRatingCount; diff --git a/src/main/java/ssu/eatssu/domain/rating/RatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java similarity index 97% rename from src/main/java/ssu/eatssu/domain/rating/RatingCalculator.java rename to src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java index 73a3484c..557258e3 100644 --- a/src/main/java/ssu/eatssu/domain/rating/RatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.rating; +package ssu.eatssu.domain.rating.entity; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; diff --git a/src/main/java/ssu/eatssu/domain/rating/Ratings.java b/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java similarity index 95% rename from src/main/java/ssu/eatssu/domain/rating/Ratings.java rename to src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java index 8cd3ffaf..99bd8253 100644 --- a/src/main/java/ssu/eatssu/domain/rating/Ratings.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.rating; +package ssu.eatssu.domain.rating.entity; import io.jsonwebtoken.lang.Assert; import jakarta.persistence.Embeddable; diff --git a/src/main/java/ssu/eatssu/domain/rating/ReviewRating.java b/src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java similarity index 73% rename from src/main/java/ssu/eatssu/domain/rating/ReviewRating.java rename to src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java index d458541a..ac33b9eb 100644 --- a/src/main/java/ssu/eatssu/domain/rating/ReviewRating.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java @@ -1,13 +1,13 @@ -package ssu.eatssu.domain.rating; +package ssu.eatssu.domain.rating.entity; import ssu.eatssu.domain.review.dto.ReviewRatingCount; public enum ReviewRating { - RATING_1(1), - RATING_2(2), - RATING_3(3), - RATING_4(4), - RATING_5(5); + RATING_ONE(1), + RATING_TWO(2), + RATING_THREE(3), + RATING_FOUR(4), + RATING_FIVE(5); private final int value; private int count; @@ -26,7 +26,7 @@ public static void resetAll() { public static ReviewRating fromValue(int value) { for (ReviewRating RATING : ReviewRating.values()) { if (RATING.value == value) { - return RATING; + return RATING; } } throw new IllegalArgumentException("Invalid ratings value: " + value); @@ -34,11 +34,11 @@ public static ReviewRating fromValue(int value) { public static ReviewRatingCount toResponse() { return new ReviewRatingCount( - RATING_1.getCount(), - RATING_2.getCount(), - RATING_3.getCount(), - RATING_4.getCount(), - RATING_5.getCount() + RATING_ONE.getCount(), + RATING_TWO.getCount(), + RATING_THREE.getCount(), + RATING_FOUR.getCount(), + RATING_FIVE.getCount() ); } diff --git a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java index 7c0d2fb8..9e2d013e 100644 --- a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java +++ b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java @@ -17,7 +17,7 @@ import ssu.eatssu.domain.report.dto.CreateReportRequest; import ssu.eatssu.domain.report.dto.ReportTypeResponse; -import ssu.eatssu.domain.slack.entity.SlackService; +import ssu.eatssu.domain.slack.service.SlackService; import ssu.eatssu.global.handler.response.BaseResponse; @RestController diff --git a/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java b/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java new file mode 100644 index 00000000..1fd89e20 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java @@ -0,0 +1,7 @@ +package ssu.eatssu.domain.report.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.review.entity.Report; + +public interface ReportRepository extends JpaRepository{ +} diff --git a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java index 7fd55ae1..de2c8feb 100644 --- a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java +++ b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java @@ -12,7 +12,7 @@ import ssu.eatssu.domain.review.entity.Report; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.report.entity.ReportStatus; -import ssu.eatssu.domain.review.repository.ReviewReportRepository; +import ssu.eatssu.domain.report.repository.ReportRepository; import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.report.dto.CreateReportRequest; @@ -26,7 +26,7 @@ public class ReportService { private final ReviewRepository reviewRepository; private final UserRepository userRepository; - private final ReviewReportRepository reviewReportRepository; + private final ReportRepository reviewReportRepository; public Report report(CustomUserDetails userDetails, CreateReportRequest reviewReportCreate) { User user = userRepository.findById(userDetails.getId()) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateReviewRequest.java index c638796f..0fc29744 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/CreateReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateReviewRequest.java @@ -6,7 +6,7 @@ import lombok.NoArgsConstructor; import org.springframework.util.Assert; import ssu.eatssu.domain.menu.entity.Menu; -import ssu.eatssu.domain.rating.Ratings; +import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewInformationResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MainReviewsResponse.java similarity index 87% rename from src/main/java/ssu/eatssu/domain/review/dto/MenuReviewInformationResponse.java rename to src/main/java/ssu/eatssu/domain/review/dto/MainReviewsResponse.java index cb5d5ced..df9a4168 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewInformationResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MainReviewsResponse.java @@ -11,7 +11,7 @@ @Getter @AllArgsConstructor @Builder -public class MenuReviewInformationResponse implements ReviewInformationResponse { +public class MainReviewsResponse implements ReviewInformationResponse { @Schema(description = "메뉴 리스트", example = "[\"고구마치즈돈까스\", \"막국수\", \"미니밥\", \"단무지\", \"요구르트\"]") private String menuName; @@ -29,10 +29,10 @@ public class MenuReviewInformationResponse implements ReviewInformationResponse private Double tasteRating; private ReviewRatingCount reviewRatingCount; - public static MenuReviewInformationResponse of(Menu menu, + public static MainReviewsResponse of(Menu menu, RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { - return MenuReviewInformationResponse.builder() + return MainReviewsResponse.builder() .menuName(menu.getName()) .totalReviewCount(menu.getTotalReviewCount()) .mainRating(ratingAverages.mainRating()) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewInformationResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java similarity index 84% rename from src/main/java/ssu/eatssu/domain/review/dto/MealReviewInformationResponse.java rename to src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java index 12585a62..c142ccad 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewInformationResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java @@ -11,7 +11,7 @@ @Getter @AllArgsConstructor @Builder -public class MealReviewInformationResponse implements ReviewInformationResponse { +public class MealReviewsResponse implements ReviewInformationResponse { @Schema(description = "메뉴명 리스트", example = "[\"고구마치즈돈까스\", \"막국수\", \"미니밥\", \"단무지\", \"요구르트\"]") private List menuNames; @@ -30,10 +30,10 @@ public class MealReviewInformationResponse implements ReviewInformationResponse private ReviewRatingCount reviewRatingCount; - public static MealReviewInformationResponse of(Integer totalReviewCount, List menuNames, + public static MealReviewsResponse of(Integer totalReviewCount, List menuNames, RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { - return MealReviewInformationResponse.builder() + return MealReviewsResponse.builder() .menuNames(menuNames) .mainRating(ratingAverages.mainRating()) .amountRating(ratingAverages.amountRating()) diff --git a/src/main/java/ssu/eatssu/domain/repository/dto/RatingsDto.java b/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java similarity index 78% rename from src/main/java/ssu/eatssu/domain/repository/dto/RatingsDto.java rename to src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java index 7fb7879d..25283c1e 100644 --- a/src/main/java/ssu/eatssu/domain/repository/dto/RatingsDto.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java @@ -1,7 +1,7 @@ -package ssu.eatssu.domain.repository.dto; +package ssu.eatssu.domain.review.dto; -import ssu.eatssu.domain.rating.Ratings; +import ssu.eatssu.domain.rating.entity.Ratings; public record RatingsDto (Ratings ratings){ public Integer getMainRating() { diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java index 83bb9f77..219cd9ff 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java @@ -41,45 +41,48 @@ public class ReviewDetail { private Integer tasteRating; @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") - private LocalDate writeDate; + private LocalDate writedAt; @Schema(description = "리뷰 내용", example = "맛있습니당") private String content; @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imgUrlList; + private List imageUrls; public static ReviewDetail from(Review review, Long userId) { + List imageUrls = new ArrayList<>(); + review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); + + ReviewDetailBuilder builder = ReviewDetail.builder() + .reviewId(review.getId()) + .mainRating(review.getRatings().getMainRating()) + .amountRating(review.getRatings().getAmountRating()) + .tasteRating(review.getRatings().getTasteRating()) + .writedAt(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imageUrls(imageUrls) + .menu(review.getMenu().getName()); + + if (review.getUser() == null) { + return builder + .writerId(null) + .writerNickname("알 수 없음") + .isWriter(false) + .build(); + } - List imgUrlList = new ArrayList<>(); - review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); - if(review.getUser()== null){//탈퇴한 유저의 리뷰인 경우 - return ReviewDetail.builder() - .reviewId(review.getId()) - .writerId(null).writerNickname("알 수 없음") - .mainRating(review.getRatings().getMainRating()) - .amountRating(review.getRatings().getAmountRating()) - .tasteRating(review.getRatings().getTasteRating()) - .writeDate(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .isWriter(false) - .imgUrlList(imgUrlList) - .menu(review.getMenu().getName()) - .build(); - }else{ - boolean isWriter = review.getUser().getId().equals(userId); - return ReviewDetail.builder() - .reviewId(review.getId()) - .writerId(review.getUser().getId()).writerNickname(review.getUser().getNickname()) - .mainRating(review.getRatings().getMainRating()) - .amountRating(review.getRatings().getAmountRating()) - .tasteRating(review.getRatings().getTasteRating()) - .writeDate(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .isWriter(isWriter).imgUrlList(imgUrlList).menu(review.getMenu().getName()) - .build(); + if (review.getUser().getId().equals(userId)) { + return builder + .writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(true) + .build(); } + return builder + .writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(false) + .build(); } - } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index 4c346e7f..c1550a9c 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -3,7 +3,7 @@ import jakarta.persistence.*; import lombok.*; import ssu.eatssu.domain.menu.entity.Menu; -import ssu.eatssu.domain.rating.Ratings; +import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.user.entity.BaseTimeEntity; import ssu.eatssu.domain.user.entity.User; diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java index 9989b168..e5db862b 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java @@ -8,7 +8,7 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; -import ssu.eatssu.domain.rating.ReviewRating; +import ssu.eatssu.domain.rating.entity.ReviewRating; @Getter @NoArgsConstructor(access = AccessLevel.PUBLIC) diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index b2f7e131..df4c882e 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -9,194 +9,160 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.web.PageableDefault; import org.springframework.http.MediaType; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import ssu.eatssu.domain.auth.entity.CustomUserDetails; import ssu.eatssu.domain.menu.entity.MenuType; import ssu.eatssu.domain.review.dto.CreateReviewRequest; -import ssu.eatssu.domain.review.dto.MealReviewInformationResponse; -import ssu.eatssu.domain.review.dto.MenuReviewInformationResponse; +import ssu.eatssu.domain.review.dto.MealReviewsResponse; +import ssu.eatssu.domain.review.dto.MainReviewsResponse; import ssu.eatssu.domain.review.dto.ReviewDetail; import ssu.eatssu.domain.review.dto.UpdateReviewRequest; -import ssu.eatssu.global.handler.response.BaseException; -import ssu.eatssu.handler.response.BaseResponse; +import ssu.eatssu.domain.slice.service.SliceService; import ssu.eatssu.domain.review.service.ReviewService; -import ssu.eatssu.utils.SecurityUtil; -import ssu.eatssu.domain.slice.dto.SliceDto; +import ssu.eatssu.domain.slice.dto.SliceResponse; import java.util.List; +import ssu.eatssu.global.handler.response.BaseResponse; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.MISSING_REQUEST_PARAM; -@Slf4j @RestController -@RequestMapping("/review") @RequiredArgsConstructor +@RequestMapping("/reviews") @Tag(name = "Review", description = "리뷰 API") public class ReviewController { private final ReviewService reviewService; + private final SliceService sliceService; - /** - * 리뷰 작성 - *

메뉴식별자(menuId)에 해당하는 메뉴에 리뷰를 작성한다. 사진은 여러장 첨부 가능하다.

- */ @Operation(summary = "리뷰 작성", description = """ - 리뷰를 작성하는 API 입니다.

- reviewCreate는 application/json, multipartFileList는 multipart/form-data로 요청해주세요.

- 사진은 여러장 첨부 가능합니다.(기획상으로는 한 장만 첨부하도록 제한이 있지만 API 스펙 자체는 여러 장 첨부 가능) - """) + 리뷰를 작성하는 API 입니다.

+ reviewCreate는 application/json, multipartFileList는 multipart/form-data로 요청해주세요.

+ 사진은 여러장 첨부 가능합니다.(기획상으로는 한 장만 첨부하도록 제한이 있지만 API 스펙 자체는 여러 장 첨부 가능) + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 작성 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping(value = "/{menuId}", consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, produces = MediaType.APPLICATION_JSON_VALUE) public BaseResponse writeReview( @Parameter(description = "menuId") @PathVariable("menuId") Long menuId, - @RequestPart(value = "reviewCreate") CreateReviewRequest request, - @RequestPart(value = "multipartFileList", required = false) - List multipartFileList) { - Long userId = SecurityUtil.getLoginUserId(); - reviewService.write(userId, menuId, request, multipartFileList); + @RequestPart(value = "reviewCreate") CreateReviewRequest createReviewRequest, + @RequestPart(value = "multipartFileList", required = false) List multipartFileList, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewService.writeReview(customUserDetails, menuId, createReviewRequest, + multipartFileList); return BaseResponse.success(); } - /** - * 리뷰 수정(글 수정) - *

리뷰식별자(reviewId)에 해당하는 리뷰 속 글을 수정한다. 사진은 수정 X

- */ @Operation(summary = "리뷰 수정(글 수정)", description = """ - 리뷰 내용을 수정하는 API 입니다.

- 글 수정만 가능하며 사진 수정은 지원하지 않습니다. - """) + 리뷰 내용을 수정하는 API 입니다.

+ 글 수정만 가능하며 사진 수정은 지원하지 않습니다. + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 수정 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 수정 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PatchMapping("/{reviewId}") public BaseResponse updateReview(@Parameter(description = "reviewId") - @PathVariable("reviewId") Long reviewId, - @RequestBody UpdateReviewRequest request) { - Long userId = SecurityUtil.getLoginUserId(); - reviewService.update(userId, reviewId, request); + @PathVariable("reviewId") Long reviewId, + @RequestBody UpdateReviewRequest request, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewService.updateReview(customUserDetails, reviewId, request); return BaseResponse.success(); } - /** - * 리뷰 삭제 - *

리뷰식별자(reviewId)에 해당하는 리뷰를 삭제한다.

- */ + @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @DeleteMapping("/{reviewId}") - public BaseResponse deleteReview(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId) { - Long userId = SecurityUtil.getLoginUserId(); - reviewService.delete(userId, reviewId); + public BaseResponse deleteReview( + @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewService.deleteReview(customUserDetails, reviewId); return BaseResponse.success(); } - /** - * 식단(변동 메뉴) 리뷰 정보 조회 - *

메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 평점 별 개수를 조회한다.

- */ @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회(메뉴명, 평점 등등)", description = """ - 식단 리뷰 정보를 조회하는 API 입니다.

- 메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. - """) + 식단 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) }) - @GetMapping("/meal-info") - public BaseResponse getMealReviewInfo(@Parameter(description = "mealId") - @RequestParam(value = "mealId") Long mealId) { - return BaseResponse.success(reviewService.findReviewInformationByMealId(mealId)); + @GetMapping("/meal") + public BaseResponse getMealReviews( + @Parameter(description = "mealId") + @RequestParam(value = "mealId") Long mealId) { + return BaseResponse.success(reviewService.findMealReviews(mealId)); } - /** - * 고정 메뉴 리뷰 정보 조회 - *

메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 평점 별 개수를 조회한다.

- */ @Operation(summary = "고정 메뉴 리뷰 정보 조회(메뉴명, 평점 등등)", description = """ - 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

- 메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. - """) + 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) }) - @GetMapping("/menu-info") - public BaseResponse getMenuReviewInfo(@Parameter(description = "menuId") - @RequestParam(value = "menuId") Long menuId) { - return BaseResponse.success(reviewService.findReviewInformationByMenuId(menuId)); + @GetMapping("/menu") + public BaseResponse getMainReviews( + @Parameter(description = "menuId") + @RequestParam(value = "menuId") Long menuId) { + return BaseResponse.success(reviewService.findMenuReviews(menuId)); } - /** - * 리뷰 목록 조회 - *

커서 기반 페이지네이션으로 리뷰 목록을 조회한다.
- * pageable default={size=20, sort=date, direction=desc}

- */ @Operation(summary = "리뷰 리스트 조회", description = """ - 리뷰 리스트를 조회하는 API 입니다.

- menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

- menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

- 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

- 페이징 기본 값 = {size=20, sort=date, direction=desc}

- """) + 리뷰 리스트를 조회하는 API 입니다.

+ menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

+ menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

+ 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

+ 페이징 기본 값 = {size=20, sort=date, direction=desc}

+ """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("/list") - public BaseResponse> getReviewList( + public BaseResponse> getReviews( @Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") MenuType menuType, @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) Long menuId, @Parameter(description = "mealId(변동메뉴)") @RequestParam(value = "mealId", required = false) Long mealId, @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable) { - SliceDto reviewList; - if (menuType == MenuType.FIXED) { - if (menuId == null) { - throw new BaseException(MISSING_REQUEST_PARAM); - } else { - reviewList = reviewService.findReviewListByMenuId(menuId, pageable, lastReviewId); - } - } else if (menuType == MenuType.CHANGED) { - if (mealId == null) { - throw new BaseException(MISSING_REQUEST_PARAM); - } else { - reviewList = reviewService.findReviewListByMealId(mealId, pageable, lastReviewId); - } - } else { - throw new BaseException(MISSING_REQUEST_PARAM); - } - return BaseResponse.success(reviewList); + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = sliceService.findReviews(menuType, menuId, mealId, + pageable, lastReviewId, customUserDetails); + + return BaseResponse.success(myReviews); } } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewReportRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewReportRepository.java deleted file mode 100644 index b354505d..00000000 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewReportRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package ssu.eatssu.domain.review.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.review.entity.ReviewReport; - -public interface ReviewReportRepository extends JpaRepository{ -} diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java index 201623f1..8eb296f6 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java @@ -9,12 +9,13 @@ import java.util.List; public interface ReviewRepository extends JpaRepository, ReviewRepositoryCustom { + List findAllByMenu(Menu menu); /** * dto projection */ - Collection findByMenu_MealMenus_Meal(Meal meal, Class type); + Collection findByMenu_MealMenus_Meal(Meal meal, Class type); Long countByMenu_MealMenus_Meal(Meal meal); diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java index 6d8b2fd8..027beb82 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java @@ -8,17 +8,21 @@ import ssu.eatssu.domain.user.entity.User; public interface ReviewRepositoryCustom { + //특정 메뉴 리뷰 - 최신순 정렬 Slice findAllByMenuOrderByIdDesc(Menu menu, Long lastReviewId, Pageable pageable); + //특정 메뉴 리뷰 - 오래된순 정렬 - Slice findAllByMenuOrderByIdAsc(Menu menu, Long lastReviewId, Pageable pageable); //특정 식단 리뷰 - 최신순 정렬 Slice findAllByMealOrderByIdDesc(Meal meal, Long lastReviewId, Pageable pageable); - //특정 메뉴 리뷰 - 오래된순 정렬 - Slice findAllByMealOrderByIdAsc(Meal meal, Long lastReviewId, Pageable pageable); + //특정 메뉴 리뷰 - 오래된순 정렬 //특정 유저 리뷰 - 최신순 정렬 Slice findByUserOrderByIdDesc(User user, Long lastReviewId, Pageable pageable); + Slice findAllByMenuOrderByIdAsc(Menu menu, Long lastReviewId, Pageable pageable); + + Slice findAllByMealOrderByIdAsc(Meal meal, Long lastReviewId, Pageable pageable); + } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index 3ff7f9ea..3c5f4f01 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -8,23 +8,19 @@ import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Slice; -import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; +import ssu.eatssu.domain.auth.entity.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.repository.MealRepository; import ssu.eatssu.domain.menu.repository.MenuRepository; -import ssu.eatssu.domain.rating.RatingCalculator; -import ssu.eatssu.domain.repository.*; +import ssu.eatssu.domain.rating.entity.JpaProjectionRatingCalculator; import ssu.eatssu.domain.review.dto.CreateReviewRequest; -import ssu.eatssu.domain.review.dto.MealReviewInformationResponse; -import ssu.eatssu.domain.review.dto.MenuReviewInformationResponse; +import ssu.eatssu.domain.review.dto.MealReviewsResponse; +import ssu.eatssu.domain.review.dto.MainReviewsResponse; import ssu.eatssu.domain.review.dto.RatingAverages; -import ssu.eatssu.domain.review.dto.ReviewDetail; import ssu.eatssu.domain.review.dto.ReviewRatingCount; import ssu.eatssu.domain.review.dto.UpdateReviewRequest; import ssu.eatssu.domain.review.entity.Review; @@ -32,13 +28,11 @@ import ssu.eatssu.domain.review.repository.ReviewImageRepository; import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.utils.S3Uploader; -import ssu.eatssu.utils.SecurityUtil; -import ssu.eatssu.domain.slice.dto.SliceDto; import java.io.IOException; -import java.util.ArrayList; import java.util.List; @RequiredArgsConstructor @@ -51,22 +45,17 @@ public class ReviewService { private final ReviewImageRepository reviewImageRepository; private final MenuRepository menuRepository; private final MealRepository mealRepository; - - private final RatingCalculator ratingCalculator; - + private final JpaProjectionRatingCalculator ratingCalculator; private final S3Uploader s3Uploader; - /** - * 리뷰 작성 - */ - public void write(Long userId, Long menuId, CreateReviewRequest request, - List images) { + public void writeReview(CustomUserDetails userDetails, Long menuId, CreateReviewRequest request, + List images) { - User user = userRepository.findById(userId) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); Review review = request.toEntity(user, menu); @@ -85,49 +74,43 @@ public void processReviewImages(List images, Review review) { } } - /** - * 리뷰 이미지 추가 - */ public void addReviewImage(Review review, MultipartFile image) { if (!image.isEmpty()) { try { - String reviewImageUrl = s3Uploader.upload(image, "reviewImg"); - ReviewImage reviewImage = ReviewImage.builder().review(review) - .imageUrl(reviewImageUrl) - .build(); - reviewImageRepository.save(reviewImage); + String reviewImageUrl = s3Uploader.upload(image, "reviewImg"); + ReviewImage reviewImage = ReviewImage.builder().review(review) + .imageUrl(reviewImageUrl) + .build(); + reviewImageRepository.save(reviewImage); } catch (IOException e) { - throw new BaseException(FAIL_IMAGE_UPLOAD); + throw new BaseException(FAIL_IMAGE_UPLOAD); } } } - /** - * 리뷰 문장 및 별점 수정 - */ - public void update(Long userId, Long reviewId, UpdateReviewRequest request) { - User user = userRepository.findById(userId) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + public void updateReview(CustomUserDetails userDetails, Long reviewId, + UpdateReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); if (review.isDifferentUser(user)) { throw new BaseException(REVIEW_PERMISSION_DENIED); } - review.update(request.getContent(), request.getMainRate(), request.getAmountRate(), request.getTasteRate()); + review.update(request.getContent(), request.getMainRate(), request.getAmountRate(), + request.getTasteRate()); } - /** - * 리뷰 삭제 - */ - public void delete(Long userId, Long reviewId) { - User user = userRepository.findById(userId) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + public void deleteReview(CustomUserDetails userDetails, Long reviewId) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); if (review.isDifferentUser(user)) { throw new BaseException(REVIEW_PERMISSION_DENIED); @@ -136,94 +119,27 @@ public void delete(Long userId, Long reviewId) { reviewRepository.flush(); } - /** - * 고정메뉴 - 리뷰 정보 조회 - */ - public MenuReviewInformationResponse findReviewInformationByMenuId(Long menuId) { + public MainReviewsResponse findMenuReviews(Long menuId) { Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); RatingAverages ratingAverages = ratingCalculator.menuAverageRatings(menu); ReviewRatingCount ratingCount = ratingCalculator.menuRatingCount(menu); - return MenuReviewInformationResponse.of(menu, ratingAverages, ratingCount); + return MainReviewsResponse.of(menu, ratingAverages, ratingCount); } - /** - * 변동메뉴 - 리뷰 정보 조회 - */ - public MealReviewInformationResponse findReviewInformationByMealId(Long mealId) { + public MealReviewsResponse findMealReviews(Long mealId) { Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); int reviewCount = ratingCalculator.mealTotalReviewCount(meal); RatingAverages averageRating = ratingCalculator.mealAverageRatings(meal); ReviewRatingCount ratingCountMap = ratingCalculator.mealRatingCount(meal); - return MealReviewInformationResponse.of(reviewCount, meal.getMenuNames(), averageRating, ratingCountMap); - } - - /** - * Slice를 Slice로 변환 - */ - private SliceDto sliceReviewToSliceReviewDetail(Slice sliceReviewList) { - Long userId = SecurityUtil.getLoginUserId(); - List reviewDetailList = new ArrayList<>(); - for (Review review : sliceReviewList) { - ReviewDetail reviewDetail = ReviewDetail.from(review, userId); - reviewDetailList.add(reviewDetail); - } - return new SliceDto<>(sliceReviewList.getNumberOfElements(), - sliceReviewList.hasNext(), reviewDetailList); - } - - /** - * 고정메뉴 - 리뷰 목록 조회 - */ - public SliceDto findReviewListByMenuId(Long menuId, Pageable pageable, - Long lastReviewId) { - Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - //pageable에서 sort값 가져옴 - String sortBy = pageable.getSort().get().findFirst().orElseThrow().getProperty(); - //pageable에서 direction값 가져옴 - Sort.Direction direction = pageable.getSort().get().findFirst().orElseThrow() - .getDirection(); - Slice sliceReviewList; - if (sortBy.equals("date")) { //리뷰 날짜가 기준 - if (direction.isDescending()) { //최신순 정렬 - sliceReviewList = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, pageable); - } else { - sliceReviewList = reviewRepository.findAllByMenuOrderByIdAsc(menu, lastReviewId, pageable); - } - } else { //TODO 날짜 외에 정렬 기준 추가 - sliceReviewList = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, pageable); - } - return sliceReviewToSliceReviewDetail(sliceReviewList); - } - - /** - * 변동메뉴 - 리뷰 목록 조회 - */ - public SliceDto findReviewListByMealId(Long mealId, Pageable pageable, Long lastReviewId) { - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); - //pageable에서 sort값 가져옴 - String sortBy = pageable.getSort().get().findFirst().orElseThrow().getProperty(); - //pageable에서 direction값 가져옴 - Sort.Direction direction = pageable.getSort().get().findFirst().orElseThrow().getDirection(); - Slice sliceReviewList; - if (sortBy.equals("date")) { //리뷰 날짜가 기준 - if (direction.isDescending()) { //최신순 정렬 - sliceReviewList = reviewRepository.findAllByMealOrderByIdDesc(meal, lastReviewId, pageable); - } else { - sliceReviewList = reviewRepository.findAllByMealOrderByIdAsc(meal, lastReviewId, pageable); - } - } else { //TODO 날짜 외에 정렬 기준 추가 - sliceReviewList = reviewRepository.findAllByMealOrderByIdDesc(meal, lastReviewId, pageable); - } - return sliceReviewToSliceReviewDetail(sliceReviewList); + return MealReviewsResponse.of(reviewCount, meal.getMenuNames(), averageRating, + ratingCountMap); } } diff --git a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java index bdb9e629..92b04a5b 100644 --- a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java +++ b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java @@ -1,5 +1,6 @@ package ssu.eatssu.domain.slice.service; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; import java.util.List; @@ -9,6 +10,12 @@ import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.menu.entity.MenuType; +import ssu.eatssu.domain.menu.repository.MealRepository; +import ssu.eatssu.domain.menu.repository.MenuRepository; +import ssu.eatssu.domain.review.dto.ReviewDetail; import ssu.eatssu.domain.user.dto.MyReviewDetail; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.repository.ReviewRepository; @@ -23,6 +30,8 @@ public class SliceService { private final UserRepository userRepository; private final ReviewRepository reviewRepository; + private final MenuRepository menuRepository; + private final MealRepository mealRepository; public SliceResponse findMyReviews( CustomUserDetails userDetails, @@ -38,6 +47,43 @@ public SliceResponse findMyReviews( return convertToMyReviewDetail(sliceReviews); } + public SliceResponse findReviews(MenuType menuType, + Long menuId, + Long mealId, + Pageable pageable, + Long lastReviewId, + CustomUserDetails userDetails) { + Slice sliceReviews = null; + if (menuType == MenuType.FIXED) { + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + sliceReviews = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, + pageable); + } + + if (menuType == MenuType.VARIABLE) { + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + sliceReviews = reviewRepository.findAllByMealOrderByIdDesc(meal, lastReviewId, + pageable); + } + + return convertToReviewDetail(sliceReviews, userDetails.getId()); + } + + private SliceResponse convertToReviewDetail(Slice sliceReviews, + Long userId) { + List reviewDetails = sliceReviews.getContent().stream() + .map(review -> ReviewDetail.from(review, userId)) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(reviewDetails) + .build(); + } + private SliceResponse convertToMyReviewDetail(Slice sliceReviews) { List myReviewDetails = sliceReviews.getContent().stream() .map(MyReviewDetail::from) diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index d0b3fcce..10e9154d 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -21,10 +21,8 @@ import ssu.eatssu.domain.auth.entity.CustomUserDetails; import ssu.eatssu.domain.user.dto.MyReviewDetail; import ssu.eatssu.domain.user.dto.MyPageResponse; -import ssu.eatssu.domain.page.service.MyPageService; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.domain.slice.service.SliceService; -import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.user.dto.UpdateNicknameRequest; import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.domain.user.service.UserService; @@ -37,11 +35,8 @@ public class UserController { private final UserService userService; - private final MyPageService myPageService; - private final UserRepository userRepository; private final SliceService sliceService; - @Operation(summary = "이메일 중복 체크", description = """ 이메일 중복 체크 API 입니다.

중복되지 않은 이메일이면 true 를 반환합니다 @@ -49,15 +44,10 @@ public class UserController { @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "중복되지 않은 이메일", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) - @PostMapping("/user-emails/{email}/exist") //todo: 중복인 경우 error throw, 중복 아니면 ApiReposne return - public BaseResponse checkEmailDuplicate( + @PostMapping("/validate/email/{email}") //todo: 중복인 경우 error throw, 중복 아니면 ApiReposne return + public BaseResponse validateDuplicatedEmail( @Parameter(description = "이메일") @PathVariable String email) { - boolean duplicated = userRepository.existsByEmail(email); - if (!duplicated) { - return BaseResponse.success(true); - } else { - return BaseResponse.success(false); - } + return BaseResponse.success(userService.validateDuplicatedEmail(email)); } @Operation(summary = "닉네임 중복 체크", description = """ @@ -67,15 +57,10 @@ public BaseResponse checkEmailDuplicate( @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) - @GetMapping("/check-nickname") - public BaseResponse checkNicknameDuplicate(@Parameter(description = "닉네임") + @GetMapping("/validate/nickname") + public BaseResponse validateDuplicatedNickname(@Parameter(description = "닉네임") @RequestParam(value = "nickname") String nickname) { - boolean duplicated = userRepository.existsByNickname(nickname); - if (duplicated) { - return BaseResponse.success(false); - } else { - return BaseResponse.success(true); - } + return BaseResponse.success(userService.validateDuplicatedNickname(nickname)); } @Operation(summary = "닉네임 수정", description = "닉네임 수정 API 입니다.") @@ -101,16 +86,6 @@ public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails return BaseResponse.success(userService.withdraw(userDetails)); } - @Operation(summary = "토큰 재발급", description = "accessToken, refreshToken 재발급 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "토큰 재발급 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/token/reissue") - public BaseResponse refreshToken() { - Tokens tokens = userService.refreshTokens(getLoginUser()); - return BaseResponse.success(tokens); - } - @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API 입니다.") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), @@ -135,6 +110,16 @@ public BaseResponse> getMyReviewList( @GetMapping("/my-page") public BaseResponse getMyPage( @AuthenticationPrincipal CustomUserDetails customUserDetails) { - return BaseResponse.success(userService.findMyPageInfo(customUserDetails)); + return BaseResponse.success(userService.findMyPage(customUserDetails)); + } + + @Operation(summary = "토큰 재발급", description = "accessToken, refreshToken 재발급 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "토큰 재발급 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/token/reissue") + public BaseResponse refreshToken() { + Tokens tokens = userService.refreshTokens(getLoginUser()); + return BaseResponse.success(tokens); } } diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index bb59001d..c8961c47 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -8,11 +8,9 @@ import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.core.Authentication; -import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import ssu.eatssu.domain.auth.entity.CustomUserDetails; import ssu.eatssu.domain.user.dto.MyPageResponse; -import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.user.dto.UpdateNicknameRequest; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.review.entity.Review; @@ -29,8 +27,6 @@ public class UserService { private final UserRepository userRepository; - private final ReviewRepository reviewRepository; - private final PasswordEncoder passwordEncoder; private final AuthenticationManagerBuilder authenticationManagerBuilder; private final JwtTokenProvider jwtTokenProvider; @@ -42,6 +38,30 @@ public void updateNickname(CustomUserDetails userDetails, UpdateNicknameRequest userRepository.save(user); } + public MyPageResponse findMyPage(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + return new MyPageResponse(user.getNickname(), user.getProvider()); + } + + public boolean withdraw(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + user.getReviews().forEach(Review::clearUser); + userRepository.delete(user); + + return true; + } + + public Boolean validateDuplicatedEmail(String email) { + return !userRepository.existsByEmail(email); + } + + public Boolean validateDuplicatedNickname(String nickname) { + return !userRepository.existsByNickname(nickname); + } + /** * Oauth 회원 - email, providerId 를 통해 JwtToken 을 생성 * todo: 같은 이메일로 카카오, 애플 등 여러 회원가입을 한 회원 처리 필요 @@ -73,20 +93,4 @@ private String makeOauthCredentials(OauthProvider provider, String providerId) { public Tokens refreshTokens(Authentication authentication) { return jwtTokenProvider.generateTokens(authentication); } - - public boolean withdraw(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - user.getReviews().forEach(Review::clearUser); - userRepository.delete(user); - - return true; - } - - public MyPageResponse findMyPageInfo(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - return new MyPageResponse(user.getNickname(), user.getProvider()); - } } diff --git a/src/main/java/ssu/eatssu/global/config/OpenApiConfig.java b/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java similarity index 70% rename from src/main/java/ssu/eatssu/global/config/OpenApiConfig.java rename to src/main/java/ssu/eatssu/global/config/SwaggerConfig.java index d375501e..506da800 100644 --- a/src/main/java/ssu/eatssu/global/config/OpenApiConfig.java +++ b/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java @@ -1,4 +1,4 @@ -package ssu.eatssu.config; +package ssu.eatssu.global.config; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; @@ -15,7 +15,7 @@ import java.util.List; @Configuration -public class OpenApiConfig { +public class SwaggerConfig { private static final String API_NAME = "EAT-SSU API"; private static final String API_VERSION = "1.0.0"; @@ -30,23 +30,23 @@ public class OpenApiConfig { @Bean public OpenAPI openAPI() { Info info = new Info() - .version(API_VERSION) - .title(API_NAME) - .description(API_DESCRIPTION); + .version(API_VERSION) + .title(API_NAME) + .description(API_DESCRIPTION); List servers = new ArrayList<>(); servers.add(new Server().url(SERVER_URL).description(SERVER_DESCRIPTION)); SecurityScheme securityScheme = new SecurityScheme() - .type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT") - .in(SecurityScheme.In.HEADER).name("Authorization"); + .type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT") + .in(SecurityScheme.In.HEADER).name("Authorization"); SecurityRequirement securityRequirement = new SecurityRequirement().addList("bearerAuth"); return new OpenAPI() - .components(new Components().addSecuritySchemes("bearerAuth", securityScheme)) - .security(Arrays.asList(securityRequirement)) - .servers(servers) - .info(info); + .components(new Components().addSecuritySchemes("bearerAuth", securityScheme)) + .security(Arrays.asList(securityRequirement)) + .servers(servers) + .info(info); } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/global/util/S3Uploader.java b/src/main/java/ssu/eatssu/global/util/S3Uploader.java index 0418b143..8691c517 100644 --- a/src/main/java/ssu/eatssu/global/util/S3Uploader.java +++ b/src/main/java/ssu/eatssu/global/util/S3Uploader.java @@ -1,4 +1,4 @@ -package ssu.eatssu.utils; +package ssu.eatssu.global.util; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.CannedAccessControlList; @@ -29,7 +29,7 @@ public class S3Uploader { public String upload(MultipartFile multipartFile, String dirName) throws IOException { File uploadFile = convert(multipartFile) - .orElseThrow(() -> new IllegalArgumentException("MultipartFile -> File로 전환이 실패했습니다.")); + .orElseThrow(() -> new IllegalArgumentException("MultipartFile -> File로 전환이 실패했습니다.")); return upload(uploadFile, dirName); } @@ -41,7 +41,8 @@ private String upload(File uploadFile, String dirName) { } private String putS3(File uploadFile, String fileName) { - amazonS3Client.putObject(new PutObjectRequest(bucket, fileName, uploadFile).withCannedAcl(CannedAccessControlList.PublicRead)); + amazonS3Client.putObject(new PutObjectRequest(bucket, fileName, uploadFile).withCannedAcl( + CannedAccessControlList.PublicRead)); return amazonS3Client.getUrl(bucket, fileName).toString(); } @@ -54,11 +55,12 @@ private void removeNewFile(File targetFile) { } private Optional convert(MultipartFile file) throws IOException { - String formatedNow = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); - File convertFile = new File(formatedNow+file.getOriginalFilename()); - if(convertFile.createNewFile()) { + String formatedNow = LocalDateTime.now() + .format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + File convertFile = new File(formatedNow + file.getOriginalFilename()); + if (convertFile.createNewFile()) { try (FileOutputStream fos = new FileOutputStream(convertFile)) { - fos.write(file.getBytes()); + fos.write(file.getBytes()); } return Optional.of(convertFile); } diff --git a/src/test/java/ssu/eatssu/passwordEncoder.java b/src/test/java/ssu/eatssu/passwordEncoder.java deleted file mode 100644 index 6e1e9058..00000000 --- a/src/test/java/ssu/eatssu/passwordEncoder.java +++ /dev/null @@ -1,23 +0,0 @@ -package ssu.eatssu; - -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.crypto.password.PasswordEncoder; - -class passwordEncoder { - - PasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); - - @Test - void encoderTwice() { - String rawString = "password"; - String encodedString = passwordEncoder.encode(rawString); - String doubleEncodedString = passwordEncoder.encode(encodedString); - - System.out.println("rawString = " + rawString); - System.out.println("encodedString = " + encodedString); - System.out.println("doubleEncodedString = " + doubleEncodedString); - } -} From eb1f92fbdc3ad484da23e0dcb4f66efee3040c1f Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Wed, 17 Jan 2024 11:52:03 +0900 Subject: [PATCH 043/399] =?UTF-8?q?[#83]=20Refactor=20:=20RESTful=20API=20?= =?UTF-8?q?=EA=B7=9C=EC=B9=99=EC=9D=84=20=EC=A4=80=EC=88=98=ED=95=98?= =?UTF-8?q?=EC=97=AC=20URL=20=EA=B2=BD=EB=A1=9C=EB=A5=BC=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81=20=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/presentation/OauthController.java | 3 +- .../menu/presentation/MealController.java | 4 +- .../menu/presentation/MenuController.java | 2 +- .../domain/menu/service/MenuService.java | 28 +++++---- .../report/presentation/ReportController.java | 4 +- .../eatssu/domain/review/entity/Review.java | 2 +- .../review/presentation/ReviewController.java | 60 +++++++++---------- .../domain/review/service/ReviewService.java | 6 +- .../user/presentation/UserController.java | 6 +- 9 files changed, 60 insertions(+), 55 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/presentation/OauthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OauthController.java index 2f8fbdba..2e686439 100644 --- a/src/main/java/ssu/eatssu/domain/auth/presentation/OauthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OauthController.java @@ -22,11 +22,10 @@ import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; -import ssu.eatssu.domain.auth.infrastructure.SecurityUtil; @Slf4j @RestController -@RequestMapping("/oauth") +@RequestMapping("/oauths") @RequiredArgsConstructor @Tag(name = "Oauth", description = "Oauth API") public class OauthController { diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java index 66b32bb8..5266959c 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java @@ -49,7 +49,7 @@ public class MealController { @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) - @PostMapping("/create") + @PostMapping("") public BaseResponse createMeal( @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, @Parameter(description = "식당이름") @RequestParam("restaurant") RestaurantName restaurantName, @@ -73,7 +73,7 @@ public BaseResponse createMeal( @ApiResponse(responseCode = "400", description = "지원 하지 않는 식당 (고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) - @GetMapping("/list") + @GetMapping("") public BaseResponse> getMeal( @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, @Parameter(description = "식당 이름") @RequestParam("restaurant") RestaurantName restaurantName, diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java index 408afb4c..ca4d8f65 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java @@ -37,7 +37,7 @@ public class MenuController { @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) - @GetMapping("/list") + @GetMapping("") public BaseResponse> getMenus( @RequestParam("restaurant") RestaurantName restaurantName) { if (RestaurantName.isVariable(restaurantName)) { diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index a715b99a..2f9ad6ce 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -84,8 +84,7 @@ private void addMenu(Meal meal, CreateMealRequest request) { for (String addMenuName : request.getMenuNames()) { checkAndCreateMenu(addMenuName, restaurant); - Menu menu = menuRepository.findByNameAndRestaurant(addMenuName, restaurant) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + Menu menu = getMenu(addMenuName, restaurant); MealMenu mealMenu = MealMenu.builder() .menu(menu) @@ -108,11 +107,6 @@ public MenusInformationResponse findMenusInMeal(Long mealId) { return MenusInformationResponse.from(meal); } - private Meal getMeal(Long mealId) { - Meal meal = getMeal(mealId); - return meal; - } - public void deleteMeal(Long mealId) { Meal meal = getMeal(mealId); @@ -134,10 +128,16 @@ public void cleanupGarbageMenu(List menuList) { } } - private Restaurant getRestaurant(RestaurantName restaurantName) { - Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) - .orElseThrow(() -> new RestaurantNotFoundException()); - return restaurant; + private Menu getMenu(String addMenuName, Restaurant restaurant) { + Menu menu = menuRepository.findByNameAndRestaurant(addMenuName, restaurant) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + return menu; + } + + private Meal getMeal(Long mealId) { + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + return meal; } private List getMeals(Date date, TimePart timePart, Restaurant restaurant) { @@ -145,4 +145,10 @@ private List getMeals(Date date, TimePart timePart, Restaurant restaurant) timePart, restaurant); return meals; } + + private Restaurant getRestaurant(RestaurantName restaurantName) { + Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) + .orElseThrow(() -> new RestaurantNotFoundException()); + return restaurant; + } } diff --git a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java index 9e2d013e..6c8f9b7d 100644 --- a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java +++ b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java @@ -30,7 +30,7 @@ public class ReportController { private final SlackService slackService; @Operation(summary = "리뷰 신고 사유 종류 조회", description = "리뷰 신고 사유 종류를 조회하는 API 입니다.") - @GetMapping("/type") + @GetMapping("/types") public BaseResponse getReportType() { return BaseResponse.success(reportService.getReportType()); } @@ -39,7 +39,7 @@ public BaseResponse getReportType() { * 리뷰 신고 */ @Operation(summary = "리뷰 신고하기", description = "리뷰를 신고하는 API 입니다.") - @PostMapping("/") + @PostMapping("") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "리뷰 신고 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index c1550a9c..54ada377 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -51,7 +51,7 @@ public void update(UpdateReviewRequest request) { } */ - public boolean isDifferentUser(User user) { + public boolean isNotWrittenBy(User user) { return !this.user.equals(user); } diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index df4c882e..5a775710 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -40,6 +40,34 @@ public class ReviewController { private final ReviewService reviewService; private final SliceService sliceService; + @Operation(summary = "리뷰 리스트 조회", description = """ + 리뷰 리스트를 조회하는 API 입니다.

+ menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

+ menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

+ 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

+ 페이징 기본 값 = {size=20, sort=date, direction=desc}

+ """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("") + public BaseResponse> getReviews( + @Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") MenuType menuType, + @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) Long menuId, + @Parameter(description = "mealId(변동메뉴)") @RequestParam(value = "mealId", required = false) Long mealId, + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) + @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = sliceService.findReviews(menuType, menuId, mealId, + pageable, lastReviewId, customUserDetails); + + return BaseResponse.success(myReviews); + } + @Operation(summary = "리뷰 작성", description = """ 리뷰를 작성하는 API 입니다.

reviewCreate는 application/json, multipartFileList는 multipart/form-data로 요청해주세요.

@@ -111,7 +139,7 @@ public BaseResponse deleteReview( @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) - @GetMapping("/meal") + @GetMapping("/meals/{mealId}") public BaseResponse getMealReviews( @Parameter(description = "mealId") @RequestParam(value = "mealId") Long mealId) { @@ -130,39 +158,11 @@ public BaseResponse getMealReviews( @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) - @GetMapping("/menu") + @GetMapping("/menus/{menuId}") public BaseResponse getMainReviews( @Parameter(description = "menuId") @RequestParam(value = "menuId") Long menuId) { return BaseResponse.success(reviewService.findMenuReviews(menuId)); } - @Operation(summary = "리뷰 리스트 조회", description = """ - 리뷰 리스트를 조회하는 API 입니다.

- menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

- menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

- 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

- 페이징 기본 값 = {size=20, sort=date, direction=desc}

- """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/list") - public BaseResponse> getReviews( - @Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") MenuType menuType, - @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) Long menuId, - @Parameter(description = "mealId(변동메뉴)") @RequestParam(value = "mealId", required = false) Long mealId, - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) - @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = sliceService.findReviews(menuType, menuId, mealId, - pageable, lastReviewId, customUserDetails); - - return BaseResponse.success(myReviews); - } - } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index 3c5f4f01..dac0796c 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -30,10 +30,10 @@ import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; -import ssu.eatssu.utils.S3Uploader; import java.io.IOException; import java.util.List; +import ssu.eatssu.global.util.S3Uploader; @RequiredArgsConstructor @Service @@ -96,7 +96,7 @@ public void updateReview(CustomUserDetails userDetails, Long reviewId, Review review = reviewRepository.findById(reviewId) .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - if (review.isDifferentUser(user)) { + if (review.isNotWrittenBy(user)) { throw new BaseException(REVIEW_PERMISSION_DENIED); } @@ -112,7 +112,7 @@ public void deleteReview(CustomUserDetails userDetails, Long reviewId) { Review review = reviewRepository.findById(reviewId) .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - if (review.isDifferentUser(user)) { + if (review.isNotWrittenBy(user)) { throw new BaseException(REVIEW_PERMISSION_DENIED); } reviewRepository.delete(review); diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 10e9154d..2a407966 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -81,7 +81,7 @@ public BaseResponse updateNickname( @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) - @DeleteMapping("/withdraw") + @DeleteMapping("") public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails userDetails) { return BaseResponse.success(userService.withdraw(userDetails)); } @@ -91,7 +91,7 @@ public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) - @GetMapping("/my-reviews") + @GetMapping("/reviews") public BaseResponse> getMyReviewList( @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, @@ -107,7 +107,7 @@ public BaseResponse> getMyReviewList( @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) - @GetMapping("/my-page") + @GetMapping("/mypage") public BaseResponse getMyPage( @AuthenticationPrincipal CustomUserDetails customUserDetails) { return BaseResponse.success(userService.findMyPage(customUserDetails)); From ec5a4693bc22ff48043f87268eb66eaa46c06e1b Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Wed, 17 Jan 2024 23:48:07 +0900 Subject: [PATCH 044/399] =?UTF-8?q?[#83]=20Refactor=20:=20QReview=EB=A5=BC?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/review/repository/ReviewRepositoryImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java index f1df1f5d..eefb2307 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java @@ -8,7 +8,7 @@ import org.springframework.data.domain.Slice; import org.springframework.data.domain.SliceImpl; import org.springframework.stereotype.Repository; -import ssu.eatssu.domain.review.QReview; +import ssu.eatssu.domain.review.entity.QReview; import ssu.eatssu.domain.review.entity.Review; import java.util.ArrayList; From e9045faf1227c3ed62eec3779980681faa4403b0 Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Thu, 18 Jan 2024 14:23:27 +0900 Subject: [PATCH 045/399] =?UTF-8?q?[#83]=20Refactor=20:=20RestaurantNotFou?= =?UTF-8?q?ndException=EC=9D=84=20=EC=82=AD=EC=A0=9C=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/RestaurantNotFoundException.java | 16 ---------------- .../eatssu/domain/menu/service/MenuService.java | 3 +-- .../domain/restaurant/entity/RestaurantName.java | 9 +++++---- .../java/ssu/eatssu/EatSsuApplicationTests.java | 6 +++--- 4 files changed, 9 insertions(+), 25 deletions(-) delete mode 100644 src/main/java/ssu/eatssu/domain/menu/exception/RestaurantNotFoundException.java diff --git a/src/main/java/ssu/eatssu/domain/menu/exception/RestaurantNotFoundException.java b/src/main/java/ssu/eatssu/domain/menu/exception/RestaurantNotFoundException.java deleted file mode 100644 index b5653bf1..00000000 --- a/src/main/java/ssu/eatssu/domain/menu/exception/RestaurantNotFoundException.java +++ /dev/null @@ -1,16 +0,0 @@ -package ssu.eatssu.domain.menu.exception; - -public class RestaurantNotFoundException extends IllegalArgumentException { - - public RestaurantNotFoundException() { - super("해당 식당이 존재하지 않습니다."); - } - - public RestaurantNotFoundException(String s) { - super(s); - } - - public RestaurantNotFoundException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index 2f9ad6ce..7bc50b6e 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -12,7 +12,6 @@ import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; -import ssu.eatssu.domain.menu.exception.RestaurantNotFoundException; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.restaurant.entity.RestaurantName; import ssu.eatssu.domain.menu.entity.TimePart; @@ -148,7 +147,7 @@ private List getMeals(Date date, TimePart timePart, Restaurant restaurant) private Restaurant getRestaurant(RestaurantName restaurantName) { Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) - .orElseThrow(() -> new RestaurantNotFoundException()); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); return restaurant; } } diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java index cdf372b9..d5dd016c 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java @@ -4,14 +4,15 @@ import java.util.Arrays; import lombok.Getter; -import ssu.eatssu.domain.menu.exception.RestaurantNotFoundException; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponseStatus; @Getter public enum RestaurantName { DODAM(RestaurantType.VARIABLE, "도담 식당", 6000), DORMITORY(RestaurantType.VARIABLE, "기숙사 식당", 5000), - FOOD_COURT(RestaurantType.FIXED, "푸드 코트", 0), - SNACK_CORNER(RestaurantType.FIXED, "스낵 코너", 0), + FOOD_COURT(RestaurantType.FIXED, "푸드 코트", null), + SNACK_CORNER(RestaurantType.FIXED, "스낵 코너", null), HAKSIK(RestaurantType.VARIABLE, "학생 식당", 5000); private RestaurantType restaurantType; @@ -23,7 +24,7 @@ public static RestaurantName from(String description) { return Arrays.stream(RestaurantName.values()) .filter(d -> d.getDescription().equals(description)) .findAny() - .orElseThrow(RestaurantNotFoundException::new); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); } RestaurantName(RestaurantType restaurantType, String description, Integer price) { diff --git a/src/test/java/ssu/eatssu/EatSsuApplicationTests.java b/src/test/java/ssu/eatssu/EatSsuApplicationTests.java index d8ba04b6..92b384f5 100644 --- a/src/test/java/ssu/eatssu/EatSsuApplicationTests.java +++ b/src/test/java/ssu/eatssu/EatSsuApplicationTests.java @@ -6,8 +6,8 @@ @SpringBootTest class EatSsuApplicationTests { - @Test - void contextLoads() { - } + @Test + void contextLoads() { + } } From 89ad8bda46d4cd122d0b8dce9c4a1f08182e48ad Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Thu, 18 Jan 2024 15:48:14 +0900 Subject: [PATCH 046/399] =?UTF-8?q?[#83]=20test=20:=20=EC=B9=B4=EC=B9=B4?= =?UTF-8?q?=EC=98=A4=20=EC=95=84=EC=9D=B4=EB=94=94=EB=A1=9C=20=ED=9A=8C?= =?UTF-8?q?=EC=9B=90=EA=B0=80=EC=9E=85=EC=9D=B4=20=EB=90=98=EB=8A=94?= =?UTF-8?q?=EC=A7=80=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...KakaoLogin.java => KakaoLoginRequest.java} | 13 ++----- .../JwtAuthenticationFilter.java | 3 +- .../auth/infrastructure/SecurityConfig.java | 1 - .../auth/presentation/OauthController.java | 7 ++-- .../CustomUserDetailsService.java | 3 +- .../domain/auth/service/OauthService.java | 39 +++++++------------ .../domain/auth/service/OauthServiceTest.java | 38 ++++++++++++++++++ .../domain/user/service/UserServiceTest.java | 29 ++++++++++++++ 8 files changed, 91 insertions(+), 42 deletions(-) rename src/main/java/ssu/eatssu/domain/auth/dto/{KakaoLogin.java => KakaoLoginRequest.java} (70%) rename src/main/java/ssu/eatssu/domain/auth/{entity => infrastructure}/JwtAuthenticationFilter.java (94%) rename src/main/java/ssu/eatssu/domain/auth/{entity => service}/CustomUserDetailsService.java (90%) create mode 100644 src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java create mode 100644 src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLogin.java b/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java similarity index 70% rename from src/main/java/ssu/eatssu/domain/auth/dto/KakaoLogin.java rename to src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java index 044c689d..dc7f4686 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLogin.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java @@ -3,21 +3,16 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; @Schema(title = "카카오 로그인 및 회원가입") -@Getter -@NoArgsConstructor -@AllArgsConstructor -public class KakaoLogin { +public record KakaoLoginRequest( @NotBlank(message = "이메일을 입력해주세요.") @Email(message = "올바른 이메일 주소를 입력해주세요.") @Schema(description = "이메일", example = "test@email.com") - private String email; + String email, @Schema(description = "providerId", example = "10378247832195") - private String providerId; + String providerId +) { } diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/JwtAuthenticationFilter.java similarity index 94% rename from src/main/java/ssu/eatssu/domain/auth/entity/JwtAuthenticationFilter.java rename to src/main/java/ssu/eatssu/domain/auth/infrastructure/JwtAuthenticationFilter.java index 0698aba8..d88a260b 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/JwtAuthenticationFilter.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.auth.entity; +package ssu.eatssu.domain.auth.infrastructure; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; @@ -13,6 +13,7 @@ import org.springframework.web.filter.GenericFilterBean; import java.io.IOException; +import ssu.eatssu.domain.auth.entity.JwtTokenProvider; @Slf4j @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 58923b98..2d3cad50 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -9,7 +9,6 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import ssu.eatssu.domain.auth.entity.JwtAuthenticationFilter; import ssu.eatssu.domain.auth.entity.JwtTokenProvider; import ssu.eatssu.global.handler.JwtAccessDeniedHandler; import ssu.eatssu.global.handler.JwtAuthenticationEntryPoint; diff --git a/src/main/java/ssu/eatssu/domain/auth/presentation/OauthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OauthController.java index 2e686439..9707c14e 100644 --- a/src/main/java/ssu/eatssu/domain/auth/presentation/OauthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OauthController.java @@ -13,11 +13,10 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.auth.service.OauthService; import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.domain.auth.dto.AppleLogin; -import ssu.eatssu.domain.auth.dto.KakaoLogin; +import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.user.dto.Tokens; import java.security.NoSuchAlgorithmException; @@ -43,8 +42,8 @@ public class OauthController { @ApiResponse(responseCode = "200", description = "카카오 회원가입/로그인 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping("/kakao") - public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLogin login) { - Tokens tokens = oauthService.kakaoLogin(login.getEmail(), login.getProviderId()); + public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest request) { + Tokens tokens = oauthService.kakaoLogin(request); return BaseResponse.success(tokens); } diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetailsService.java b/src/main/java/ssu/eatssu/domain/auth/service/CustomUserDetailsService.java similarity index 90% rename from src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetailsService.java rename to src/main/java/ssu/eatssu/domain/auth/service/CustomUserDetailsService.java index 6f929ebf..68eaab60 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetailsService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/CustomUserDetailsService.java @@ -1,10 +1,11 @@ -package ssu.eatssu.domain.auth.entity; +package ssu.eatssu.domain.auth.service; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.stereotype.Component; +import ssu.eatssu.domain.auth.entity.CustomUserDetails; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OauthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OauthService.java index 315cdefa..cc34c260 100644 --- a/src/main/java/ssu/eatssu/domain/auth/service/OauthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/OauthService.java @@ -17,6 +17,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; +import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.auth.entity.OauthProvider; import ssu.eatssu.domain.user.repository.UserRepository; @@ -43,54 +44,40 @@ @Transactional public class OauthService { + private final UserService userService; private final UserRepository userRepository; private final PasswordEncoder passwordEncoder; - private final UserService userService; private final RestTemplate restTemplate; - /** - * 카카오 로그인 - */ - public Tokens kakaoLogin(String email, String providerId) { - - //가입 안된 유저일 경우 회원가입 진행 - User user = userRepository.findByProviderId(providerId) - .orElseGet(() -> join(email, OauthProvider.KAKAO, providerId)); + public Tokens kakaoLogin(KakaoLoginRequest request) { + User user = userRepository.findByProviderId(request.providerId()) + .orElseGet(() -> join(request.email(), OauthProvider.KAKAO, request.providerId())); // return Tokens - return userService.generateOauthJwtTokens(user.getEmail(), OauthProvider.KAKAO, providerId); + return userService.generateOauthJwtTokens(user.getEmail(), OauthProvider.KAKAO, + request.providerId()); } - /** - * 애플 로그인 - */ - public Tokens appleLogin(String identityToken) { //애플 유저 정보 조회 OauthInfo oauthInfo = getUserInfoFromApple(identityToken); - //가입 안된 유저일 경우 회원가입 진행 User user = userRepository.findByProviderId(oauthInfo.providerId()) - .orElseGet(() -> join(oauthInfo.email(), OauthProvider.APPLE, oauthInfo.providerId())); - + .orElseGet(() -> join(oauthInfo.email(), OauthProvider.APPLE, oauthInfo.providerId())); //이메일 갱신 updateAppleUserEmail(user, oauthInfo.email()); // return Tokens - return userService.generateOauthJwtTokens(user.getEmail(), OauthProvider.APPLE, oauthInfo.providerId()); + return userService.generateOauthJwtTokens(user.getEmail(), OauthProvider.APPLE, + oauthInfo.providerId()); } - /** - * 회원가입 - */ - private User join(String email, OauthProvider provider, String providerId) { String credentials = createCredentials(provider, providerId); - //회원가입 User user = User.oAuthJoin(email, provider, providerId, credentials); return userRepository.save(user); } @@ -107,7 +94,6 @@ private String createCredentials(OauthProvider provider, String providerId) { * 애플 유저 private email -> 찐 email 로 갱신 */ private void updateAppleUserEmail(User user, String email) { - if (isHideEmail(user.getEmail()) && !isHideEmail(email)) { user.updateEmail(email); userRepository.save(user); @@ -198,8 +184,9 @@ private AppleKeys.Key selectMatchedKey(String identityToken, AppleKeys candidate //decode 된 header 정보를 통해 정답키의 key id, algorithm 정보를 가져온다. Map headerMap; try { - headerMap = new ObjectMapper().readValue(decodedHeader, new TypeReference>() { - }); + headerMap = new ObjectMapper().readValue(decodedHeader, + new TypeReference>() { + }); } catch (JsonProcessingException e) { throw new BaseException(INVALID_IDENTITY_TOKEN); } diff --git a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java b/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java new file mode 100644 index 00000000..8fa3d95d --- /dev/null +++ b/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java @@ -0,0 +1,38 @@ +package ssu.eatssu.domain.auth.service; + +import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.*; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.user.repository.UserRepository; + +@SpringBootTest +class OauthServiceTest { + + @Autowired + private OauthService oauthService; + + @Autowired + private UserRepository userRepository; + + @Test + void 카카오로_회원가입을_한다() { + // given + KakaoLoginRequest request = new KakaoLoginRequest("test@email.com", "10378247832195"); + + // when + oauthService.kakaoLogin(request); + User user = userRepository.findByProviderId(request.providerId()).get(); + + // then + assertThat(userRepository.findAll()).hasSize(1); + assertThat(user.getEmail()).isEqualTo(request.email()); + assertThat(user.getProviderId()).isEqualTo(request.providerId()); + } + +} \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java b/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java new file mode 100644 index 00000000..ea9812e3 --- /dev/null +++ b/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java @@ -0,0 +1,29 @@ +package ssu.eatssu.domain.user.service; + +import static org.junit.jupiter.api.Assertions.*; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import ssu.eatssu.domain.user.repository.UserRepository; + +@SpringBootTest +class UserServiceTest { + + @Autowired + private UserService userService; + @Autowired + private UserRepository userRepository; + + @Test + void 회원_탈퇴_성공시_참을_반환한다() { + // given + + // when + // then + Assertions.assertThat(userRepository.findAll()).hasSize(0); + + } + +} \ No newline at end of file From 8628347fd4fd00131d17c991ffa2d83494f070f5 Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Thu, 18 Jan 2024 16:51:15 +0900 Subject: [PATCH 047/399] =?UTF-8?q?[#83]=20test=20:=20=EC=95=A0=ED=94=8C?= =?UTF-8?q?=20=EC=95=84=EC=9D=B4=EB=94=94=EB=A1=9C=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=EA=B0=80=EC=9E=85=EC=9D=B4=20=EB=90=98=EB=8A=94=EC=A7=80=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...AppleLogin.java => AppleLoginRequest.java} | 12 +- .../ssu/eatssu/domain/auth/dto/OAuthInfo.java | 7 + .../ssu/eatssu/domain/auth/dto/OauthInfo.java | 4 - .../auth/entity/AppleAuthenticator.java | 8 + ...{OauthProvider.java => OAuthProvider.java} | 2 +- .../SystemAppleAuthenticator.java} | 167 ++++-------------- .../{OauthConfig.java => OAuthConfig.java} | 2 +- ...thController.java => OAuthController.java} | 21 +-- .../domain/auth/service/OAuthService.java | 78 ++++++++ .../domain/user/dto/MyPageResponse.java | 4 +- .../ssu/eatssu/domain/user/entity/User.java | 8 +- .../domain/user/service/UserService.java | 6 +- .../TestAppleAuthenticator.java | 12 ++ .../domain/auth/service/OauthServiceTest.java | 36 +++- 14 files changed, 198 insertions(+), 169 deletions(-) rename src/main/java/ssu/eatssu/domain/auth/dto/{AppleLogin.java => AppleLoginRequest.java} (54%) create mode 100644 src/main/java/ssu/eatssu/domain/auth/dto/OAuthInfo.java delete mode 100644 src/main/java/ssu/eatssu/domain/auth/dto/OauthInfo.java create mode 100644 src/main/java/ssu/eatssu/domain/auth/entity/AppleAuthenticator.java rename src/main/java/ssu/eatssu/domain/auth/entity/{OauthProvider.java => OAuthProvider.java} (70%) rename src/main/java/ssu/eatssu/domain/auth/{service/OauthService.java => entity/SystemAppleAuthenticator.java} (59%) rename src/main/java/ssu/eatssu/domain/auth/infrastructure/{OauthConfig.java => OAuthConfig.java} (96%) rename src/main/java/ssu/eatssu/domain/auth/presentation/{OauthController.java => OAuthController.java} (85%) create mode 100644 src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java create mode 100644 src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/AppleLogin.java b/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java similarity index 54% rename from src/main/java/ssu/eatssu/domain/auth/dto/AppleLogin.java rename to src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java index f00905d7..bc04c8c4 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/AppleLogin.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java @@ -1,15 +1,11 @@ package ssu.eatssu.domain.auth.dto; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; @Schema(title = "애플 로그인 및 회원가입") -@Getter -@NoArgsConstructor -@AllArgsConstructor -public class AppleLogin { +public record AppleLoginRequest( @Schema(description = "identityToken", example = "eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi...") - private String identityToken; + String identityToken +) { + } diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/OAuthInfo.java b/src/main/java/ssu/eatssu/domain/auth/dto/OAuthInfo.java new file mode 100644 index 00000000..a0a7d6be --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/auth/dto/OAuthInfo.java @@ -0,0 +1,7 @@ +package ssu.eatssu.domain.auth.dto; + +import org.jetbrains.annotations.NotNull; + +public record OAuthInfo(@NotNull String email, @NotNull String providerId) { + +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/OauthInfo.java b/src/main/java/ssu/eatssu/domain/auth/dto/OauthInfo.java deleted file mode 100644 index 752bd85b..00000000 --- a/src/main/java/ssu/eatssu/domain/auth/dto/OauthInfo.java +++ /dev/null @@ -1,4 +0,0 @@ -package ssu.eatssu.domain.auth.dto; - -public record OauthInfo(String email, String providerId) { -} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/AppleAuthenticator.java b/src/main/java/ssu/eatssu/domain/auth/entity/AppleAuthenticator.java new file mode 100644 index 00000000..f150fb37 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/auth/entity/AppleAuthenticator.java @@ -0,0 +1,8 @@ +package ssu.eatssu.domain.auth.entity; + +import ssu.eatssu.domain.auth.dto.OAuthInfo; + +public interface AppleAuthenticator { + + OAuthInfo getOAuthInfoByIdentityToken(String identityToken); +} diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/OauthProvider.java b/src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java similarity index 70% rename from src/main/java/ssu/eatssu/domain/auth/entity/OauthProvider.java rename to src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java index e548e97c..25a7c25d 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/OauthProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java @@ -1,5 +1,5 @@ package ssu.eatssu.domain.auth.entity; -public enum OauthProvider { +public enum OAuthProvider { EATSSU, KAKAO, APPLE; } diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OauthService.java b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java similarity index 59% rename from src/main/java/ssu/eatssu/domain/auth/service/OauthService.java rename to src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java index cc34c260..9cd6d31b 100644 --- a/src/main/java/ssu/eatssu/domain/auth/service/OauthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java @@ -1,5 +1,4 @@ -package ssu.eatssu.domain.auth.service; - +package ssu.eatssu.domain.auth.entity; import static ssu.eatssu.global.handler.response.BaseResponseStatus.INVALID_IDENTITY_TOKEN; @@ -9,23 +8,6 @@ import io.jsonwebtoken.Claims; import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.Jwts; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.ResponseEntity; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.UriComponentsBuilder; -import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; -import ssu.eatssu.domain.user.entity.User; -import ssu.eatssu.domain.auth.entity.OauthProvider; -import ssu.eatssu.domain.user.repository.UserRepository; -import ssu.eatssu.domain.user.service.UserService; -import ssu.eatssu.domain.auth.dto.OauthInfo; -import ssu.eatssu.domain.auth.dto.AppleKeys; -import ssu.eatssu.domain.user.dto.Tokens; - import java.math.BigInteger; import java.net.URI; import java.security.KeyFactory; @@ -35,86 +17,31 @@ import java.security.spec.RSAPublicKeySpec; import java.util.Base64; import java.util.Map; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; +import ssu.eatssu.domain.auth.dto.AppleKeys; +import ssu.eatssu.domain.auth.dto.OAuthInfo; +import ssu.eatssu.domain.auth.entity.AppleAuthenticator; import ssu.eatssu.global.handler.response.BaseException; - -@Slf4j +@Component @RequiredArgsConstructor -@Service -@Transactional -public class OauthService { +public class SystemAppleAuthenticator implements AppleAuthenticator { - private final UserService userService; - private final UserRepository userRepository; - private final PasswordEncoder passwordEncoder; private final RestTemplate restTemplate; - public Tokens kakaoLogin(KakaoLoginRequest request) { - User user = userRepository.findByProviderId(request.providerId()) - .orElseGet(() -> join(request.email(), OauthProvider.KAKAO, request.providerId())); - - // return Tokens - return userService.generateOauthJwtTokens(user.getEmail(), OauthProvider.KAKAO, - request.providerId()); - } - - public Tokens appleLogin(String identityToken) { - - //애플 유저 정보 조회 - OauthInfo oauthInfo = getUserInfoFromApple(identityToken); - - //가입 안된 유저일 경우 회원가입 진행 - User user = userRepository.findByProviderId(oauthInfo.providerId()) - .orElseGet(() -> join(oauthInfo.email(), OauthProvider.APPLE, oauthInfo.providerId())); - - //이메일 갱신 - updateAppleUserEmail(user, oauthInfo.email()); - - // return Tokens - return userService.generateOauthJwtTokens(user.getEmail(), OauthProvider.APPLE, - oauthInfo.providerId()); - } - - private User join(String email, OauthProvider provider, String providerId) { - String credentials = createCredentials(provider, providerId); - - User user = User.oAuthJoin(email, provider, providerId, credentials); - return userRepository.save(user); - } - - /** - * Credentials 생성 - */ - - private String createCredentials(OauthProvider provider, String providerId) { - return passwordEncoder.encode(provider + "_" + providerId); - } - - /** - * 애플 유저 private email -> 찐 email 로 갱신 - */ - private void updateAppleUserEmail(User user, String email) { - if (isHideEmail(user.getEmail()) && !isHideEmail(email)) { - user.updateEmail(email); - userRepository.save(user); - } - } - - /** - * 애플 로그인 - 유저 정보(providerId, email) 조회 - */ - private OauthInfo getUserInfoFromApple(String identityToken) { - + public OAuthInfo getOAuthInfoByIdentityToken(String identityToken) { PublicKey publicKey = generatePublicKey(identityToken); - - return getUserInfoByPublicKey(identityToken, publicKey); + return getOAuthInfoByPublicKey(identityToken, publicKey); } /** * 애플 로그인 - PublicKey 를 통해 유저 정보(providerId, email) 조회 */ - private OauthInfo getUserInfoByPublicKey(String identityToken, PublicKey publicKey) { - + private OAuthInfo getOAuthInfoByPublicKey(String identityToken, PublicKey publicKey) { // identityToken 에서 publicKey 서명을 통해 Claims 를 추출한다. Claims claims = Jwts.parserBuilder() .setSigningKey(publicKey) @@ -126,17 +53,13 @@ private OauthInfo getUserInfoByPublicKey(String identityToken, PublicKey publicK try { String email = claims.get("email").toString(); String providerId = claims.get("sub").toString(); - return new OauthInfo(email, providerId); + return new OAuthInfo(email, providerId); } catch (ExpiredJwtException exception) { throw new BaseException(INVALID_IDENTITY_TOKEN); } } - /** - * 애플 로그인 - PublicKey 를 생성한다. - */ private PublicKey generatePublicKey(String identityToken) { - //PublicKey 를 만들기 위한 재료가 되는 후보 Key 목록을 가져온다. AppleKeys keys = getAppleKeys(); @@ -145,7 +68,30 @@ private PublicKey generatePublicKey(String identityToken) { //정답 Key 를 통해 PublicKey 를 생성한다. return generatePublicKeyWithApplePublicKey(matchedKey); + } + + /** + * 애플 로그인 - 헤더에서 뽑은 정보를 통해 후보 Key 에서 정답 Key 를 찾아서 반환한다. + */ + private AppleKeys.Key selectMatchedKey(String identityToken, AppleKeys candidateKeys) { + //identity token 에서 header 를 뽑아서 decode 한다. + String header = identityToken.split("\\.")[0]; + String decodedHeader = new String(Base64.getDecoder().decode(header)); + + //decode 된 header 정보를 통해 정답키의 key id, algorithm 정보를 가져온다. + Map headerMap; + try { + headerMap = new ObjectMapper().readValue(decodedHeader, + new TypeReference>() { + }); + } catch (JsonProcessingException e) { + throw new BaseException(INVALID_IDENTITY_TOKEN); + } + + //후보키 중에서 정답키를 찾아서 반환한다. + return candidateKeys.findKeyBy(headerMap.get("kid"), headerMap.get("alg")) + .orElseThrow(() -> new BaseException(INVALID_IDENTITY_TOKEN)); } /** @@ -172,35 +118,10 @@ private PublicKey generatePublicKeyWithApplePublicKey(AppleKeys.Key matchedKey) } } - /** - * 애플 로그인 - 헤더에서 뽑은 정보를 통해 후보 Key 에서 정답 Key 를 찾아서 반환한다. - */ - private AppleKeys.Key selectMatchedKey(String identityToken, AppleKeys candidateKeys) { - - //identity token 에서 header 를 뽑아서 decode 한다. - String header = identityToken.split("\\.")[0]; - String decodedHeader = new String(Base64.getDecoder().decode(header)); - - //decode 된 header 정보를 통해 정답키의 key id, algorithm 정보를 가져온다. - Map headerMap; - try { - headerMap = new ObjectMapper().readValue(decodedHeader, - new TypeReference>() { - }); - } catch (JsonProcessingException e) { - throw new BaseException(INVALID_IDENTITY_TOKEN); - } - - //후보키 중에서 정답키를 찾아서 반환한다. - return candidateKeys.findKeyBy(headerMap.get("kid"), headerMap.get("alg")) - .orElseThrow(() -> new BaseException(INVALID_IDENTITY_TOKEN)); - } - /** * 애플 로그인 - Apple api 호출을 통해 apple 후보 key 리스트를 받아온다. */ private AppleKeys getAppleKeys() { - URI uri = UriComponentsBuilder .fromUriString("https://appleid.apple.com") .path("/auth/keys") @@ -211,16 +132,4 @@ private AppleKeys getAppleKeys() { ResponseEntity response = restTemplate.getForEntity(uri, AppleKeys.class); return response.getBody(); } - - /** - * 애플 로그인 - 이메일 가리기 여부 확인 - */ - private boolean isHideEmail(String email) { - if (email.length() > 25) { - return email.startsWith("@privaterelay.appleid.com", email.length() - 25); - } else { - return false; - } - } - } diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/OauthConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/OAuthConfig.java similarity index 96% rename from src/main/java/ssu/eatssu/domain/auth/infrastructure/OauthConfig.java rename to src/main/java/ssu/eatssu/domain/auth/infrastructure/OAuthConfig.java index 8c4d2f7e..7e70e0b6 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/OauthConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/OAuthConfig.java @@ -8,7 +8,7 @@ import org.springframework.web.client.RestTemplate; @Configuration -public class OauthConfig { +public class OAuthConfig { @Bean public RestTemplate restTemplate() { diff --git a/src/main/java/ssu/eatssu/domain/auth/presentation/OauthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java similarity index 85% rename from src/main/java/ssu/eatssu/domain/auth/presentation/OauthController.java rename to src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java index 9707c14e..4b6c080d 100644 --- a/src/main/java/ssu/eatssu/domain/auth/presentation/OauthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java @@ -13,9 +13,9 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import ssu.eatssu.domain.auth.service.OauthService; +import ssu.eatssu.domain.auth.service.OAuthService; import ssu.eatssu.global.handler.response.BaseResponse; -import ssu.eatssu.domain.auth.dto.AppleLogin; +import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.user.dto.Tokens; @@ -27,13 +27,10 @@ @RequestMapping("/oauths") @RequiredArgsConstructor @Tag(name = "Oauth", description = "Oauth API") -public class OauthController { +public class OAuthController { - private final OauthService oauthService; + private final OAuthService oauthService; - /** - * 카카오 회원가입, 로그인 - */ @Operation(summary = "카카오 회원가입, 로그인", description = """ 카카오 회원가입, 로그인 API 입니다.

가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. @@ -47,9 +44,6 @@ public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest req return BaseResponse.success(tokens); } - /** - * 애플 회원가입, 로그인 - */ @Operation(summary = "애플 회원가입, 로그인", description = """ 애플 로그인, 회원가입 API 입니다.

가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. @@ -59,10 +53,9 @@ public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest req @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping("/apple") - public BaseResponse appleLogin(@Valid @RequestBody AppleLogin login) - throws NoSuchAlgorithmException, - InvalidKeySpecException { - Tokens tokens = oauthService.appleLogin(login.getIdentityToken()); + public BaseResponse appleLogin(@Valid @RequestBody AppleLoginRequest request) + throws NoSuchAlgorithmException, InvalidKeySpecException { + Tokens tokens = oauthService.appleLogin(request); return BaseResponse.success(tokens); } diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java new file mode 100644 index 00000000..e9433958 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java @@ -0,0 +1,78 @@ +package ssu.eatssu.domain.auth.service; + + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import ssu.eatssu.domain.auth.dto.AppleLoginRequest; +import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; +import ssu.eatssu.domain.auth.entity.AppleAuthenticator; +import ssu.eatssu.domain.auth.entity.OAuthProvider; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.user.repository.UserRepository; +import ssu.eatssu.domain.user.service.UserService; +import ssu.eatssu.domain.auth.dto.OAuthInfo; +import ssu.eatssu.domain.user.dto.Tokens; + + +@Slf4j +@Service +@Transactional +@RequiredArgsConstructor +public class OAuthService { + + private final UserService userService; + private final UserRepository userRepository; + private final PasswordEncoder passwordEncoder; + private final AppleAuthenticator appleAuthenticator; + + public Tokens kakaoLogin(KakaoLoginRequest request) { + User user = userRepository.findByProviderId(request.providerId()) + .orElseGet(() -> join(request.email(), OAuthProvider.KAKAO, request.providerId())); + + return userService.generateOauthJwtTokens(user.getEmail(), OAuthProvider.KAKAO, + request.providerId()); + } + + public Tokens appleLogin(AppleLoginRequest request) { + OAuthInfo oAuthInfo = appleAuthenticator.getOAuthInfoByIdentityToken( + request.identityToken()); + + User user = userRepository.findByProviderId(oAuthInfo.providerId()) + .orElseGet(() -> join(oAuthInfo.email(), OAuthProvider.APPLE, oAuthInfo.providerId())); + + //todo 이메일 갱신의 이유? + updateAppleUserEmail(user, oAuthInfo.email()); + + return userService.generateOauthJwtTokens(user.getEmail(), OAuthProvider.APPLE, + oAuthInfo.providerId()); + } + + private User join(String email, OAuthProvider provider, String providerId) { + String credentials = createCredentials(provider, providerId); + + User user = User.oAuthJoin(email, provider, providerId, credentials); + return userRepository.save(user); + } + + private String createCredentials(OAuthProvider provider, String providerId) { + return passwordEncoder.encode(provider + "_" + providerId); + } + + private void updateAppleUserEmail(User user, String email) { + if (isHideEmail(user.getEmail()) && !isHideEmail(email)) { + user.updateEmail(email); + userRepository.save(user); + } + } + + private boolean isHideEmail(String email) { + if (email.length() > 25) { + return email.startsWith("@privaterelay.appleid.com", email.length() - 25); + } else { + return false; + } + } +} diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java index 3af65b58..d5d7d529 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java @@ -4,7 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.auth.entity.OauthProvider; +import ssu.eatssu.domain.auth.entity.OAuthProvider; @AllArgsConstructor @Builder @@ -15,5 +15,5 @@ public class MyPageResponse { private String nickname; @Schema(description = "연결 계정 정보", example = "피치푸치") - private OauthProvider provider; + private OAuthProvider provider; } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index eb3840e2..0e94e959 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -7,7 +7,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import org.jetbrains.annotations.NotNull; -import ssu.eatssu.domain.auth.entity.OauthProvider; +import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.Report; @@ -33,7 +33,7 @@ public class User extends BaseTimeEntity { private String nickname; @Enumerated(EnumType.STRING) - private OauthProvider provider; + private OAuthProvider provider; private String providerId; @@ -55,7 +55,7 @@ public class User extends BaseTimeEntity { /** * Oauth 회원가입 용 생성자 */ - private User(@NotNull String email, @NotNull Role role, @NotNull OauthProvider provider, + private User(@NotNull String email, @NotNull Role role, @NotNull OAuthProvider provider, @NotNull String providerId, @NotNull UserStatus status, @NotNull String credentials) { this.email = email; this.role = role; @@ -69,7 +69,7 @@ private User(@NotNull String email, @NotNull Role role, @NotNull OauthProvider p * <--Static Factory Method--> * Oauth 회원가입 */ - public static User oAuthJoin(@NotNull String email, @NotNull OauthProvider provider, String providerId, + public static User oAuthJoin(@NotNull String email, @NotNull OAuthProvider provider, String providerId, String credentials) { return new User(email, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials); } diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index c8961c47..36f78ad6 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -10,11 +10,11 @@ import org.springframework.security.core.Authentication; import org.springframework.stereotype.Service; import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.user.dto.MyPageResponse; import ssu.eatssu.domain.user.dto.UpdateNicknameRequest; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.auth.entity.OauthProvider; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.auth.entity.JwtTokenProvider; import ssu.eatssu.domain.user.dto.Tokens; @@ -66,7 +66,7 @@ public Boolean validateDuplicatedNickname(String nickname) { * Oauth 회원 - email, providerId 를 통해 JwtToken 을 생성 * todo: 같은 이메일로 카카오, 애플 등 여러 회원가입을 한 회원 처리 필요 */ - public Tokens generateOauthJwtTokens(String email, OauthProvider provider, String providerId) { + public Tokens generateOauthJwtTokens(String email, OAuthProvider provider, String providerId) { // email, credentials 를 기반으로 Authentication 객체 생성 // 이때 authentication 은 인증 여부를 확인하는 authenticated 값이 false @@ -83,7 +83,7 @@ public Tokens generateOauthJwtTokens(String email, OauthProvider provider, Strin return jwtTokenProvider.generateTokens(authentication); } - private String makeOauthCredentials(OauthProvider provider, String providerId) { + private String makeOauthCredentials(OAuthProvider provider, String providerId) { return provider + "_" + providerId; } diff --git a/src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java b/src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java new file mode 100644 index 00000000..58e03d83 --- /dev/null +++ b/src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java @@ -0,0 +1,12 @@ +package ssu.eatssu.domain.auth.infrastructure; + +import ssu.eatssu.domain.auth.dto.OAuthInfo; +import ssu.eatssu.domain.auth.entity.AppleAuthenticator; + +public class TestAppleAuthenticator implements AppleAuthenticator { + + @Override + public OAuthInfo getOAuthInfoByIdentityToken(String identityToken) { + return new OAuthInfo("test@test.com", "1234567890"); + } +} diff --git a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java b/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java index 8fa3d95d..62b9f522 100644 --- a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java @@ -1,25 +1,41 @@ package ssu.eatssu.domain.auth.service; import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; -import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.crypto.password.PasswordEncoder; +import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; +import ssu.eatssu.domain.auth.infrastructure.TestAppleAuthenticator; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; +import ssu.eatssu.domain.user.service.UserService; @SpringBootTest class OauthServiceTest { @Autowired - private OauthService oauthService; + private OAuthService oauthService; + + @Autowired + private UserService userService; @Autowired private UserRepository userRepository; + @Autowired + private PasswordEncoder passwordEncoder; + + @BeforeEach + void setUp() { + oauthService = new OAuthService(userService, userRepository, passwordEncoder, + new TestAppleAuthenticator()); + userRepository.deleteAll(); + } + @Test void 카카오로_회원가입을_한다() { // given @@ -35,4 +51,18 @@ class OauthServiceTest { assertThat(user.getProviderId()).isEqualTo(request.providerId()); } + @Test + void 애플로_회원가입을_한다() { + // given + AppleLoginRequest request = new AppleLoginRequest("eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi"); + + // when + oauthService.appleLogin(request); + User user = userRepository.findByProviderId("1234567890").get(); + + // then + assertThat(userRepository.findAll()).hasSize(1); + assertThat(user.getEmail()).isEqualTo("test@test.com"); + assertThat(user.getProviderId()).isEqualTo("1234567890"); + } } \ No newline at end of file From f0036faa490183b3b61aca50f236601a949e7c3f Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Thu, 18 Jan 2024 18:28:52 +0900 Subject: [PATCH 048/399] =?UTF-8?q?[#83]=20test=20:=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=EA=B0=80=EC=9E=85=EC=9D=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/presentation/OAuthController.java | 18 ++++-- .../domain/auth/service/OAuthService.java | 61 ++++++++++++++----- ...equest.java => NicknameUpdateRequest.java} | 2 +- .../ssu/eatssu/domain/user/entity/User.java | 2 +- .../user/presentation/UserController.java | 17 +----- .../domain/user/service/UserService.java | 53 ++++------------ .../domain/auth/service/OauthServiceTest.java | 16 +++-- .../domain/user/service/UserServiceTest.java | 22 +++++-- 8 files changed, 102 insertions(+), 89 deletions(-) rename src/main/java/ssu/eatssu/domain/user/dto/{UpdateNicknameRequest.java => NicknameUpdateRequest.java} (89%) diff --git a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java index 4b6c080d..683605bb 100644 --- a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java @@ -1,5 +1,7 @@ package ssu.eatssu.domain.auth.presentation; +import static ssu.eatssu.domain.auth.infrastructure.SecurityUtil.getLoginUser; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -19,9 +21,6 @@ import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.user.dto.Tokens; -import java.security.NoSuchAlgorithmException; -import java.security.spec.InvalidKeySpecException; - @Slf4j @RestController @RequestMapping("/oauths") @@ -53,10 +52,19 @@ public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest req @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping("/apple") - public BaseResponse appleLogin(@Valid @RequestBody AppleLoginRequest request) - throws NoSuchAlgorithmException, InvalidKeySpecException { + public BaseResponse appleLogin(@Valid @RequestBody AppleLoginRequest request) { Tokens tokens = oauthService.appleLogin(request); return BaseResponse.success(tokens); } + @Operation(summary = "토큰 재발급", description = "accessToken, refreshToken 재발급 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "토큰 재발급 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/reissue/token") + public BaseResponse refreshToken() { + Tokens tokens = oauthService.refreshTokens(getLoginUser()); + return BaseResponse.success(tokens); + } + } diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java index e9433958..0b01a712 100644 --- a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java @@ -1,20 +1,25 @@ package ssu.eatssu.domain.auth.service; +import static ssu.eatssu.domain.auth.entity.OAuthProvider.*; + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.core.Authentication; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.auth.entity.AppleAuthenticator; +import ssu.eatssu.domain.auth.entity.JwtTokenProvider; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; -import ssu.eatssu.domain.user.service.UserService; import ssu.eatssu.domain.auth.dto.OAuthInfo; import ssu.eatssu.domain.user.dto.Tokens; +import ssu.eatssu.domain.user.service.UserService; @Slf4j @@ -25,14 +30,16 @@ public class OAuthService { private final UserService userService; private final UserRepository userRepository; - private final PasswordEncoder passwordEncoder; private final AppleAuthenticator appleAuthenticator; + private final AuthenticationManagerBuilder authenticationManagerBuilder; + private final JwtTokenProvider jwtTokenProvider; public Tokens kakaoLogin(KakaoLoginRequest request) { User user = userRepository.findByProviderId(request.providerId()) - .orElseGet(() -> join(request.email(), OAuthProvider.KAKAO, request.providerId())); + .orElseGet( + () -> userService.join(request.email(), KAKAO, request.providerId())); - return userService.generateOauthJwtTokens(user.getEmail(), OAuthProvider.KAKAO, + return generateOauthJwtTokens(user.getEmail(), KAKAO, request.providerId()); } @@ -41,24 +48,21 @@ public Tokens appleLogin(AppleLoginRequest request) { request.identityToken()); User user = userRepository.findByProviderId(oAuthInfo.providerId()) - .orElseGet(() -> join(oAuthInfo.email(), OAuthProvider.APPLE, oAuthInfo.providerId())); + .orElseGet(() -> userService.join(oAuthInfo.email(), APPLE, + oAuthInfo.providerId())); //todo 이메일 갱신의 이유? updateAppleUserEmail(user, oAuthInfo.email()); - return userService.generateOauthJwtTokens(user.getEmail(), OAuthProvider.APPLE, + return generateOauthJwtTokens(user.getEmail(), APPLE, oAuthInfo.providerId()); } - private User join(String email, OAuthProvider provider, String providerId) { - String credentials = createCredentials(provider, providerId); - - User user = User.oAuthJoin(email, provider, providerId, credentials); - return userRepository.save(user); - } - - private String createCredentials(OAuthProvider provider, String providerId) { - return passwordEncoder.encode(provider + "_" + providerId); + /** + * JWT 토큰 재발급 + */ + public Tokens refreshTokens(Authentication authentication) { + return jwtTokenProvider.generateTokens(authentication); } private void updateAppleUserEmail(User user, String email) { @@ -75,4 +79,29 @@ private boolean isHideEmail(String email) { return false; } } + + /** + * Oauth 회원 - email, providerId 를 통해 JwtToken 을 생성 + * todo: 같은 이메일로 카카오, 애플 등 여러 회원가입을 한 회원 처리 필요 + */ + private Tokens generateOauthJwtTokens(String email, OAuthProvider provider, String providerId) { + // email, credentials 를 기반으로 Authentication 객체 생성 + // 이때 authentication 은 인증 여부를 확인하는 authenticated 값이 false + UsernamePasswordAuthenticationToken authenticationToken = + new UsernamePasswordAuthenticationToken(email, + makeOauthCredentials(provider, providerId)); + + // 실제 검증 (사용자 비밀번호 체크) + // authenticate 메서드 실행 => CustomUserDetailsService 에서 만든 loadUserByUsername 메서드 실행 + Authentication authentication = authenticationManagerBuilder.getObject() + .authenticate(authenticationToken); + + // 인증 정보를 바탕으로 JWT 토큰 생성 + return jwtTokenProvider.generateTokens(authentication); + } + + private String makeOauthCredentials(OAuthProvider provider, String providerId) { + return provider + "_" + providerId; + } + } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/UpdateNicknameRequest.java b/src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java similarity index 89% rename from src/main/java/ssu/eatssu/domain/user/dto/UpdateNicknameRequest.java rename to src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java index 99c4d920..22743246 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/UpdateNicknameRequest.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java @@ -4,7 +4,7 @@ import jakarta.validation.constraints.NotBlank; @Schema(title = "닉네임 수정") -public record UpdateNicknameRequest( +public record NicknameUpdateRequest( @NotBlank(message = "닉네임을 입력해주세요.") @Schema(description = "닉네임", example = "jumukzzang") String nickname) { } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index 0e94e959..37fcfbae 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -69,7 +69,7 @@ private User(@NotNull String email, @NotNull Role role, @NotNull OAuthProvider p * <--Static Factory Method--> * Oauth 회원가입 */ - public static User oAuthJoin(@NotNull String email, @NotNull OAuthProvider provider, String providerId, + public static User create(@NotNull String email, @NotNull OAuthProvider provider, String providerId, String credentials) { return new User(email, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials); } diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 2a407966..d366fcd5 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -1,7 +1,5 @@ package ssu.eatssu.domain.user.presentation; -import static ssu.eatssu.domain.auth.infrastructure.SecurityUtil.getLoginUser; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; @@ -23,8 +21,7 @@ import ssu.eatssu.domain.user.dto.MyPageResponse; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.domain.slice.service.SliceService; -import ssu.eatssu.domain.user.dto.UpdateNicknameRequest; -import ssu.eatssu.domain.user.dto.Tokens; +import ssu.eatssu.domain.user.dto.NicknameUpdateRequest; import ssu.eatssu.domain.user.service.UserService; import ssu.eatssu.global.handler.response.BaseResponse; @@ -70,7 +67,7 @@ public BaseResponse validateDuplicatedNickname(@Parameter(description = }) @PatchMapping("/nickname") public BaseResponse updateNickname( - @Valid @RequestBody UpdateNicknameRequest updateNicknameRequest, + @Valid @RequestBody NicknameUpdateRequest updateNicknameRequest, @AuthenticationPrincipal CustomUserDetails userDetails) { userService.updateNickname(userDetails, updateNicknameRequest); return BaseResponse.success(); @@ -112,14 +109,4 @@ public BaseResponse getMyPage( @AuthenticationPrincipal CustomUserDetails customUserDetails) { return BaseResponse.success(userService.findMyPage(customUserDetails)); } - - @Operation(summary = "토큰 재발급", description = "accessToken, refreshToken 재발급 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "토큰 재발급 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/token/reissue") - public BaseResponse refreshToken() { - Tokens tokens = userService.refreshTokens(getLoginUser()); - return BaseResponse.success(tokens); - } } diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index 36f78ad6..4b7dccec 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -5,19 +5,15 @@ import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.core.Authentication; +import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import ssu.eatssu.domain.auth.entity.CustomUserDetails; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.user.dto.MyPageResponse; -import ssu.eatssu.domain.user.dto.UpdateNicknameRequest; +import ssu.eatssu.domain.user.dto.NicknameUpdateRequest; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; -import ssu.eatssu.domain.auth.entity.JwtTokenProvider; -import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.global.handler.response.BaseException; @Slf4j @@ -27,15 +23,20 @@ public class UserService { private final UserRepository userRepository; - private final AuthenticationManagerBuilder authenticationManagerBuilder; - private final JwtTokenProvider jwtTokenProvider; + private final PasswordEncoder passwordEncoder; - public void updateNickname(CustomUserDetails userDetails, UpdateNicknameRequest request) { + + public User join(String email, OAuthProvider provider, String providerId) { + String credentials = createCredentials(provider, providerId); + User user = User.create(email, provider, providerId, credentials); + return userRepository.save(user); + } + + public void updateNickname(CustomUserDetails userDetails, NicknameUpdateRequest request) { User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); user.updateNickname(request.nickname()); - userRepository.save(user); } public MyPageResponse findMyPage(CustomUserDetails userDetails) { @@ -62,35 +63,7 @@ public Boolean validateDuplicatedNickname(String nickname) { return !userRepository.existsByNickname(nickname); } - /** - * Oauth 회원 - email, providerId 를 통해 JwtToken 을 생성 - * todo: 같은 이메일로 카카오, 애플 등 여러 회원가입을 한 회원 처리 필요 - */ - public Tokens generateOauthJwtTokens(String email, OAuthProvider provider, String providerId) { - - // email, credentials 를 기반으로 Authentication 객체 생성 - // 이때 authentication 은 인증 여부를 확인하는 authenticated 값이 false - UsernamePasswordAuthenticationToken authenticationToken = - new UsernamePasswordAuthenticationToken(email, - makeOauthCredentials(provider, providerId)); - - // 실제 검증 (사용자 비밀번호 체크) - // authenticate 메서드 실행 => CustomUserDetailsService 에서 만든 loadUserByUsername 메서드 실행 - Authentication authentication = authenticationManagerBuilder.getObject() - .authenticate(authenticationToken); - - // 인증 정보를 바탕으로 JWT 토큰 생성 - return jwtTokenProvider.generateTokens(authentication); - } - - private String makeOauthCredentials(OAuthProvider provider, String providerId) { - return provider + "_" + providerId; - } - - /** - * JWT 토큰 재발급 - */ - public Tokens refreshTokens(Authentication authentication) { - return jwtTokenProvider.generateTokens(authentication); + private String createCredentials(OAuthProvider provider, String providerId) { + return passwordEncoder.encode(provider + "_" + providerId); } } diff --git a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java b/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java index 62b9f522..7cd81312 100644 --- a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java @@ -6,9 +6,11 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.crypto.password.PasswordEncoder; import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; +import ssu.eatssu.domain.auth.entity.JwtTokenProvider; import ssu.eatssu.domain.auth.infrastructure.TestAppleAuthenticator; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; @@ -27,12 +29,16 @@ class OauthServiceTest { private UserRepository userRepository; @Autowired - private PasswordEncoder passwordEncoder; + private AuthenticationManagerBuilder authenticationManagerBuilder; + + @Autowired + private JwtTokenProvider jwtTokenProvider; + @BeforeEach void setUp() { - oauthService = new OAuthService(userService, userRepository, passwordEncoder, - new TestAppleAuthenticator()); + oauthService = new OAuthService(userService, userRepository, + new TestAppleAuthenticator(), authenticationManagerBuilder, jwtTokenProvider); userRepository.deleteAll(); } @@ -43,9 +49,9 @@ void setUp() { // when oauthService.kakaoLogin(request); - User user = userRepository.findByProviderId(request.providerId()).get(); // then + User user = userRepository.findByProviderId(request.providerId()).get(); assertThat(userRepository.findAll()).hasSize(1); assertThat(user.getEmail()).isEqualTo(request.email()); assertThat(user.getProviderId()).isEqualTo(request.providerId()); @@ -58,9 +64,9 @@ void setUp() { // when oauthService.appleLogin(request); - User user = userRepository.findByProviderId("1234567890").get(); // then + User user = userRepository.findByProviderId("1234567890").get(); assertThat(userRepository.findAll()).hasSize(1); assertThat(user.getEmail()).isEqualTo("test@test.com"); assertThat(user.getProviderId()).isEqualTo("1234567890"); diff --git a/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java b/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java index ea9812e3..95f5349e 100644 --- a/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java @@ -1,11 +1,16 @@ package ssu.eatssu.domain.user.service; -import static org.junit.jupiter.api.Assertions.*; +import static org.assertj.core.api.Assertions.*; import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.auth.entity.OAuthProvider; +import ssu.eatssu.domain.user.dto.NicknameUpdateRequest; +import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; @SpringBootTest @@ -16,14 +21,19 @@ class UserServiceTest { @Autowired private UserRepository userRepository; + @BeforeEach + void setUp() { + userRepository.deleteAll(); + userRepository.flush(); + } + @Test - void 회원_탈퇴_성공시_참을_반환한다() { - // given + void 회원가입을_한다() { + // given & when + userService.join("test@test.com", OAuthProvider.EATSSU, "1234"); - // when // then - Assertions.assertThat(userRepository.findAll()).hasSize(0); - + assertThat(userRepository.findAll()).hasSize(1); } } \ No newline at end of file From e022c91bff9c1dd68db5ea6d1ee9e5dd9632e21b Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Thu, 18 Jan 2024 18:37:05 +0900 Subject: [PATCH 049/399] =?UTF-8?q?[#83]=20test=20:=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=20=ED=83=88=ED=87=B4=EC=99=80=20=EB=8B=89=EB=84=A4=EC=9E=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=EC=9D=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/service/UserServiceTest.java | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java b/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java index 95f5349e..0e4a355b 100644 --- a/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java @@ -3,6 +3,7 @@ import static org.assertj.core.api.Assertions.*; import org.assertj.core.api.Assertions; +import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -30,10 +31,45 @@ void setUp() { @Test void 회원가입을_한다() { // given & when - userService.join("test@test.com", OAuthProvider.EATSSU, "1234"); + 회원가입_요청(); // then assertThat(userRepository.findAll()).hasSize(1); } -} \ No newline at end of file + @Test + void 닉네임을_변경한다() { + // given + User user = 회원가입_요청(); + CustomUserDetails userDetails = UserDetails_생성(user); + + // when + userService.updateNickname(userDetails, new NicknameUpdateRequest("newNickname")); + + // then + user = userRepository.findById(userDetails.getId()).orElseThrow(); + assertThat(user.getNickname()).isEqualTo("newNickname"); + } + + @Test + void 회원탈퇴를_한다() { + // given + User user = 회원가입_요청(); + CustomUserDetails userDetails = UserDetails_생성(user); + + // when + userService.withdraw(userDetails); + + // then + assertThat(userRepository.findAll()).hasSize(0); + } + + private User 회원가입_요청() { + return userService.join("test@test.com", OAuthProvider.EATSSU, "1234"); + } + + @NotNull + private CustomUserDetails UserDetails_생성(User user) { + return new CustomUserDetails(user); + } +} From 8bdb950904c9b08a4530b6e85e1d0d2a31b82cb3 Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Thu, 18 Jan 2024 18:51:35 +0900 Subject: [PATCH 050/399] =?UTF-8?q?[#83]=20test=20:=20=EC=A4=91=EB=B3=B5?= =?UTF-8?q?=20=EC=9D=B4=EB=A9=94=EC=9D=BC=EC=9D=84=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/user/service/UserServiceTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java b/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java index 0e4a355b..5fe920f2 100644 --- a/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java @@ -64,6 +64,18 @@ void setUp() { assertThat(userRepository.findAll()).hasSize(0); } + @Test + void 중복_이메일을_확인한다() { + // given + User user = 회원가입_요청(); + + // when + boolean isDuplicated = userService.validateDuplicatedEmail(user.getEmail()); + + // then + assertThat(isDuplicated).isFalse(); + } + private User 회원가입_요청() { return userService.join("test@test.com", OAuthProvider.EATSSU, "1234"); } From 2cd2361d67db75ac3ff5d32a33bb4b1a13202366 Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Thu, 18 Jan 2024 19:27:54 +0900 Subject: [PATCH 051/399] =?UTF-8?q?[#83]=20refactor=20:=20Restaurant=20Ent?= =?UTF-8?q?ity=EB=A5=BC=20Enum=20=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/menu/entity/Meal.java | 4 +- .../ssu/eatssu/domain/menu/entity/Menu.java | 17 ++++--- .../eatssu/domain/menu/entity/MenuType.java | 16 ++---- .../menu/presentation/MealController.java | 10 ++-- .../menu/presentation/MenuController.java | 6 +-- .../menu/repository/MealRepository.java | 5 +- .../menu/repository/MenuRepository.java | 1 + .../domain/menu/service/MenuService.java | 24 +++------ .../domain/menu/util/MenuValidator.java | 3 -- .../domain/restaurant/entity/Restaurant.java | 50 ++++++++++++------- .../restaurant/entity/RestaurantName.java | 43 ---------------- .../restaurant/entity/TemporalRestaurant.java | 29 +++++++++++ .../repository/RestaurantRepository.java | 6 +-- 13 files changed, 101 insertions(+), 113 deletions(-) delete mode 100644 src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java create mode 100644 src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index 406f218a..2062ea6a 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import java.util.*; @@ -27,8 +28,7 @@ public class Meal { @Enumerated(EnumType.STRING) private TimePart timePart; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "restaurant_id") + @Embedded private Restaurant restaurant; @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL) diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index 7c43e365..583221f7 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -3,6 +3,7 @@ import jakarta.persistence.*; import lombok.*; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import java.util.ArrayList; import java.util.List; @@ -29,8 +30,7 @@ public class Menu { @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) private List mealMenus = new ArrayList<>(); - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "restaurant_id") + @Embedded private Restaurant restaurant; @Embedded @@ -42,14 +42,19 @@ private Menu(String name, Restaurant restaurant, Integer price) { this.price = price; } + private Menu(String name, Integer price) { + this.name = name; + this.price = price; + } + /** * 변동 메뉴를 생성합니다. * todo: 변동메뉴 식당이 아니라 고정 메뉴 식당으로 잘못 들어온다면 어떻게 처리? */ - public static Menu createChangeMenu(String name, Restaurant restaurant) { + public static Menu createVariable(String name, Restaurant restaurant) { int price = 0; - if (MenuType.isChanged(restaurant.getRestaurantName())) { - price = restaurant.getRestaurantName().getPrice(); + if (restaurant.isVariable()) { + price = restaurant.getPrice(); } return new Menu(name, restaurant, price); } @@ -58,7 +63,7 @@ public static Menu createChangeMenu(String name, Restaurant restaurant) { * 고정 메뉴를 생성합니다. * todo: 고정메뉴 식당이 아니라 변동 메뉴 식당으로 잘못 들어온다면 어떻게 처리? */ - public static Menu createFixedMenu(String name, Restaurant restaurant, Integer price) { + public static Menu createFixed(String name, Restaurant restaurant, Integer price) { return new Menu(name, restaurant, price); } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java b/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java index 5c1b34ab..6baf67bd 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java @@ -5,9 +5,9 @@ import java.util.Arrays; import java.util.List; -import ssu.eatssu.domain.restaurant.entity.RestaurantName; +import ssu.eatssu.domain.restaurant.entity.Restaurant; -import static ssu.eatssu.domain.restaurant.entity.RestaurantName.*; +import static ssu.eatssu.domain.restaurant.entity.Restaurant.*; @Getter @@ -16,21 +16,13 @@ public enum MenuType { VARIABLE("변동 메뉴", Arrays.asList(DODAM, DORMITORY, HAKSIK)); private final String description; - private final List restaurants; + private final List restaurants; - MenuType(String description, List restaurants) { + MenuType(String description, List restaurants) { this.description = description; this.restaurants = restaurants; } - public static boolean isFixed(RestaurantName restaurant) { - return FIXED.getRestaurants().contains(restaurant); - } - - public static boolean isChanged(RestaurantName restaurant) { - return VARIABLE.getRestaurants().contains(restaurant); - } - @JsonCreator public static MenuType from(String description) { return Arrays.stream(MenuType.values()) diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java index 5266959c..b97024f7 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java @@ -26,7 +26,7 @@ import ssu.eatssu.domain.menu.dto.MenuRequest.CreateMealRequest; import ssu.eatssu.domain.menu.dto.MenuResponse.MealInformationResponse; import ssu.eatssu.domain.menu.service.MenuService; -import ssu.eatssu.domain.restaurant.entity.RestaurantName; +import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponse; @@ -52,10 +52,10 @@ public class MealController { @PostMapping("") public BaseResponse createMeal( @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당이름") @RequestParam("restaurant") RestaurantName restaurantName, + @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurantName, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, @RequestBody CreateMealRequest createMealRequest) { - if (RestaurantName.isFixed(restaurantName)) { + if (restaurantName.isFixed()) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } @@ -76,9 +76,9 @@ public BaseResponse createMeal( @GetMapping("") public BaseResponse> getMeal( @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당 이름") @RequestParam("restaurant") RestaurantName restaurantName, + @Parameter(description = "식당 이름") @RequestParam("restaurant") Restaurant restaurantName, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { - if (RestaurantName.isFixed(restaurantName)) { + if (restaurantName.isFixed()) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java index ca4d8f65..d4074d14 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java @@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.menu.dto.MenuResponse.MenuInformationResponse; import ssu.eatssu.domain.menu.dto.MenuResponse.MenusInformationResponse; -import ssu.eatssu.domain.restaurant.entity.RestaurantName; +import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.domain.menu.service.MenuService; @@ -39,8 +39,8 @@ public class MenuController { }) @GetMapping("") public BaseResponse> getMenus( - @RequestParam("restaurant") RestaurantName restaurantName) { - if (RestaurantName.isVariable(restaurantName)) { + @RequestParam("restaurant") Restaurant restaurantName) { + if (restaurantName.isVariable()) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } return BaseResponse.success(menuService.findMenusByRestaurant(restaurantName)); diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java b/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java index 29cb3c56..e8bd8de2 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java @@ -3,11 +3,14 @@ import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import ssu.eatssu.domain.menu.entity.TimePart; import java.util.Date; import java.util.List; public interface MealRepository extends JpaRepository { - List findAllByDateAndTimePartAndRestaurant(Date date, TimePart timePart, Restaurant restaurant); + + List findAllByDateAndTimePartAndRestaurant(Date date, TimePart timePart, + Restaurant restaurant); } diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java index da3b7605..0d03ad97 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java @@ -3,6 +3,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import java.util.List; import java.util.Optional; diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index 7bc50b6e..8e4bdf91 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -13,7 +13,7 @@ import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.RestaurantName; +import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import ssu.eatssu.domain.menu.entity.TimePart; import ssu.eatssu.domain.menu.repository.MealMenuRepository; import ssu.eatssu.domain.menu.repository.MealRepository; @@ -35,10 +35,8 @@ public class MenuService { private final MenuRepository menuRepository; private final MealRepository mealRepository; private final MealMenuRepository mealMenuRepository; - private final RestaurantRepository restaurantRepository; - public List findMenusByRestaurant(RestaurantName restaurantName) { - Restaurant restaurant = getRestaurant(restaurantName); + public List findMenusByRestaurant(Restaurant restaurant) { List menus = menuRepository.findAllByRestaurant(restaurant); return menus.stream() @@ -47,9 +45,8 @@ public List findMenusByRestaurant(RestaurantName restau } public List findSpecificMeals(Date date, - RestaurantName restaurantName, + Restaurant restaurant, TimePart timePart) { - Restaurant restaurant = getRestaurant(restaurantName); List meals = getMeals(date, timePart, restaurant); return meals.stream() @@ -57,9 +54,8 @@ public List findSpecificMeals(Date date, .toList(); } - public void createMeal(Date date, RestaurantName restaurantName, TimePart timePart, + public void createMeal(Date date, Restaurant restaurant, TimePart timePart, CreateMealRequest request) { - Restaurant restaurant = getRestaurant(restaurantName); List meals = getMeals(date, timePart, restaurant); if (MenuValidator.validateExistedMeal(meals, @@ -95,10 +91,10 @@ private void addMenu(Meal meal, CreateMealRequest request) { private void checkAndCreateMenu(String menuName, Restaurant restaurant) { if (!menuRepository.existsByNameAndRestaurant(menuName, restaurant)) { - menuRepository.save(Menu.createChangeMenu(menuName, restaurant)); + menuRepository.save(Menu.createVariable(menuName, restaurant)); } - menuRepository.save(Menu.createChangeMenu(menuName, restaurant)); + menuRepository.save(Menu.createVariable(menuName, restaurant)); } public MenusInformationResponse findMenusInMeal(Long mealId) { @@ -119,7 +115,7 @@ public void deleteMeal(Long mealId) { cleanupGarbageMenu(menus); } - public void cleanupGarbageMenu(List menuList) { + private void cleanupGarbageMenu(List menuList) { for (Menu menu : menuList) { if (menu.getMealMenus().isEmpty()) { menuRepository.delete(menu); @@ -144,10 +140,4 @@ private List getMeals(Date date, TimePart timePart, Restaurant restaurant) timePart, restaurant); return meals; } - - private Restaurant getRestaurant(RestaurantName restaurantName) { - Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); - return restaurant; - } } diff --git a/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java b/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java index 05d6b01d..10bb2173 100644 --- a/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java +++ b/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java @@ -2,13 +2,10 @@ import java.util.ArrayList; import java.util.Collections; -import java.util.Date; import java.util.List; import lombok.RequiredArgsConstructor; -import ssu.eatssu.domain.menu.entity.TimePart; import ssu.eatssu.domain.menu.dto.MenuRequest.CreateMealRequest; import ssu.eatssu.domain.menu.entity.Meal; -import ssu.eatssu.domain.restaurant.entity.Restaurant; @RequiredArgsConstructor public class MenuValidator { diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index 73b9f05b..2f6dcb1a 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -1,29 +1,43 @@ package ssu.eatssu.domain.restaurant.entity; -import jakarta.persistence.*; -import lombok.AccessLevel; +import com.fasterxml.jackson.annotation.JsonCreator; +import java.util.Arrays; import lombok.Getter; -import lombok.NoArgsConstructor; -import java.util.List; -import ssu.eatssu.domain.menu.entity.Meal; -import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponseStatus; -@Entity @Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class Restaurant { +public enum Restaurant { + DODAM(RestaurantType.VARIABLE, "도담 식당", 6000), + DORMITORY(RestaurantType.VARIABLE, "기숙사 식당", 5000), + FOOD_COURT(RestaurantType.FIXED, "푸드 코트", null), + SNACK_CORNER(RestaurantType.FIXED, "스낵 코너", null), + HAKSIK(RestaurantType.VARIABLE, "학생 식당", 5000); - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "restaurant_id") - private Long id; + private RestaurantType restaurantType; + private String restaurantName; + private Integer price; - @Enumerated(EnumType.STRING) - private RestaurantName restaurantName; + @JsonCreator + public static Restaurant from(String restaurantName) { + return Arrays.stream(Restaurant.values()) + .filter(r -> r.getRestaurantName().equals(restaurantName)) + .findAny() + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); + } - @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) - private List menus; + Restaurant(RestaurantType restaurantType, String description, Integer price) { + this.restaurantType = restaurantType; + this.restaurantName = description; + this.price = price; + } - @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) - private List meals; + public boolean isFixed() { + return this.restaurantType == RestaurantType.FIXED; + } + + public boolean isVariable() { + return this.restaurantType == RestaurantType.VARIABLE; + } } diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java deleted file mode 100644 index d5dd016c..00000000 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java +++ /dev/null @@ -1,43 +0,0 @@ -package ssu.eatssu.domain.restaurant.entity; - -import com.fasterxml.jackson.annotation.JsonCreator; -import java.util.Arrays; -import lombok.Getter; - -import ssu.eatssu.global.handler.response.BaseException; -import ssu.eatssu.global.handler.response.BaseResponseStatus; - -@Getter -public enum RestaurantName { - DODAM(RestaurantType.VARIABLE, "도담 식당", 6000), - DORMITORY(RestaurantType.VARIABLE, "기숙사 식당", 5000), - FOOD_COURT(RestaurantType.FIXED, "푸드 코트", null), - SNACK_CORNER(RestaurantType.FIXED, "스낵 코너", null), - HAKSIK(RestaurantType.VARIABLE, "학생 식당", 5000); - - private RestaurantType restaurantType; - private String description; - private Integer price; - - @JsonCreator - public static RestaurantName from(String description) { - return Arrays.stream(RestaurantName.values()) - .filter(d -> d.getDescription().equals(description)) - .findAny() - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); - } - - RestaurantName(RestaurantType restaurantType, String description, Integer price) { - this.restaurantType = restaurantType; - this.description = description; - this.price = price; - } - - public static boolean isFixed(RestaurantName restaurantName) { - return restaurantName.getRestaurantType() == RestaurantType.FIXED; - } - - public static boolean isVariable(RestaurantName restaurantName) { - return restaurantName.getRestaurantType() == RestaurantType.VARIABLE; - } -} diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java new file mode 100644 index 00000000..47ccf470 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java @@ -0,0 +1,29 @@ +package ssu.eatssu.domain.restaurant.entity; + +import jakarta.persistence.*; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.Menu; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class TemporalRestaurant { + + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "restaurant_id") + private Long id; + + @Enumerated(EnumType.STRING) + private Restaurant restaurantName; + + @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) + private List menus; + + @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) + private List meals; +} diff --git a/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java b/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java index c70df859..072113cc 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java @@ -2,12 +2,12 @@ import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.RestaurantName; +import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import java.util.Optional; -public interface RestaurantRepository extends JpaRepository { +public interface RestaurantRepository extends JpaRepository { - Optional findByRestaurantName(RestaurantName restaurantName); + Optional findByRestaurantName(Restaurant restaurantName); } From 65720bec77d20e0d91c24898f88916f5f71354e9 Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Thu, 18 Jan 2024 20:07:17 +0900 Subject: [PATCH 052/399] =?UTF-8?q?[#83]=20test=20:=20=EC=8B=9D=EB=8B=B9?= =?UTF-8?q?=20=EC=9D=B4=EB=A6=84=EC=9C=BC=EB=A1=9C=20=EA=B3=A0=EC=A0=95=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EC=A1=B0=ED=9A=8C=EB=A5=BC=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/menu/dto/MenuResponse.java | 2 +- .../ssu/eatssu/domain/menu/entity/Meal.java | 2 - .../ssu/eatssu/domain/menu/entity/Menu.java | 21 +------ .../menu/presentation/MenuController.java | 6 +- .../menu/repository/MealRepository.java | 1 - .../menu/repository/MenuRepository.java | 1 - .../domain/menu/service/MenuService.java | 2 - .../domain/restaurant/entity/Restaurant.java | 5 +- .../restaurant/entity/TemporalRestaurant.java | 58 +++++++++---------- .../repository/RestaurantRepository.java | 26 ++++----- .../domain/menu/service/MenuServiceTest.java | 38 ++++++++++++ 11 files changed, 90 insertions(+), 72 deletions(-) create mode 100644 src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java b/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java index 202d197b..27f531b0 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java @@ -40,7 +40,7 @@ public static MealInformationResponse from(Meal meal) { .map(BriefMenuInformation::new).toList(); return new MealInformationResponse(meal.getId(), - meal.getRestaurant().getRestaurantName().getPrice(), + meal.getRestaurant().getRestaurantPrice(), meal.getAverateMainRating(), menusInformation); } else { return null; diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index 2062ea6a..be9f323c 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -7,8 +7,6 @@ import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; - import java.util.*; @Entity diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index 583221f7..1ce2ea7c 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -3,7 +3,6 @@ import jakarta.persistence.*; import lombok.*; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import java.util.ArrayList; import java.util.List; @@ -24,13 +23,12 @@ public class Menu { private Integer price; - @Enumerated(EnumType.STRING) - private MenuType menuType; +// @Enumerated(EnumType.STRING) +// private MenuType menuType; @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) private List mealMenus = new ArrayList<>(); - @Embedded private Restaurant restaurant; @Embedded @@ -42,27 +40,14 @@ private Menu(String name, Restaurant restaurant, Integer price) { this.price = price; } - private Menu(String name, Integer price) { - this.name = name; - this.price = price; - } - - /** - * 변동 메뉴를 생성합니다. - * todo: 변동메뉴 식당이 아니라 고정 메뉴 식당으로 잘못 들어온다면 어떻게 처리? - */ public static Menu createVariable(String name, Restaurant restaurant) { int price = 0; if (restaurant.isVariable()) { - price = restaurant.getPrice(); + price = restaurant.getRestaurantPrice(); } return new Menu(name, restaurant, price); } - /** - * 고정 메뉴를 생성합니다. - * todo: 고정메뉴 식당이 아니라 변동 메뉴 식당으로 잘못 들어온다면 어떻게 처리? - */ public static Menu createFixed(String name, Restaurant restaurant, Integer price) { return new Menu(name, restaurant, price); } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java index d4074d14..fe0be913 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java @@ -39,11 +39,11 @@ public class MenuController { }) @GetMapping("") public BaseResponse> getMenus( - @RequestParam("restaurant") Restaurant restaurantName) { - if (restaurantName.isVariable()) { + @RequestParam("restaurant") Restaurant restaurant) { + if (restaurant.isVariable()) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } - return BaseResponse.success(menuService.findMenusByRestaurant(restaurantName)); + return BaseResponse.success(menuService.findMenusByRestaurant(restaurant)); } @Operation(summary = "메뉴 정보 리스트 조회", description = """ diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java b/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java index e8bd8de2..4041efa9 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java @@ -3,7 +3,6 @@ import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import ssu.eatssu.domain.menu.entity.TimePart; import java.util.Date; diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java index 0d03ad97..da3b7605 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java @@ -3,7 +3,6 @@ import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import java.util.List; import java.util.Optional; diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index 8e4bdf91..fd62597c 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -13,12 +13,10 @@ import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import ssu.eatssu.domain.menu.entity.TimePart; import ssu.eatssu.domain.menu.repository.MealMenuRepository; import ssu.eatssu.domain.menu.repository.MealRepository; import ssu.eatssu.domain.menu.repository.MenuRepository; -import ssu.eatssu.domain.restaurant.repository.RestaurantRepository; import ssu.eatssu.global.handler.response.BaseException; import java.util.List; diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index 2f6dcb1a..8cd753e1 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -7,6 +7,7 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; + @Getter public enum Restaurant { DODAM(RestaurantType.VARIABLE, "도담 식당", 6000), @@ -17,7 +18,7 @@ public enum Restaurant { private RestaurantType restaurantType; private String restaurantName; - private Integer price; + private Integer restaurantPrice; @JsonCreator public static Restaurant from(String restaurantName) { @@ -30,7 +31,7 @@ public static Restaurant from(String restaurantName) { Restaurant(RestaurantType restaurantType, String description, Integer price) { this.restaurantType = restaurantType; this.restaurantName = description; - this.price = price; + this.restaurantPrice = price; } public boolean isFixed() { diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java index 47ccf470..aafc619b 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java @@ -1,29 +1,29 @@ -package ssu.eatssu.domain.restaurant.entity; - -import jakarta.persistence.*; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; - -import java.util.List; -import ssu.eatssu.domain.menu.entity.Meal; -import ssu.eatssu.domain.menu.entity.Menu; - -@Entity -@Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class TemporalRestaurant { - - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "restaurant_id") - private Long id; - - @Enumerated(EnumType.STRING) - private Restaurant restaurantName; - - @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) - private List menus; - - @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) - private List meals; -} +//package ssu.eatssu.domain.restaurant.entity; +// +//import jakarta.persistence.*; +//import lombok.AccessLevel; +//import lombok.Getter; +//import lombok.NoArgsConstructor; +// +//import java.util.List; +//import ssu.eatssu.domain.menu.entity.Meal; +//import ssu.eatssu.domain.menu.entity.Menu; +// +//@Entity +//@Getter +//@NoArgsConstructor(access = AccessLevel.PROTECTED) +//public class TemporalRestaurant { +// +// @Id @GeneratedValue(strategy = GenerationType.IDENTITY) +// @Column(name = "restaurant_id") +// private Long id; +// +// @Enumerated(EnumType.STRING) +// private Restaurant restaurantName; +// +// @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) +// private List menus; +// +// @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) +// private List meals; +//} diff --git a/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java b/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java index 072113cc..d8bcbcd3 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java @@ -1,13 +1,13 @@ -package ssu.eatssu.domain.restaurant.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; - -import java.util.Optional; - -public interface RestaurantRepository extends JpaRepository { - - Optional findByRestaurantName(Restaurant restaurantName); - -} +//package ssu.eatssu.domain.restaurant.repository; +// +//import org.springframework.data.jpa.repository.JpaRepository; +//import ssu.eatssu.domain.restaurant.entity.Restaurant; +//import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; +// +//import java.util.Optional; +// +//public interface RestaurantRepository extends JpaRepository { +// +// Optional findByRestaurantName(Restaurant restaurantName); +// +//} diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java new file mode 100644 index 00000000..06013e98 --- /dev/null +++ b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java @@ -0,0 +1,38 @@ +package ssu.eatssu.domain.menu.service; + +import java.util.ArrayList; +import java.util.List; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import ssu.eatssu.domain.menu.dto.MenuResponse.MenuInformationResponse; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.menu.repository.MenuRepository; +import ssu.eatssu.domain.restaurant.entity.Restaurant; + +@SpringBootTest +class MenuServiceTest { + + @Autowired + private MenuService menuService; + + @Autowired + private MenuRepository menuRepository; + + @Test + void 식당_이름으로_고정_메뉴를_조회한다() { + // given + List menus = new ArrayList<>(); + Restaurant foodCourt = Restaurant.from("푸드 코트"); + menus.add(Menu.createFixed("라면", foodCourt, 3000)); + menus.add(Menu.createFixed("떡볶이", foodCourt, 5000)); + menus.add(Menu.createFixed("짜게치", foodCourt, 4000)); + menuRepository.saveAll(menus); + + // when & then + Assertions.assertThat(menuService.findMenusByRestaurant(foodCourt)) + .extracting(MenuInformationResponse::getName) + .containsExactly("라면", "떡볶이", "짜게치"); + } +} \ No newline at end of file From ec06845d736c536f3e8748f6957c7507be8705de Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Thu, 18 Jan 2024 19:27:54 +0900 Subject: [PATCH 053/399] =?UTF-8?q?[#85]=20refactor=20:=20Restaurant=20Ent?= =?UTF-8?q?ity=EB=A5=BC=20Enum=20=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/menu/entity/Meal.java | 4 +- .../ssu/eatssu/domain/menu/entity/Menu.java | 17 ++++--- .../eatssu/domain/menu/entity/MenuType.java | 16 ++---- .../menu/presentation/MealController.java | 10 ++-- .../menu/presentation/MenuController.java | 6 +-- .../menu/repository/MealRepository.java | 5 +- .../menu/repository/MenuRepository.java | 1 + .../domain/menu/service/MenuService.java | 24 +++------ .../domain/menu/util/MenuValidator.java | 3 -- .../domain/restaurant/entity/Restaurant.java | 50 ++++++++++++------- .../restaurant/entity/RestaurantName.java | 43 ---------------- .../restaurant/entity/TemporalRestaurant.java | 29 +++++++++++ .../repository/RestaurantRepository.java | 6 +-- 13 files changed, 101 insertions(+), 113 deletions(-) delete mode 100644 src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java create mode 100644 src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index 406f218a..2062ea6a 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import java.util.*; @@ -27,8 +28,7 @@ public class Meal { @Enumerated(EnumType.STRING) private TimePart timePart; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "restaurant_id") + @Embedded private Restaurant restaurant; @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL) diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index 7c43e365..583221f7 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -3,6 +3,7 @@ import jakarta.persistence.*; import lombok.*; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import java.util.ArrayList; import java.util.List; @@ -29,8 +30,7 @@ public class Menu { @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) private List mealMenus = new ArrayList<>(); - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "restaurant_id") + @Embedded private Restaurant restaurant; @Embedded @@ -42,14 +42,19 @@ private Menu(String name, Restaurant restaurant, Integer price) { this.price = price; } + private Menu(String name, Integer price) { + this.name = name; + this.price = price; + } + /** * 변동 메뉴를 생성합니다. * todo: 변동메뉴 식당이 아니라 고정 메뉴 식당으로 잘못 들어온다면 어떻게 처리? */ - public static Menu createChangeMenu(String name, Restaurant restaurant) { + public static Menu createVariable(String name, Restaurant restaurant) { int price = 0; - if (MenuType.isChanged(restaurant.getRestaurantName())) { - price = restaurant.getRestaurantName().getPrice(); + if (restaurant.isVariable()) { + price = restaurant.getPrice(); } return new Menu(name, restaurant, price); } @@ -58,7 +63,7 @@ public static Menu createChangeMenu(String name, Restaurant restaurant) { * 고정 메뉴를 생성합니다. * todo: 고정메뉴 식당이 아니라 변동 메뉴 식당으로 잘못 들어온다면 어떻게 처리? */ - public static Menu createFixedMenu(String name, Restaurant restaurant, Integer price) { + public static Menu createFixed(String name, Restaurant restaurant, Integer price) { return new Menu(name, restaurant, price); } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java b/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java index 5c1b34ab..6baf67bd 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java @@ -5,9 +5,9 @@ import java.util.Arrays; import java.util.List; -import ssu.eatssu.domain.restaurant.entity.RestaurantName; +import ssu.eatssu.domain.restaurant.entity.Restaurant; -import static ssu.eatssu.domain.restaurant.entity.RestaurantName.*; +import static ssu.eatssu.domain.restaurant.entity.Restaurant.*; @Getter @@ -16,21 +16,13 @@ public enum MenuType { VARIABLE("변동 메뉴", Arrays.asList(DODAM, DORMITORY, HAKSIK)); private final String description; - private final List restaurants; + private final List restaurants; - MenuType(String description, List restaurants) { + MenuType(String description, List restaurants) { this.description = description; this.restaurants = restaurants; } - public static boolean isFixed(RestaurantName restaurant) { - return FIXED.getRestaurants().contains(restaurant); - } - - public static boolean isChanged(RestaurantName restaurant) { - return VARIABLE.getRestaurants().contains(restaurant); - } - @JsonCreator public static MenuType from(String description) { return Arrays.stream(MenuType.values()) diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java index 5266959c..b97024f7 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java @@ -26,7 +26,7 @@ import ssu.eatssu.domain.menu.dto.MenuRequest.CreateMealRequest; import ssu.eatssu.domain.menu.dto.MenuResponse.MealInformationResponse; import ssu.eatssu.domain.menu.service.MenuService; -import ssu.eatssu.domain.restaurant.entity.RestaurantName; +import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponse; @@ -52,10 +52,10 @@ public class MealController { @PostMapping("") public BaseResponse createMeal( @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당이름") @RequestParam("restaurant") RestaurantName restaurantName, + @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurantName, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, @RequestBody CreateMealRequest createMealRequest) { - if (RestaurantName.isFixed(restaurantName)) { + if (restaurantName.isFixed()) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } @@ -76,9 +76,9 @@ public BaseResponse createMeal( @GetMapping("") public BaseResponse> getMeal( @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당 이름") @RequestParam("restaurant") RestaurantName restaurantName, + @Parameter(description = "식당 이름") @RequestParam("restaurant") Restaurant restaurantName, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { - if (RestaurantName.isFixed(restaurantName)) { + if (restaurantName.isFixed()) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java index ca4d8f65..d4074d14 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java @@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.menu.dto.MenuResponse.MenuInformationResponse; import ssu.eatssu.domain.menu.dto.MenuResponse.MenusInformationResponse; -import ssu.eatssu.domain.restaurant.entity.RestaurantName; +import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.domain.menu.service.MenuService; @@ -39,8 +39,8 @@ public class MenuController { }) @GetMapping("") public BaseResponse> getMenus( - @RequestParam("restaurant") RestaurantName restaurantName) { - if (RestaurantName.isVariable(restaurantName)) { + @RequestParam("restaurant") Restaurant restaurantName) { + if (restaurantName.isVariable()) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } return BaseResponse.success(menuService.findMenusByRestaurant(restaurantName)); diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java b/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java index 29cb3c56..e8bd8de2 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java @@ -3,11 +3,14 @@ import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import ssu.eatssu.domain.menu.entity.TimePart; import java.util.Date; import java.util.List; public interface MealRepository extends JpaRepository { - List findAllByDateAndTimePartAndRestaurant(Date date, TimePart timePart, Restaurant restaurant); + + List findAllByDateAndTimePartAndRestaurant(Date date, TimePart timePart, + Restaurant restaurant); } diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java index da3b7605..0d03ad97 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java @@ -3,6 +3,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import java.util.List; import java.util.Optional; diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index 7bc50b6e..8e4bdf91 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -13,7 +13,7 @@ import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.RestaurantName; +import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import ssu.eatssu.domain.menu.entity.TimePart; import ssu.eatssu.domain.menu.repository.MealMenuRepository; import ssu.eatssu.domain.menu.repository.MealRepository; @@ -35,10 +35,8 @@ public class MenuService { private final MenuRepository menuRepository; private final MealRepository mealRepository; private final MealMenuRepository mealMenuRepository; - private final RestaurantRepository restaurantRepository; - public List findMenusByRestaurant(RestaurantName restaurantName) { - Restaurant restaurant = getRestaurant(restaurantName); + public List findMenusByRestaurant(Restaurant restaurant) { List menus = menuRepository.findAllByRestaurant(restaurant); return menus.stream() @@ -47,9 +45,8 @@ public List findMenusByRestaurant(RestaurantName restau } public List findSpecificMeals(Date date, - RestaurantName restaurantName, + Restaurant restaurant, TimePart timePart) { - Restaurant restaurant = getRestaurant(restaurantName); List meals = getMeals(date, timePart, restaurant); return meals.stream() @@ -57,9 +54,8 @@ public List findSpecificMeals(Date date, .toList(); } - public void createMeal(Date date, RestaurantName restaurantName, TimePart timePart, + public void createMeal(Date date, Restaurant restaurant, TimePart timePart, CreateMealRequest request) { - Restaurant restaurant = getRestaurant(restaurantName); List meals = getMeals(date, timePart, restaurant); if (MenuValidator.validateExistedMeal(meals, @@ -95,10 +91,10 @@ private void addMenu(Meal meal, CreateMealRequest request) { private void checkAndCreateMenu(String menuName, Restaurant restaurant) { if (!menuRepository.existsByNameAndRestaurant(menuName, restaurant)) { - menuRepository.save(Menu.createChangeMenu(menuName, restaurant)); + menuRepository.save(Menu.createVariable(menuName, restaurant)); } - menuRepository.save(Menu.createChangeMenu(menuName, restaurant)); + menuRepository.save(Menu.createVariable(menuName, restaurant)); } public MenusInformationResponse findMenusInMeal(Long mealId) { @@ -119,7 +115,7 @@ public void deleteMeal(Long mealId) { cleanupGarbageMenu(menus); } - public void cleanupGarbageMenu(List menuList) { + private void cleanupGarbageMenu(List menuList) { for (Menu menu : menuList) { if (menu.getMealMenus().isEmpty()) { menuRepository.delete(menu); @@ -144,10 +140,4 @@ private List getMeals(Date date, TimePart timePart, Restaurant restaurant) timePart, restaurant); return meals; } - - private Restaurant getRestaurant(RestaurantName restaurantName) { - Restaurant restaurant = restaurantRepository.findByRestaurantName(restaurantName) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); - return restaurant; - } } diff --git a/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java b/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java index 05d6b01d..10bb2173 100644 --- a/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java +++ b/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java @@ -2,13 +2,10 @@ import java.util.ArrayList; import java.util.Collections; -import java.util.Date; import java.util.List; import lombok.RequiredArgsConstructor; -import ssu.eatssu.domain.menu.entity.TimePart; import ssu.eatssu.domain.menu.dto.MenuRequest.CreateMealRequest; import ssu.eatssu.domain.menu.entity.Meal; -import ssu.eatssu.domain.restaurant.entity.Restaurant; @RequiredArgsConstructor public class MenuValidator { diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index 73b9f05b..2f6dcb1a 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -1,29 +1,43 @@ package ssu.eatssu.domain.restaurant.entity; -import jakarta.persistence.*; -import lombok.AccessLevel; +import com.fasterxml.jackson.annotation.JsonCreator; +import java.util.Arrays; import lombok.Getter; -import lombok.NoArgsConstructor; -import java.util.List; -import ssu.eatssu.domain.menu.entity.Meal; -import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponseStatus; -@Entity @Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class Restaurant { +public enum Restaurant { + DODAM(RestaurantType.VARIABLE, "도담 식당", 6000), + DORMITORY(RestaurantType.VARIABLE, "기숙사 식당", 5000), + FOOD_COURT(RestaurantType.FIXED, "푸드 코트", null), + SNACK_CORNER(RestaurantType.FIXED, "스낵 코너", null), + HAKSIK(RestaurantType.VARIABLE, "학생 식당", 5000); - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "restaurant_id") - private Long id; + private RestaurantType restaurantType; + private String restaurantName; + private Integer price; - @Enumerated(EnumType.STRING) - private RestaurantName restaurantName; + @JsonCreator + public static Restaurant from(String restaurantName) { + return Arrays.stream(Restaurant.values()) + .filter(r -> r.getRestaurantName().equals(restaurantName)) + .findAny() + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); + } - @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) - private List menus; + Restaurant(RestaurantType restaurantType, String description, Integer price) { + this.restaurantType = restaurantType; + this.restaurantName = description; + this.price = price; + } - @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) - private List meals; + public boolean isFixed() { + return this.restaurantType == RestaurantType.FIXED; + } + + public boolean isVariable() { + return this.restaurantType == RestaurantType.VARIABLE; + } } diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java deleted file mode 100644 index d5dd016c..00000000 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java +++ /dev/null @@ -1,43 +0,0 @@ -package ssu.eatssu.domain.restaurant.entity; - -import com.fasterxml.jackson.annotation.JsonCreator; -import java.util.Arrays; -import lombok.Getter; - -import ssu.eatssu.global.handler.response.BaseException; -import ssu.eatssu.global.handler.response.BaseResponseStatus; - -@Getter -public enum RestaurantName { - DODAM(RestaurantType.VARIABLE, "도담 식당", 6000), - DORMITORY(RestaurantType.VARIABLE, "기숙사 식당", 5000), - FOOD_COURT(RestaurantType.FIXED, "푸드 코트", null), - SNACK_CORNER(RestaurantType.FIXED, "스낵 코너", null), - HAKSIK(RestaurantType.VARIABLE, "학생 식당", 5000); - - private RestaurantType restaurantType; - private String description; - private Integer price; - - @JsonCreator - public static RestaurantName from(String description) { - return Arrays.stream(RestaurantName.values()) - .filter(d -> d.getDescription().equals(description)) - .findAny() - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); - } - - RestaurantName(RestaurantType restaurantType, String description, Integer price) { - this.restaurantType = restaurantType; - this.description = description; - this.price = price; - } - - public static boolean isFixed(RestaurantName restaurantName) { - return restaurantName.getRestaurantType() == RestaurantType.FIXED; - } - - public static boolean isVariable(RestaurantName restaurantName) { - return restaurantName.getRestaurantType() == RestaurantType.VARIABLE; - } -} diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java new file mode 100644 index 00000000..47ccf470 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java @@ -0,0 +1,29 @@ +package ssu.eatssu.domain.restaurant.entity; + +import jakarta.persistence.*; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.Menu; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class TemporalRestaurant { + + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "restaurant_id") + private Long id; + + @Enumerated(EnumType.STRING) + private Restaurant restaurantName; + + @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) + private List menus; + + @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) + private List meals; +} diff --git a/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java b/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java index c70df859..072113cc 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java @@ -2,12 +2,12 @@ import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.RestaurantName; +import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import java.util.Optional; -public interface RestaurantRepository extends JpaRepository { +public interface RestaurantRepository extends JpaRepository { - Optional findByRestaurantName(RestaurantName restaurantName); + Optional findByRestaurantName(Restaurant restaurantName); } From 208d58de866bb2f5301136cc129d6b437f73719b Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Thu, 18 Jan 2024 20:07:17 +0900 Subject: [PATCH 054/399] =?UTF-8?q?[#83]=20test=20:=20=EC=8B=9D=EB=8B=B9?= =?UTF-8?q?=20=EC=9D=B4=EB=A6=84=EC=9C=BC=EB=A1=9C=20=EA=B3=A0=EC=A0=95=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EC=A1=B0=ED=9A=8C=EB=A5=BC=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/menu/dto/MenuResponse.java | 2 +- .../ssu/eatssu/domain/menu/entity/Meal.java | 2 - .../ssu/eatssu/domain/menu/entity/Menu.java | 21 +------ .../menu/presentation/MenuController.java | 6 +- .../menu/repository/MealRepository.java | 1 - .../menu/repository/MenuRepository.java | 1 - .../domain/menu/service/MenuService.java | 2 - .../domain/restaurant/entity/Restaurant.java | 5 +- .../restaurant/entity/TemporalRestaurant.java | 58 +++++++++---------- .../repository/RestaurantRepository.java | 26 ++++----- .../domain/menu/service/MenuServiceTest.java | 38 ++++++++++++ 11 files changed, 90 insertions(+), 72 deletions(-) create mode 100644 src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java b/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java index 202d197b..27f531b0 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java @@ -40,7 +40,7 @@ public static MealInformationResponse from(Meal meal) { .map(BriefMenuInformation::new).toList(); return new MealInformationResponse(meal.getId(), - meal.getRestaurant().getRestaurantName().getPrice(), + meal.getRestaurant().getRestaurantPrice(), meal.getAverateMainRating(), menusInformation); } else { return null; diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index 2062ea6a..be9f323c 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -7,8 +7,6 @@ import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; - import java.util.*; @Entity diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index 583221f7..1ce2ea7c 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -3,7 +3,6 @@ import jakarta.persistence.*; import lombok.*; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import java.util.ArrayList; import java.util.List; @@ -24,13 +23,12 @@ public class Menu { private Integer price; - @Enumerated(EnumType.STRING) - private MenuType menuType; +// @Enumerated(EnumType.STRING) +// private MenuType menuType; @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) private List mealMenus = new ArrayList<>(); - @Embedded private Restaurant restaurant; @Embedded @@ -42,27 +40,14 @@ private Menu(String name, Restaurant restaurant, Integer price) { this.price = price; } - private Menu(String name, Integer price) { - this.name = name; - this.price = price; - } - - /** - * 변동 메뉴를 생성합니다. - * todo: 변동메뉴 식당이 아니라 고정 메뉴 식당으로 잘못 들어온다면 어떻게 처리? - */ public static Menu createVariable(String name, Restaurant restaurant) { int price = 0; if (restaurant.isVariable()) { - price = restaurant.getPrice(); + price = restaurant.getRestaurantPrice(); } return new Menu(name, restaurant, price); } - /** - * 고정 메뉴를 생성합니다. - * todo: 고정메뉴 식당이 아니라 변동 메뉴 식당으로 잘못 들어온다면 어떻게 처리? - */ public static Menu createFixed(String name, Restaurant restaurant, Integer price) { return new Menu(name, restaurant, price); } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java index d4074d14..fe0be913 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java @@ -39,11 +39,11 @@ public class MenuController { }) @GetMapping("") public BaseResponse> getMenus( - @RequestParam("restaurant") Restaurant restaurantName) { - if (restaurantName.isVariable()) { + @RequestParam("restaurant") Restaurant restaurant) { + if (restaurant.isVariable()) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } - return BaseResponse.success(menuService.findMenusByRestaurant(restaurantName)); + return BaseResponse.success(menuService.findMenusByRestaurant(restaurant)); } @Operation(summary = "메뉴 정보 리스트 조회", description = """ diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java b/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java index e8bd8de2..4041efa9 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java @@ -3,7 +3,6 @@ import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import ssu.eatssu.domain.menu.entity.TimePart; import java.util.Date; diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java index 0d03ad97..da3b7605 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java @@ -3,7 +3,6 @@ import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import java.util.List; import java.util.Optional; diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index 8e4bdf91..fd62597c 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -13,12 +13,10 @@ import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; import ssu.eatssu.domain.menu.entity.TimePart; import ssu.eatssu.domain.menu.repository.MealMenuRepository; import ssu.eatssu.domain.menu.repository.MealRepository; import ssu.eatssu.domain.menu.repository.MenuRepository; -import ssu.eatssu.domain.restaurant.repository.RestaurantRepository; import ssu.eatssu.global.handler.response.BaseException; import java.util.List; diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index 2f6dcb1a..8cd753e1 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -7,6 +7,7 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; + @Getter public enum Restaurant { DODAM(RestaurantType.VARIABLE, "도담 식당", 6000), @@ -17,7 +18,7 @@ public enum Restaurant { private RestaurantType restaurantType; private String restaurantName; - private Integer price; + private Integer restaurantPrice; @JsonCreator public static Restaurant from(String restaurantName) { @@ -30,7 +31,7 @@ public static Restaurant from(String restaurantName) { Restaurant(RestaurantType restaurantType, String description, Integer price) { this.restaurantType = restaurantType; this.restaurantName = description; - this.price = price; + this.restaurantPrice = price; } public boolean isFixed() { diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java index 47ccf470..aafc619b 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java @@ -1,29 +1,29 @@ -package ssu.eatssu.domain.restaurant.entity; - -import jakarta.persistence.*; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; - -import java.util.List; -import ssu.eatssu.domain.menu.entity.Meal; -import ssu.eatssu.domain.menu.entity.Menu; - -@Entity -@Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class TemporalRestaurant { - - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "restaurant_id") - private Long id; - - @Enumerated(EnumType.STRING) - private Restaurant restaurantName; - - @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) - private List menus; - - @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) - private List meals; -} +//package ssu.eatssu.domain.restaurant.entity; +// +//import jakarta.persistence.*; +//import lombok.AccessLevel; +//import lombok.Getter; +//import lombok.NoArgsConstructor; +// +//import java.util.List; +//import ssu.eatssu.domain.menu.entity.Meal; +//import ssu.eatssu.domain.menu.entity.Menu; +// +//@Entity +//@Getter +//@NoArgsConstructor(access = AccessLevel.PROTECTED) +//public class TemporalRestaurant { +// +// @Id @GeneratedValue(strategy = GenerationType.IDENTITY) +// @Column(name = "restaurant_id") +// private Long id; +// +// @Enumerated(EnumType.STRING) +// private Restaurant restaurantName; +// +// @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) +// private List menus; +// +// @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) +// private List meals; +//} diff --git a/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java b/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java index 072113cc..d8bcbcd3 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java @@ -1,13 +1,13 @@ -package ssu.eatssu.domain.restaurant.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; - -import java.util.Optional; - -public interface RestaurantRepository extends JpaRepository { - - Optional findByRestaurantName(Restaurant restaurantName); - -} +//package ssu.eatssu.domain.restaurant.repository; +// +//import org.springframework.data.jpa.repository.JpaRepository; +//import ssu.eatssu.domain.restaurant.entity.Restaurant; +//import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; +// +//import java.util.Optional; +// +//public interface RestaurantRepository extends JpaRepository { +// +// Optional findByRestaurantName(Restaurant restaurantName); +// +//} diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java new file mode 100644 index 00000000..06013e98 --- /dev/null +++ b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java @@ -0,0 +1,38 @@ +package ssu.eatssu.domain.menu.service; + +import java.util.ArrayList; +import java.util.List; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import ssu.eatssu.domain.menu.dto.MenuResponse.MenuInformationResponse; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.menu.repository.MenuRepository; +import ssu.eatssu.domain.restaurant.entity.Restaurant; + +@SpringBootTest +class MenuServiceTest { + + @Autowired + private MenuService menuService; + + @Autowired + private MenuRepository menuRepository; + + @Test + void 식당_이름으로_고정_메뉴를_조회한다() { + // given + List menus = new ArrayList<>(); + Restaurant foodCourt = Restaurant.from("푸드 코트"); + menus.add(Menu.createFixed("라면", foodCourt, 3000)); + menus.add(Menu.createFixed("떡볶이", foodCourt, 5000)); + menus.add(Menu.createFixed("짜게치", foodCourt, 4000)); + menuRepository.saveAll(menus); + + // when & then + Assertions.assertThat(menuService.findMenusByRestaurant(foodCourt)) + .extracting(MenuInformationResponse::getName) + .containsExactly("라면", "떡볶이", "짜게치"); + } +} \ No newline at end of file From 3b127c8d1e10b841932587ef4bb0e0471d9f3a95 Mon Sep 17 00:00:00 2001 From: SY2on Date: Thu, 18 Jan 2024 20:08:32 +0900 Subject: [PATCH 055/399] =?UTF-8?q?[#83]=20Refactor:=20SpringSecurity=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java | 4 ++-- .../ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java | 4 ++-- .../domain/auth/{entity => security}/CustomUserDetails.java | 2 +- .../auth/{entity => security}/CustomUserDetailsService.java | 2 +- .../auth/{entity => security}/JwtAuthenticationFilter.java | 2 +- .../domain/auth/{entity => security}/JwtTokenProvider.java | 3 +-- .../domain/auth/{dto => security}/UserPrincipalDto.java | 3 +-- .../eatssu/domain/inquiry/presentation/InquiryController.java | 2 +- .../ssu/eatssu/domain/inquiry/service/InquiryService.java | 2 +- .../eatssu/domain/report/presentation/ReportController.java | 2 +- .../java/ssu/eatssu/domain/report/service/ReportService.java | 2 +- .../eatssu/domain/review/presentation/ReviewController.java | 2 +- .../java/ssu/eatssu/domain/review/service/ReviewService.java | 2 +- .../java/ssu/eatssu/domain/slice/service/SliceService.java | 2 +- .../ssu/eatssu/domain/user/presentation/UserController.java | 2 +- src/main/java/ssu/eatssu/domain/user/service/UserService.java | 4 ++-- 16 files changed, 19 insertions(+), 21 deletions(-) rename src/main/java/ssu/eatssu/domain/auth/{entity => security}/CustomUserDetails.java (97%) rename src/main/java/ssu/eatssu/domain/auth/{entity => security}/CustomUserDetailsService.java (95%) rename src/main/java/ssu/eatssu/domain/auth/{entity => security}/JwtAuthenticationFilter.java (97%) rename src/main/java/ssu/eatssu/domain/auth/{entity => security}/JwtTokenProvider.java (98%) rename src/main/java/ssu/eatssu/domain/auth/{dto => security}/UserPrincipalDto.java (86%) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 58923b98..0e08077e 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -9,8 +9,8 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import ssu.eatssu.domain.auth.entity.JwtAuthenticationFilter; -import ssu.eatssu.domain.auth.entity.JwtTokenProvider; +import ssu.eatssu.domain.auth.security.JwtAuthenticationFilter; +import ssu.eatssu.domain.auth.security.JwtTokenProvider; import ssu.eatssu.global.handler.JwtAccessDeniedHandler; import ssu.eatssu.global.handler.JwtAuthenticationEntryPoint; diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java index 0a9cca15..85562f4d 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java @@ -5,8 +5,8 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Component; -import ssu.eatssu.domain.auth.entity.CustomUserDetails; -import ssu.eatssu.domain.auth.dto.UserPrincipalDto; +import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.domain.auth.security.UserPrincipalDto; @Component public class SecurityUtil { diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetails.java b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java similarity index 97% rename from src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetails.java rename to src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java index 93fc3a03..5f7c3570 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetails.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.auth.entity; +package ssu.eatssu.domain.auth.security; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetailsService.java b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java similarity index 95% rename from src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetailsService.java rename to src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java index 6f929ebf..99ead803 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/CustomUserDetailsService.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.auth.entity; +package ssu.eatssu.domain.auth.security; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java similarity index 97% rename from src/main/java/ssu/eatssu/domain/auth/entity/JwtAuthenticationFilter.java rename to src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java index 0698aba8..63bc2f92 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.auth.entity; +package ssu.eatssu.domain.auth.security; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/JwtTokenProvider.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java similarity index 98% rename from src/main/java/ssu/eatssu/domain/auth/entity/JwtTokenProvider.java rename to src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java index 813141d2..7e6c7966 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/JwtTokenProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.auth.entity; +package ssu.eatssu.domain.auth.security; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -14,7 +14,6 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.stereotype.Component; -import ssu.eatssu.domain.auth.dto.UserPrincipalDto; import ssu.eatssu.domain.user.dto.Tokens; import java.security.Key; diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/UserPrincipalDto.java b/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java similarity index 86% rename from src/main/java/ssu/eatssu/domain/auth/dto/UserPrincipalDto.java rename to src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java index a3d33095..ad36c65c 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/UserPrincipalDto.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java @@ -1,10 +1,9 @@ -package ssu.eatssu.domain.auth.dto; +package ssu.eatssu.domain.auth.security; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import ssu.eatssu.domain.auth.entity.CustomUserDetails; @Getter @Builder diff --git a/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java b/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java index ec237328..cf82bd4f 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java @@ -10,7 +10,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.inquiry.service.InquiryService; import ssu.eatssu.global.handler.response.BaseResponse; diff --git a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java index 09b8cae8..7beb8042 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java @@ -6,7 +6,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.inquiry.dto.CreateInquiryRequest; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.inquiry.entity.Inquiry; diff --git a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java index 6c8f9b7d..d0a3e35d 100644 --- a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java +++ b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java @@ -9,7 +9,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.review.entity.Report; import ssu.eatssu.domain.report.service.ReportService; import ssu.eatssu.domain.slack.entity.SlackChannel; diff --git a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java index de2c8feb..91836b66 100644 --- a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java +++ b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java @@ -6,7 +6,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.report.dto.ReportTypeResponse; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.Report; diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index 5a775710..37c3325c 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -17,7 +17,7 @@ import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.MenuType; import ssu.eatssu.domain.review.dto.CreateReviewRequest; import ssu.eatssu.domain.review.dto.MealReviewsResponse; diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index dac0796c..d3ced9f1 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -11,7 +11,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; -import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.repository.MealRepository; diff --git a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java index 92b04a5b..cfb02645 100644 --- a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java +++ b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java @@ -9,7 +9,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; -import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.MenuType; diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 2a407966..74b374a1 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -18,7 +18,7 @@ import org.springframework.data.web.PageableDefault; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.user.dto.MyReviewDetail; import ssu.eatssu.domain.user.dto.MyPageResponse; import ssu.eatssu.domain.slice.dto.SliceResponse; diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index c8961c47..f1bb4825 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -9,14 +9,14 @@ import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Service; -import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.user.dto.MyPageResponse; import ssu.eatssu.domain.user.dto.UpdateNicknameRequest; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.auth.entity.OauthProvider; import ssu.eatssu.domain.user.entity.User; -import ssu.eatssu.domain.auth.entity.JwtTokenProvider; +import ssu.eatssu.domain.auth.security.JwtTokenProvider; import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.global.handler.response.BaseException; From ea1c25da704f63870ceffc005d5fd9fdab66eec3 Mon Sep 17 00:00:00 2001 From: SY2on Date: Thu, 18 Jan 2024 20:10:58 +0900 Subject: [PATCH 056/399] =?UTF-8?q?[#83]=20Refactor:=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/infrastructure/SecurityUtil.java | 8 ------- .../auth/security/JwtTokenProvider.java | 21 ------------------- 2 files changed, 29 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java index 85562f4d..604d1a8f 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java @@ -29,14 +29,6 @@ public static Long getLoginUserId() { return loginUser != null ? loginUser.getId() : null; } - /** - * 현재 로그인한 사용자가 userId가 아니면 AuthorizationServiceException 을 던진다. - */ - public static void checkUser(Long userId) throws AuthorizationServiceException { - if (!userId.equals(getLoginUserId())) { - throw new AuthorizationServiceException("UserId: " + userId + " 는 해당 영역에 접근할 수 없습니다."); - } - } private static UserPrincipalDto toDto(Object principal) { CustomUserDetails user = (CustomUserDetails) principal; diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java index 7e6c7966..8200f16c 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java @@ -146,25 +146,4 @@ public boolean validateToken(String token) throws BaseException{ return true; } - // 토큰 만료 시간 확인(밀리세컨드) - public Long getExpiration(String accessToken) { - Date expiration = Jwts - .parserBuilder() - .setSigningKey(key) - .build() - .parseClaimsJws(accessToken) - .getBody() - .getExpiration(); - - Long now = new Date().getTime(); - - return (expiration.getTime() - now); - } - - - - - - - } From 9d719de2e67ca4fee02772d6ca0b7690d61efb29 Mon Sep 17 00:00:00 2001 From: SY2on Date: Thu, 18 Jan 2024 20:11:55 +0900 Subject: [PATCH 057/399] =?UTF-8?q?[#83]=20Fix:=20PathVariable=20=EC=9D=B8?= =?UTF-8?q?=EB=8D=B0=20RequestParam=20=EC=9D=B4=20=EB=B6=99=EC=9D=80=20?= =?UTF-8?q?=EB=B6=80=EB=B6=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/review/presentation/ReviewController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index 37c3325c..45e98b2f 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -142,7 +142,7 @@ public BaseResponse deleteReview( @GetMapping("/meals/{mealId}") public BaseResponse getMealReviews( @Parameter(description = "mealId") - @RequestParam(value = "mealId") Long mealId) { + @PathVariable(value = "mealId") Long mealId) { return BaseResponse.success(reviewService.findMealReviews(mealId)); } @@ -161,7 +161,7 @@ public BaseResponse getMealReviews( @GetMapping("/menus/{menuId}") public BaseResponse getMainReviews( @Parameter(description = "menuId") - @RequestParam(value = "menuId") Long menuId) { + @PathVariable(value = "menuId") Long menuId) { return BaseResponse.success(reviewService.findMenuReviews(menuId)); } From 36b070225b9991ef9b327bf98d75574f8c1639bc Mon Sep 17 00:00:00 2001 From: SY2on Date: Thu, 18 Jan 2024 20:33:50 +0900 Subject: [PATCH 058/399] =?UTF-8?q?[#42]=20Feat:=20/admin/**=20=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=93=A4=EC=96=B4=EC=98=A4=EB=8A=94=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=EC=9D=80=20ADMIN=20=EB=A7=8C=20=EC=A0=91=EA=B7=BC=20?= =?UTF-8?q?=EA=B0=80=EB=8A=A5=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/auth/infrastructure/SecurityConfig.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 0e08077e..7ef26fce 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -27,6 +27,10 @@ public class SecurityConfig { "/inquiries/list" }; + private static final String[] ADMIN_PAGE_LIST = { + "/admin/**" + }; + private final JwtTokenProvider jwtTokenProvider; private final JwtAccessDeniedHandler jwtAccessDeniedHandler; private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; @@ -44,6 +48,7 @@ protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .authorizeHttpRequests(authorize -> authorize .shouldFilterAllDispatcherTypes(false) .requestMatchers(AUTH_WHITELIST).permitAll() + .requestMatchers(ADMIN_PAGE_LIST).hasRole("ADMIN") .anyRequest().authenticated() .and().addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), UsernamePasswordAuthenticationFilter.class)) From cd91ca773c0fd93cb9d676d8cf552a42d493a54d Mon Sep 17 00:00:00 2001 From: SY2on Date: Thu, 18 Jan 2024 20:56:53 +0900 Subject: [PATCH 059/399] =?UTF-8?q?[#42]=20Feat:=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EC=A0=95=EB=B3=B4=20(=EA=B3=A0=EC=9C=A0=20?= =?UTF-8?q?=EA=B0=92,=20=EB=B9=84=EB=B0=80=EB=B2=88=ED=98=B8)=20=EB=A5=BC?= =?UTF-8?q?=20=EB=B0=9B=EC=95=84=EC=84=9C=20=EC=9D=B8=EC=A6=9D=EB=90=9C=20?= =?UTF-8?q?Authentication=20=EC=9D=84=20=EC=A0=9C=EA=B3=B5=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../security/UserAuthenticationProvider.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java diff --git a/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java b/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java new file mode 100644 index 00000000..81747a50 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java @@ -0,0 +1,29 @@ +package ssu.eatssu.domain.auth.security; + +import lombok.RequiredArgsConstructor; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.core.Authentication; +import org.springframework.stereotype.Component; + + +/** + * 인증 정보를 바탕으로 Authentication 객체 생성 + */ +@RequiredArgsConstructor +@Component +public class UserAuthenticationProvider { + + private final AuthenticationManagerBuilder authenticationManagerBuilder; + + public Authentication getAuthentication(String providerId, String rawPassword) { + + UsernamePasswordAuthenticationToken authenticationToken = + new UsernamePasswordAuthenticationToken(providerId, rawPassword); + + return authenticationManagerBuilder + .eraseCredentials(true) + .getObject() + .authenticate(authenticationToken); + } +} From 60136e1289d9e1de02edb23dc4baedbc610629c4 Mon Sep 17 00:00:00 2001 From: SY2on Date: Thu, 18 Jan 2024 20:59:07 +0900 Subject: [PATCH 060/399] =?UTF-8?q?[#42]=20Feat:=20JwtTokenProvider=20?= =?UTF-8?q?=EC=9D=98=20generateTokens=20overloading?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/security/JwtTokenProvider.java | 52 +++++++++++++------ 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java index 8200f16c..90476af0 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java @@ -2,10 +2,13 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import io.jsonwebtoken.*; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.io.Decoders; import io.jsonwebtoken.security.Keys; import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -15,14 +18,14 @@ import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.stereotype.Component; import ssu.eatssu.domain.user.dto.Tokens; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponseStatus; import java.security.Key; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.stream.Collectors; -import ssu.eatssu.global.handler.response.BaseException; -import ssu.eatssu.global.handler.response.BaseResponseStatus; @Slf4j @Component @@ -32,29 +35,48 @@ public class JwtTokenProvider { private final String secret; private final long accessTokenValidityInMilliseconds; private final long refreshTokenValidityInMilliseconds; - private Key key; - private final ObjectMapper objectMapper = new ObjectMapper(); + private final UserAuthenticationProvider authenticationProvider; + + private Key key; @Autowired public JwtTokenProvider(@Value("${jwt.secret.key}") String secret, @Value("${jwt.token-validity-in-seconds}") long accessTokenValidityInSeconds, - @Value("${jwt.refresh-token-validity-in-seconds}") long refreshTokenValidityInMilliseconds + @Value("${jwt.refresh-token-validity-in-seconds}") long refreshTokenValidityInMilliseconds, UserAuthenticationProvider authenticationProvider //RedisTemplate redisTemplate* - ) { + ) { this.secret = secret; this.accessTokenValidityInMilliseconds = accessTokenValidityInSeconds * 1000; this.refreshTokenValidityInMilliseconds = refreshTokenValidityInMilliseconds * 1000; + this.authenticationProvider = authenticationProvider; } @PostConstruct - public void setKey(){ //jwt.secret을 이요하여 key생성 + public void setKey() { //jwt.secret을 이요하여 key생성 byte[] keyBytes = Decoders.BASE64.decode(secret); this.key = Keys.hmacShaKeyFor(keyBytes); } //토큰 발급 - public Tokens generateTokens(Authentication authentication){ + public Tokens generateTokens(String providerId, String password) { + + Authentication authentication = authenticationProvider.getAuthentication(providerId, password); + + // 권한 가져오기 + String authorities = authentication.getAuthorities().stream() + .map(GrantedAuthority::getAuthority) + .collect(Collectors.joining(",")); + + UserPrincipalDto userPrincipalDto = UserPrincipalDto.from((CustomUserDetails) authentication.getPrincipal()); + + Claims claims = createClaims(userPrincipalDto, authorities); + + return new Tokens(createAccessToken(claims), createRefreshToken(claims)); + } + + //토큰 발급 + public Tokens generateTokens(Authentication authentication) { // 권한 가져오기 String authorities = authentication.getAuthorities().stream() @@ -71,7 +93,7 @@ public Tokens generateTokens(Authentication authentication){ private Claims createClaims(UserPrincipalDto userPrincipalDto, String authorities) { String subject; - try{ + try { subject = objectMapper.writeValueAsString(userPrincipalDto); } catch (JsonProcessingException e) { log.error("Cannot generate JWT Tokens because an error occurred during json parsing."); @@ -88,7 +110,7 @@ private Claims createClaims(UserPrincipalDto userPrincipalDto, String authoritie //accessToken 생성 private String createAccessToken(Claims claims) { - long now = new Date().getTime(); //밀리세컨드 + long now = new Date().getTime(); //밀리세컨드 Date accessTokenValidity = new Date(now + this.accessTokenValidityInMilliseconds); claims.setExpiration(accessTokenValidity); @@ -100,7 +122,7 @@ private String createAccessToken(Claims claims) { //refreshToken 생성 private String createRefreshToken(Claims claims) { - long now = new Date().getTime(); //밀리세컨드 + long now = new Date().getTime(); //밀리세컨드 Date refreshTokenValidity = new Date(now + this.refreshTokenValidityInMilliseconds); claims.setExpiration(refreshTokenValidity); @@ -122,13 +144,13 @@ public Authentication getAuthentication(String token) throws JsonProcessingExcep UserPrincipalDto userPrincipalDto = objectMapper.readValue(claims.getSubject(), UserPrincipalDto.class); - CustomUserDetails principal = new CustomUserDetails(userPrincipalDto.getId(),userPrincipalDto.getEmail(), "", + CustomUserDetails principal = new CustomUserDetails(userPrincipalDto.getId(), userPrincipalDto.getEmail(), "", authorities.get(0)); return new UsernamePasswordAuthenticationToken(principal, token, authorities); } - private Claims getClaims(String token){ + private Claims getClaims(String token) { return Jwts.parserBuilder() .setSigningKey(key) .build() @@ -137,7 +159,7 @@ private Claims getClaims(String token){ } //토큰 유효성 검증 - public boolean validateToken(String token) throws BaseException{ + public boolean validateToken(String token) throws BaseException { try { Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token); } catch (Exception e) { From 6e0489feeb2a2abe8c78b798e24de1688f1f35e0 Mon Sep 17 00:00:00 2001 From: SY2on Date: Fri, 19 Jan 2024 07:59:53 +0900 Subject: [PATCH 061/399] =?UTF-8?q?[#42]=20Feat:=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=ED=99=94=EB=A9=B4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AuthenticationController.java | 19 ++ .../resources/static/admin/img/cutlery.png | Bin 0 -> 14343 bytes src/main/resources/static/css/font-import.css | 2 + src/main/resources/static/css/style.css | 124 ++++++++++++ src/main/resources/static/css/styleguide.css | 183 ++++++++++++++++++ .../templates/layout/footer.mustache | 3 + .../templates/layout/header.mustache | 11 ++ src/main/resources/templates/login.mustache | 18 ++ 8 files changed, 360 insertions(+) create mode 100644 src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java create mode 100644 src/main/resources/static/admin/img/cutlery.png create mode 100644 src/main/resources/static/css/font-import.css create mode 100644 src/main/resources/static/css/style.css create mode 100644 src/main/resources/static/css/styleguide.css create mode 100644 src/main/resources/templates/layout/footer.mustache create mode 100644 src/main/resources/templates/layout/header.mustache create mode 100644 src/main/resources/templates/login.mustache diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java b/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java new file mode 100644 index 00000000..2205f311 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java @@ -0,0 +1,19 @@ +package ssu.eatssu.domain.admin.controller; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@RequestMapping("/admin") +@RequiredArgsConstructor +public class AuthenticationController { + + @GetMapping("/login") + public String loginPage(Model model) { + return "login"; + } + +} diff --git a/src/main/resources/static/admin/img/cutlery.png b/src/main/resources/static/admin/img/cutlery.png new file mode 100644 index 0000000000000000000000000000000000000000..3972ff9e76eafeb7f03a994833f1c7d261ecef33 GIT binary patch literal 14343 zcmV+iIQYkjP)FVlbs;lmI z&$-_@_gsY>q!or?sMXcgg+8CJG#U+!*EH7@#Zb%R@%VUys8~^qLVheIQi>I#T>gNU zKjtAt@hXbq=FjtCiYN+&jkpmZRSom=c0Sl>81Z_8)F#C+>iNAjsuHg@RHZr=qk8^a z-NcC#8~Avf9Hb2jIY=oQ8@CrmquvwaF*=PK{im25GeHh+>^Z8c=7CU@Mu0HF?;U>l;Z5WqWpD^I0vN`D{QCOv5wVzZ0$YJom@uDXdohg+ z(nwC|yzOK%|3fj9w@A}I$;rvtTu@NZKn{ilhd@KXh7B76MSlO(xTc&#hBBKk-e;IF zZ9(iOdIT#ci0u6w=y1Ia_>t_(fFJRZ` z426^_d{|ZsGg7dHQZ{g-_$R5xAIFWG@EW^>9ps=-I0WhiTeog4@cCRvX`1^y!=Q_} z5goz)nw!QF6eY@T>2`KYm*|G_H@*h{Jmio=+Q~r|I0Q<<{{6d;h{v?c_^N!JpH3&| z`dDCZ&-hqT)fbIWc<~`qrtC-@b1>!`$nM>{i(M|)msK+6a*H^bMz4F860i#!Hz@v= zp&O5~zxQT&dHDev!x*y!+P-|bFK_zv%egUphuySe$mvXm1O?+IRr$z>#eWxyL>^~( zd`ym&#$2P>w{PE6ez?(y>zA-!Urr8EfjVwUkLkLxn1i<)`MQo7_ioG(h+VZ~TrTxn z?73ggH@Ju#q#W$twZ(}R#bU9C*tOd-7Kk+J2~@LrbD5Htb2BO0w|Lw;jvQnHEsCl< zsH(0f%F4?2(kRBLB~W#Bb%~}aS1F2m1540T$U(-z7HD7Gh~MjSd7fe-jmqF`TJy5( zz`}(K-8D5em%3frd+bs?;E=~YaNzk6z6ZaGMI-Om*4BO%_l8CpMw10nSRk0mx9yjF z=guSt(!ns|e^OM}cQ_!sjYbJZg#}u#n=h+C6*DnR@u)E8=84%!eFxO@5TJ-}Cd@n!W$5so8x_x~F%f8(G-{ z@I|M)@4j1|H*emZ{N#2;ArCpoI`Dmr#0|QiV@G#q>%_mTBM`{5XV3P}xHaFy9Ax+c z4Fi0$#P?+Kvx<4C4I1WW6&m(A%MW9j9;f+}CQVvHS%$145H}##-o1OTP!;+aH{?

fdiz+^#MO$Tv9@A zcUMobsi~2|9sQ?(6%-bc&*$rMthJ??f=s@F;Pd71=L@?W>)`)~&ku)0AY@K%uGr8a zz?$lMjDk#P5Zi7d@%iWm%iesw?k+4W#ME=?O|J9-XG*GYC+snD+(qNF2+w=SJeTq8tOQ5pV$uB5iYZxFG zcP2PDK+{|l$j_(z{DL0WC)412t+7eGxuYZW(ym>*I3yuDc&R&iX$b`4yzs&c8oO-& z=5c9%;okEE8UZv_8`AME@6ohAk6R6KD6gxUD%`04fX}JDoEwg7!)WL}U#@Tk`#N8| z7GM(f_j@u1!+?ToO?l)$@AabN#8>$I!81PxMJNAi9{$Gjr99jxIDeN zYZ!-gghG9O4i+Rgx2L;?-zdgF{doAW1Q@II=2qcaG*9v8E?u>1RX#~XA}I)z zkg3-fv!wbmiv=f=V|k=NKmuhh8SJ2(eCVW!&wud22jgWC7G$_O%FdlTk92AI&pU~r zasetLLKfH0{#uBm-b`eO~ zvgQ3iNlEb{_G`~32T}troD7)?J)xXcP>}!p>#x5K$ykV0ukW`PhZ|B{+`9|c*w`rk-(VoD9Di4D=P_KkT<(5z0PTX9`=BUi z9d_8{_qn}otE{X{yA{fW1yXo`ca+=ZdX%zsCAYqS#@Wo4<^cEd=N}_aHASiC`!u)(pNtjIzMinqaxBFCexuBfD^7g$87cO+A zQ}9R^ffSY$m20oLX0Dub64y0%YLqH#;yJQ2m$)8+(_0>pRPU(0kWds6wnBg9` z*YgmQN&YKpB5uT~rL~oVpzUKKhLa9>eK}H1y6X*mc6lC`_LCQ0cp(SlAxaTa64=Bl z2^{rRubDgdhHRVLgTze7>WmB?(~Xne?d8$zXHPllq`8+~dg-qzMM#AO5^R3*H@`XD z?Qz{oSq4WW7&#IpxFnqF&dn7uFIoaO0Yqo5i)48E%*R`k&38 zUwX+UmkgUk!zK{YbtA zPw0v%6Q@nRY1_7K!*)Z4{6TBb_1I&N9l?XK?~$ayjYBUu(4ZDE4D_6`p|G$p>s&Zk zpX96rD>W)6@tDZvc3=JQ!w-++U3EBu!jK4LElVUha_1{rYk@iWETuZ z5lXCm>L;0ysKX}Zr5zC6(|QDn*oBr@;vP47@}akKn?|x}dI^N@hrjsTbI*O+rD<1^ zguso0>oAl-Y-wq!RAV8KCmZt1dIKzacUYE4R*73vwaZ_8@x{r68AL-Q`j7~O=OBMH| zrL|2~OH@>tA3(JzO|h0QA0&qIW>FMz{`~nqMOCG=KEY6E*vd~)QBj|+TwY%9X)4K! z_4f68ZvaX9`c9BX?y1uKqd!ZIoI_bBC-ObH7;T$9tRcB^gC-Ej13&RU|MSYL`DqzR z2J~>4k}zDLQ6F~LVH8MOOBCdQdskT4`@BFjmcCrA{>CwQZQ{g-`d;4zwUR$*^GgR0dgU4F2F9cREu{R zbj-Quo_jLy{*5;%9s@S@!4OD+^0sEp8ZF1?`IaHs%HD9>hAJAQ8n7I2|11kQmhzX1dquvhN4tFRgb`-RG)#~z!41O$=@QFeXW*#(kC z*~!NIwNwMYe=x2Y?io5i*%D7#g!{t3{`J8$GN*nI)V9?Azf4TiMvKs&cwOQVX!GkxF@Y`sVjV+B4{N=}SD(1%9{3dp=174B9(} zFco_=5lHsmGL#%Xj2j0k?w@J6J?={%fBf-6RPh-oJE30!VeB(&)-2_si!S;s-?XDi z62$dHqT-M~Gl~j^$Ufg@sOnm4YkOjGF?lfk#1lU!7BC*DAY*^ORGB$*rcqm4>nbb= zoJkV7ZwQzUwGm046+CFb`i!>fL1HXBf*4*JpcEDsf008P!i{6}$?kr;3Yf5Oe)F3? z9vc4#Ndm-tg2Pyw21?y%aO3bhWVb-WIlqwT6y@m{T$=04vuDpnN{AI$?bU$vYk~0k zoH=v8sA$?`k_4g9@XGCumbH7ZoQmwfV>suBdm0MKV}*F+Q}Ml5$Qp1uI1im*8T_Oo@J<%k4V*CqMZK z5*pRMep9amGNn89!V51vlpl{I2@p2}ZzDlVOABQ)U_p^PCo`;tmWK;eij_x^Q>L7D z+G$hZ#(@&Osc}6BWWGr$FE3ZejVr|p3sR)+w6~8u;{X;co7K4HK}=D%8#up_5D1?Q z$owNdU15b_(iOi#iESO_YrgGi{kbvSXwK z0x%YmWt``ByS~5=8plI>b>n(-;S>ZQR1!5@N$g~-s`qU8y8B)ydO6BSa_^xc| z$-ASjt}ZKN_*6Cgj<780J<7NfPMB4JpepsE#PuK$2ago)>9jym(R3w6%b$z{Xf)vz zU(Egc_h;2u2;xU;>(Ek{>_V!hmcV6~!BgOKa2FJmd~U~%9bz2RT}bFoAcb#~Qd?WA z=H>cMB?*uUm!LZ!mG0fUm$Cu){n>J^K&n(i#Dnaf=Vig`^*{^2IH-pk*TVv_uZLrr z%jG$dY=$v{!0AAM8YI37r3#3B6=0TH> ziDrBH4lGZ)ij?DKqi2`7aY8X{Y;2@#0j^~#UE{DM`HQSyPrLs5>yz{14!)MOFXBI} zfG8)Pc%m>_WHXSZo6dnVZusuqyQNIdY-?+yJ$v?Km13CcL{|~MkU)(?8H2OWKKm%@ zC8ei_3s+N9qZStzo(1c7?w z#dRl;R$N@Hvd>pRHUs@`G((LV@s(Y>c1h7-(Fn86@>qb?Of{mCbZj}k+++AboiSrZ z?-t0K|6N#EsHmFj7_u39Os9AT8#HeImMvRs%{4=;M>cCXSfKMs$F)NnkfCF9xwI1z z3t~4_Nv@U9oj}?xx7<>yscHe)jF=wHcv2yPtZ2Z96J;`J38|Xn45GGNw$52XoGKkw z6Kz0-4u$3G(i?BQrhrvO6>F=kcuo0 z6=-l!+OkQi?hEP6?ubO9wy##f1oD-aSB$H!uC7CwH!>&L2?ANAdwEwqq_nh{Bp{G( zbFYIK5!^b|w?=(z)Ui%g%{Nh*lfN6p$%gqo0|Deu$N0yB3@#j2BROo+B&4>9LOZKg ztrG1)5C}UsxO3-DrKqgz5Pq}mMT=!v)l97Q$rb`+0)Yw&3dA;?wS*E=mP4K2m+clO z86ZzO8@VJa+^P9R1&48Gs&GKHvop0^I2=@1K;YpIO(B~x(n(pV28aZ?8ykYJAQS3e z!@aW#(D(Kkv785!2A{(iVYE~R>W+qn21+N;7Od3~?S#kWDzC4v$0{XCRaMnN7tVyj zy(88avVCRX%@(hbJ@J;vZ`w1*~q9M zkC7PnbcqA0?C&eNxjD8k&N*6p>d}Zy&9Ab1ObmE)a{MqdysO-O_uaxAS_HxrZusVk zTXO}-X2`s%vx9?xYn7>lTp3(?w@YKsJs`3XDl01mcRDQ)%X5NRil*5~cWo2bByJA6A)PNH&i#HiY5!sA*+*wIMcEBP)hR+lXl3;RO zT+Gl`CQO*1AQlAIRal^;z>vy+Y+rrbS&Bq{V46iH>lVn+sj_H*_^676Yci|9VMmxE z^HJqL9~fNGPSmIf-ctsD+I=FNRPU6tX?f-u?^aAQ?y&#Uw*} zAw!!`!stX;L=aDqPb#vpEk%J6X36$4C=P+-0R)5U>T285t5ntgHo=5}3x^n(aNoLQ zV`J7O{5#&YeHk~0K=J_fA>^1fD@B`V@9xHS5{Uh}gpaFGW<$)qfCp*hKn@^bRF3MP zWItHN#{-NF34>(H*t2KPHcShI!}Vk{G>1SAxg#S{?$Be__%XtizaLED!>bGd9^mdJr*kfBYqnWcx2 zNNXmOD#;>(fiX}t60tqhtZAwvBsk~<+5*~y-H66w`w;s9SE{P246Ce_aNXd-!N1cD zV>j6h;al>kQP-Wc9tQ~tTZRr*k4AQz)tM5L29l>U0BnKctoiTdleK+9j;1+ooPz`; zX$$ckyY|$X^MS++hU5u#*y4V_KfYzlmL?9G*)AlwT=owd9moN<9Ao0(u3fvDnKYuh zNgxpD%!LE2$g05v+RrMO?LxwEs((5dop8J5Akd~woA$Gg(3wa|rV3|4ys&iX()L(P zw|yOW^g525?LZ9FC9ptxJl^=+bI&#Lu2EiIZkSbhx>z8iwYAl#sj1bZmMjs+MGL*_uDkHiX`0&Gf?G%eNaFiCuo1Gj@{I=? zKQ_fRY+dF9fk2%?0=8Y%J3k}|;Pu*GAjpBu@JZ4JKK$3JO`%Xo@PmV>T?quto;}-Q zm;UUtFMNPUvKcOC95kkZ@sA7^h)+X*@x_-nahx=cASx>ISg&=q&dSP4JP0eaXwf2k zY$MqWkjLYwabp%9k6V(A6lKSoZ@!7lgE$fnRcLRZb|C>5 z&*!tZ%9aEBkmK`_3}_FwW5%ft0*xO(-Xf1+c9&5)6ga#w91b(n4y-=x(DIAPX268Q z63JX}KDJ>4Mc1t(WB+~*45;KPFQ@pi$CB)bZQe|=k3S~8t}c;pHgO`kKl@oy`O$9R zp1VDAjDKot>)vNh2wrd;D2`h4FTC)=!6hC|7*nQ9iSO94LyUu}s;X8WdT4n}>183} zOad1YVnQe+*;=BgK*^-Z{lg!qvAVkRFfM9Nj*oKvIW&3l;Z%M3Hz`_d`+^q-!RH-a zyO!F2@eA>2Az|%38Zf-}1?WGzHf~{fR8*fm-ehQJp_v%ZyaNKTnGI5C8J|g$o~h_`?rB#8d_}LX>^8r0gz*6^$e%F1~Ep zvS>6MSw|AU?Q+|`yk9Z`+z9iZeU_A@MW4_J3z$6aZaI7&Ceh@l7g65E4P-Y$&p%IX z3l@-(v?L=ko%0I-U>s*S}t z^zGXz_~@fO&O0~P$DLE}=dG}%J>;bq$(5m1=qw=iBg=fS#)gLXSyYShP(o(~PPlN% zuXkQK}YBSh-czW28oHxRlMk z&rVU5!F5I|kA;*Btdb2&E<**<1dQmKHEZAGotVi5D+8emdR##c5*f9%wQ=qZVmuCt z{q(0lU8Toj+ei}F*+cc&hz9F&V4crcj53ZC{7)qV=be|EN3tLm(|6CGKOZWz&cRci zW28E`(OuH-L78o$Q{dTOqt^E~}1X2w$9i$BYygZ4l4^c~V^RlX{ zDlwEPDk{>ENSYi#wa|k==G2CGSy`FRE>koTiNsc~S@RxAwDMJ6ZjKZ|HV3Hz;yyW& zgegoI8#ioRiJVa0k8wB$nK_2hOGLQ`fz0<9_%O6@-j6=<=%WZ*+n!u%0b`+peA^Qw z9Ha>O0l#F^R*a8-cK`jGS-y@10)c3Gc{z9x?@b--an`1ZGI;#MVS`qTcw;NxeYb6Y z?f(BGiGWBo@}(RM44D^g&hdGrDNEsNT_@1<(Df-lAx*u#D$y*cLPJ$rMhjMK#wlrc-DC4*{5HlM9!O#uc=%5PBMCJ zefVK4*~Ov4u?dU8lr31WU|&qv-zSLx-#Ir&p16U7p#dGBY<19CabEGj1HY)_UD5X0 zeFKSxMj-RemK&#YBo<35TRX5*! z^JdyyK#{}{pn9_>#M3>Cdq(tP<|lbtmu#husS>$Cd+ll z&Rx4-+O};Q=KNrxZHqugeSs!39K@?2& z)|;A|qIr3FG5#l!AOHBr&26o1FOh`64@Q=PvrMEsz;tnrD~g%LGNQSq<=OilcmTta z2n!q$Zaeyp9XsH@83P5O2TLHK#_0v?_IFqS$@8QBn4at#}e5CE8$o2_}sq#{rS&dL@U}d zx9MnebMuhM0}Q%VLC!q7~nFktFVcMR39u}GAx$VI;PwaedUhP_6T14T68&N<1a zsRynp#+%vTDu;r>Wna7aVif5MkHq=_!}+zH`EitRk4h`ejXheS}F5>(fafj`qg|Pn;Vv zhGlO}rpAz+;P?AGN%WPAFGd|Lsir&h2QT~VMMZ_uEaa3;K;B_dVNrICDGg)o*=L{g zXG*l!4p<*n-YfzQ7&Pq-!y-_Upb+E8tr!R4q;~As5vg2W`5Pu!gt7!;Dg?V9iLy$L z)IAW8QGja&w@s!pR0Dwc&0|%^}&d#hF8lrHJjFGe$k)1GM!h~ob5a=*Z zD1617IUnuWyXO(gGGKZ!qUO$$l6?c&)UepNR@pXwtghbu`?+(kfp8$m!);cO2YH?} zf?3uh?Q-KqMMW_Vm?68GEuIL2V%0PVD+wY4=;QBk2UU%uQn0*R>(RaI4bLqkK9FDw`>PL4^WEL-;4 z1Kdm1Q5HgEFK~l#Cg>f6s7%iIC@T?Pzj4EZ-}~MVcJqD* zlf@zr+NzZ>I-(*usc03}igs392#IpyBrm=6(!V!1H9tjJ3=jtc=91zfK_my+gS!27 zk6m=pSE0Hg<`dR5O?2=xX3P+>wW%hL2q_^DaLFZ?h`I^LXyxc`2doeZ)PLo|3m=Kb zVp$_?_XQBindzEMP%3Z!?suQ%Hi$CSaNWY}hQb2H%%br|Duj@f_$83Fv8uzYS+j&I z$NG8)QjB;k6t3E|DgNY>zrBa;RAyFbaxmth>#^EL7cTt8iWMt@-05|gVSQ zrfO4)>KmravBycFnknx_OG`_`9AL##(83b&Yc+4JSn(r;6dM-DaWJM}P~=~0KfaCI z+&*;R+>s0NpiS1))CkwjBv49_(vh+0Q(`saD4RqQq`R7GaC0dJxs=Qe32jHXo7O1ZRTrTH{AHbPVg!F-z9 zd*r6{&l?*>^Qb|7X`TvQ~)kFg@h@7=TKxzkQN?OnD!R!Aji zJ_^;1($IOQG%9AM_+VrvTsd=}$KN97L*2iBzcTyGGoRYHVM96J43rev}d<5tb(q2!wNUb0Z}sCHlH`>jZ&Pok5X~u(EaEEooa}Q2~}t8#oKQk#%|v6G)94}2W(#I-M#8wPRW^i(KlkT=$qGHf5UTZd0>GdU*&#D^d%ME302qhIuuuYNBS46Y;xy+SdqjkP)G z9nnbS&C_R}Isf(7UvGh6#oi9aJl41e;~-JvU^to9gF)KD>t+usVnYoL4aiOqW|e

}c!L3`jMoq;n)WP7F!W9)2AdfXgJ8eiCfsz<6 zQhhkUDzX&VUl%s zG$w9C@BE0{%+gn1MSXV60D#(yaSzB7uCA`eG=+F3T;GgjNSf|k+{{4|mWa0?`>SHG z$0XW&-Ms7WV%gz1Il z$<=)!Fre;Gv9g5Rz+_d?&uYdjPA8?yMXD{3~_F6z5Ay@ObI%-Z&uw~+=Efd_6 zdI{mq@n+=b=Yu#PlVQGxPCxyOH&|a{;~N_(kp$X7UGv+}>w-LKkM;BiJLf42 zdD~pbDB9A}f;wH6Pm5qHE|Px!g%@skB1KHK=l!!+x%hO*Q6F$}ZUr&At8HO(vx*_wUT?$pN*Sg*C&olf9$YYSu}pOiGYauMymIBr_7hGz>318} zZ@7!!ZCed)<4a#e5xFkMkWC%#=)aa^^-~RyysFY5GLLHUQKKJ}>aM}1C zTjOFe&SCdhbfD(*7*>oYi6&*rnC7eUxJX&EW{s<%p}~udd!d|;jt=3@agf!+<0CiA zn0n>%7Zi{b z*u0t4`+rKb=U|BnoT}fS+vU6?Qx2z=>%UF<#7UG!w6EW={{NkG&KH-lHPm8>!K5Gy z-*Y5}3ac|^%9N;?3MLhK02!AiK(R)JiDQ_G97mvIaV88N4R)8r9p-)4qD70UjydY6 zwG|c9;A3Q#MB~PhaqO|Az(Ve;;TD$|kVm62(W@)v19h5*aCM1yP){gFOzA zrk(G1h?UuJFc=IsH8oioEYd;Ri6%+n0u*9szX(JKfq}6P6N0vPhJ?dCb?e z|N5{0@_qZ;*Z&|lC+94Z)4Gmjv<2IPZ~pelC!f0azWY$}Ic9F1C83kH&K2X3xgzs~ zLg}YECRrkdePK8I!XOKlP!QJ0+{fl-Yvf|nuP%G}jk^!oG8J8umZ zWTS&|9ZQ}T_i+69@uK`0Z_&!i%B&y{kZrxQutXdS&{nTr4HwPL;~#HpYpdnX!4kox zgEbOv-=&vc>b>o@+s-K~Et$v9)2qii5a7nY??C;5=kECN?JvIc(yJ=p3*A)MqNs^s z)=szNX={Ys4G!h9bDVOS(+S5+13lUklb zXvT~gV$5Tv318p|(;vz$x;eFxWm6n$3EiEn9O^EZ&(h-DZ*ACJ*ty{N_ z9$om@hf3Ud{itJ(s`t1(hclU+1%Ofj)_SUg?X6Eg^ow8KbLCZ6t=`PBCPs{}dzZKl zifo#JQA;R@-f+VWSmY{x#u;a16>%(#h5@!H+Q@F5%5I&zsHn)@*x2Y{F~Q5@AuqcO zUP#_~)aOYk1`Q=j^jasPq^(~kfA@mKR}r;?-E4Fo+Bjjmj^YV{L8 z{NWFG@wFDEoOz3zM~ZnHHejhbumh?U!!IN@aCVCsr#b+Vo~7Dj6W5&3j{vqTV<$4Bn^ z`g#}3-k$dMb`RfVSR|p=(Lpi^B5|WorcIlsegFI4pM1(GCmmOiUvR$5tsP2+lBJ7; z4ik#O4w$~ZrMY?8TPs$4_~esM)~{W=7ULHYRxnjHK^)8CVEr9-n+18OtFi`*L!-s& zBx5x9uu4)UgXOYm`T6-C78^QUJaddB(uI{&T!ott; zG34Ei%JCA1tGTf&+YdAxc7 z3_1lJ^Xo?yaV(4l7e$PZEQ>T{$`p-zNv*cFR-^!7jKt3cnJ8hA1kp^XG~CWjwSiQnzOA(-TvuNoX9H2&5e!yu*tEWW z{rdIon>TN(W72e(?rCSCe~e`;3&ZD*I%}Q8Vba8yG?p7?O*0VtsQQW5@fp5GI#y*L z4RM^2V$2iB6dJHA02y!V@cq6R6r;^$GD02 z6>I!N2d}Z%x7B-|FK_YH|AQV>Mb8&+dF(}hAStPQ)gQyo$VF&Vg^68j_z;Qtq zQwg)kVUbC^*ZK_7mQ0Ic9gFv}S%m2%NzxWG-LtrLY}Tw515Ta0gfO%Adyu>Ads3+^9P( z5-JVhk&js`R)~LVz7NkWcdhf3D9L@JZVjHvYcP3}6|p!E{^LCOkMp_dOqTfg@#A$S z4#G!(;dc;Y~E zm-#&$S?2#Ia=eYSz`3aQ zpi_!ASMIa&_PUI9lH97!&zS0#+a;002ovPDHLkV1g=H B!!Q5< literal 0 HcmV?d00001 diff --git a/src/main/resources/static/css/font-import.css b/src/main/resources/static/css/font-import.css new file mode 100644 index 00000000..c9557a1f --- /dev/null +++ b/src/main/resources/static/css/font-import.css @@ -0,0 +1,2 @@ +@import url('https://webfontworld.github.io/pretendard/Pretendard.css'); +@import url("//cdn.jsdelivr.net/npm/font-applesdgothicneo@1.0/all.min.css"); \ No newline at end of file diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css new file mode 100644 index 00000000..e2c2921c --- /dev/null +++ b/src/main/resources/static/css/style.css @@ -0,0 +1,124 @@ +html, body { + width: 100%; + height: 100%; + margin: 0; +} + +.onboarding-page { + width: 100%; + height: 100%; + background-color: #ffffff; + display: flex; + flex-flow: column nowrap; + justify-content: center; + align-items: center; + + + font-family: var(--ios-ios-rate-font-family); + color: var(--primaryprimarylight); + letter-spacing: var(--ios-ios-rate-letter-spacing); + line-height: var(--ios-ios-rate-line-height); + border-color: var(--primaryprimarylight); + font-style: var(--ios-ios-rate-font-style); + +} +.onboarding-page .logo { + -webkit-text-stroke: 1px #df5757; + white-space: nowrap; + + display: flex; + flex-flow: column nowrap; + justify-content: center; + align-items: center; + + padding: 2em; +} + +.onboarding-page .logo .image { + width: 9em; + height: 9em; +} + +.onboarding-page .logo .main-logo { + text-align: center; + text-shadow: 0px 2px 2px rgba(0, 0, 0, 0.25); + font-family: Pretendard; + font-size: 40px; + font-weight: 700; + line-height: 16px; /* 26.667% */ + letter-spacing: -0.408px; +} + +.onboarding-page .logo h6 { + text-align: center; + + /* iOS/iOS H1 */ + font-family: "Apple SD Gothic Neo"; + font-size: 13px; + font-weight: 200; + line-height: 15px; /* 130% */ + position: relative; + margin: 0.2em; +} + +.onboarding-page .text-wrapper { + -webkit-text-stroke: 0.1rem #df5757; + font-weight: 400; + font-size: 1.5rem; + white-space: nowrap; + text-align: center; +} +.onboarding-page .overlap-group { +} +.onboarding-page .rectangle { + position: relative; + width: 20em; + height: 2em; + margin: 2em; + background-color: var(--gray-scalegray-100); + border-radius: 5px; + border: 1px solid; + border-color: var(--gray-scalegray-200); + opacity: 0.9; +} + +.onboarding-page .frame { + display: flex; + width: 358px; + height: 45px; + align-items: center; + justify-content: center; + gap: 10px; + padding: 16px 24px; +} + +.onboarding-page .div { + width: 341px; + margin-top: -6.5px; + margin-bottom: -4.5px; + margin-left: -15.5px; + margin-right: -15.5px; + font-family: var(--ios-ios-body1-font-family); + font-weight: var(--ios-ios-body1-font-weight); + color: #000000; + font-size: var(--ios-ios-body1-font-size); + letter-spacing: var(--ios-ios-body1-letter-spacing); + line-height: var(--ios-ios-body1-line-height); + font-style: var(--ios-ios-body1-font-style); +} + +.rectangle { + +} + +input { + width: 100%; + height: 100%; + font-size: 15px; + color: #222222; + border: none; + background: none; + text-align: center; +} + +input:focus { outline: none; } \ No newline at end of file diff --git a/src/main/resources/static/css/styleguide.css b/src/main/resources/static/css/styleguide.css new file mode 100644 index 00000000..9ca25687 --- /dev/null +++ b/src/main/resources/static/css/styleguide.css @@ -0,0 +1,183 @@ +:root { + --basicwhite: rgba(255, 255, 255, 1); + --basicblack: rgba(0, 0, 0, 1); + --basickakao-login: rgba(254, 229, 0, 1); + --gray-scalegray-100: rgba(249, 249, 249, 1); + --gray-scalegray-200: rgba(222, 222, 222, 1); + --gray-scalegray-300: rgba(240, 240, 240, 1); + --gray-scalegray-400: rgba(168, 168, 168, 1); + --gray-scalegray-500: rgba(157, 157, 157, 1); + --gray-scalegray-600: rgba(85, 85, 85, 1); + --gray-scalegray-700: rgba(86, 86, 86, 1); + --gray-scalegray-800: rgba(31, 31, 31, 1); + --primaryprimarylight: rgba(223, 87, 87, 1); + --primaryprimarydark: rgba(225, 67, 67, 1); + --ios-ios-h1-font-family: "AppleSD Gothic Neo-Bold", Helvetica; + --ios-ios-h1-font-weight: 700; + --ios-ios-h1-font-size: 20px; + --ios-ios-h1-letter-spacing: 0px; + --ios-ios-h1-line-height: 26px; + --ios-ios-h1-font-style: normal; + --ios-ios-h2-font-family: "AppleSD Gothic Neo-Bold", Helvetica; + --ios-ios-h2-font-weight: 700; + --ios-ios-h2-font-size: 18px; + --ios-ios-h2-letter-spacing: 0px; + --ios-ios-h2-line-height: 24px; + --ios-ios-h2-font-style: normal; + --ios-ios-subtitle1-font-family: "AppleSD Gothic Neo-Bold", Helvetica; + --ios-ios-subtitle1-font-weight: 700; + --ios-ios-subtitle1-font-size: 16px; + --ios-ios-subtitle1-letter-spacing: 0px; + --ios-ios-subtitle1-line-height: 24px; + --ios-ios-subtitle1-font-style: normal; + --ios-ios-subtitle2-font-family: "AppleSD Gothic Neo-SemiBold", Helvetica; + --ios-ios-subtitle2-font-weight: 600; + --ios-ios-subtitle2-font-size: 16px; + --ios-ios-subtitle2-letter-spacing: 0px; + --ios-ios-subtitle2-line-height: 24px; + --ios-ios-subtitle2-font-style: normal; + --ios-ios-body1-font-family: "AppleSD Gothic Neo-Medium", Helvetica; + --ios-ios-body1-font-weight: 500; + --ios-ios-body1-font-size: 16px; + --ios-ios-body1-letter-spacing: 0px; + --ios-ios-body1-line-height: 24px; + --ios-ios-body1-font-style: normal; + --ios-ios-body2-font-family: "AppleSD Gothic Neo-Bold", Helvetica; + --ios-ios-body2-font-weight: 700; + --ios-ios-body2-font-size: 14px; + --ios-ios-body2-letter-spacing: 0px; + --ios-ios-body2-line-height: 20px; + --ios-ios-body2-font-style: normal; + --ios-ios-body3-font-family: "AppleSD Gothic Neo-Regular", Helvetica; + --ios-ios-body3-font-weight: 400; + --ios-ios-body3-font-size: 14px; + --ios-ios-body3-letter-spacing: 0px; + --ios-ios-body3-line-height: 20px; + --ios-ios-body3-font-style: normal; + --ios-ios-caption1-font-family: "AppleSD Gothic Neo-Bold", Helvetica; + --ios-ios-caption1-font-weight: 700; + --ios-ios-caption1-font-size: 12px; + --ios-ios-caption1-letter-spacing: 0px; + --ios-ios-caption1-line-height: 18px; + --ios-ios-caption1-font-style: normal; + --ios-ios-caption2-font-family: "AppleSD Gothic Neo-Medium", Helvetica; + --ios-ios-caption2-font-weight: 500; + --ios-ios-caption2-font-size: 12px; + --ios-ios-caption2-letter-spacing: 0px; + --ios-ios-caption2-line-height: 18px; + --ios-ios-caption2-font-style: normal; + --ios-ios-caption3-font-family: "AppleSD Gothic Neo-Medium", Helvetica; + --ios-ios-caption3-font-weight: 500; + --ios-ios-caption3-font-size: 10px; + --ios-ios-caption3-letter-spacing: 0px; + --ios-ios-caption3-line-height: 12px; + --ios-ios-caption3-font-style: normal; + --ios-ios-button1-font-family: "AppleSD Gothic Neo-Bold", Helvetica; + --ios-ios-button1-font-weight: 700; + --ios-ios-button1-font-size: 18px; + --ios-ios-button1-letter-spacing: 0px; + --ios-ios-button1-line-height: 24px; + --ios-ios-button1-font-style: normal; + --ios-ios-button2-font-family: "AppleSD Gothic Neo-Bold", Helvetica; + --ios-ios-button2-font-weight: 700; + --ios-ios-button2-font-size: 14px; + --ios-ios-button2-letter-spacing: 0px; + --ios-ios-button2-line-height: 20px; + --ios-ios-button2-font-style: normal; + --ios-ios-rate-font-family: "AppleSD Gothic Neo-Medium", Helvetica; + --ios-ios-rate-font-weight: 500; + --ios-ios-rate-font-size: 36px; + --ios-ios-rate-letter-spacing: 0px; + --ios-ios-rate-line-height: normal; + --ios-ios-rate-font-style: normal; + --ios-widget1-font-family: "AppleSD Gothic Neo-Medium", Helvetica; + --ios-widget1-font-weight: 500; + --ios-widget1-font-size: 8px; + --ios-widget1-letter-spacing: 0px; + --ios-widget1-line-height: 12px; + --ios-widget1-font-style: normal; + --ios-widget2-font-family: "AppleSD Gothic Neo-Bold", Helvetica; + --ios-widget2-font-weight: 700; + --ios-widget2-font-size: 10px; + --ios-widget2-letter-spacing: 0px; + --ios-widget2-line-height: 18px; + --ios-widget2-font-style: normal; + --android-android-h1-font-family: "NotoSans KR-Bold", Helvetica; + --android-android-h1-font-weight: 700; + --android-android-h1-font-size: 20px; + --android-android-h1-letter-spacing: 0px; + --android-android-h1-line-height: 26px; + --android-android-h1-font-style: normal; + --android-android-h2-font-family: "NotoSans KR-Medium", Helvetica; + --android-android-h2-font-weight: 500; + --android-android-h2-font-size: 18px; + --android-android-h2-letter-spacing: 0px; + --android-android-h2-line-height: 24px; + --android-android-h2-font-style: normal; + --android-android-subtitle1-font-family: "NotoSans KR-Bold", Helvetica; + --android-android-subtitle1-font-weight: 700; + --android-android-subtitle1-font-size: 16px; + --android-android-subtitle1-letter-spacing: 0px; + --android-android-subtitle1-line-height: 24px; + --android-android-subtitle1-font-style: normal; + --android-android-subtitle2-font-family: "NotoSans KR-Medium", Helvetica; + --android-android-subtitle2-font-weight: 500; + --android-android-subtitle2-font-size: 16px; + --android-android-subtitle2-letter-spacing: 0px; + --android-android-subtitle2-line-height: 24px; + --android-android-subtitle2-font-style: normal; + --android-android-body1-font-family: "NotoSans KR-Regular", Helvetica; + --android-android-body1-font-weight: 400; + --android-android-body1-font-size: 16px; + --android-android-body1-letter-spacing: 0px; + --android-android-body1-line-height: 24px; + --android-android-body1-font-style: normal; + --android-android-body2-font-family: "NotoSans KR-Bold", Helvetica; + --android-android-body2-font-weight: 700; + --android-android-body2-font-size: 14px; + --android-android-body2-letter-spacing: 0px; + --android-android-body2-line-height: 20px; + --android-android-body2-font-style: normal; + --android-android-body3-font-family: "NotoSans KR-Regular", Helvetica; + --android-android-body3-font-weight: 400; + --android-android-body3-font-size: 14px; + --android-android-body3-letter-spacing: 0px; + --android-android-body3-line-height: 20px; + --android-android-body3-font-style: normal; + --android-android-caption1-font-family: "NotoSans KR-Bold", Helvetica; + --android-android-caption1-font-weight: 700; + --android-android-caption1-font-size: 12px; + --android-android-caption1-letter-spacing: 0px; + --android-android-caption1-line-height: 18px; + --android-android-caption1-font-style: normal; + --android-android-caption2-font-family: "NotoSans KR-Regular", Helvetica; + --android-android-caption2-font-weight: 400; + --android-android-caption2-font-size: 12px; + --android-android-caption2-letter-spacing: 0px; + --android-android-caption2-line-height: 18px; + --android-android-caption2-font-style: normal; + --android-android-caption3-font-family: "NotoSans KR-Regular", Helvetica; + --android-android-caption3-font-weight: 400; + --android-android-caption3-font-size: 10px; + --android-android-caption3-letter-spacing: 0px; + --android-android-caption3-line-height: 12px; + --android-android-caption3-font-style: normal; + --android-android-button1-font-family: "NotoSans KR-Medium", Helvetica; + --android-android-button1-font-weight: 500; + --android-android-button1-font-size: 18px; + --android-android-button1-letter-spacing: 0px; + --android-android-button1-line-height: 24px; + --android-android-button1-font-style: normal; + --android-android-button2-font-family: "NotoSans KR-Medium", Helvetica; + --android-android-button2-font-weight: 500; + --android-android-button2-font-size: 14px; + --android-android-button2-letter-spacing: 0px; + --android-android-button2-line-height: 20px; + --android-android-button2-font-style: normal; + --android-android-rate-font-family: "NotoSans KR-Medium", Helvetica; + --android-android-rate-font-weight: 500; + --android-android-rate-font-size: 36px; + --android-android-rate-letter-spacing: 0px; + --android-android-rate-line-height: normal; + --android-android-rate-font-style: normal; +} diff --git a/src/main/resources/templates/layout/footer.mustache b/src/main/resources/templates/layout/footer.mustache new file mode 100644 index 00000000..69aae56f --- /dev/null +++ b/src/main/resources/templates/layout/footer.mustache @@ -0,0 +1,3 @@ + + + diff --git a/src/main/resources/templates/layout/header.mustache b/src/main/resources/templates/layout/header.mustache new file mode 100644 index 00000000..988e94a6 --- /dev/null +++ b/src/main/resources/templates/layout/header.mustache @@ -0,0 +1,11 @@ + + + + Eat-Ssu ADMIN + + + + + + + diff --git a/src/main/resources/templates/login.mustache b/src/main/resources/templates/login.mustache new file mode 100644 index 00000000..f940a4b6 --- /dev/null +++ b/src/main/resources/templates/login.mustache @@ -0,0 +1,18 @@ +{{> layout/header}} +

+ +
EAT-SSU 관리자 페이지
+
+
+
+ +
+
+
+
+{{> layout/footer}} + From 95288cbf3e0c5151ac3c775a80fed71a1a45ceef Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Sat, 20 Jan 2024 15:56:43 +0900 Subject: [PATCH 062/399] =?UTF-8?q?[#85]=20refactor=20:=20MenuService?= =?UTF-8?q?=EB=A5=BC=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/menu/dto/MenuRequest.java | 2 +- .../ssu/eatssu/domain/menu/entity/Meal.java | 1 - .../menu/presentation/MealController.java | 4 +- .../domain/menu/service/MenuService.java | 74 +++++++++---------- .../domain/menu/util/MenuValidator.java | 4 +- .../restaurant/entity/TemporalRestaurant.java | 29 -------- .../repository/RestaurantRepository.java | 13 ---- 7 files changed, 40 insertions(+), 87 deletions(-) delete mode 100644 src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java delete mode 100644 src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java b/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java index 040d83ab..538ce21e 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java @@ -15,7 +15,7 @@ private MenuRequest() { @Getter @NoArgsConstructor @AllArgsConstructor - public static class CreateMealRequest { + public static class MealCreateRequest { @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") private List menuNames; diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index be9f323c..dfcce2e0 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -26,7 +26,6 @@ public class Meal { @Enumerated(EnumType.STRING) private TimePart timePart; - @Embedded private Restaurant restaurant; @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL) diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java index b97024f7..0ada2d14 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java @@ -23,7 +23,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.menu.entity.TimePart; -import ssu.eatssu.domain.menu.dto.MenuRequest.CreateMealRequest; +import ssu.eatssu.domain.menu.dto.MenuRequest.MealCreateRequest; import ssu.eatssu.domain.menu.dto.MenuResponse.MealInformationResponse; import ssu.eatssu.domain.menu.service.MenuService; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -54,7 +54,7 @@ public BaseResponse createMeal( @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurantName, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, - @RequestBody CreateMealRequest createMealRequest) { + @RequestBody MealCreateRequest createMealRequest) { if (restaurantName.isFixed()) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index fd62597c..3801c6b9 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -5,7 +5,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import ssu.eatssu.domain.menu.dto.MenuRequest.CreateMealRequest; +import ssu.eatssu.domain.menu.dto.MenuRequest.MealCreateRequest; import ssu.eatssu.domain.menu.dto.MenuResponse.MenuInformationResponse; import ssu.eatssu.domain.menu.dto.MenuResponse.MenusInformationResponse; import ssu.eatssu.domain.menu.dto.MenuResponse.MealInformationResponse; @@ -53,11 +53,10 @@ public List findSpecificMeals(Date date, } public void createMeal(Date date, Restaurant restaurant, TimePart timePart, - CreateMealRequest request) { + MealCreateRequest request) { List meals = getMeals(date, timePart, restaurant); - if (MenuValidator.validateExistedMeal(meals, - request)) { + if (MenuValidator.validateExistedMeal(meals, request)) { return; } @@ -68,31 +67,46 @@ public void createMeal(Date date, Restaurant restaurant, TimePart timePart, .build(); mealRepository.save(newMeal); - addMenu(newMeal, request); + addMenusToMeal(newMeal, restaurant, request); } - private void addMenu(Meal meal, CreateMealRequest request) { - Restaurant restaurant = meal.getRestaurant(); + private void addMenusToMeal(Meal meal, Restaurant restaurant, MealCreateRequest request) { + for (String menuName : request.getMenuNames()) { + Menu menu = createMenuIfNotExists(menuName, restaurant); + createMealMenu(meal, menu); + } + } - for (String addMenuName : request.getMenuNames()) { - checkAndCreateMenu(addMenuName, restaurant); + private Menu createMenuIfNotExists(String menuName, Restaurant restaurant) { + return menuRepository.existsByNameAndRestaurant(menuName, restaurant) ? + getMenu(menuName, restaurant) : + menuRepository.save(Menu.createVariable(menuName, restaurant)); + } - Menu menu = getMenu(addMenuName, restaurant); + private void createMealMenu(Meal meal, Menu menu) { + MealMenu mealMenu = MealMenu.builder() + .menu(menu) + .meal(meal) + .build(); + mealMenuRepository.save(mealMenu); + } - MealMenu mealMenu = MealMenu.builder() - .menu(menu) - .meal(meal) - .build(); - mealMenuRepository.save(mealMenu); - } + private Menu getMenu(String addMenuName, Restaurant restaurant) { + Menu menu = menuRepository.findByNameAndRestaurant(addMenuName, restaurant) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + return menu; } - private void checkAndCreateMenu(String menuName, Restaurant restaurant) { - if (!menuRepository.existsByNameAndRestaurant(menuName, restaurant)) { - menuRepository.save(Menu.createVariable(menuName, restaurant)); - } + private Meal getMeal(Long mealId) { + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + return meal; + } - menuRepository.save(Menu.createVariable(menuName, restaurant)); + private List getMeals(Date date, TimePart timePart, Restaurant restaurant) { + List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(date, + timePart, restaurant); + return meals; } public MenusInformationResponse findMenusInMeal(Long mealId) { @@ -120,22 +134,4 @@ private void cleanupGarbageMenu(List menuList) { } } } - - private Menu getMenu(String addMenuName, Restaurant restaurant) { - Menu menu = menuRepository.findByNameAndRestaurant(addMenuName, restaurant) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); - return menu; - } - - private Meal getMeal(Long mealId) { - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); - return meal; - } - - private List getMeals(Date date, TimePart timePart, Restaurant restaurant) { - List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(date, - timePart, restaurant); - return meals; - } } diff --git a/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java b/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java index 10bb2173..68ea246a 100644 --- a/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java +++ b/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java @@ -4,13 +4,13 @@ import java.util.Collections; import java.util.List; import lombok.RequiredArgsConstructor; -import ssu.eatssu.domain.menu.dto.MenuRequest.CreateMealRequest; +import ssu.eatssu.domain.menu.dto.MenuRequest.MealCreateRequest; import ssu.eatssu.domain.menu.entity.Meal; @RequiredArgsConstructor public class MenuValidator { - public static boolean validateExistedMeal(List meals, CreateMealRequest request) { + public static boolean validateExistedMeal(List meals, MealCreateRequest request) { List sortedRequestMenuNames = new ArrayList<>(request.getMenuNames()); Collections.sort(sortedRequestMenuNames); diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java deleted file mode 100644 index aafc619b..00000000 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java +++ /dev/null @@ -1,29 +0,0 @@ -//package ssu.eatssu.domain.restaurant.entity; -// -//import jakarta.persistence.*; -//import lombok.AccessLevel; -//import lombok.Getter; -//import lombok.NoArgsConstructor; -// -//import java.util.List; -//import ssu.eatssu.domain.menu.entity.Meal; -//import ssu.eatssu.domain.menu.entity.Menu; -// -//@Entity -//@Getter -//@NoArgsConstructor(access = AccessLevel.PROTECTED) -//public class TemporalRestaurant { -// -// @Id @GeneratedValue(strategy = GenerationType.IDENTITY) -// @Column(name = "restaurant_id") -// private Long id; -// -// @Enumerated(EnumType.STRING) -// private Restaurant restaurantName; -// -// @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) -// private List menus; -// -// @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) -// private List meals; -//} diff --git a/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java b/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java deleted file mode 100644 index d8bcbcd3..00000000 --- a/src/main/java/ssu/eatssu/domain/restaurant/repository/RestaurantRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -//package ssu.eatssu.domain.restaurant.repository; -// -//import org.springframework.data.jpa.repository.JpaRepository; -//import ssu.eatssu.domain.restaurant.entity.Restaurant; -//import ssu.eatssu.domain.restaurant.entity.TemporalRestaurant; -// -//import java.util.Optional; -// -//public interface RestaurantRepository extends JpaRepository { -// -// Optional findByRestaurantName(Restaurant restaurantName); -// -//} From 3251019e0f0c7d8e3e24966edfea3484ae4c96aa Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Sat, 20 Jan 2024 15:58:07 +0900 Subject: [PATCH 063/399] =?UTF-8?q?[#85]=20test=20:=20=EC=8B=9D=EB=8B=A8?= =?UTF-8?q?=EC=9D=B4=20=EC=83=9D=EC=84=B1=EB=90=98=EB=8A=94=EC=A7=80=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/menu/service/MenuServiceTest.java | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java index 06013e98..eb17be27 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java @@ -1,13 +1,20 @@ package ssu.eatssu.domain.menu.service; +import static org.assertj.core.api.Assertions.*; +import static ssu.eatssu.domain.menu.entity.TimePart.LUNCH; + +import java.sql.Date; import java.util.ArrayList; import java.util.List; import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import ssu.eatssu.domain.menu.dto.MenuRequest.MealCreateRequest; import ssu.eatssu.domain.menu.dto.MenuResponse.MenuInformationResponse; import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.menu.repository.MealRepository; import ssu.eatssu.domain.menu.repository.MenuRepository; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -20,6 +27,15 @@ class MenuServiceTest { @Autowired private MenuRepository menuRepository; + @Autowired + private MealRepository mealRepository; + + @BeforeEach + void setUp() { + menuRepository.deleteAll(); + mealRepository.deleteAll(); + } + @Test void 식당_이름으로_고정_메뉴를_조회한다() { // given @@ -31,8 +47,26 @@ class MenuServiceTest { menuRepository.saveAll(menus); // when & then - Assertions.assertThat(menuService.findMenusByRestaurant(foodCourt)) + assertThat(menuService.findMenusByRestaurant(foodCourt)) .extracting(MenuInformationResponse::getName) .containsExactly("라면", "떡볶이", "짜게치"); } + + @Test + void 식단을_생성한다() { + // given + Date date = Date.valueOf("2024-01-03"); + Restaurant haksik = Restaurant.from("학생 식당"); + MealCreateRequest request = new MealCreateRequest(List.of("돈까스", "샐러드", "김치")); + + // when + menuService.createMeal(date, haksik, LUNCH, request); + + // then + assertThat(mealRepository.findAll()).hasSize(1); + assertThat(menuRepository.findAll()).hasSize(3); + assertThat(menuRepository.findAll()) + .extracting(Menu::getName) + .containsExactly("돈까스", "샐러드", "김치"); + } } \ No newline at end of file From 7b13fb51f3c5361b1e9323ba4a84074d25c2567a Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 20 Jan 2024 16:25:07 +0900 Subject: [PATCH 064/399] =?UTF-8?q?[#42]=20Feat:=20AdminAuth=20=EA=B0=92?= =?UTF-8?q?=20properties=20=EB=93=B1=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/admin/controller/AdminAuth.java | 4 ++++ .../AdminAuthConfigurationProperties.java | 10 ++++++++++ .../admin/infrastructure/AdminConfiguration.java | 16 ++++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 src/main/java/ssu/eatssu/domain/admin/controller/AdminAuth.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminConfiguration.java diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/AdminAuth.java b/src/main/java/ssu/eatssu/domain/admin/controller/AdminAuth.java new file mode 100644 index 00000000..69c08bf6 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/controller/AdminAuth.java @@ -0,0 +1,4 @@ +package ssu.eatssu.domain.admin.controller; + +public record AdminAuth(String loginId) { +} diff --git a/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java b/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java new file mode 100644 index 00000000..29cca058 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java @@ -0,0 +1,10 @@ +package ssu.eatssu.domain.admin.infrastructure; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +@Data +@ConfigurationProperties(prefix = "admin") +public class AdminAuthConfigurationProperties { + private String loginId; +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminConfiguration.java b/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminConfiguration.java new file mode 100644 index 00000000..01309549 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminConfiguration.java @@ -0,0 +1,16 @@ +package ssu.eatssu.domain.admin.infrastructure; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import ssu.eatssu.domain.admin.controller.AdminAuth; + +@Configuration +@EnableConfigurationProperties(AdminAuthConfigurationProperties.class) +public class AdminConfiguration { + + @Bean + public AdminAuth adminAuthConfigurationProperties(AdminAuthConfigurationProperties properties) { + return new AdminAuth(properties.getLoginId()); + } +} From 0a6341aa9fe8693225ba1b3210335a257c9bd1a7 Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 20 Jan 2024 16:35:55 +0900 Subject: [PATCH 065/399] =?UTF-8?q?[#42]=20Feat:=20Admin=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EA=B8=B0=EB=8A=A5=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AuthenticationController.java | 20 ++++++++--- .../eatssu/domain/admin/dto/LoginRequest.java | 4 +++ .../admin/service/AuthenticationService.java | 35 +++++++++++++++++++ .../auth/infrastructure/SecurityConfig.java | 8 +++-- .../ssu/eatssu/domain/user/entity/User.java | 9 +++++ 5 files changed, 70 insertions(+), 6 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/LoginRequest.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java b/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java index 2205f311..c573f7f7 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java @@ -1,19 +1,31 @@ package ssu.eatssu.domain.admin.controller; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.*; +import ssu.eatssu.domain.admin.dto.LoginRequest; +import ssu.eatssu.domain.admin.service.AuthenticationService; +import ssu.eatssu.domain.user.dto.Tokens; +import ssu.eatssu.global.handler.response.BaseResponse; +@Slf4j @Controller @RequestMapping("/admin") @RequiredArgsConstructor public class AuthenticationController { + private final AuthenticationService authenticationService; + @GetMapping("/login") - public String loginPage(Model model) { + public String loginPage() { return "login"; } + @ResponseBody + @PostMapping("/login") + public BaseResponse login(@RequestBody LoginRequest request) { + return BaseResponse.success(authenticationService.login(request.password())); + } + } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/LoginRequest.java b/src/main/java/ssu/eatssu/domain/admin/dto/LoginRequest.java new file mode 100644 index 00000000..f38fb833 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/LoginRequest.java @@ -0,0 +1,4 @@ +package ssu.eatssu.domain.admin.dto; + +public record LoginRequest(String password) { +} diff --git a/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java b/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java new file mode 100644 index 00000000..ccc8a83d --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java @@ -0,0 +1,35 @@ +package ssu.eatssu.domain.admin.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; +import ssu.eatssu.domain.admin.controller.AdminAuth; +import ssu.eatssu.domain.auth.security.JwtTokenProvider; +import ssu.eatssu.domain.user.dto.Tokens; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.user.repository.UserRepository; + +@RequiredArgsConstructor +@Service +public class AuthenticationService { + private final JwtTokenProvider tokenProvider; + private final PasswordEncoder passwordEncoder; + private final UserRepository userRepository; + private final AdminAuth adminAuth; + + public Tokens login(String password) { + return tokenProvider.generateTokens(adminAuth.loginId(), password); + } + + private void join(String loginId, String password) { + String credentials = createCredentials(password); + + //회원가입 + User user = User.adminJoin(loginId, credentials); + userRepository.save(user); + } + + private String createCredentials(String password) { + return passwordEncoder.encode(password); + } +} diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 7ef26fce..622f8f45 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -19,12 +19,15 @@ @Configuration @RequiredArgsConstructor public class SecurityConfig { + private static final String[] RESOURCE_LIST = { + "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**","/admin/img/**","/css/**", "/js/**", + "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" + }; private static final String[] AUTH_WHITELIST = { - "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**", "/", "/user/join", "/user/login", "/user/user-emails/{email}/exist", "/user/check-nickname", "/menu/**", "/restaurants/**", "/review/info","/review/list", "/oauth/**", "/inquiries/{userInquiriesId}", - "/inquiries/list" + "/inquiries/list", "/admin/login" }; private static final String[] ADMIN_PAGE_LIST = { @@ -48,6 +51,7 @@ protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .authorizeHttpRequests(authorize -> authorize .shouldFilterAllDispatcherTypes(false) .requestMatchers(AUTH_WHITELIST).permitAll() + .requestMatchers(RESOURCE_LIST).permitAll() .requestMatchers(ADMIN_PAGE_LIST).hasRole("ADMIN") .anyRequest().authenticated() .and().addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index eb3840e2..7fc026b9 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -74,6 +74,15 @@ public static User oAuthJoin(@NotNull String email, @NotNull OauthProvider provi return new User(email, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials); } + /** + * <--Static Factory Method--> + * admin 회원가입 + * Role 은 다른 방법으로 세팅할 예정 + */ + public static User adminJoin(@NotNull String loginId, @NotNull String credentials) { + return new User(loginId, Role.USER, OauthProvider.EATSSU, loginId, UserStatus.INACTIVE, credentials); + } + public void updateNickname(@NotNull String nickname) { this.nickname = nickname; } From beaf008e50e7cc619939b0570972ddffee4dc45a Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Sat, 20 Jan 2024 16:45:11 +0900 Subject: [PATCH 066/399] =?UTF-8?q?[#85]=20test=20:=20=EC=8B=9D=EB=8B=A8?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C,=20=EC=82=AD=EC=A0=9C=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=EC=9D=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/menu/service/MenuService.java | 46 +++++++++---------- .../domain/menu/service/MenuServiceTest.java | 45 ++++++++++++++++-- 2 files changed, 62 insertions(+), 29 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index 3801c6b9..594c917d 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -70,6 +70,24 @@ public void createMeal(Date date, Restaurant restaurant, TimePart timePart, addMenusToMeal(newMeal, restaurant, request); } + public MenusInformationResponse findMenusInMeal(Long mealId) { + Meal meal = getMeal(mealId); + return MenusInformationResponse.from(meal); + } + + public void deleteMeal(Long mealId) { + Meal meal = getMeal(mealId); + + List menus = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .toList(); + + mealRepository.delete(meal); + mealRepository.flush(); + + deleteUnusedMenus(menus); + } + private void addMenusToMeal(Meal meal, Restaurant restaurant, MealCreateRequest request) { for (String menuName : request.getMenuNames()) { Menu menu = createMenuIfNotExists(menuName, restaurant); @@ -109,29 +127,9 @@ private List getMeals(Date date, TimePart timePart, Restaurant restaurant) return meals; } - public MenusInformationResponse findMenusInMeal(Long mealId) { - Meal meal = getMeal(mealId); - return MenusInformationResponse.from(meal); - } - - public void deleteMeal(Long mealId) { - Meal meal = getMeal(mealId); - - List menus = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .toList(); - - mealRepository.delete(meal); - mealRepository.flush(); - - cleanupGarbageMenu(menus); - } - - private void cleanupGarbageMenu(List menuList) { - for (Menu menu : menuList) { - if (menu.getMealMenus().isEmpty()) { - menuRepository.delete(menu); - } - } + private void deleteUnusedMenus(List menus) { + menus.stream() + .filter(menu -> menu.getMealMenus().isEmpty()) + .forEach(menuRepository::delete); } } diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java index eb17be27..0ee8a175 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java @@ -13,6 +13,7 @@ import org.springframework.boot.test.context.SpringBootTest; import ssu.eatssu.domain.menu.dto.MenuRequest.MealCreateRequest; import ssu.eatssu.domain.menu.dto.MenuResponse.MenuInformationResponse; +import ssu.eatssu.domain.menu.dto.MenuResponse.MenusInformationResponse; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.repository.MealRepository; import ssu.eatssu.domain.menu.repository.MenuRepository; @@ -54,6 +55,17 @@ void setUp() { @Test void 식단을_생성한다() { + 식단_생성_요청(); + + // then + assertThat(mealRepository.findAll()).hasSize(1); + assertThat(menuRepository.findAll()).hasSize(3); + assertThat(menuRepository.findAll()) + .extracting(Menu::getName) + .containsExactly("돈까스", "샐러드", "김치"); + } + + private Long 식단_생성_요청() { // given Date date = Date.valueOf("2024-01-03"); Restaurant haksik = Restaurant.from("학생 식당"); @@ -62,11 +74,34 @@ void setUp() { // when menuService.createMeal(date, haksik, LUNCH, request); + return mealRepository.findAll().stream() + .findFirst() + .orElseThrow(() -> new RuntimeException("Meal not created")) + .getId(); + } + + @Test + void 식단을_조회한다() { + // given + Long createdMealId = 식단_생성_요청(); + + // when + MenusInformationResponse response = menuService.findMenusInMeal(createdMealId); + // then - assertThat(mealRepository.findAll()).hasSize(1); - assertThat(menuRepository.findAll()).hasSize(3); - assertThat(menuRepository.findAll()) - .extracting(Menu::getName) - .containsExactly("돈까스", "샐러드", "김치"); + assertThat(response.getMenusInformation()).hasSize(3); + } + + @Test + void 식단을_삭제한다() { + // given + Long createdMealId = 식단_생성_요청(); + + // when + menuService.deleteMeal(createdMealId); + + // then + assertThat(mealRepository.findAll()).hasSize(0); + assertThat(menuRepository.findAll()).hasSize(0); } } \ No newline at end of file From bf35881f82f723587e30e6d1f9e44dfb0220dec5 Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Sat, 20 Jan 2024 17:31:47 +0900 Subject: [PATCH 067/399] =?UTF-8?q?[#85]=20test=20:=20=EB=A6=AC=EB=B7=B0?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1,=20=EC=88=98=EC=A0=95,=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=EB=A5=BC=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...sResponse.java => MenuReviewResponse.java} | 6 +- ...wRequest.java => ReviewCreateRequest.java} | 4 +- ...wRequest.java => ReviewUpdateRequest.java} | 16 ++- .../eatssu/domain/review/entity/Review.java | 2 +- .../review/presentation/ReviewController.java | 14 +-- .../domain/review/service/ReviewService.java | 24 ++-- .../domain/auth/service/OauthServiceTest.java | 7 +- .../review/service/ReviewServiceTest.java | 110 ++++++++++++++++++ .../domain/user/service/UserServiceTest.java | 5 +- 9 files changed, 152 insertions(+), 36 deletions(-) rename src/main/java/ssu/eatssu/domain/review/dto/{MainReviewsResponse.java => MenuReviewResponse.java} (88%) rename src/main/java/ssu/eatssu/domain/review/dto/{CreateReviewRequest.java => ReviewCreateRequest.java} (94%) rename src/main/java/ssu/eatssu/domain/review/dto/{UpdateReviewRequest.java => ReviewUpdateRequest.java} (64%) create mode 100644 src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MainReviewsResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java similarity index 88% rename from src/main/java/ssu/eatssu/domain/review/dto/MainReviewsResponse.java rename to src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java index df9a4168..76159acf 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MainReviewsResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java @@ -11,7 +11,7 @@ @Getter @AllArgsConstructor @Builder -public class MainReviewsResponse implements ReviewInformationResponse { +public class MenuReviewResponse implements ReviewInformationResponse { @Schema(description = "메뉴 리스트", example = "[\"고구마치즈돈까스\", \"막국수\", \"미니밥\", \"단무지\", \"요구르트\"]") private String menuName; @@ -29,10 +29,10 @@ public class MainReviewsResponse implements ReviewInformationResponse { private Double tasteRating; private ReviewRatingCount reviewRatingCount; - public static MainReviewsResponse of(Menu menu, + public static MenuReviewResponse of(Menu menu, RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { - return MainReviewsResponse.builder() + return MenuReviewResponse.builder() .menuName(menu.getName()) .totalReviewCount(menu.getTotalReviewCount()) .mainRating(ratingAverages.mainRating()) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java similarity index 94% rename from src/main/java/ssu/eatssu/domain/review/dto/CreateReviewRequest.java rename to src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java index 0fc29744..c929734f 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/CreateReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java @@ -13,7 +13,7 @@ @Schema(title = "리뷰 작성") @NoArgsConstructor @Getter -public class CreateReviewRequest { +public class ReviewCreateRequest { @Schema(description = "평점-메인", example = "4") private Integer mainRating; @@ -28,7 +28,7 @@ public class CreateReviewRequest { @Schema(description = "한줄평", example = "맛있어용") private String content; - public CreateReviewRequest(int mainRating, int amountRating, int tasteRating, String content) { + public ReviewCreateRequest(int mainRating, int amountRating, int tasteRating, String content) { Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UpdateReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java similarity index 64% rename from src/main/java/ssu/eatssu/domain/review/dto/UpdateReviewRequest.java rename to src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java index f44ecfda..0d0e0bd4 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/UpdateReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java @@ -2,24 +2,22 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; -import lombok.Getter; -import lombok.NoArgsConstructor; @Schema(title = "리뷰 수정(글)") -@NoArgsConstructor -@Getter -public class UpdateReviewRequest { +public record ReviewUpdateRequest( @Schema(description = "평점-메인", example = "4") - private Integer mainRate; + Integer mainRate, @Schema(description = "평점-양", example = "4") - private Integer amountRate; + Integer amountRate, @Schema(description = "평점-맛", example = "4") - private Integer tasteRate; + Integer tasteRate, @Max(150) @Schema(description = "한줄평", example = "맛있어용") - private String content; + String content +) { + } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index 54ada377..62a3238c 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -45,7 +45,7 @@ public void update(String content, Integer mainRate, Integer amountRate, Integer } /* - public void update(UpdateReviewRequest request) { + public void update(ReviewUpdateRequest request) { this.content = request.getContent(); this.ratings = Ratings.of(request.getMainRate(), request.getAmountRate(), request.getTasteRate()); } diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index 5a775710..d6af9a04 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -19,11 +19,11 @@ import org.springframework.web.multipart.MultipartFile; import ssu.eatssu.domain.auth.entity.CustomUserDetails; import ssu.eatssu.domain.menu.entity.MenuType; -import ssu.eatssu.domain.review.dto.CreateReviewRequest; +import ssu.eatssu.domain.review.dto.ReviewCreateRequest; import ssu.eatssu.domain.review.dto.MealReviewsResponse; -import ssu.eatssu.domain.review.dto.MainReviewsResponse; +import ssu.eatssu.domain.review.dto.MenuReviewResponse; import ssu.eatssu.domain.review.dto.ReviewDetail; -import ssu.eatssu.domain.review.dto.UpdateReviewRequest; +import ssu.eatssu.domain.review.dto.ReviewUpdateRequest; import ssu.eatssu.domain.slice.service.SliceService; import ssu.eatssu.domain.review.service.ReviewService; import ssu.eatssu.domain.slice.dto.SliceResponse; @@ -84,10 +84,10 @@ public BaseResponse> getReviews( produces = MediaType.APPLICATION_JSON_VALUE) public BaseResponse writeReview( @Parameter(description = "menuId") @PathVariable("menuId") Long menuId, - @RequestPart(value = "reviewCreate") CreateReviewRequest createReviewRequest, + @RequestBody ReviewCreateRequest createReviewRequest, @RequestPart(value = "multipartFileList", required = false) List multipartFileList, @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewService.writeReview(customUserDetails, menuId, createReviewRequest, + reviewService.createReview(customUserDetails, menuId, createReviewRequest, multipartFileList); return BaseResponse.success(); } @@ -105,7 +105,7 @@ public BaseResponse writeReview( @PatchMapping("/{reviewId}") public BaseResponse updateReview(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, - @RequestBody UpdateReviewRequest request, + @RequestBody ReviewUpdateRequest request, @AuthenticationPrincipal CustomUserDetails customUserDetails) { reviewService.updateReview(customUserDetails, reviewId, request); return BaseResponse.success(); @@ -159,7 +159,7 @@ public BaseResponse getMealReviews( @Schema(implementation = BaseResponse.class))) }) @GetMapping("/menus/{menuId}") - public BaseResponse getMainReviews( + public BaseResponse getMainReviews( @Parameter(description = "menuId") @RequestParam(value = "menuId") Long menuId) { return BaseResponse.success(reviewService.findMenuReviews(menuId)); diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index dac0796c..785df8c6 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -17,12 +17,12 @@ import ssu.eatssu.domain.menu.repository.MealRepository; import ssu.eatssu.domain.menu.repository.MenuRepository; import ssu.eatssu.domain.rating.entity.JpaProjectionRatingCalculator; -import ssu.eatssu.domain.review.dto.CreateReviewRequest; +import ssu.eatssu.domain.review.dto.ReviewCreateRequest; import ssu.eatssu.domain.review.dto.MealReviewsResponse; -import ssu.eatssu.domain.review.dto.MainReviewsResponse; +import ssu.eatssu.domain.review.dto.MenuReviewResponse; import ssu.eatssu.domain.review.dto.RatingAverages; import ssu.eatssu.domain.review.dto.ReviewRatingCount; -import ssu.eatssu.domain.review.dto.UpdateReviewRequest; +import ssu.eatssu.domain.review.dto.ReviewUpdateRequest; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewImage; import ssu.eatssu.domain.review.repository.ReviewImageRepository; @@ -48,7 +48,7 @@ public class ReviewService { private final JpaProjectionRatingCalculator ratingCalculator; private final S3Uploader s3Uploader; - public void writeReview(CustomUserDetails userDetails, Long menuId, CreateReviewRequest request, + public Review createReview(CustomUserDetails userDetails, Long menuId, ReviewCreateRequest request, List images) { User user = userRepository.findById(userDetails.getId()) @@ -62,10 +62,10 @@ public void writeReview(CustomUserDetails userDetails, Long menuId, CreateReview menu.addReview(review); processReviewImages(images, review); - reviewRepository.save(review); + return reviewRepository.save(review); } - public void processReviewImages(List images, Review review) { + private void processReviewImages(List images, Review review) { if (images == null || !images.isEmpty()) { return; } @@ -74,7 +74,7 @@ public void processReviewImages(List images, Review review) { } } - public void addReviewImage(Review review, MultipartFile image) { + private void addReviewImage(Review review, MultipartFile image) { if (!image.isEmpty()) { try { String reviewImageUrl = s3Uploader.upload(image, "reviewImg"); @@ -89,7 +89,7 @@ public void addReviewImage(Review review, MultipartFile image) { } public void updateReview(CustomUserDetails userDetails, Long reviewId, - UpdateReviewRequest request) { + ReviewUpdateRequest request) { User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); @@ -100,8 +100,8 @@ public void updateReview(CustomUserDetails userDetails, Long reviewId, throw new BaseException(REVIEW_PERMISSION_DENIED); } - review.update(request.getContent(), request.getMainRate(), request.getAmountRate(), - request.getTasteRate()); + review.update(request.content(), request.mainRate(), request.amountRate(), + request.tasteRate()); } @@ -119,14 +119,14 @@ public void deleteReview(CustomUserDetails userDetails, Long reviewId) { reviewRepository.flush(); } - public MainReviewsResponse findMenuReviews(Long menuId) { + public MenuReviewResponse findMenuReviews(Long menuId) { Menu menu = menuRepository.findById(menuId) .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); RatingAverages ratingAverages = ratingCalculator.menuAverageRatings(menu); ReviewRatingCount ratingCount = ratingCalculator.menuRatingCount(menu); - return MainReviewsResponse.of(menu, ratingAverages, ratingCount); + return MenuReviewResponse.of(menu, ratingAverages, ratingCount); } diff --git a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java b/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java index 7cd81312..c5650828 100644 --- a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java @@ -12,6 +12,7 @@ import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.auth.entity.JwtTokenProvider; import ssu.eatssu.domain.auth.infrastructure.TestAppleAuthenticator; +import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.user.service.UserService; @@ -34,12 +35,16 @@ class OauthServiceTest { @Autowired private JwtTokenProvider jwtTokenProvider; + @Autowired + private ReviewRepository reviewRepository; + @BeforeEach void setUp() { + reviewRepository.deleteAll(); + userRepository.deleteAll(); oauthService = new OAuthService(userService, userRepository, new TestAppleAuthenticator(), authenticationManagerBuilder, jwtTokenProvider); - userRepository.deleteAll(); } @Test diff --git a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java new file mode 100644 index 00000000..9a32d7b4 --- /dev/null +++ b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java @@ -0,0 +1,110 @@ +package ssu.eatssu.domain.review.service; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.auth.entity.OAuthProvider; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.menu.repository.MenuRepository; +import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.review.dto.ReviewCreateRequest; +import ssu.eatssu.domain.review.dto.ReviewUpdateRequest; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.repository.ReviewRepository; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.user.repository.UserRepository; + +@SpringBootTest +class ReviewServiceTest { + + @Autowired + private ReviewService reviewService; + + @Autowired + private UserRepository userRepository; + + @Autowired + private MenuRepository menuRepository; + + @Autowired + private ReviewRepository reviewRepository; + + @BeforeEach + void setup() { + reviewRepository.deleteAll(); + userRepository.deleteAll(); + menuRepository.deleteAll(); + } + + + @Test + void 리뷰를_생성한다() { + User user = createUser(); + CustomUserDetails userDetails = createCustomUserDetails(user); + Review createdReview = 리뷰_생성_요청(userDetails); + + // then + assertThat(reviewRepository.findAll()).hasSize(1); + assertThat(reviewRepository.findById(createdReview.getId()).orElseThrow().getContent()) + .isEqualTo("굿"); + } + + @Test + void 리뷰를_업데이트한다() { + // given + User user = createUser(); + CustomUserDetails userDetails = createCustomUserDetails(user); + Review createdReview = 리뷰_생성_요청(userDetails); + + // when + ReviewUpdateRequest request = new ReviewUpdateRequest(5, 5, 5, "굿굿"); + reviewService.updateReview(userDetails, createdReview.getId(), request); + + // then + assertThat(reviewRepository.findById(createdReview.getId()).orElseThrow().getContent()) + .isEqualTo("굿굿"); + } + + @Test + void 리뷰를_삭제한다() { + // given + User user = createUser(); + CustomUserDetails userDetails = createCustomUserDetails(user); + Review createdReview = 리뷰_생성_요청(userDetails); + + // when + reviewService.deleteReview(userDetails, createdReview.getId()); + + // then + assertThat(reviewRepository.findAll()).hasSize(0); + } + + private Review 리뷰_생성_요청(CustomUserDetails userDetails) { + // given + Menu menu = createMenu(); + ReviewCreateRequest request = new ReviewCreateRequest(4, 4, 4, "굿"); + + // when + Review createdReview = reviewService.createReview(userDetails, menu.getId(), + request, null); + return createdReview; + } + + private User createUser() { + return User.create("test@test.com", OAuthProvider.EATSSU, "1234", "1234"); + } + + private CustomUserDetails createCustomUserDetails(User user) { + User savedUser = userRepository.save(user); + return new CustomUserDetails(savedUser); + } + + private Menu createMenu() { + Menu menu = Menu.createFixed("라면", Restaurant.FOOD_COURT, 3000); + return menuRepository.save(menu); + } +} \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java b/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java index 5fe920f2..a007b3aa 100644 --- a/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java @@ -10,6 +10,7 @@ import org.springframework.boot.test.context.SpringBootTest; import ssu.eatssu.domain.auth.entity.CustomUserDetails; import ssu.eatssu.domain.auth.entity.OAuthProvider; +import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.user.dto.NicknameUpdateRequest; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; @@ -21,11 +22,13 @@ class UserServiceTest { private UserService userService; @Autowired private UserRepository userRepository; + @Autowired + private ReviewRepository reviewRepository; @BeforeEach void setUp() { + reviewRepository.deleteAll(); userRepository.deleteAll(); - userRepository.flush(); } @Test From b52c2688373d5bd09d83f17afe8cd0ad4d9d4fb3 Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 20 Jan 2024 18:17:09 +0900 Subject: [PATCH 068/399] =?UTF-8?q?[#42]=20Feat:=20=EA=B3=A0=EC=A0=95=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EA=B4=80=EB=A6=AC=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=A1=B0=ED=9A=8C=20Controller,=20Dto=20=EC=9E=91?= =?UTF-8?q?=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ManageFixMenuController.java | 23 +++++++++++++++++++ .../eatssu/domain/admin/dto/BriefMenu.java | 4 ++++ .../eatssu/domain/admin/dto/FixMenuBoard.java | 9 ++++++++ .../eatssu/domain/admin/dto/MenuBoards.java | 13 +++++++++++ .../domain/admin/dto/RegisterMenuRequest.java | 4 ++++ .../domain/admin/dto/RestaurantMenuBoard.java | 5 ++++ .../admin/service/ManageFixMenuService.java | 16 +++++++++++++ 7 files changed, 74 insertions(+) create mode 100644 src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/BriefMenu.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/FixMenuBoard.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/RegisterMenuRequest.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/RestaurantMenuBoard.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java new file mode 100644 index 00000000..093ef58b --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java @@ -0,0 +1,23 @@ +package ssu.eatssu.domain.admin.controller; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import ssu.eatssu.domain.admin.service.ManageFixMenuService; + +@Controller +@RequestMapping("/manage/menu/fix-menu") +@RequiredArgsConstructor +public class ManageFixMenuController { + + private final ManageFixMenuService manageFixMenuService; + + @GetMapping("") + public String fixMenuPage(Model model) { + model.addAttribute("menuBoards", manageFixMenuService.getMenuBoards()); + return "fix-menu"; + } + +} diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/BriefMenu.java b/src/main/java/ssu/eatssu/domain/admin/dto/BriefMenu.java new file mode 100644 index 00000000..e263d420 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/BriefMenu.java @@ -0,0 +1,4 @@ +package ssu.eatssu.domain.admin.dto; + +public record BriefMenu(Long id, String menuName, Integer price, Double rating) { +} diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/FixMenuBoard.java b/src/main/java/ssu/eatssu/domain/admin/dto/FixMenuBoard.java new file mode 100644 index 00000000..7434687e --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/FixMenuBoard.java @@ -0,0 +1,9 @@ +package ssu.eatssu.domain.admin.dto; + +import java.util.List; + +public record FixMenuBoard(String restaurantName, List menus ) implements RestaurantMenuBoard { + public void addMenu(BriefMenu menu) { + menus.add(menu); + } +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java new file mode 100644 index 00000000..773a4321 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java @@ -0,0 +1,13 @@ +package ssu.eatssu.domain.admin.dto; + +import java.util.ArrayList; +import java.util.List; + +public record MenuBoards(List menuBoards) { + public MenuBoards() { + this(new ArrayList<>()); + } + public void add(RestaurantMenuBoard menuBoard) { + menuBoards.add(menuBoard); + } +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMenuRequest.java b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMenuRequest.java new file mode 100644 index 00000000..d74b2e6b --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMenuRequest.java @@ -0,0 +1,4 @@ +package ssu.eatssu.domain.admin.dto; + +public record RegisterMenuRequest(String menuName) { +} diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/RestaurantMenuBoard.java b/src/main/java/ssu/eatssu/domain/admin/dto/RestaurantMenuBoard.java new file mode 100644 index 00000000..e53e2d64 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/RestaurantMenuBoard.java @@ -0,0 +1,5 @@ +package ssu.eatssu.domain.admin.dto; + +public interface RestaurantMenuBoard { + +} diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java new file mode 100644 index 00000000..29bb11f2 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java @@ -0,0 +1,16 @@ +package ssu.eatssu.domain.admin.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import ssu.eatssu.domain.admin.dto.MenuBoards; + +@Service +@RequiredArgsConstructor +public class ManageFixMenuService { + + public MenuBoards getMenuBoards() { + + //TODO menuBoards 를 만들어서 리턴 + return new MenuBoards(); + } +} From c3d529607d6a878eed635b44738ce20d7bef9df0 Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 20 Jan 2024 19:49:52 +0900 Subject: [PATCH 069/399] =?UTF-8?q?[#42]=20Refactor:=20Restaurant=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20Enum=20=EA=B5=AC=EC=A1=B0=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu/presentation/MealController.java | 77 +++++++++---------- .../restaurant/entity/RestaurantName.java | 14 ++-- .../restaurant/entity/RestaurantType.java | 26 ++++++- 3 files changed, 66 insertions(+), 51 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java index 5266959c..4db7b064 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java @@ -1,8 +1,6 @@ package ssu.eatssu.domain.menu.presentation; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; @@ -10,26 +8,23 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; -import java.util.Date; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; -import ssu.eatssu.domain.menu.entity.TimePart; +import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.menu.dto.MenuRequest.CreateMealRequest; import ssu.eatssu.domain.menu.dto.MenuResponse.MealInformationResponse; +import ssu.eatssu.domain.menu.entity.TimePart; import ssu.eatssu.domain.menu.service.MenuService; import ssu.eatssu.domain.restaurant.entity.RestaurantName; +import ssu.eatssu.domain.restaurant.entity.RestaurantType; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponse; +import java.util.Date; +import java.util.List; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; + @RestController @RequiredArgsConstructor @RequestMapping("/meals") @@ -39,23 +34,23 @@ public class MealController { private final MenuService menuService; @Operation(summary = "식단 추가", description = """ - 식단을 추가하는 API 입니다.

- 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

- 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) - """) + 식단을 추가하는 API 입니다.

+ 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

+ 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 추가 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "식단 추가 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping("") public BaseResponse createMeal( - @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당이름") @RequestParam("restaurant") RestaurantName restaurantName, - @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, - @RequestBody CreateMealRequest createMealRequest) { - if (RestaurantName.isFixed(restaurantName)) { + @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "식당이름") @RequestParam("restaurant") RestaurantName restaurantName, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, + @RequestBody CreateMealRequest createMealRequest) { + if (RestaurantType.isFixedType(restaurantName)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } @@ -64,36 +59,36 @@ public BaseResponse createMeal( } @Operation(summary = "변동 메뉴 식단 리스트 조회", description = """ - 변동 메뉴 식단 리스트를 조회하는 API 입니다. - 변동 메뉴 식당 (학생 식당, 도담, 기숙사 식당) 의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회합니다. - 일반적으로 학생식당과 도담의 경우 식단 여러개가 조회되고 기숙사식당은 한개만 조회됩니다.) - """) + 변동 메뉴 식단 리스트를 조회하는 API 입니다. + 변동 메뉴 식당 (학생 식당, 도담, 기숙사 식당) 의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회합니다. + 일반적으로 학생식당과 도담의 경우 식단 여러개가 조회되고 기숙사식당은 한개만 조회됩니다.) + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "지원 하지 않는 식당 (고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "지원 하지 않는 식당 (고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("") public BaseResponse> getMeal( - @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당 이름") @RequestParam("restaurant") RestaurantName restaurantName, - @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { - if (RestaurantName.isFixed(restaurantName)) { + @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "식당 이름") @RequestParam("restaurant") RestaurantName restaurantName, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { + if (RestaurantType.isFixedType(restaurantName)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } return BaseResponse.success( - menuService.findSpecificMeals(date, restaurantName, timePart)); + menuService.findSpecificMeals(date, restaurantName, timePart)); } @Operation(summary = "식단 삭제", description = "식단을 삭제하는 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 삭제 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "식단 삭제 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @DeleteMapping("/{mealId}") public BaseResponse deleteMeal( - @Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { + @Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { menuService.deleteMeal(mealId); return BaseResponse.success(); } diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java index d5dd016c..575e59d1 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java @@ -9,13 +9,12 @@ @Getter public enum RestaurantName { - DODAM(RestaurantType.VARIABLE, "도담 식당", 6000), - DORMITORY(RestaurantType.VARIABLE, "기숙사 식당", 5000), - FOOD_COURT(RestaurantType.FIXED, "푸드 코트", null), - SNACK_CORNER(RestaurantType.FIXED, "스낵 코너", null), - HAKSIK(RestaurantType.VARIABLE, "학생 식당", 5000); + DODAM("도담 식당", 6000), + DORMITORY( "기숙사 식당", 5000), + FOOD_COURT( "푸드 코트", null), + SNACK_CORNER( "스낵 코너", null), + HAKSIK( "학생 식당", 5000); - private RestaurantType restaurantType; private String description; private Integer price; @@ -27,8 +26,7 @@ public static RestaurantName from(String description) { .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); } - RestaurantName(RestaurantType restaurantType, String description, Integer price) { - this.restaurantType = restaurantType; + RestaurantName(String description, Integer price) { this.description = description; this.price = price; } diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java index f10c6399..35b1675d 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java @@ -1,6 +1,28 @@ package ssu.eatssu.domain.restaurant.entity; +import lombok.Getter; + +import java.util.Arrays; +import java.util.List; + +@Getter public enum RestaurantType { - FIXED, - VARIABLE + FIXED("고정메뉴 식당", Arrays.asList(RestaurantName.FOOD_COURT, RestaurantName.SNACK_CORNER)), + VARIABLE("변동메뉴 식당", Arrays.asList(RestaurantName.DODAM, RestaurantName.DORMITORY, RestaurantName.HAKSIK)); + + private String description; + private List restaurants; + + RestaurantType(String description, List restaurants) { + this.description = description; + this.restaurants = restaurants; + } + + public static boolean isFixedType(RestaurantName restaurantName) { + return FIXED.restaurants.contains(restaurantName); + } + + public static boolean isVARIABLEType(RestaurantName restaurantName) { + return VARIABLE.restaurants.contains(restaurantName); + } } From 3acf3513eeb1ca8b55beaa8cc0a864a8b15940ef Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 20 Jan 2024 19:50:42 +0900 Subject: [PATCH 070/399] =?UTF-8?q?[#42]=20Refactor:=20RestaurantName=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../restaurant/entity/RestaurantName.java | 32 +++++++------------ 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java index 575e59d1..a9248b66 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantName.java @@ -1,41 +1,33 @@ package ssu.eatssu.domain.restaurant.entity; import com.fasterxml.jackson.annotation.JsonCreator; -import java.util.Arrays; import lombok.Getter; - import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.util.Arrays; + @Getter public enum RestaurantName { DODAM("도담 식당", 6000), - DORMITORY( "기숙사 식당", 5000), - FOOD_COURT( "푸드 코트", null), - SNACK_CORNER( "스낵 코너", null), - HAKSIK( "학생 식당", 5000); + DORMITORY("기숙사 식당", 5000), + FOOD_COURT("푸드 코트", null), + SNACK_CORNER("스낵 코너", null), + HAKSIK("학생 식당", 5000); private String description; private Integer price; - @JsonCreator - public static RestaurantName from(String description) { - return Arrays.stream(RestaurantName.values()) - .filter(d -> d.getDescription().equals(description)) - .findAny() - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); - } - RestaurantName(String description, Integer price) { this.description = description; this.price = price; } - public static boolean isFixed(RestaurantName restaurantName) { - return restaurantName.getRestaurantType() == RestaurantType.FIXED; - } - - public static boolean isVariable(RestaurantName restaurantName) { - return restaurantName.getRestaurantType() == RestaurantType.VARIABLE; + @JsonCreator + public static RestaurantName from(String description) { + return Arrays.stream(RestaurantName.values()) + .filter(d -> d.getDescription().equals(description)) + .findAny() + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); } } From 625f3acb9ecb8a76d2c302fcdba8ca85609a32f7 Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 20 Jan 2024 20:40:48 +0900 Subject: [PATCH 071/399] =?UTF-8?q?[#42]=20Refactor:=20RestaurantName=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/menu/presentation/MenuController.java | 3 ++- .../ssu/eatssu/domain/restaurant/entity/RestaurantType.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java index ca4d8f65..38e9d69e 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java @@ -14,6 +14,7 @@ import ssu.eatssu.domain.menu.dto.MenuResponse.MenuInformationResponse; import ssu.eatssu.domain.menu.dto.MenuResponse.MenusInformationResponse; import ssu.eatssu.domain.restaurant.entity.RestaurantName; +import ssu.eatssu.domain.restaurant.entity.RestaurantType; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.domain.menu.service.MenuService; @@ -40,7 +41,7 @@ public class MenuController { @GetMapping("") public BaseResponse> getMenus( @RequestParam("restaurant") RestaurantName restaurantName) { - if (RestaurantName.isVariable(restaurantName)) { + if(RestaurantType.isVariableType(restaurantName)){ throw new BaseException(NOT_SUPPORT_RESTAURANT); } return BaseResponse.success(menuService.findMenusByRestaurant(restaurantName)); diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java index 35b1675d..ffc53c15 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java @@ -22,7 +22,7 @@ public static boolean isFixedType(RestaurantName restaurantName) { return FIXED.restaurants.contains(restaurantName); } - public static boolean isVARIABLEType(RestaurantName restaurantName) { + public static boolean isVariableType(RestaurantName restaurantName) { return VARIABLE.restaurants.contains(restaurantName); } } From bf959b9934730e5c487c922e0fa2907c23f556c5 Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 20 Jan 2024 20:41:33 +0900 Subject: [PATCH 072/399] =?UTF-8?q?[#42]=20Feat:=20=EA=B3=A0=EC=A0=95=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EC=A1=B0=ED=9A=8C=20Dto=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EB=B0=8F=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ssu/eatssu/domain/admin/dto/BriefMenu.java | 2 +- .../java/ssu/eatssu/domain/admin/dto/FixMenuBoard.java | 9 +++++++-- src/main/java/ssu/eatssu/domain/admin/dto/MenuLine.java | 4 ++++ 3 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/MenuLine.java diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/BriefMenu.java b/src/main/java/ssu/eatssu/domain/admin/dto/BriefMenu.java index e263d420..2b344f75 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/BriefMenu.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/BriefMenu.java @@ -1,4 +1,4 @@ package ssu.eatssu.domain.admin.dto; -public record BriefMenu(Long id, String menuName, Integer price, Double rating) { +public record BriefMenu(Long id, String name, Integer price) { } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/FixMenuBoard.java b/src/main/java/ssu/eatssu/domain/admin/dto/FixMenuBoard.java index 7434687e..64e86052 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/FixMenuBoard.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/FixMenuBoard.java @@ -1,9 +1,14 @@ package ssu.eatssu.domain.admin.dto; +import java.util.ArrayList; import java.util.List; -public record FixMenuBoard(String restaurantName, List menus ) implements RestaurantMenuBoard { - public void addMenu(BriefMenu menu) { +public record FixMenuBoard(String restaurantName, List menus) implements RestaurantMenuBoard { + public FixMenuBoard(String restaurantName) { + this(restaurantName, new ArrayList<>()); + } + + public void addMenu(MenuLine menu) { menus.add(menu); } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuLine.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuLine.java new file mode 100644 index 00000000..03c9c0e9 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuLine.java @@ -0,0 +1,4 @@ +package ssu.eatssu.domain.admin.dto; + +public record MenuLine(Long id, String name, Integer price, Double rating) { +} \ No newline at end of file From ee3fe435d3e6ed955521bed83a1827d7625f3d96 Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 20 Jan 2024 20:42:03 +0900 Subject: [PATCH 073/399] =?UTF-8?q?[#42]=20Refactor:=20=EA=B3=A0=EC=A0=95?= =?UTF-8?q?=20=EB=A9=94=EB=89=B4=20=EC=A1=B0=ED=9A=8C=20url=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/admin/controller/ManageFixMenuController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java index 093ef58b..ebb8cfa8 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java @@ -8,7 +8,7 @@ import ssu.eatssu.domain.admin.service.ManageFixMenuService; @Controller -@RequestMapping("/manage/menu/fix-menu") +@RequestMapping("/admin/menu/fix-menu") @RequiredArgsConstructor public class ManageFixMenuController { From 736ada212fd1a7608f8d89344670e005b2fb7c66 Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 20 Jan 2024 20:45:07 +0900 Subject: [PATCH 074/399] =?UTF-8?q?[#42]=20Feat:=20=EA=B3=A0=EC=A0=95=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=99=84=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/FixMenuRatingRepository.java | 32 +++++++++++++++ .../persistence/ManageFixMenuRepository.java | 41 +++++++++++++++++++ .../admin/service/ManageFixMenuService.java | 35 ++++++++++++++-- 3 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/admin/persistence/FixMenuRatingRepository.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/persistence/ManageFixMenuRepository.java diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/FixMenuRatingRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/FixMenuRatingRepository.java new file mode 100644 index 00000000..35997d99 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/FixMenuRatingRepository.java @@ -0,0 +1,32 @@ +package ssu.eatssu.domain.admin.persistence; + +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import ssu.eatssu.domain.menu.entity.QMenu; +import ssu.eatssu.domain.review.entity.QReview; + +@Repository +@RequiredArgsConstructor +public class FixMenuRatingRepository { + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QReview review = QReview.review; + + public Double getMainRatingAverage(Long menuId) { + return queryFactory + .select(review.ratings.mainRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId) + ) + .fetchOne(); + } + + private BooleanExpression menuIdEq(Long menuId) { + return menu.id.eq(menuId); + } + +} diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageFixMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageFixMenuRepository.java new file mode 100644 index 00000000..542e4cde --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageFixMenuRepository.java @@ -0,0 +1,41 @@ +package ssu.eatssu.domain.admin.persistence; + +import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import ssu.eatssu.domain.admin.dto.BriefMenu; +import ssu.eatssu.domain.menu.entity.QMenu; +import ssu.eatssu.domain.restaurant.entity.QRestaurant; +import ssu.eatssu.domain.restaurant.entity.RestaurantName; + +import java.util.List; + +@Repository +@RequiredArgsConstructor +public class ManageFixMenuRepository { + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QRestaurant restaurant = QRestaurant.restaurant; + + public List findBriefMenusByRestaurantName(RestaurantName restaurantName) { + return queryFactory + .select(Projections.constructor(BriefMenu.class, + menu.id, + menu.name, + menu.price)) + .from(menu) + .join(menu.restaurant, restaurant) + .where( + restaurantNameEq(restaurantName) + ) + .orderBy(menu.name.asc()) + .fetch(); + } + + private BooleanExpression restaurantNameEq(RestaurantName name) { + return restaurant.restaurantName.eq(name); + } + +} diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java index 29bb11f2..27ebd26a 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java @@ -2,15 +2,44 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import ssu.eatssu.domain.admin.dto.MenuBoards; +import ssu.eatssu.domain.admin.dto.*; +import ssu.eatssu.domain.admin.persistence.FixMenuRatingRepository; +import ssu.eatssu.domain.admin.persistence.ManageFixMenuRepository; +import ssu.eatssu.domain.restaurant.entity.RestaurantName; +import ssu.eatssu.domain.restaurant.entity.RestaurantType; + +import java.util.List; @Service @RequiredArgsConstructor public class ManageFixMenuService { + private final ManageFixMenuRepository manageFixMenuRepository; + private final FixMenuRatingRepository fixMenuRatingRepository; + public MenuBoards getMenuBoards() { + MenuBoards menuBoards = new MenuBoards(); + + RestaurantType.FIXED.getRestaurants() + .forEach(restaurant -> menuBoards.add(getRestaurantMenuBoard(restaurant))); + + return menuBoards; + } + + private RestaurantMenuBoard getRestaurantMenuBoard(RestaurantName restaurant) { + FixMenuBoard menuBoard = new FixMenuBoard(restaurant.getDescription()); + + List briefMenus = manageFixMenuRepository.findBriefMenusByRestaurantName(restaurant); + + briefMenus.forEach(briefMenu -> + menuBoard.addMenu(new MenuLine( + briefMenu.id(), + briefMenu.name(), + briefMenu.price(), + fixMenuRatingRepository.getMainRatingAverage(briefMenu.id()) + )) + ); - //TODO menuBoards 를 만들어서 리턴 - return new MenuBoards(); + return menuBoard; } } From 84a9d2bbec46fb904af7bfbadbaf9f91272094e7 Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 20 Jan 2024 23:07:27 +0900 Subject: [PATCH 075/399] =?UTF-8?q?[#42]=20Feat:=20=EA=B3=A0=EC=A0=95=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EC=B6=94=EA=B0=80=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ManageFixMenuController.java | 24 +++++++-- .../domain/admin/dto/RegisterMenuRequest.java | 2 +- .../persistence/FindRestaurantRepository.java | 30 +++++++++++ ...sitory.java => LoadFixMenuRepository.java} | 18 ++++++- .../persistence/ManageMenuRepository.java | 51 +++++++++++++++++++ .../admin/service/ManageFixMenuService.java | 25 +++++++-- .../ssu/eatssu/domain/menu/entity/Menu.java | 4 ++ 7 files changed, 144 insertions(+), 10 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/admin/persistence/FindRestaurantRepository.java rename src/main/java/ssu/eatssu/domain/admin/persistence/{ManageFixMenuRepository.java => LoadFixMenuRepository.java} (71%) create mode 100644 src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java index ebb8cfa8..6698c058 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java @@ -3,9 +3,12 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.*; +import ssu.eatssu.domain.admin.dto.MenuBoards; +import ssu.eatssu.domain.admin.dto.RegisterMenuRequest; import ssu.eatssu.domain.admin.service.ManageFixMenuService; +import ssu.eatssu.domain.restaurant.entity.RestaurantName; +import ssu.eatssu.global.handler.response.BaseResponse; @Controller @RequestMapping("/admin/menu/fix-menu") @@ -14,10 +17,21 @@ public class ManageFixMenuController { private final ManageFixMenuService manageFixMenuService; + @ResponseBody @GetMapping("") - public String fixMenuPage(Model model) { - model.addAttribute("menuBoards", manageFixMenuService.getMenuBoards()); - return "fix-menu"; + public BaseResponse fixMenuPage(Model model) { + MenuBoards menuBoards = manageFixMenuService.getMenuBoards(); + //model.addAttribute("menuBoards", manageFixMenuService.getMenuBoards()); + return BaseResponse.success(menuBoards); + } + + //TODO ResponseBody 해제 + @ResponseBody + @PostMapping("") + public String registerFixMenu(@RequestParam RestaurantName restaurantName, + @RequestBody RegisterMenuRequest request) { + manageFixMenuService.registerFixMenu(restaurantName, request); + return "redirect:/admin/menu/fix-menu"; } } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMenuRequest.java b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMenuRequest.java index d74b2e6b..47a15ac3 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMenuRequest.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMenuRequest.java @@ -1,4 +1,4 @@ package ssu.eatssu.domain.admin.dto; -public record RegisterMenuRequest(String menuName) { +public record RegisterMenuRequest(String name, Integer price) { } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/FindRestaurantRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/FindRestaurantRepository.java new file mode 100644 index 00000000..aacad486 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/FindRestaurantRepository.java @@ -0,0 +1,30 @@ +package ssu.eatssu.domain.admin.persistence; + +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import ssu.eatssu.domain.restaurant.entity.QRestaurant; +import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.restaurant.entity.RestaurantName; + +@Repository +@RequiredArgsConstructor +public class FindRestaurantRepository { + private final JPAQueryFactory queryFactory; + private final QRestaurant restaurant = QRestaurant.restaurant; + + public Restaurant findByRestaurantName(RestaurantName name) { + return queryFactory + .selectFrom(restaurant) + .where( + restaurantNameEq(name) + ) + .fetchOne(); + } + + private BooleanExpression restaurantNameEq(RestaurantName name) { + return restaurant.restaurantName.eq(name); + } + +} diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageFixMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java similarity index 71% rename from src/main/java/ssu/eatssu/domain/admin/persistence/ManageFixMenuRepository.java rename to src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java index 542e4cde..e3db688e 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageFixMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java @@ -14,7 +14,7 @@ @Repository @RequiredArgsConstructor -public class ManageFixMenuRepository { +public class LoadFixMenuRepository { private final JPAQueryFactory queryFactory; private final QMenu menu = QMenu.menu; private final QRestaurant restaurant = QRestaurant.restaurant; @@ -34,6 +34,22 @@ public List findBriefMenusByRestaurantName(RestaurantName restaurantN .fetch(); } + public boolean existsMenu(String name, RestaurantName restaurantName) { + return queryFactory + .select(menu.id) + .from(menu) + .join(menu.restaurant, restaurant) + .where( + menuNameEq(name), + restaurantNameEq(restaurantName) + ) + .fetchFirst() != null; + } + + private BooleanExpression menuNameEq(String name) { + return menu.name.eq(name); + } + private BooleanExpression restaurantNameEq(RestaurantName name) { return restaurant.restaurantName.eq(name); } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java new file mode 100644 index 00000000..62516b72 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java @@ -0,0 +1,51 @@ +package ssu.eatssu.domain.admin.persistence; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import org.springframework.data.jpa.repository.support.JpaEntityInformation; +import org.springframework.data.jpa.repository.support.JpaEntityInformationSupport; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; +import ssu.eatssu.domain.menu.entity.Menu; + +@Repository +public class ManageMenuRepository { + + @PersistenceContext + private final EntityManager em; + + private final JpaEntityInformation entityInformation; + + public ManageMenuRepository(EntityManager em) { + this.em = em; + this.entityInformation = + JpaEntityInformationSupport.getEntityInformation(Menu.class, em); + } + + @Transactional + public Menu save(Menu menu) { + if (entityInformation.isNew(menu)) { + em.persist(menu); + return menu; + } else { + return em.merge(menu); + } + } + + @Transactional + public void delete(Menu menu) { + + if (entityInformation.isNew(menu)) { + return; + } + + Menu existing = em.find(Menu.class, menu.getId()); + + if (existing == null) { + return; + } + + em.remove(em.contains(menu) ? menu : em.merge(menu)); + } + +} diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java index 27ebd26a..6dbf6789 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java @@ -2,20 +2,30 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.admin.dto.*; +import ssu.eatssu.domain.admin.persistence.FindRestaurantRepository; import ssu.eatssu.domain.admin.persistence.FixMenuRatingRepository; -import ssu.eatssu.domain.admin.persistence.ManageFixMenuRepository; +import ssu.eatssu.domain.admin.persistence.LoadFixMenuRepository; +import ssu.eatssu.domain.admin.persistence.ManageMenuRepository; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.restaurant.entity.RestaurantName; import ssu.eatssu.domain.restaurant.entity.RestaurantType; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponseStatus; import java.util.List; +@Transactional @Service @RequiredArgsConstructor public class ManageFixMenuService { - private final ManageFixMenuRepository manageFixMenuRepository; + private final LoadFixMenuRepository loadMenuRepository; + private final ManageMenuRepository manageMenuRepository; private final FixMenuRatingRepository fixMenuRatingRepository; + private final FindRestaurantRepository findRestaurantRepository; public MenuBoards getMenuBoards() { MenuBoards menuBoards = new MenuBoards(); @@ -29,7 +39,7 @@ public MenuBoards getMenuBoards() { private RestaurantMenuBoard getRestaurantMenuBoard(RestaurantName restaurant) { FixMenuBoard menuBoard = new FixMenuBoard(restaurant.getDescription()); - List briefMenus = manageFixMenuRepository.findBriefMenusByRestaurantName(restaurant); + List briefMenus = loadMenuRepository.findBriefMenusByRestaurantName(restaurant); briefMenus.forEach(briefMenu -> menuBoard.addMenu(new MenuLine( @@ -42,4 +52,13 @@ private RestaurantMenuBoard getRestaurantMenuBoard(RestaurantName restaurant) { return menuBoard; } + + public void registerFixMenu(RestaurantName restaurantName, RegisterMenuRequest request) { + if (loadMenuRepository.existsMenu(request.name(), restaurantName)) { + throw new BaseException(BaseResponseStatus.CONFLICT); + } + Restaurant restaurant = findRestaurantRepository.findByRestaurantName(restaurantName); + + manageMenuRepository.save(Menu.createFixMenu(request.name(), restaurant, request.price())); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index 7c43e365..db11b9a1 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -54,6 +54,10 @@ public static Menu createChangeMenu(String name, Restaurant restaurant) { return new Menu(name, restaurant, price); } + public static Menu createFixMenu(String name, Restaurant restaurant, Integer price) { + return new Menu(name, restaurant, price); + } + /** * 고정 메뉴를 생성합니다. * todo: 고정메뉴 식당이 아니라 변동 메뉴 식당으로 잘못 들어온다면 어떻게 처리? From 8e7d818ddbbdd63b7f663c2eca2413638dfcf8ba Mon Sep 17 00:00:00 2001 From: SY2on Date: Sun, 21 Jan 2024 00:04:19 +0900 Subject: [PATCH 076/399] [#42] Refactor: RegisterMenuRequest -> RegisterFixMenuRequest --- .../ssu/eatssu/domain/admin/dto/RegisterFixMenuRequest.java | 4 ++++ .../java/ssu/eatssu/domain/admin/dto/RegisterMenuRequest.java | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/RegisterFixMenuRequest.java delete mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/RegisterMenuRequest.java diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/RegisterFixMenuRequest.java b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterFixMenuRequest.java new file mode 100644 index 00000000..211dd0c4 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterFixMenuRequest.java @@ -0,0 +1,4 @@ +package ssu.eatssu.domain.admin.dto; + +public record RegisterFixMenuRequest(String name, Integer price) { +} diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMenuRequest.java b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMenuRequest.java deleted file mode 100644 index 47a15ac3..00000000 --- a/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMenuRequest.java +++ /dev/null @@ -1,4 +0,0 @@ -package ssu.eatssu.domain.admin.dto; - -public record RegisterMenuRequest(String name, Integer price) { -} From 9c66422e0351afd553cbf9b8865f11f9221309cc Mon Sep 17 00:00:00 2001 From: SY2on Date: Sun, 21 Jan 2024 00:06:44 +0900 Subject: [PATCH 077/399] =?UTF-8?q?[#42]=20Refactor:=20ManageMenuRepositor?= =?UTF-8?q?y=20EntityManager=20=EC=A7=81=EC=A0=91=20=EC=9D=B4=EC=9A=A9=20-?= =?UTF-8?q?>=20JpaRepository=20=EC=83=81=EC=86=8D=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/ManageMenuRepository.java | 49 ++----------------- 1 file changed, 5 insertions(+), 44 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java index 62516b72..25be2987 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java @@ -1,51 +1,12 @@ package ssu.eatssu.domain.admin.persistence; -import jakarta.persistence.EntityManager; -import jakarta.persistence.PersistenceContext; -import org.springframework.data.jpa.repository.support.JpaEntityInformation; -import org.springframework.data.jpa.repository.support.JpaEntityInformationSupport; +import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.menu.entity.Menu; -@Repository -public class ManageMenuRepository { - - @PersistenceContext - private final EntityManager em; - - private final JpaEntityInformation entityInformation; - - public ManageMenuRepository(EntityManager em) { - this.em = em; - this.entityInformation = - JpaEntityInformationSupport.getEntityInformation(Menu.class, em); - } - - @Transactional - public Menu save(Menu menu) { - if (entityInformation.isNew(menu)) { - em.persist(menu); - return menu; - } else { - return em.merge(menu); - } - } - - @Transactional - public void delete(Menu menu) { - - if (entityInformation.isNew(menu)) { - return; - } - - Menu existing = em.find(Menu.class, menu.getId()); - - if (existing == null) { - return; - } - - em.remove(em.contains(menu) ? menu : em.merge(menu)); - } +import java.util.Optional; +@Repository +public interface ManageMenuRepository extends JpaRepository { + Optional findById(Long id); } From 3ade10fef45dbfd49d3b2e296a5c2e9807cabe24 Mon Sep 17 00:00:00 2001 From: SY2on Date: Sun, 21 Jan 2024 00:09:17 +0900 Subject: [PATCH 078/399] =?UTF-8?q?[#42]=20Feat:=20=EA=B3=A0=EC=A0=95?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EB=A9=94=EB=89=B4=20=EC=9D=B4=EB=A6=84,?= =?UTF-8?q?=20=EA=B0=80=EA=B2=A9=20=EB=B3=80=EA=B2=BD=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EA=B0=9C=EB=B0=9C=20-=20=EA=B3=A0=EC=A0=95=EB=A9=94?= =?UTF-8?q?=EB=89=B4=EA=B0=80=20=EB=A7=9E=EB=8A=94=EC=A7=80=20=EC=B2=B4?= =?UTF-8?q?=ED=81=AC=ED=95=A9=EB=8B=88=EB=8B=A4=20-=20=EC=8B=9D=EB=8B=B9?= =?UTF-8?q?=EC=97=90=20=EA=B0=99=EC=9D=80=20=EC=9D=B4=EB=A6=84=EC=9D=98=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=EA=B0=80=20=EC=9D=B4=EB=AF=B8=20=EC=A1=B4?= =?UTF-8?q?=EC=9E=AC=ED=95=98=EB=8A=94=20=EC=A7=80=20=EC=B2=B4=ED=81=AC?= =?UTF-8?q?=ED=95=A9=EB=8B=88=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ManageFixMenuController.java | 17 +++++++--- .../admin/dto/UpdateFixMenuRequest.java | 4 +++ .../persistence/FindRestaurantRepository.java | 10 ++++++ .../persistence/LoadFixMenuRepository.java | 29 +++++++++++++++++ .../admin/service/ManageFixMenuService.java | 32 ++++++++++++++++++- .../ssu/eatssu/domain/menu/entity/Menu.java | 13 ++++++-- 6 files changed, 97 insertions(+), 8 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/UpdateFixMenuRequest.java diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java index 6698c058..93cf17ab 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java @@ -5,7 +5,8 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.admin.dto.MenuBoards; -import ssu.eatssu.domain.admin.dto.RegisterMenuRequest; +import ssu.eatssu.domain.admin.dto.RegisterFixMenuRequest; +import ssu.eatssu.domain.admin.dto.UpdateFixMenuRequest; import ssu.eatssu.domain.admin.service.ManageFixMenuService; import ssu.eatssu.domain.restaurant.entity.RestaurantName; import ssu.eatssu.global.handler.response.BaseResponse; @@ -28,9 +29,17 @@ public BaseResponse fixMenuPage(Model model) { //TODO ResponseBody 해제 @ResponseBody @PostMapping("") - public String registerFixMenu(@RequestParam RestaurantName restaurantName, - @RequestBody RegisterMenuRequest request) { - manageFixMenuService.registerFixMenu(restaurantName, request); + public String register(@RequestParam RestaurantName restaurantName, + @RequestBody RegisterFixMenuRequest request) { + manageFixMenuService.register(restaurantName, request); + return "redirect:/admin/menu/fix-menu"; + } + + @ResponseBody + @PatchMapping("{menuId}") + public String update(@PathVariable Long menuId, + @RequestBody UpdateFixMenuRequest request) { + manageFixMenuService.updateMenu(menuId, request); return "redirect:/admin/menu/fix-menu"; } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/UpdateFixMenuRequest.java b/src/main/java/ssu/eatssu/domain/admin/dto/UpdateFixMenuRequest.java new file mode 100644 index 00000000..6c31dee6 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/UpdateFixMenuRequest.java @@ -0,0 +1,4 @@ +package ssu.eatssu.domain.admin.dto; + +public record UpdateFixMenuRequest(String name, Integer price) { +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/FindRestaurantRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/FindRestaurantRepository.java index aacad486..8a0b46bf 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/FindRestaurantRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/FindRestaurantRepository.java @@ -8,6 +8,8 @@ import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.restaurant.entity.RestaurantName; +import java.util.Optional; + @Repository @RequiredArgsConstructor public class FindRestaurantRepository { @@ -27,4 +29,12 @@ private BooleanExpression restaurantNameEq(RestaurantName name) { return restaurant.restaurantName.eq(name); } + public Optional findById(Long restaurantId) { + return Optional.ofNullable(queryFactory + .selectFrom(restaurant) + .where( + restaurant.id.eq(restaurantId) + ) + .fetchOne()); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java index e3db688e..6c955fa5 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java @@ -46,6 +46,31 @@ public boolean existsMenu(String name, RestaurantName restaurantName) { .fetchFirst() != null; } + /** + * 오버 로딩 + */ + public boolean existsMenu(String name, Long restaurantId) { + return queryFactory + .select(menu.name) + .from(menu) + .join(menu.restaurant, restaurant) + .where( + menuNameEq(name), + restaurantIdEq(restaurantId) + ) + .fetchFirst() != null; + } + + public long getRestaurantId(Long menuId) { + return queryFactory + .select(menu.restaurant.id) + .from(menu) + .where( + menu.id.eq(menuId) + ) + .fetchFirst(); + } + private BooleanExpression menuNameEq(String name) { return menu.name.eq(name); } @@ -54,4 +79,8 @@ private BooleanExpression restaurantNameEq(RestaurantName name) { return restaurant.restaurantName.eq(name); } + private BooleanExpression restaurantIdEq(Long restaurantId) { + return restaurant.id.eq(restaurantId); + } + } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java index 6dbf6789..cc66a010 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java @@ -53,7 +53,7 @@ private RestaurantMenuBoard getRestaurantMenuBoard(RestaurantName restaurant) { return menuBoard; } - public void registerFixMenu(RestaurantName restaurantName, RegisterMenuRequest request) { + public void register(RestaurantName restaurantName, RegisterFixMenuRequest request) { if (loadMenuRepository.existsMenu(request.name(), restaurantName)) { throw new BaseException(BaseResponseStatus.CONFLICT); } @@ -61,4 +61,34 @@ public void registerFixMenu(RestaurantName restaurantName, RegisterMenuRequest r manageMenuRepository.save(Menu.createFixMenu(request.name(), restaurant, request.price())); } + + public void updateMenu(Long menuId, UpdateFixMenuRequest request) { + if (isVariableMenu(menuId)) { + throw new BaseException(BaseResponseStatus.NOT_SUPPORT_RESTAURANT); + } + + Long restaurantId = loadMenuRepository.getRestaurantId(menuId); + + duplicateCheck(request.name(), restaurantId); + + Menu menu = manageMenuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + menu.update(request.name(), request.price()); + + manageMenuRepository.save(menu); + } + + private void duplicateCheck(String name, Long restaurantId) { + if (loadMenuRepository.existsMenu(name, restaurantId)) { + throw new BaseException(BaseResponseStatus.CONFLICT); + } + } + + private boolean isVariableMenu(Long menuId) { + Long restaurantId = loadMenuRepository.getRestaurantId(menuId); + Restaurant restaurant = findRestaurantRepository.findById(restaurantId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); + + return RestaurantType.isVariableType(restaurant.getRestaurantName()); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index db11b9a1..0e119222 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -1,13 +1,15 @@ package ssu.eatssu.domain.menu.entity; import jakarta.persistence.*; -import lombok.*; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.entity.Reviews; import java.util.ArrayList; import java.util.List; -import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.review.entity.Reviews; @Entity @Getter @@ -74,4 +76,9 @@ public void addReview(Review review) { public int getTotalReviewCount() { return reviews.size(); } + + public void update(String name, Integer price) { + this.name = name; + this.price = price; + } } \ No newline at end of file From a81460f6240c6523f7e78422311555825cb29937 Mon Sep 17 00:00:00 2001 From: SY2on Date: Sun, 21 Jan 2024 00:15:39 +0900 Subject: [PATCH 079/399] =?UTF-8?q?[#42]=20Feat:=20=EA=B3=A0=EC=A0=95?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EB=A9=94=EB=89=B4=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B0=9C=EB=B0=9C=20-=20=EB=A9=94?= =?UTF-8?q?=EB=89=B4=20=EC=82=AD=EC=A0=9C=20=EC=8B=9C=20=EB=A6=AC=EB=B7=B0?= =?UTF-8?q?=EB=8F=84=20=EC=9E=90=EB=8F=99=20=EC=82=AD=EC=A0=9C=20=EB=90=A9?= =?UTF-8?q?=EB=8B=88=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/admin/controller/ManageFixMenuController.java | 7 +++++++ .../eatssu/domain/admin/service/ManageFixMenuService.java | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java index 93cf17ab..b4fc86c4 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java @@ -43,4 +43,11 @@ public String update(@PathVariable Long menuId, return "redirect:/admin/menu/fix-menu"; } + @ResponseBody + @DeleteMapping("{menuId}") + public String delete(@PathVariable Long menuId) { + manageFixMenuService.delete(menuId); + return "redirect:/admin/menu/fix-menu"; + } + } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java index cc66a010..5e30bb22 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java @@ -91,4 +91,8 @@ private boolean isVariableMenu(Long menuId) { return RestaurantType.isVariableType(restaurant.getRestaurantName()); } + + public void delete(Long menuId) { + manageMenuRepository.deleteById(menuId); + } } From c146cb8a90a7bc1d388cee30d75fceb1422c3e72 Mon Sep 17 00:00:00 2001 From: SY2on Date: Sun, 21 Jan 2024 07:49:16 +0900 Subject: [PATCH 080/399] =?UTF-8?q?[#42]=20Refactor:=20=EA=B3=A0=EC=A0=95?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EC=A1=B0=ED=9A=8C=20=EA=B5=AC=EC=A1=B0=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20-=20=ED=95=9C=EC=8B=9D,=20=EC=9D=BC?= =?UTF-8?q?=EC=8B=9D,=20=EC=96=91=EC=8B=9D=20=EB=93=B1=EC=9D=98=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/admin/dto/FixMenuBoard.java | 14 -------- .../eatssu/domain/admin/dto/MenuBoard.java | 14 ++++++++ .../eatssu/domain/admin/dto/MenuBoards.java | 5 +-- .../eatssu/domain/admin/dto/MenuSection.java | 14 ++++++++ .../domain/admin/dto/RestaurantMenuBoard.java | 5 --- .../persistence/LoadFixMenuRepository.java | 32 +++++++++++++++---- .../admin/service/ManageFixMenuService.java | 29 +++++++++++++---- .../ssu/eatssu/domain/menu/entity/Menu.java | 4 +++ .../domain/menu/entity/MenuCategory.java | 24 ++++++++++++++ 9 files changed, 106 insertions(+), 35 deletions(-) delete mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/FixMenuBoard.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java delete mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/RestaurantMenuBoard.java create mode 100644 src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/FixMenuBoard.java b/src/main/java/ssu/eatssu/domain/admin/dto/FixMenuBoard.java deleted file mode 100644 index 64e86052..00000000 --- a/src/main/java/ssu/eatssu/domain/admin/dto/FixMenuBoard.java +++ /dev/null @@ -1,14 +0,0 @@ -package ssu.eatssu.domain.admin.dto; - -import java.util.ArrayList; -import java.util.List; - -public record FixMenuBoard(String restaurantName, List menus) implements RestaurantMenuBoard { - public FixMenuBoard(String restaurantName) { - this(restaurantName, new ArrayList<>()); - } - - public void addMenu(MenuLine menu) { - menus.add(menu); - } -} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java new file mode 100644 index 00000000..f1a93229 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java @@ -0,0 +1,14 @@ +package ssu.eatssu.domain.admin.dto; + +import java.util.ArrayList; +import java.util.List; + +public record MenuBoard(String restaurantName, List menuSections) { + public MenuBoard(String restaurantName) { + this(restaurantName, new ArrayList<>()); + } + + public void addMenuSection(MenuSection menuSection) { + menuSections.add(menuSection); + } +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java index 773a4321..8a65cecc 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java @@ -3,11 +3,12 @@ import java.util.ArrayList; import java.util.List; -public record MenuBoards(List menuBoards) { +public record MenuBoards(List menuBoards) { public MenuBoards() { this(new ArrayList<>()); } - public void add(RestaurantMenuBoard menuBoard) { + + public void add(MenuBoard menuBoard) { menuBoards.add(menuBoard); } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java new file mode 100644 index 00000000..d7c171d9 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java @@ -0,0 +1,14 @@ +package ssu.eatssu.domain.admin.dto; + +import java.util.ArrayList; +import java.util.List; + +public record MenuSection(String title, List menuLines) { + public MenuSection(String title) { + this(title, new ArrayList<>()); + } + + public void addMenuLine(MenuLine menuLine) { + menuLines.add(menuLine); + } +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/RestaurantMenuBoard.java b/src/main/java/ssu/eatssu/domain/admin/dto/RestaurantMenuBoard.java deleted file mode 100644 index e53e2d64..00000000 --- a/src/main/java/ssu/eatssu/domain/admin/dto/RestaurantMenuBoard.java +++ /dev/null @@ -1,5 +0,0 @@ -package ssu.eatssu.domain.admin.dto; - -public interface RestaurantMenuBoard { - -} diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java index 6c955fa5..722e37e7 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java @@ -6,7 +6,9 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import ssu.eatssu.domain.admin.dto.BriefMenu; +import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.menu.entity.QMenu; +import ssu.eatssu.domain.menu.entity.QMenuCategory; import ssu.eatssu.domain.restaurant.entity.QRestaurant; import ssu.eatssu.domain.restaurant.entity.RestaurantName; @@ -18,17 +20,18 @@ public class LoadFixMenuRepository { private final JPAQueryFactory queryFactory; private final QMenu menu = QMenu.menu; private final QRestaurant restaurant = QRestaurant.restaurant; + private final QMenuCategory category = QMenuCategory.menuCategory; - public List findBriefMenusByRestaurantName(RestaurantName restaurantName) { + public List findBriefMenusByCategoryId(Long categoryId) { return queryFactory .select(Projections.constructor(BriefMenu.class, menu.id, menu.name, menu.price)) .from(menu) - .join(menu.restaurant, restaurant) + .join(menu.category, category) .where( - restaurantNameEq(restaurantName) + menuCategoryIdEq(categoryId) ) .orderBy(menu.name.asc()) .fetch(); @@ -71,16 +74,31 @@ public long getRestaurantId(Long menuId) { .fetchFirst(); } - private BooleanExpression menuNameEq(String name) { - return menu.name.eq(name); + public List findMenuCategoriesByRestaurant(RestaurantName restaurant) { + return queryFactory + .selectFrom(category) + .where( + categoryRestaurantNameEq(restaurant) + ).fetch(); } - private BooleanExpression restaurantNameEq(RestaurantName name) { - return restaurant.restaurantName.eq(name); + private BooleanExpression menuNameEq(String MenuName) { + return menu.name.eq(MenuName); + } + + private BooleanExpression restaurantNameEq(RestaurantName restaurantName) { + return restaurant.restaurantName.eq(restaurantName); } private BooleanExpression restaurantIdEq(Long restaurantId) { return restaurant.id.eq(restaurantId); } + private BooleanExpression categoryRestaurantNameEq(RestaurantName restaurantName) { + return category.restaurantName.eq(restaurantName); + } + + private BooleanExpression menuCategoryIdEq(Long categoryId) { + return category.id.eq(categoryId); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java index 5e30bb22..63080569 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java @@ -9,6 +9,7 @@ import ssu.eatssu.domain.admin.persistence.LoadFixMenuRepository; import ssu.eatssu.domain.admin.persistence.ManageMenuRepository; import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.restaurant.entity.RestaurantName; import ssu.eatssu.domain.restaurant.entity.RestaurantType; @@ -31,26 +32,40 @@ public MenuBoards getMenuBoards() { MenuBoards menuBoards = new MenuBoards(); RestaurantType.FIXED.getRestaurants() - .forEach(restaurant -> menuBoards.add(getRestaurantMenuBoard(restaurant))); + .forEach(restaurant -> menuBoards.add(getMenuBoard(restaurant))); return menuBoards; } - private RestaurantMenuBoard getRestaurantMenuBoard(RestaurantName restaurant) { - FixMenuBoard menuBoard = new FixMenuBoard(restaurant.getDescription()); + private MenuBoard getMenuBoard(RestaurantName restaurant) { + MenuBoard menuBoard = new MenuBoard(restaurant.getDescription()); - List briefMenus = loadMenuRepository.findBriefMenusByRestaurantName(restaurant); + getMenuSections(restaurant).forEach(menuBoard::addMenuSection); + + return menuBoard; + } + + private List getMenuSections(RestaurantName restaurant) { + List menuCategories = loadMenuRepository.findMenuCategoriesByRestaurant(restaurant); + return menuCategories.stream() + .map(this::getMenuSection) + .toList(); + } + + private MenuSection getMenuSection(MenuCategory category) { + MenuSection menuSection = new MenuSection(category.getName()); + + List briefMenus = loadMenuRepository.findBriefMenusByCategoryId(category.getId()); briefMenus.forEach(briefMenu -> - menuBoard.addMenu(new MenuLine( + menuSection.addMenuLine(new MenuLine( briefMenu.id(), briefMenu.name(), briefMenu.price(), fixMenuRatingRepository.getMainRatingAverage(briefMenu.id()) )) ); - - return menuBoard; + return menuSection; } public void register(RestaurantName restaurantName, RegisterFixMenuRequest request) { diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index 0e119222..c6137428 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -38,6 +38,10 @@ public class Menu { @Embedded private Reviews reviews = new Reviews(); + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "menu_category_id") + private MenuCategory category; + private Menu(String name, Restaurant restaurant, Integer price) { this.name = name; this.restaurant = restaurant; diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java b/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java new file mode 100644 index 00000000..66a4ee49 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java @@ -0,0 +1,24 @@ +package ssu.eatssu.domain.menu.entity; + +import jakarta.persistence.*; +import lombok.*; +import ssu.eatssu.domain.restaurant.entity.RestaurantName; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +@Builder +public class MenuCategory { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "menu_category_id") + private Long id; + + private String name; + + @Enumerated(EnumType.STRING) + private RestaurantName restaurantName; + +} From 451ca142a97e82786e16e47b90fcb2315fc334b3 Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Wed, 24 Jan 2024 02:47:04 +0900 Subject: [PATCH 081/399] =?UTF-8?q?[#85]=20test=20:=20=EB=A6=AC=EB=B7=B0?= =?UTF-8?q?=20=EC=8B=A0=EA=B3=A0=EB=A5=BC=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...tRequest.java => ReportCreateRequest.java} | 10 +-- .../report/presentation/ReportController.java | 6 +- .../domain/report/service/ReportService.java | 12 +-- .../restaurant/entity/TemporalRestaurant.java | 29 ------- .../eatssu/domain/review/entity/Report.java | 8 +- .../domain/user/service/UserService.java | 2 + .../report/service/ReportServiceTest.java | 78 +++++++++++++++++++ 7 files changed, 97 insertions(+), 48 deletions(-) rename src/main/java/ssu/eatssu/domain/report/dto/{CreateReportRequest.java => ReportCreateRequest.java} (75%) delete mode 100644 src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java create mode 100644 src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java diff --git a/src/main/java/ssu/eatssu/domain/report/dto/CreateReportRequest.java b/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java similarity index 75% rename from src/main/java/ssu/eatssu/domain/report/dto/CreateReportRequest.java rename to src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java index 0e7c6c7c..7d18811e 100644 --- a/src/main/java/ssu/eatssu/domain/report/dto/CreateReportRequest.java +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java @@ -6,17 +6,15 @@ import ssu.eatssu.domain.report.entity.ReportType; @Schema(title = "리뷰 신고하기") -@NoArgsConstructor -@Getter -public class CreateReportRequest { +public record ReportCreateRequest( @Schema(description = "신고할 리뷰 id", example = "4") - private Long reviewId; + Long reviewId, @Schema(description = "신고 타입", example = "BAD_WORD") - private ReportType reportType; + ReportType reportType, @Schema(description = "신고 내용", example = "음란성, 욕설 등 부적절한 내용") - private String content; + String content) { } diff --git a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java index 6c8f9b7d..358afd83 100644 --- a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java +++ b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java @@ -14,7 +14,7 @@ import ssu.eatssu.domain.report.service.ReportService; import ssu.eatssu.domain.slack.entity.SlackChannel; import ssu.eatssu.domain.slack.entity.SlackMessageFormat; -import ssu.eatssu.domain.report.dto.CreateReportRequest; +import ssu.eatssu.domain.report.dto.ReportCreateRequest; import ssu.eatssu.domain.report.dto.ReportTypeResponse; import ssu.eatssu.domain.slack.service.SlackService; @@ -44,9 +44,9 @@ public BaseResponse getReportType() { @ApiResponse(responseCode = "200", description = "리뷰 신고 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) - public BaseResponse reportReview(@RequestBody CreateReportRequest createReportRequest, + public BaseResponse reportReview(@RequestBody ReportCreateRequest createReportRequest, @AuthenticationPrincipal CustomUserDetails customUserDetails) { - Report report = reportService.report(customUserDetails, createReportRequest); + Report report = reportService.reportReview(customUserDetails, createReportRequest); slackService.sendSlackMessage(SlackMessageFormat.sendReport(report), SlackChannel.REPORT_CHANNEL); return BaseResponse.success(); diff --git a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java index de2c8feb..eb4202bd 100644 --- a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java +++ b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java @@ -15,7 +15,7 @@ import ssu.eatssu.domain.report.repository.ReportRepository; import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.user.repository.UserRepository; -import ssu.eatssu.domain.report.dto.CreateReportRequest; +import ssu.eatssu.domain.report.dto.ReportCreateRequest; import ssu.eatssu.global.handler.response.BaseException; @@ -26,17 +26,17 @@ public class ReportService { private final ReviewRepository reviewRepository; private final UserRepository userRepository; - private final ReportRepository reviewReportRepository; + private final ReportRepository reportRepository; - public Report report(CustomUserDetails userDetails, CreateReportRequest reviewReportCreate) { + public Report reportReview(CustomUserDetails userDetails, ReportCreateRequest request) { User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Review review = reviewRepository.findById(reviewReportCreate.getReviewId()) + Review review = reviewRepository.findById(request.reviewId()) .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - Report report = Report.create(user, review, reviewReportCreate, ReportStatus.PENDING); - return reviewReportRepository.save(report); + Report report = Report.create(user, review, request, ReportStatus.PENDING); + return reportRepository.save(report); } public ReportTypeResponse getReportType() { diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java deleted file mode 100644 index aafc619b..00000000 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/TemporalRestaurant.java +++ /dev/null @@ -1,29 +0,0 @@ -//package ssu.eatssu.domain.restaurant.entity; -// -//import jakarta.persistence.*; -//import lombok.AccessLevel; -//import lombok.Getter; -//import lombok.NoArgsConstructor; -// -//import java.util.List; -//import ssu.eatssu.domain.menu.entity.Meal; -//import ssu.eatssu.domain.menu.entity.Menu; -// -//@Entity -//@Getter -//@NoArgsConstructor(access = AccessLevel.PROTECTED) -//public class TemporalRestaurant { -// -// @Id @GeneratedValue(strategy = GenerationType.IDENTITY) -// @Column(name = "restaurant_id") -// private Long id; -// -// @Enumerated(EnumType.STRING) -// private Restaurant restaurantName; -// -// @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) -// private List menus; -// -// @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL) -// private List meals; -//} diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Report.java b/src/main/java/ssu/eatssu/domain/review/entity/Report.java index 8d9deedd..33cb68bb 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Report.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Report.java @@ -2,7 +2,7 @@ import jakarta.persistence.*; import lombok.*; -import ssu.eatssu.domain.report.dto.CreateReportRequest; +import ssu.eatssu.domain.report.dto.ReportCreateRequest; import ssu.eatssu.domain.report.entity.ReportType; import ssu.eatssu.domain.user.entity.BaseTimeEntity; import ssu.eatssu.domain.user.entity.User; @@ -36,13 +36,13 @@ public class Report extends BaseTimeEntity { @Enumerated(EnumType.STRING) private ReportStatus status; - public static Report create(User user, Review review, CreateReportRequest request, + public static Report create(User user, Review review, ReportCreateRequest request, ReportStatus status) { return Report.builder() .user(user) .review(review) - .reportType(request.getReportType()) - .content(request.getContent()) + .reportType(request.reportType()) + .content(request.content()) .status(status) .build(); } diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index 4b7dccec..8109a53c 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import ssu.eatssu.domain.auth.entity.CustomUserDetails; import ssu.eatssu.domain.auth.entity.OAuthProvider; @@ -20,6 +21,7 @@ @Service @RequiredArgsConstructor @Transactional +@Component public class UserService { private final UserRepository userRepository; diff --git a/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java b/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java new file mode 100644 index 00000000..45536ffe --- /dev/null +++ b/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java @@ -0,0 +1,78 @@ +package ssu.eatssu.domain.report.service; + +import static org.junit.jupiter.api.Assertions.*; + +import jakarta.transaction.Transactional; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import ssu.eatssu.domain.auth.entity.CustomUserDetails; +import ssu.eatssu.domain.auth.entity.OAuthProvider; +import ssu.eatssu.domain.report.dto.ReportCreateRequest; +import ssu.eatssu.domain.report.entity.ReportType; +import ssu.eatssu.domain.report.repository.ReportRepository; +import ssu.eatssu.domain.review.entity.Report; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.repository.ReviewRepository; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.user.repository.UserRepository; + +@SpringBootTest +class ReportServiceTest { + + @Autowired + private ReportService reportService; + + @Autowired + private ReviewRepository reviewRepository; + + @Autowired + private ReportRepository reportRepository; + + @Autowired + private UserRepository userRepository; + + @BeforeEach + void setUp() { + reportRepository.deleteAll(); + userRepository.deleteAll(); + } + + @Test + @Transactional + void 신고를_생성한다() { + //given + User user = createUser(); // 이 부분에서 User가 데이터베이스에 저장되었는지 확인 + Review review = createReview(user); + CustomUserDetails userDetails = createCustomUserDetails(user); + ReportCreateRequest request = new ReportCreateRequest( + review.getId(), ReportType.IMPROPER_ADVERTISEMENT, "음란성, 욕설 등 부적절한 내용"); + + //when + Report createdReport = reportService.reportReview(userDetails, request); + + //then + Assertions.assertThat(reportRepository.findAll()).hasSize(1); + Assertions.assertThat(createdReport.getContent()) + .isEqualTo("음란성, 욕설 등 부적절한 내용"); + } + + private User createUser() { + return User.create("test@test.com", OAuthProvider.EATSSU, "1234", "1234"); + } + + private CustomUserDetails createCustomUserDetails(User user) { + User savedUser = userRepository.save(user); + return new CustomUserDetails(savedUser); + } + + private Review createReview(User user) { + return reviewRepository.save(Review.builder() + .user(user) + .content("굿") + .build()); + } + +} \ No newline at end of file From ac8f653068368aef00ea0d12f4481a73e9058fb1 Mon Sep 17 00:00:00 2001 From: SY2on Date: Fri, 26 Jan 2024 16:42:37 +0900 Subject: [PATCH 082/399] =?UTF-8?q?[#42]=20Refactor:=20=EC=8B=9D=EB=8B=A8?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=20=EC=8B=9C=20title=20=ED=95=84=EB=93=9C?= =?UTF-8?q?=EB=8F=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/menu/dto/MenuRequest.java | 2 ++ .../ssu/eatssu/domain/menu/entity/Meal.java | 15 +++++++++++--- .../ssu/eatssu/domain/menu/entity/Menu.java | 7 ++++--- .../domain/menu/service/MenuService.java | 20 ++++++++++--------- 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java b/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java index 538ce21e..33f2a622 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java @@ -19,5 +19,7 @@ public static class MealCreateRequest { @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") private List menuNames; + + private String title; } } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index 5f003af8..38552896 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -2,7 +2,6 @@ import jakarta.persistence.*; import lombok.AccessLevel; -import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; @@ -32,14 +31,24 @@ public class Meal { @Enumerated(EnumType.STRING) private Restaurant restaurant; + private String title; + @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL) private List mealMenus = new ArrayList<>(); - @Builder - public Meal(Date date, TimePart timePart, Restaurant restaurant) { + private Meal(Date date, TimePart timePart, Restaurant restaurant, String title) { this.date = date; this.timePart = timePart; this.restaurant = restaurant; + this.title = title; + } + + public static Meal withTitle(Date date, TimePart timePart, Restaurant restaurant, String title) { + return new Meal(date, timePart, restaurant, title); + } + + public static Meal withoutTitle(Date date, TimePart timePart, Restaurant restaurant) { + return new Meal(date, timePart, restaurant, null); } public List getMenuNames() { diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index b34222b1..8231ac21 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -26,14 +26,15 @@ public class Menu { private Integer price; - @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) - private List mealMenus = new ArrayList<>(); - + @Enumerated(EnumType.STRING) private Restaurant restaurant; @Embedded private Reviews reviews = new Reviews(); + @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) + private List mealMenus = new ArrayList<>(); + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "menu_category_id") private MenuCategory category; diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index ada85532..c20875c8 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -59,15 +59,17 @@ public void createMeal(Date date, Restaurant restaurant, TimePart timePart, if (MenuValidator.validateExistedMeal(meals, request)) { return; } + Meal meal; - Meal newMeal = Meal.builder() - .date(date) - .restaurant(restaurant) - .timePart(timePart) - .build(); - mealRepository.save(newMeal); + if(request.getTitle() == null){ + meal = Meal.withoutTitle(date, timePart, restaurant); + } else{ + meal = Meal.withTitle(date, timePart, restaurant, request.getTitle()); + } + + mealRepository.save(meal); - addMenusToMeal(newMeal, restaurant, request); + addMenusToMeal(meal, restaurant, request.getMenuNames()); } public MenusInformationResponse findMenusInMeal(Long mealId) { @@ -88,8 +90,8 @@ public void deleteMeal(Long mealId) { deleteUnusedMenus(menus); } - private void addMenusToMeal(Meal meal, Restaurant restaurant, MealCreateRequest request) { - for (String menuName : request.getMenuNames()) { + private void addMenusToMeal(Meal meal, Restaurant restaurant, List menuNames) { + for (String menuName : menuNames) { Menu menu = createMenuIfNotExists(menuName, restaurant); createMealMenu(meal, menu); } From b9dfbd9bdc5c0a66bb152dbccbbb4809fb6cd89d Mon Sep 17 00:00:00 2001 From: SY2on Date: Fri, 26 Jan 2024 17:26:59 +0900 Subject: [PATCH 083/399] =?UTF-8?q?[#42]=20Refactor:=20=EA=B3=A0=EC=A0=95?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EC=B6=94=EA=B0=80=20=EC=8B=9C=20=EB=A9=94?= =?UTF-8?q?=EB=89=B4=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20=ED=8F=AC?= =?UTF-8?q?=ED=95=A8=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/dto/RegisterFixMenuRequest.java | 2 +- .../admin/service/ManageFixMenuService.java | 21 ++++++++++++++----- .../ssu/eatssu/domain/menu/entity/Menu.java | 9 ++++---- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/RegisterFixMenuRequest.java b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterFixMenuRequest.java index 211dd0c4..8e472c48 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/RegisterFixMenuRequest.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterFixMenuRequest.java @@ -1,4 +1,4 @@ package ssu.eatssu.domain.admin.dto; -public record RegisterFixMenuRequest(String name, Integer price) { +public record RegisterFixMenuRequest(Long categoryId, String name, Integer price) { } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java index 90308e10..1dfa5aee 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java @@ -70,7 +70,16 @@ public void register(Restaurant restaurant, RegisterFixMenuRequest request) { throw new BaseException(BaseResponseStatus.CONFLICT); } - manageMenuRepository.save(Menu.createFixed(request.name(), restaurant, request.price())); + /** + * 해당 식당의 메뉴카테고리들 중에 요청받은 카테고리가 존재하는지 확인 + */ + List menuCategories = loadMenuRepository.findMenuCategoriesByRestaurant(restaurant); + MenuCategory category = menuCategories.stream() + .filter(menuCategory -> menuCategory.getId().equals(request.categoryId())) + .findFirst() + .orElseThrow(() -> new BaseException(BaseResponseStatus.BAD_REQUEST)); + + manageMenuRepository.save(Menu.createFixed(request.name(), restaurant, request.price(), category)); } public void updateMenu(Long menuId, UpdateFixMenuRequest request) { @@ -78,12 +87,14 @@ public void updateMenu(Long menuId, UpdateFixMenuRequest request) { throw new BaseException(BaseResponseStatus.NOT_SUPPORT_RESTAURANT); } - Restaurant restaurant = loadMenuRepository.getRestaurant(menuId); - - duplicateCheck(request.name(), restaurant); - Menu menu = manageMenuRepository.findById(menuId) .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + + /** + * 식당에 같은 이름의 메뉴가 있는 지 확인 + */ + Restaurant restaurant = loadMenuRepository.getRestaurant(menuId); + duplicateCheck(request.name(), restaurant); menu.update(request.name(), request.price()); manageMenuRepository.save(menu); diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index 8231ac21..becb17f8 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -39,10 +39,11 @@ public class Menu { @JoinColumn(name = "menu_category_id") private MenuCategory category; - private Menu(String name, Restaurant restaurant, Integer price) { + private Menu(String name, Restaurant restaurant, Integer price, MenuCategory category) { this.name = name; this.restaurant = restaurant; this.price = price; + this.category = category; } public static Menu createVariable(String name, Restaurant restaurant) { @@ -50,7 +51,7 @@ public static Menu createVariable(String name, Restaurant restaurant) { if (RestaurantType.isVariableType(restaurant)) { price = restaurant.getPrice(); } - return new Menu(name, restaurant, price); + return new Menu(name, restaurant, price,null); } /** @@ -58,8 +59,8 @@ public static Menu createVariable(String name, Restaurant restaurant) { * todo: 고정메뉴 식당이 아니라 변동 메뉴 식당으로 잘못 들어온다면 어떻게 처리? */ - public static Menu createFixed(String name, Restaurant restaurant, Integer price) { - return new Menu(name, restaurant, price); + public static Menu createFixed(String name, Restaurant restaurant, Integer price, MenuCategory category) { + return new Menu(name, restaurant, price, category); } // COMMENT: CASCADE.PERSIST 를 사용하면, Menu 를 저장할 때 Review 도 같이 저장된다. From 84ace004d38dc8abf82861fb713c250f2a17a6ad Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 27 Jan 2024 00:42:51 +0900 Subject: [PATCH 084/399] =?UTF-8?q?[#42]=20Refactor:=20Meal=20=EC=97=90?= =?UTF-8?q?=EC=84=9C=20title=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/auth/infrastructure/SecurityConfig.java | 2 +- .../ssu/eatssu/domain/menu/dto/MenuRequest.java | 2 -- .../java/ssu/eatssu/domain/menu/entity/Meal.java | 13 +------------ .../ssu/eatssu/domain/menu/service/MenuService.java | 8 +------- 4 files changed, 3 insertions(+), 22 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 622f8f45..aa536b43 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -25,7 +25,7 @@ public class SecurityConfig { }; private static final String[] AUTH_WHITELIST = { - "/", "/user/join", "/user/login", "/user/user-emails/{email}/exist", "/user/check-nickname", + "/","/oauths/**", "/user/join", "/user/login", "/user/user-emails/{email}/exist", "/user/check-nickname", "/menu/**", "/restaurants/**", "/review/info","/review/list", "/oauth/**", "/inquiries/{userInquiriesId}", "/inquiries/list", "/admin/login" }; diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java b/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java index 33f2a622..538ce21e 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java @@ -19,7 +19,5 @@ public static class MealCreateRequest { @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") private List menuNames; - - private String title; } } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index 38552896..048aad44 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -31,24 +31,13 @@ public class Meal { @Enumerated(EnumType.STRING) private Restaurant restaurant; - private String title; - @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL) private List mealMenus = new ArrayList<>(); - private Meal(Date date, TimePart timePart, Restaurant restaurant, String title) { + public Meal(Date date, TimePart timePart, Restaurant restaurant) { this.date = date; this.timePart = timePart; this.restaurant = restaurant; - this.title = title; - } - - public static Meal withTitle(Date date, TimePart timePart, Restaurant restaurant, String title) { - return new Meal(date, timePart, restaurant, title); - } - - public static Meal withoutTitle(Date date, TimePart timePart, Restaurant restaurant) { - return new Meal(date, timePart, restaurant, null); } public List getMenuNames() { diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index c20875c8..7eebbad5 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -59,13 +59,7 @@ public void createMeal(Date date, Restaurant restaurant, TimePart timePart, if (MenuValidator.validateExistedMeal(meals, request)) { return; } - Meal meal; - - if(request.getTitle() == null){ - meal = Meal.withoutTitle(date, timePart, restaurant); - } else{ - meal = Meal.withTitle(date, timePart, restaurant, request.getTitle()); - } + Meal meal = new Meal(date, timePart, restaurant); mealRepository.save(meal); From 224b76ed43ffea55f562faa069075446ebdf3331 Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 27 Jan 2024 00:44:14 +0900 Subject: [PATCH 085/399] =?UTF-8?q?[#42]=20Feat:=20=EC=8B=9D=EB=8B=A8=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EC=99=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ManageMealController.java | 33 +++++++++ .../ssu/eatssu/domain/admin/dto/MealInfo.java | 9 +++ .../eatssu/domain/admin/dto/MenuSection.java | 6 +- .../admin/persistence/LoadMealRepository.java | 68 +++++++++++++++++++ ...ository.java => MenuRatingRepository.java} | 2 +- .../admin/service/ManageFixMenuService.java | 6 +- .../admin/service/ManageMealService.java | 61 +++++++++++++++++ 7 files changed, 180 insertions(+), 5 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java rename src/main/java/ssu/eatssu/domain/admin/persistence/{FixMenuRatingRepository.java => MenuRatingRepository.java} (95%) create mode 100644 src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java new file mode 100644 index 00000000..610f68e3 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java @@ -0,0 +1,33 @@ +package ssu.eatssu.domain.admin.controller; + +import lombok.RequiredArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import ssu.eatssu.domain.admin.dto.MenuBoards; +import ssu.eatssu.domain.admin.service.ManageMealService; +import ssu.eatssu.domain.menu.entity.TimePart; +import ssu.eatssu.global.handler.response.BaseResponse; + +import java.util.Date; + +@Controller +@RequestMapping("/admin/meal") +@RequiredArgsConstructor +public class ManageMealController { + + private final ManageMealService manageMealService; + + @ResponseBody + @GetMapping("") + public BaseResponse mealPage(@RequestParam @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @RequestParam TimePart timePart, + Model model) { + MenuBoards menuBoards = manageMealService.getMenuBoards(date, timePart); + return BaseResponse.success(menuBoards); + } +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java b/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java new file mode 100644 index 00000000..fe5d6248 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java @@ -0,0 +1,9 @@ +package ssu.eatssu.domain.admin.dto; + +import ssu.eatssu.domain.menu.entity.TimePart; +import ssu.eatssu.domain.restaurant.entity.Restaurant; + +import java.util.Date; + +public record MealInfo(Restaurant restaurant, Date date, TimePart timePart) { +} diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java index d7c171d9..d3cabcf3 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java @@ -4,10 +4,14 @@ import java.util.List; public record MenuSection(String title, List menuLines) { - public MenuSection(String title) { + public MenuSection (String title) { this(title, new ArrayList<>()); } + public MenuSection (){ + this(null, new ArrayList<>()); + } + public void addMenuLine(MenuLine menuLine) { menuLines.add(menuLine); } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java new file mode 100644 index 00000000..e76f5600 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java @@ -0,0 +1,68 @@ +package ssu.eatssu.domain.admin.persistence; + +import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import ssu.eatssu.domain.admin.dto.BriefMenu; +import ssu.eatssu.domain.admin.dto.MealInfo; +import ssu.eatssu.domain.menu.entity.QMeal; +import ssu.eatssu.domain.menu.entity.QMealMenu; +import ssu.eatssu.domain.menu.entity.QMenu; +import ssu.eatssu.domain.menu.entity.TimePart; +import ssu.eatssu.domain.restaurant.entity.Restaurant; + +import java.util.Date; +import java.util.List; + +@Repository +@RequiredArgsConstructor +public class LoadMealRepository { + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QMeal meal = QMeal.meal; + private final QMealMenu mealMenu = QMealMenu.mealMenu; + + public List getAllMealIdsByInfo(MealInfo query) { + return queryFactory.select(meal.id) + .from(meal) + .where( + restaurantEq(query.restaurant()), + mealDateEq(query.date()), + mealTimePartEq(query.timePart()) + ) + .fetch(); + } + + public List findBriefMenusByMealId(Long mealId) { + return queryFactory + .select(Projections.constructor(BriefMenu.class, + menu.id, + menu.name, + menu.price)) + .from(mealMenu) + .join(mealMenu.meal, meal) + .on(mealIdEq(mealId)) + .join(mealMenu.menu, menu) + .orderBy(menu.name.asc()) + .fetch(); + } + + private BooleanExpression mealIdEq(Long mealId) { + return meal.id.eq(mealId); + } + + private BooleanExpression mealTimePartEq(TimePart timePart) { + return meal.timePart.eq(timePart); + } + + private BooleanExpression mealDateEq(Date date) { + return meal.date.eq(date); + } + + private BooleanExpression restaurantEq(Restaurant restaurant) { + return meal.restaurant.eq(restaurant); + } + +} diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/FixMenuRatingRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java similarity index 95% rename from src/main/java/ssu/eatssu/domain/admin/persistence/FixMenuRatingRepository.java rename to src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java index 35997d99..8dee0308 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/FixMenuRatingRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java @@ -9,7 +9,7 @@ @Repository @RequiredArgsConstructor -public class FixMenuRatingRepository { +public class MenuRatingRepository { private final JPAQueryFactory queryFactory; private final QMenu menu = QMenu.menu; private final QReview review = QReview.review; diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java index 1dfa5aee..9b94b6bf 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java @@ -4,7 +4,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.admin.dto.*; -import ssu.eatssu.domain.admin.persistence.FixMenuRatingRepository; +import ssu.eatssu.domain.admin.persistence.MenuRatingRepository; import ssu.eatssu.domain.admin.persistence.LoadFixMenuRepository; import ssu.eatssu.domain.admin.persistence.ManageMenuRepository; import ssu.eatssu.domain.menu.entity.Menu; @@ -23,7 +23,7 @@ public class ManageFixMenuService { private final LoadFixMenuRepository loadMenuRepository; private final ManageMenuRepository manageMenuRepository; - private final FixMenuRatingRepository fixMenuRatingRepository; + private final MenuRatingRepository menuRatingRepository; public MenuBoards getMenuBoards() { MenuBoards menuBoards = new MenuBoards(); @@ -59,7 +59,7 @@ private MenuSection getMenuSection(MenuCategory category) { briefMenu.id(), briefMenu.name(), briefMenu.price(), - fixMenuRatingRepository.getMainRatingAverage(briefMenu.id()) + menuRatingRepository.getMainRatingAverage(briefMenu.id()) )) ); return menuSection; diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java new file mode 100644 index 00000000..75bfa859 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java @@ -0,0 +1,61 @@ +package ssu.eatssu.domain.admin.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import ssu.eatssu.domain.admin.dto.*; +import ssu.eatssu.domain.admin.persistence.LoadMealRepository; +import ssu.eatssu.domain.admin.persistence.MenuRatingRepository; +import ssu.eatssu.domain.menu.entity.TimePart; +import ssu.eatssu.domain.restaurant.entity.RestaurantType; + +import java.util.Date; +import java.util.List; + +@RequiredArgsConstructor +@Service +public class ManageMealService { + + private final LoadMealRepository loadMealRepository; + private final MenuRatingRepository menuRatingRepository; + + public MenuBoards getMenuBoards(Date date, TimePart timePart) { + MenuBoards menuBoards = new MenuBoards(); + + RestaurantType.VARIABLE.getRestaurants() + .forEach(restaurant -> menuBoards.add(getMealBoard(new MealInfo(restaurant, date, timePart)))); + + return menuBoards; + } + + private MenuBoard getMealBoard(MealInfo mealInfo) { + MenuBoard menuBoard = new MenuBoard(mealInfo.restaurant().getDescription()); + + getMenuSections(mealInfo).forEach(menuBoard::addMenuSection); + + return menuBoard; + } + + private List getMenuSections(MealInfo mealInfo) { + List mealIds = loadMealRepository.getAllMealIdsByInfo(mealInfo); + + return mealIds.stream().map(this::getMenuSection).toList(); + } + + private MenuSection getMenuSection(Long mealId) { + MenuSection menuSection = new MenuSection(); + + List briefMenus = loadMealRepository.findBriefMenusByMealId(mealId); + + briefMenus.forEach(briefMenu -> + menuSection.addMenuLine(new MenuLine( + briefMenu.id(), + briefMenu.name(), + briefMenu.price(), + menuRatingRepository.getMainRatingAverage(briefMenu.id()) + )) + ); + + return menuSection; + } + +} \ No newline at end of file From bb1813a00a0e369a2028d7db13e4d78394bc2bcc Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 27 Jan 2024 02:07:55 +0900 Subject: [PATCH 086/399] =?UTF-8?q?[#42]=20Feat:=20=EC=8B=9D=EB=8B=A8=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=20=EA=B0=9C=EB=B0=9C=20=EC=99=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ManageMealController.java | 20 +++++-- .../domain/admin/dto/RegisterMealRequest.java | 9 ++++ .../admin/persistence/LoadMealRepository.java | 49 ++++++++++++++--- .../persistence/ManageMealMenuRepository.java | 7 +++ .../persistence/ManageMealRepository.java | 7 +++ .../admin/service/ManageMealService.java | 54 ++++++++++++++++++- 6 files changed, 134 insertions(+), 12 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/RegisterMealRequest.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealMenuRepository.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealRepository.java diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java index 610f68e3..c9533a39 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java @@ -4,13 +4,13 @@ import org.springframework.format.annotation.DateTimeFormat; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.*; +import ssu.eatssu.domain.admin.dto.MealInfo; import ssu.eatssu.domain.admin.dto.MenuBoards; +import ssu.eatssu.domain.admin.dto.RegisterMealRequest; import ssu.eatssu.domain.admin.service.ManageMealService; import ssu.eatssu.domain.menu.entity.TimePart; +import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.global.handler.response.BaseResponse; import java.util.Date; @@ -30,4 +30,16 @@ public BaseResponse mealPage(@RequestParam @DateTimeFormat(pattern = MenuBoards menuBoards = manageMealService.getMenuBoards(date, timePart); return BaseResponse.success(menuBoards); } + + @ResponseBody + @PostMapping("") + public BaseResponse register(@RequestParam Restaurant restaurant, + @RequestParam @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @RequestParam TimePart timePart, + @RequestBody RegisterMealRequest request, + Model model) { + MealInfo mealInfo = new MealInfo(restaurant, date, timePart); + manageMealService.register(mealInfo, request); + return BaseResponse.success(); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMealRequest.java b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMealRequest.java new file mode 100644 index 00000000..efd33a83 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMealRequest.java @@ -0,0 +1,9 @@ +package ssu.eatssu.domain.admin.dto; + +import java.util.List; + +public record RegisterMealRequest(List menuNames) { + public RegisterMealRequest { + menuNames.sort(String::compareTo); + } +} diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java index e76f5600..ad5d7301 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java @@ -7,10 +7,7 @@ import org.springframework.stereotype.Repository; import ssu.eatssu.domain.admin.dto.BriefMenu; import ssu.eatssu.domain.admin.dto.MealInfo; -import ssu.eatssu.domain.menu.entity.QMeal; -import ssu.eatssu.domain.menu.entity.QMealMenu; -import ssu.eatssu.domain.menu.entity.QMenu; -import ssu.eatssu.domain.menu.entity.TimePart; +import ssu.eatssu.domain.menu.entity.*; import ssu.eatssu.domain.restaurant.entity.Restaurant; import java.util.Date; @@ -24,11 +21,33 @@ public class LoadMealRepository { private final QMeal meal = QMeal.meal; private final QMealMenu mealMenu = QMealMenu.mealMenu; + public List existsMeal(MealInfo query) { + return queryFactory.select(meal.id) + .from(meal) + .where( + mealRestaurantEq(query.restaurant()), + mealDateEq(query.date()), + mealTimePartEq(query.timePart()) + ) + .fetch(); + } + + public List findMenuNamesByMealId(Long mealId) { + return queryFactory + .select(menu.name) + .from(mealMenu) + .join(mealMenu.meal, meal) + .on(mealIdEq(mealId)) + .join(mealMenu.menu, menu) + .orderBy(menu.name.asc()) + .fetch(); + } + public List getAllMealIdsByInfo(MealInfo query) { return queryFactory.select(meal.id) .from(meal) .where( - restaurantEq(query.restaurant()), + mealRestaurantEq(query.restaurant()), mealDateEq(query.date()), mealTimePartEq(query.timePart()) ) @@ -49,6 +68,15 @@ public List findBriefMenusByMealId(Long mealId) { .fetch(); } + public Menu findMenu(String menuName, Restaurant restaurant) { + return queryFactory.selectFrom(menu) + .where( + menuNameEq(menuName), + menuRestaurantEq(restaurant) + ) + .fetchFirst(); + } + private BooleanExpression mealIdEq(Long mealId) { return meal.id.eq(mealId); } @@ -61,8 +89,17 @@ private BooleanExpression mealDateEq(Date date) { return meal.date.eq(date); } - private BooleanExpression restaurantEq(Restaurant restaurant) { + private BooleanExpression mealRestaurantEq(Restaurant restaurant) { return meal.restaurant.eq(restaurant); } + private BooleanExpression menuRestaurantEq(Restaurant restaurant) { + return menu.restaurant.eq(restaurant); + } + + private BooleanExpression menuNameEq(String menuName) { + return menu.name.eq(menuName); + } + + } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealMenuRepository.java new file mode 100644 index 00000000..4478ea9f --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealMenuRepository.java @@ -0,0 +1,7 @@ +package ssu.eatssu.domain.admin.persistence; + +import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.menu.entity.MealMenu; + +public interface ManageMealMenuRepository extends JpaRepository { +} diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealRepository.java new file mode 100644 index 00000000..09dd9f84 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealRepository.java @@ -0,0 +1,7 @@ +package ssu.eatssu.domain.admin.persistence; + +import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.menu.entity.Meal; + +public interface ManageMealRepository extends JpaRepository { +} diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java index 75bfa859..11a0e648 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java @@ -3,10 +3,14 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import ssu.eatssu.domain.admin.dto.*; -import ssu.eatssu.domain.admin.persistence.LoadMealRepository; -import ssu.eatssu.domain.admin.persistence.MenuRatingRepository; +import ssu.eatssu.domain.admin.persistence.*; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.MealMenu; +import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.TimePart; import ssu.eatssu.domain.restaurant.entity.RestaurantType; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponseStatus; import java.util.Date; import java.util.List; @@ -17,6 +21,9 @@ public class ManageMealService { private final LoadMealRepository loadMealRepository; private final MenuRatingRepository menuRatingRepository; + private final ManageMealRepository manageMealRepository; + private final ManageMealMenuRepository manageMealMenuRepository; + private final ManageMenuRepository manageMenuRepository; public MenuBoards getMenuBoards(Date date, TimePart timePart) { MenuBoards menuBoards = new MenuBoards(); @@ -58,4 +65,47 @@ private MenuSection getMenuSection(Long mealId) { return menuSection; } + public void register(MealInfo mealInfo, RegisterMealRequest request) { + // 중복 체크 + duplicateCheck(mealInfo, request); + + // 식단 등록 + Meal meal = new Meal(mealInfo.date(), mealInfo.timePart(), mealInfo.restaurant()); + manageMealRepository.save(meal); + + //식단에 메뉴 추가 + addMenusToMeal(meal, request.menuNames()); + + } + + private void addMenusToMeal(Meal meal, List menuNames) { + menuNames.forEach(menuName -> { + Menu menu = loadMealRepository.findMenu(menuName, meal.getRestaurant()); + if (menu == null) { + menu = Menu.createVariable(menuName, meal.getRestaurant()); + manageMenuRepository.save(menu); + } + manageMealMenuRepository.save(MealMenu.builder().meal(meal).menu(menu).build()); + }); + } + + private void duplicateCheck(MealInfo mealInfo, RegisterMealRequest request) { + List mealIds = loadMealRepository.existsMeal(mealInfo); + mealIds.forEach(mealId -> { + if (hasMenus(mealId, request.menuNames())) { + throw new BaseException(BaseResponseStatus.CONFLICT); + } + }); + } + + private boolean hasMenus(Long mealId, List menuNames) { + List menuNamesInMeal = loadMealRepository.findMenuNamesByMealId(mealId); + + /** + * menuNamesInMeal 과 menuNames 는 오름차순 정렬된 상태 + * @see LoadMealRepository#findMenuNamesByMealId(Long) + * @see RegisterMealRequest#RegisterMealRequest + */ + return menuNamesInMeal.equals(menuNames); + } } \ No newline at end of file From 2a518f2d2e31bf85e31b006b60080acad259c26f Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 27 Jan 2024 02:29:54 +0900 Subject: [PATCH 087/399] =?UTF-8?q?[#42]=20Feat:=20=EC=8B=9D=EB=8B=A8=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EC=8B=9C=20id=20=EA=B0=92=EB=8F=84=20?= =?UTF-8?q?=EB=84=98=EC=96=B4=EA=B0=80=EA=B2=8C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ManageMealController.java | 2 ++ .../eatssu/domain/admin/dto/MealSection.java | 20 +++++++++++++++++++ .../eatssu/domain/admin/dto/MenuBoard.java | 6 +++--- .../eatssu/domain/admin/dto/MenuSection.java | 12 ++++------- .../domain/admin/dto/SectionInBoard.java | 5 +++++ .../admin/service/ManageFixMenuService.java | 2 +- .../admin/service/ManageMealService.java | 12 +++++------ 7 files changed, 41 insertions(+), 18 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/MealSection.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/SectionInBoard.java diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java index c9533a39..41412c9f 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java @@ -42,4 +42,6 @@ public BaseResponse register(@RequestParam Restaurant restaurant, manageMealService.register(mealInfo, request); return BaseResponse.success(); } + + } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MealSection.java b/src/main/java/ssu/eatssu/domain/admin/dto/MealSection.java new file mode 100644 index 00000000..b0095afd --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MealSection.java @@ -0,0 +1,20 @@ +package ssu.eatssu.domain.admin.dto; + +import java.util.ArrayList; +import java.util.List; + +public record MealSection(Long mealId, String title, List menuLines) implements SectionInBoard { + + public MealSection(Long mealId, String title) { + this(mealId, title, new ArrayList<>()); + } + + public MealSection(Long mealId) { + this(mealId, null, new ArrayList<>()); + } + + @Override + public void addMenuLine(MenuLine menuLine) { + menuLines.add(menuLine); + } +} diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java index f1a93229..af033a63 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java @@ -3,12 +3,12 @@ import java.util.ArrayList; import java.util.List; -public record MenuBoard(String restaurantName, List menuSections) { +public record MenuBoard(String restaurantName, List sections) { public MenuBoard(String restaurantName) { this(restaurantName, new ArrayList<>()); } - public void addMenuSection(MenuSection menuSection) { - menuSections.add(menuSection); + public void addSection(SectionInBoard section) { + sections.add(section); } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java index d3cabcf3..d3e8cb88 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java @@ -3,15 +3,11 @@ import java.util.ArrayList; import java.util.List; -public record MenuSection(String title, List menuLines) { - public MenuSection (String title) { - this(title, new ArrayList<>()); +public record MenuSection(String category, List menuLines) implements SectionInBoard{ + public MenuSection(String category) { + this(category, new ArrayList<>()); } - - public MenuSection (){ - this(null, new ArrayList<>()); - } - + @Override public void addMenuLine(MenuLine menuLine) { menuLines.add(menuLine); } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/SectionInBoard.java b/src/main/java/ssu/eatssu/domain/admin/dto/SectionInBoard.java new file mode 100644 index 00000000..54eb1600 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/SectionInBoard.java @@ -0,0 +1,5 @@ +package ssu.eatssu.domain.admin.dto; + +public interface SectionInBoard { + void addMenuLine(MenuLine menuLine); +} diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java index 9b94b6bf..6a59f624 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java @@ -37,7 +37,7 @@ public MenuBoards getMenuBoards() { private MenuBoard getMenuBoard(Restaurant restaurant) { MenuBoard menuBoard = new MenuBoard(restaurant.getDescription()); - getMenuSections(restaurant).forEach(menuBoard::addMenuSection); + getMenuSections(restaurant).forEach(menuBoard::addSection); return menuBoard; } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java index 11a0e648..86b76555 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java @@ -37,24 +37,24 @@ public MenuBoards getMenuBoards(Date date, TimePart timePart) { private MenuBoard getMealBoard(MealInfo mealInfo) { MenuBoard menuBoard = new MenuBoard(mealInfo.restaurant().getDescription()); - getMenuSections(mealInfo).forEach(menuBoard::addMenuSection); + getMenuSections(mealInfo).forEach(menuBoard::addSection); return menuBoard; } - private List getMenuSections(MealInfo mealInfo) { + private List getMenuSections(MealInfo mealInfo) { List mealIds = loadMealRepository.getAllMealIdsByInfo(mealInfo); return mealIds.stream().map(this::getMenuSection).toList(); } - private MenuSection getMenuSection(Long mealId) { - MenuSection menuSection = new MenuSection(); + private MealSection getMenuSection(Long mealId) { + MealSection mealSection = new MealSection(mealId); List briefMenus = loadMealRepository.findBriefMenusByMealId(mealId); briefMenus.forEach(briefMenu -> - menuSection.addMenuLine(new MenuLine( + mealSection.addMenuLine(new MenuLine( briefMenu.id(), briefMenu.name(), briefMenu.price(), @@ -62,7 +62,7 @@ private MenuSection getMenuSection(Long mealId) { )) ); - return menuSection; + return mealSection; } public void register(MealInfo mealInfo, RegisterMealRequest request) { From 1ed3225cdf919acac2bad1768762cd97920b1d6a Mon Sep 17 00:00:00 2001 From: SY2on Date: Sat, 27 Jan 2024 03:11:55 +0900 Subject: [PATCH 088/399] =?UTF-8?q?[#42]=20Feat:=20=EC=8B=9D=EB=8B=A8=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EC=99=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ManageFixMenuController.java | 4 ++-- .../admin/controller/ManageMealController.java | 7 +++++++ .../admin/persistence/LoadMealRepository.java | 13 ++++++++++++- .../domain/admin/service/ManageMealService.java | 16 +++++++++++++++- 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java index ab108529..7808df38 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java @@ -36,7 +36,7 @@ public String register(@RequestParam Restaurant restaurant, } @ResponseBody - @PatchMapping("{menuId}") + @PatchMapping("/{menuId}") public String update(@PathVariable Long menuId, @RequestBody UpdateFixMenuRequest request) { manageFixMenuService.updateMenu(menuId, request); @@ -44,7 +44,7 @@ public String update(@PathVariable Long menuId, } @ResponseBody - @DeleteMapping("{menuId}") + @DeleteMapping("/{menuId}") public String delete(@PathVariable Long menuId) { manageFixMenuService.delete(menuId); return "redirect:/admin/menu/fix-menu"; diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java index 41412c9f..0b38218e 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java @@ -43,5 +43,12 @@ public BaseResponse register(@RequestParam Restaurant restaurant, return BaseResponse.success(); } + @ResponseBody + @DeleteMapping("/{mealId}") + public BaseResponse delete(@PathVariable Long mealId) { + manageMealService.delete(mealId); + return BaseResponse.success(); + } + } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java index ad5d7301..427bb64c 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java @@ -77,6 +77,13 @@ public Menu findMenu(String menuName, Restaurant restaurant) { .fetchFirst(); } + public List getAllMenuIds(Long mealId) { + return queryFactory.select(mealMenu.menu.id) + .from(mealMenu) + .where(mealIdEq(mealId)) + .fetch(); + } + private BooleanExpression mealIdEq(Long mealId) { return meal.id.eq(mealId); } @@ -101,5 +108,9 @@ private BooleanExpression menuNameEq(String menuName) { return menu.name.eq(menuName); } - + public int countMealMenuByMenuId(Long menuId) { + return (int) queryFactory.selectFrom(mealMenu) + .where(mealMenu.menu.id.eq(menuId)) + .fetchCount(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java index 86b76555..06538e04 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java @@ -108,4 +108,18 @@ private boolean hasMenus(Long mealId, List menuNames) { */ return menuNamesInMeal.equals(menuNames); } -} \ No newline at end of file + + public void delete(Long mealId) { + List menuIds = loadMealRepository.getAllMenuIds(mealId); + manageMealRepository.deleteById(mealId); + deleteUnusedMenus(menuIds); + } + + private void deleteUnusedMenus(List menuIds) { + menuIds.forEach(menuId -> { + if(loadMealRepository.countMealMenuByMenuId(menuId)==0){ + manageMenuRepository.deleteById(menuId); + } + }); + } +} From 6caf8378c6d985b410f03797eddc0ceb397baf41 Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Sat, 27 Jan 2024 18:13:11 +0900 Subject: [PATCH 089/399] =?UTF-8?q?[#85]=20fix=20:=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=95=88=EC=A0=95=ED=99=94?= =?UTF-8?q?=EB=A5=BC=20=EC=A7=84=ED=96=89=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/service/ManageFixMenuService.java | 2 +- .../admin/service/ManageMealService.java | 2 +- .../eatssu/domain/menu/dto/MenuResponse.java | 2 +- .../ssu/eatssu/domain/menu/entity/Meal.java | 1 - .../ssu/eatssu/domain/menu/entity/Menu.java | 9 ++-- .../domain/restaurant/entity/Restaurant.java | 49 ++++++++++++------- .../domain/auth/service/OauthServiceTest.java | 3 +- .../domain/menu/service/MenuServiceTest.java | 7 +-- .../report/service/ReportServiceTest.java | 4 +- .../review/service/ReviewServiceTest.java | 5 +- 10 files changed, 48 insertions(+), 36 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java index 9b94b6bf..7d8d0713 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java @@ -35,7 +35,7 @@ public MenuBoards getMenuBoards() { } private MenuBoard getMenuBoard(Restaurant restaurant) { - MenuBoard menuBoard = new MenuBoard(restaurant.getDescription()); + MenuBoard menuBoard = new MenuBoard(restaurant.getRestaurantName()); getMenuSections(restaurant).forEach(menuBoard::addMenuSection); diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java index 75bfa859..3f9e5a45 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java @@ -28,7 +28,7 @@ public MenuBoards getMenuBoards(Date date, TimePart timePart) { } private MenuBoard getMealBoard(MealInfo mealInfo) { - MenuBoard menuBoard = new MenuBoard(mealInfo.restaurant().getDescription()); + MenuBoard menuBoard = new MenuBoard(mealInfo.restaurant().getRestaurantName()); getMenuSections(mealInfo).forEach(menuBoard::addMenuSection); diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java b/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java index bcbe2314..00879443 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java @@ -41,7 +41,7 @@ public static MealInformationResponse from(Meal meal) { .map(BriefMenuInformation::new).toList(); return new MealInformationResponse(meal.getId(), - meal.getRestaurant().getPrice(), + meal.getRestaurant().getRestaurantPrice(), meal.getAverateMainRating(), menusInformation); } else { return null; diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index 048aad44..0bb56e54 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -28,7 +28,6 @@ public class Meal { @Enumerated(EnumType.STRING) private TimePart timePart; - @Enumerated(EnumType.STRING) private Restaurant restaurant; @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL) diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index becb17f8..2f1159a7 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -26,7 +26,6 @@ public class Menu { private Integer price; - @Enumerated(EnumType.STRING) private Restaurant restaurant; @Embedded @@ -49,9 +48,9 @@ private Menu(String name, Restaurant restaurant, Integer price, MenuCategory cat public static Menu createVariable(String name, Restaurant restaurant) { int price = 0; if (RestaurantType.isVariableType(restaurant)) { - price = restaurant.getPrice(); + price = restaurant.getRestaurantPrice(); } - return new Menu(name, restaurant, price,null); + return new Menu(name, restaurant, price, null); } /** @@ -59,7 +58,8 @@ public static Menu createVariable(String name, Restaurant restaurant) { * todo: 고정메뉴 식당이 아니라 변동 메뉴 식당으로 잘못 들어온다면 어떻게 처리? */ - public static Menu createFixed(String name, Restaurant restaurant, Integer price, MenuCategory category) { + public static Menu createFixed(String name, Restaurant restaurant, Integer price, + MenuCategory category) { return new Menu(name, restaurant, price, category); } @@ -71,6 +71,7 @@ public void addReview(Review review) { public int getTotalReviewCount() { return reviews.size(); } + public void update(String name, Integer price) { this.name = name; this.price = price; diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index 633de1ac..ee6d991d 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -1,33 +1,44 @@ package ssu.eatssu.domain.restaurant.entity; import com.fasterxml.jackson.annotation.JsonCreator; +import java.util.Arrays; import lombok.Getter; + import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; -import java.util.Arrays; @Getter public enum Restaurant { - DODAM("도담 식당", 6000), - DORMITORY("기숙사 식당", 5000), - FOOD_COURT("푸드 코트", null), - SNACK_CORNER("스낵 코너", null), - HAKSIK("학생 식당", 5000); - - private String description; - private Integer price; - - Restaurant(String description, Integer price) { - this.description = description; - this.price = price; - } + DODAM(RestaurantType.VARIABLE, "도담 식당", 6000), + DORMITORY(RestaurantType.VARIABLE, "기숙사 식당", 5000), + FOOD_COURT(RestaurantType.FIXED, "푸드 코트", null), + SNACK_CORNER(RestaurantType.FIXED, "스낵 코너", null), + HAKSIK(RestaurantType.VARIABLE, "학생 식당", 5000); + + private RestaurantType restaurantType; + private String restaurantName; + private Integer restaurantPrice; @JsonCreator - public static Restaurant from(String description) { + public static Restaurant from(String restaurantName) { return Arrays.stream(Restaurant.values()) - .filter(d -> d.getDescription().equals(description)) - .findAny() - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); + .filter(r -> r.getRestaurantName().equals(restaurantName)) + .findAny() + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); + } + + Restaurant(RestaurantType restaurantType, String description, Integer price) { + this.restaurantType = restaurantType; + this.restaurantName = description; + this.restaurantPrice = price; + } + + public boolean isFixed() { + return this.restaurantType == RestaurantType.FIXED; + } + + public boolean isVariable() { + return this.restaurantType == RestaurantType.VARIABLE; } -} +} \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java b/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java index c5650828..2a123a6f 100644 --- a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java @@ -7,11 +7,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.crypto.password.PasswordEncoder; import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; -import ssu.eatssu.domain.auth.entity.JwtTokenProvider; import ssu.eatssu.domain.auth.infrastructure.TestAppleAuthenticator; +import ssu.eatssu.domain.auth.security.JwtTokenProvider; import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java index 0bb4b436..334b6a9b 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java @@ -17,6 +17,7 @@ import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.repository.MealRepository; import ssu.eatssu.domain.menu.repository.MenuRepository; +import ssu.eatssu.domain.restaurant.entity.Restaurant; @SpringBootTest class MenuServiceTest { @@ -41,9 +42,9 @@ void setUp() { // given List menus = new ArrayList<>(); Restaurant foodCourt = Restaurant.from("푸드 코트"); - menus.add(Menu.createFixed("라면", foodCourt, 3000)); - menus.add(Menu.createFixed("떡볶이", foodCourt, 5000)); - menus.add(Menu.createFixed("짜게치", foodCourt, 4000)); + menus.add(Menu.createFixed("라면", foodCourt, 3000, null)); + menus.add(Menu.createFixed("떡볶이", foodCourt, 5000, null)); + menus.add(Menu.createFixed("짜게치", foodCourt, 4000, null)); menuRepository.saveAll(menus); // when & then diff --git a/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java b/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java index 45536ffe..a93f747d 100644 --- a/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java @@ -1,6 +1,5 @@ package ssu.eatssu.domain.report.service; -import static org.junit.jupiter.api.Assertions.*; import jakarta.transaction.Transactional; import org.assertj.core.api.Assertions; @@ -8,8 +7,8 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import ssu.eatssu.domain.auth.entity.CustomUserDetails; import ssu.eatssu.domain.auth.entity.OAuthProvider; +import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.report.dto.ReportCreateRequest; import ssu.eatssu.domain.report.entity.ReportType; import ssu.eatssu.domain.report.repository.ReportRepository; @@ -37,6 +36,7 @@ class ReportServiceTest { @BeforeEach void setUp() { reportRepository.deleteAll(); + reviewRepository.deleteAll(); userRepository.deleteAll(); } diff --git a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java index 2708ee4f..81523db0 100644 --- a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java @@ -6,10 +6,11 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import ssu.eatssu.domain.auth.entity.CustomUserDetails; import ssu.eatssu.domain.auth.entity.OAuthProvider; +import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.repository.MenuRepository; +import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.ReviewCreateRequest; import ssu.eatssu.domain.review.dto.ReviewUpdateRequest; import ssu.eatssu.domain.review.entity.Review; @@ -103,7 +104,7 @@ private CustomUserDetails createCustomUserDetails(User user) { } private Menu createMenu() { - Menu menu = Menu.createFixed("라면", Restaurant.FOOD_COURT, 3000); + Menu menu = Menu.createFixed("라면", Restaurant.FOOD_COURT, 3000, null); return menuRepository.save(menu); } } \ No newline at end of file From a89b2693ba38a9ba4e6d1e51c013a55052f0f76a Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Mon, 29 Jan 2024 19:58:54 +0900 Subject: [PATCH 090/399] =?UTF-8?q?hotfix=20:=20Swagger=EC=9D=98=20Date=20?= =?UTF-8?q?=EC=9D=B8=EC=8B=9D=20=EA=B4=80=EB=A0=A8=20=EC=98=A4=EB=A5=98?= =?UTF-8?q?=EB=A5=BC=20=EC=88=98=EC=A0=95=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/menu/presentation/MealController.java | 4 ++-- .../domain/review/dto/ReviewCreateRequest.java | 12 +++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java index d33097f3..7730cacd 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java @@ -46,7 +46,7 @@ public class MealController { }) @PostMapping("") public BaseResponse createMeal( - @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(schema = @Schema(type="string" ,format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, @RequestBody MenuRequest.MealCreateRequest mealCreateRequest) { @@ -70,7 +70,7 @@ public BaseResponse createMeal( }) @GetMapping("") public BaseResponse> getMeal( - @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(schema = @Schema(type="string" ,format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, @Parameter(description = "식당 이름") @RequestParam("restaurant") Restaurant restaurant, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { if (RestaurantType.isFixedType(restaurant)) { diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java index c929734f..507f7358 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java @@ -2,8 +2,10 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; +import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; import org.springframework.util.Assert; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.rating.entity.Ratings; @@ -11,8 +13,9 @@ import ssu.eatssu.domain.user.entity.User; @Schema(title = "리뷰 작성") -@NoArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter +@Setter public class ReviewCreateRequest { @Schema(description = "평점-메인", example = "4") @@ -42,8 +45,11 @@ public ReviewCreateRequest(int mainRating, int amountRating, int tasteRating, St public Review toEntity(User user, Menu menu) { Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); return Review.builder() - .user(user).content(this.content).ratings(ratings).menu(menu) - .build(); + .user(user) + .content(this.content) + .ratings(ratings) + .menu(menu) + .build(); } } From 98a3e2b46839dc53e299ab365a6141a522df404b Mon Sep 17 00:00:00 2001 From: SY2on Date: Mon, 29 Jan 2024 20:17:56 +0900 Subject: [PATCH 091/399] =?UTF-8?q?[#42]=20Refactor:=20Inquiry=20=EC=97=90?= =?UTF-8?q?=20email=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F?= =?UTF-8?q?=20inquiry=20=EC=A1=B0=ED=9A=8C=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=20=EC=82=AD=EC=A0=9C=20(=EC=96=B4=EB=93=9C=EB=AF=BC=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B4=EB=8F=99=20=EC=98=88=EC=A0=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../inquiry/dto/CreateInquiryRequest.java | 4 +++ .../eatssu/domain/inquiry/entity/Inquiry.java | 13 +++++++ .../presentation/InquiryController.java | 36 ++++++------------- .../inquiry/service/InquiryService.java | 18 +++------- .../menu/presentation/MealController.java | 4 +-- 5 files changed, 35 insertions(+), 40 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java b/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java index dfdbc053..318664e3 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java @@ -8,6 +8,10 @@ @NoArgsConstructor @Getter public class CreateInquiryRequest { + + @Schema(description = "답장 받을 이메일", example = "sandy1017@gmail.com") + private String email; + @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의 남깁니다") private String content; } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java b/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java index 31f34978..7f5b0242 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java @@ -22,4 +22,17 @@ public class Inquiry extends BaseTimeEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private User user; + + private String email; + + @Enumerated(EnumType.STRING) + private InquiryStatus status; + + public Inquiry(String content, User user, String email) { + this.content = content; + this.user = user; + this.email = email; + this.status = InquiryStatus.WAITING; + } + } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java b/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java index cf82bd4f..7587cfff 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.inquiry.presentation; import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; @@ -9,16 +8,18 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.domain.inquiry.dto.CreateInquiryRequest; import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.inquiry.service.InquiryService; -import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.domain.slack.entity.SlackChannel; -import ssu.eatssu.domain.slack.service.SlackService; import ssu.eatssu.domain.slack.entity.SlackMessageFormat; -import ssu.eatssu.domain.inquiry.dto.CreateInquiryRequest; -import ssu.eatssu.domain.inquiry.dto.InquiryDetailResponse; +import ssu.eatssu.domain.slack.service.SlackService; +import ssu.eatssu.global.handler.response.BaseResponse; @RestController @RequiredArgsConstructor @@ -31,31 +32,16 @@ public class InquiryController { @Operation(summary = "문의 작성", description = "문의를 작성하는 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "문의 작성 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "문의 작성 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping("/") public BaseResponse writeInquiry(@RequestBody CreateInquiryRequest createInquiryRequest, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { + @AuthenticationPrincipal CustomUserDetails customUserDetails) { Inquiry inquiry = inquiryService.createUserInquiry(customUserDetails, createInquiryRequest); slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiry(inquiry) - , SlackChannel.USER_INQUIRY_CHANNEL); + , SlackChannel.USER_INQUIRY_CHANNEL); return BaseResponse.success(); } - @Operation(summary = "문의 내용 조회", description = "문의 내용을 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "문의 작성 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 문의", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/{inquiryId}") - public BaseResponse getInquiryDetail( - @Parameter(description = "userInquiryId") - @PathVariable("inquiryId") Long inquiryId) { - Inquiry inquiry = inquiryService.getInquiryDetail(inquiryId); - slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiry(inquiry) - , SlackChannel.USER_INQUIRY_CHANNEL); - return BaseResponse.success(InquiryDetailResponse.from(inquiry)); - } - } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java index 7beb8042..1fa28cf1 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java @@ -1,19 +1,18 @@ package ssu.eatssu.domain.inquiry.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER_INQUIRY; - import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.inquiry.dto.CreateInquiryRequest; -import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.inquiry.repository.InquiryRepository; +import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; + @RequiredArgsConstructor @Service @@ -25,18 +24,11 @@ public class InquiryService { public Inquiry createUserInquiry(CustomUserDetails userDetails, CreateInquiryRequest request) { User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Inquiry inquiry = Inquiry.builder() - .user(user) - .content(request.getContent()) - .build(); + Inquiry inquiry = new Inquiry(request.getContent(), user, request.getEmail()); return inquiryRepository.save(inquiry); } - public Inquiry getInquiryDetail(Long inquiryId) { - return inquiryRepository.findById(inquiryId) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER_INQUIRY)); - } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java index 7730cacd..06cc4e76 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java @@ -46,7 +46,7 @@ public class MealController { }) @PostMapping("") public BaseResponse createMeal( - @Parameter(schema = @Schema(type="string" ,format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, @RequestBody MenuRequest.MealCreateRequest mealCreateRequest) { @@ -70,7 +70,7 @@ public BaseResponse createMeal( }) @GetMapping("") public BaseResponse> getMeal( - @Parameter(schema = @Schema(type="string" ,format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, @Parameter(description = "식당 이름") @RequestParam("restaurant") Restaurant restaurant, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { if (RestaurantType.isFixedType(restaurant)) { From b9ca63d6f7df1ef9abfdd60e82f61dad1b82a174 Mon Sep 17 00:00:00 2001 From: SY2on Date: Mon, 29 Jan 2024 20:19:30 +0900 Subject: [PATCH 092/399] =?UTF-8?q?[#42]=20Refactor:=20Inquiry=20=EC=97=90?= =?UTF-8?q?=20InquiryStatus=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java diff --git a/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java b/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java new file mode 100644 index 00000000..34e04b1e --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java @@ -0,0 +1,5 @@ +package ssu.eatssu.domain.inquiry.entity; + +public enum InquiryStatus { + WAITING, ANSWERED, HOLD; +} From a55171bbc82f977ff32e3a6b984a17921acf6fb7 Mon Sep 17 00:00:00 2001 From: SY2on Date: Mon, 29 Jan 2024 20:54:42 +0900 Subject: [PATCH 093/399] =?UTF-8?q?[#42]=20Merge:=20Swagger=20Date=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20hotfix=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/menu/presentation/MealController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java index 06cc4e76..b09407bf 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java @@ -70,7 +70,7 @@ public BaseResponse createMeal( }) @GetMapping("") public BaseResponse> getMeal( - @Parameter(description = "날짜(yyyyMMdd)") @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(schema = @Schema(type="string" ,format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, @Parameter(description = "식당 이름") @RequestParam("restaurant") Restaurant restaurant, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { if (RestaurantType.isFixedType(restaurant)) { From 1ac2210e4a5d25da92f3a2b5580caa71432bf180 Mon Sep 17 00:00:00 2001 From: SY2on Date: Fri, 2 Feb 2024 12:50:01 +0900 Subject: [PATCH 094/399] =?UTF-8?q?[#42]=20Feat:=20=EB=AC=B8=EC=9D=98=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20API=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ManageInquiryController.java | 29 ++++++++++ .../eatssu/domain/admin/dto/InquiryLine.java | 12 ++++ .../eatssu/domain/admin/dto/PageWrapper.java | 12 ++++ .../persistence/LoadInquiryRepository.java | 55 +++++++++++++++++++ .../admin/service/ManageInquiryService.java | 22 ++++++++ .../menu/presentation/MealController.java | 2 +- 6 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java new file mode 100644 index 00000000..c69c8daa --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java @@ -0,0 +1,29 @@ +package ssu.eatssu.domain.admin.controller; + +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PageableDefault; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import ssu.eatssu.domain.admin.dto.InquiryLine; +import ssu.eatssu.domain.admin.dto.PageWrapper; +import ssu.eatssu.domain.admin.service.ManageInquiryService; +import ssu.eatssu.global.handler.response.BaseResponse; + +@Controller +@RequestMapping("/admin/inquiry") +@RequiredArgsConstructor +public class ManageInquiryController { + private final ManageInquiryService manageInquiryService; + + @ResponseBody + @GetMapping("") + public BaseResponse> inquiryPage(@PageableDefault(size = 20) Pageable pageable, + Model model) { + PageWrapper inquiryLinePage = manageInquiryService.getInquiryBoard(pageable); + return BaseResponse.success(inquiryLinePage); + } +} diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java b/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java new file mode 100644 index 00000000..34158f29 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java @@ -0,0 +1,12 @@ +package ssu.eatssu.domain.admin.dto; + +import ssu.eatssu.domain.inquiry.entity.Inquiry; +import ssu.eatssu.domain.inquiry.entity.InquiryStatus; + +import java.time.LocalDateTime; + +public record InquiryLine(Long inquiryId, LocalDateTime date, String email, String content, InquiryStatus status) { + public InquiryLine(Inquiry inquiry) { + this(inquiry.getId(), inquiry.getCreatedDate(), inquiry.getEmail(), inquiry.getContent(), inquiry.getStatus()); + } +} diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java b/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java new file mode 100644 index 00000000..bb3cc814 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java @@ -0,0 +1,12 @@ +package ssu.eatssu.domain.admin.dto; + +import org.springframework.data.domain.Page; + +import java.util.List; + +public record PageWrapper(List content, int totalPages, long totalElements, int number, int size,int numberOfElements, + boolean isFirst, boolean isLast){ + public PageWrapper(Page page) { + this(page.getContent(), page.getTotalPages(), page.getTotalElements(), page.getNumber(), page.getSize(),page.getNumberOfElements(), page.isFirst(), page.isLast()); + } +} diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java new file mode 100644 index 00000000..b6ce49bd --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java @@ -0,0 +1,55 @@ +package ssu.eatssu.domain.admin.persistence; + +import com.querydsl.core.types.dsl.CaseBuilder; +import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.jpa.impl.JPAQuery; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.support.PageableExecutionUtils; +import org.springframework.stereotype.Repository; +import ssu.eatssu.domain.inquiry.entity.Inquiry; +import ssu.eatssu.domain.inquiry.entity.InquiryStatus; +import ssu.eatssu.domain.inquiry.entity.QInquiry; + +import java.util.List; + +@RequiredArgsConstructor +@Repository +public class LoadInquiryRepository { + private final JPAQueryFactory queryFactory; + + private final QInquiry inquiry = QInquiry.inquiry; + + public Page findAllInquiries(Pageable pageable) { + return PageableExecutionUtils.getPage(fetchInquiries(pageable), pageable, () -> countInquiries().fetchOne()); + } + + private JPAQuery countInquiries() { + return queryFactory + .select(inquiry.count()) + .from(inquiry); + } + private List fetchInquiries(Pageable pageable) { + return queryFactory + .selectFrom(inquiry) + .orderBy(statusPath().asc(), inquiry.createdDate.desc()) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .fetch(); + } + + private NumberExpression statusPath() { + + /** + * Inquiry Status 에 따라 정렬 + * WAITING -> HOLD -> ANSWERED + */ + return new CaseBuilder() + .when(inquiry.status.eq(InquiryStatus.WAITING)).then(1) + .when(inquiry.status.eq(InquiryStatus.HOLD)).then(2) + .when(inquiry.status.eq(InquiryStatus.ANSWERED)).then(3) + .otherwise(4); + } +} diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java new file mode 100644 index 00000000..e055a5cd --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java @@ -0,0 +1,22 @@ +package ssu.eatssu.domain.admin.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import ssu.eatssu.domain.admin.dto.InquiryLine; +import ssu.eatssu.domain.admin.dto.PageWrapper; +import ssu.eatssu.domain.admin.persistence.LoadInquiryRepository; +import ssu.eatssu.domain.inquiry.entity.Inquiry; + +@Service +@RequiredArgsConstructor +public class ManageInquiryService { + + private final LoadInquiryRepository loadInquiryRepository; + + public PageWrapper getInquiryBoard(Pageable pageable) { + Page inquiries = loadInquiryRepository.findAllInquiries(pageable); + return new PageWrapper<>(inquiries.map(InquiryLine::new)); + } +} diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java index b09407bf..71573d12 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java @@ -70,7 +70,7 @@ public BaseResponse createMeal( }) @GetMapping("") public BaseResponse> getMeal( - @Parameter(schema = @Schema(type="string" ,format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, @Parameter(description = "식당 이름") @RequestParam("restaurant") Restaurant restaurant, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { if (RestaurantType.isFixedType(restaurant)) { From c6703e1af365a621ff66cdb07e0a2734464cd769 Mon Sep 17 00:00:00 2001 From: SY2on Date: Fri, 2 Feb 2024 13:22:43 +0900 Subject: [PATCH 095/399] =?UTF-8?q?[#42]=20Feat:=20=EB=AC=B8=EC=9D=98=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=20=EB=B3=80=EA=B2=BD=20API=20=EA=B0=9C?= =?UTF-8?q?=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/ManageInquiryController.java | 12 +++++++++--- .../eatssu/domain/admin/dto/UpdateStatusRequest.java | 6 ++++++ .../admin/persistence/ManageInquiryRepository.java | 7 +++++++ .../domain/admin/service/ManageInquiryService.java | 12 ++++++++++++ .../ssu/eatssu/domain/inquiry/entity/Inquiry.java | 4 ++++ 5 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/UpdateStatusRequest.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/persistence/ManageInquiryRepository.java diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java index c69c8daa..a49fc64c 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java @@ -5,11 +5,10 @@ import org.springframework.data.web.PageableDefault; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.admin.dto.InquiryLine; import ssu.eatssu.domain.admin.dto.PageWrapper; +import ssu.eatssu.domain.admin.dto.UpdateStatusRequest; import ssu.eatssu.domain.admin.service.ManageInquiryService; import ssu.eatssu.global.handler.response.BaseResponse; @@ -26,4 +25,11 @@ public BaseResponse> inquiryPage(@PageableDefault(size PageWrapper inquiryLinePage = manageInquiryService.getInquiryBoard(pageable); return BaseResponse.success(inquiryLinePage); } + + @ResponseBody + @PatchMapping("{inquiryId}/status") + public BaseResponse updateStatus(@PathVariable Long inquiryId, @RequestBody UpdateStatusRequest request) { + manageInquiryService.updateStatus(inquiryId, request); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/UpdateStatusRequest.java b/src/main/java/ssu/eatssu/domain/admin/dto/UpdateStatusRequest.java new file mode 100644 index 00000000..12bd4026 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/UpdateStatusRequest.java @@ -0,0 +1,6 @@ +package ssu.eatssu.domain.admin.dto; + +import ssu.eatssu.domain.inquiry.entity.InquiryStatus; + +public record UpdateStatusRequest(InquiryStatus status) { +} diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageInquiryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageInquiryRepository.java new file mode 100644 index 00000000..590e2657 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageInquiryRepository.java @@ -0,0 +1,7 @@ +package ssu.eatssu.domain.admin.persistence; + +import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.inquiry.entity.Inquiry; + +public interface ManageInquiryRepository extends JpaRepository { +} diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java index e055a5cd..b6cc311c 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java @@ -6,17 +6,29 @@ import org.springframework.stereotype.Service; import ssu.eatssu.domain.admin.dto.InquiryLine; import ssu.eatssu.domain.admin.dto.PageWrapper; +import ssu.eatssu.domain.admin.dto.UpdateStatusRequest; import ssu.eatssu.domain.admin.persistence.LoadInquiryRepository; +import ssu.eatssu.domain.admin.persistence.ManageInquiryRepository; import ssu.eatssu.domain.inquiry.entity.Inquiry; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponseStatus; @Service @RequiredArgsConstructor public class ManageInquiryService { private final LoadInquiryRepository loadInquiryRepository; + private final ManageInquiryRepository manageInquiryRepository; public PageWrapper getInquiryBoard(Pageable pageable) { Page inquiries = loadInquiryRepository.findAllInquiries(pageable); return new PageWrapper<>(inquiries.map(InquiryLine::new)); } + + public void updateStatus(Long inquiryId, UpdateStatusRequest request) { + Inquiry inquiry = manageInquiryRepository.findById(inquiryId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_USER_INQUIRY)); + inquiry.updateStatus(request.status()); + manageInquiryRepository.save(inquiry); + } } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java b/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java index 7f5b0242..99f05190 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java @@ -35,4 +35,8 @@ public Inquiry(String content, User user, String email) { this.status = InquiryStatus.WAITING; } + public void updateStatus(InquiryStatus status) { + this.status = status; + } + } From ae7f7cf6ed25bc668644af13c4135121e76848e5 Mon Sep 17 00:00:00 2001 From: SY2on Date: Fri, 2 Feb 2024 13:25:27 +0900 Subject: [PATCH 096/399] =?UTF-8?q?[#42]=20Feat:=20=EB=AC=B8=EC=9D=98=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20API=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/admin/controller/ManageInquiryController.java | 7 +++++++ .../eatssu/domain/admin/service/ManageInquiryService.java | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java index a49fc64c..884dacde 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java @@ -32,4 +32,11 @@ public BaseResponse updateStatus(@PathVariable Long inquiryId, @RequestBody U manageInquiryService.updateStatus(inquiryId, request); return BaseResponse.success(); } + + @ResponseBody + @DeleteMapping("{inquiryId}") + public BaseResponse delete(@PathVariable Long inquiryId) { + manageInquiryService.delete(inquiryId); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java index b6cc311c..0f0f808c 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java @@ -31,4 +31,8 @@ public void updateStatus(Long inquiryId, UpdateStatusRequest request) { inquiry.updateStatus(request.status()); manageInquiryRepository.save(inquiry); } + + public void delete(Long inquiryId) { + manageInquiryRepository.deleteById(inquiryId); + } } From 53cb0532b2161680c8feabc65da4af8dfca01dc5 Mon Sep 17 00:00:00 2001 From: SY2on Date: Fri, 2 Feb 2024 13:28:30 +0900 Subject: [PATCH 097/399] =?UTF-8?q?[#42]=20Fix:=20Restful=20=ED=95=98?= =?UTF-8?q?=EA=B2=8C=20URI=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/admin/controller/ManageFixMenuController.java | 2 +- .../eatssu/domain/admin/controller/ManageInquiryController.java | 2 +- .../eatssu/domain/admin/controller/ManageMealController.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java index 7808df38..182405f6 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java @@ -12,7 +12,7 @@ import ssu.eatssu.global.handler.response.BaseResponse; @Controller -@RequestMapping("/admin/menu/fix-menu") +@RequestMapping("/admin/menu/fix-menus") @RequiredArgsConstructor public class ManageFixMenuController { diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java index 884dacde..7ba11aa6 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java @@ -13,7 +13,7 @@ import ssu.eatssu.global.handler.response.BaseResponse; @Controller -@RequestMapping("/admin/inquiry") +@RequestMapping("/admin/inquiries") @RequiredArgsConstructor public class ManageInquiryController { private final ManageInquiryService manageInquiryService; diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java index 0b38218e..bb39d7e3 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java @@ -16,7 +16,7 @@ import java.util.Date; @Controller -@RequestMapping("/admin/meal") +@RequestMapping("/admin/meals") @RequiredArgsConstructor public class ManageMealController { From ea682ec82be42cb8b9b2cbe4b1f24e80ab316b0c Mon Sep 17 00:00:00 2001 From: SY2on Date: Fri, 2 Feb 2024 15:17:22 +0900 Subject: [PATCH 098/399] =?UTF-8?q?[#78]=20Fix:=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=20@RequestBody=20->=20@RequestPart=20?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/review/presentation/ReviewController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index 9c8b6b4d..d273dba4 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -84,7 +84,7 @@ public BaseResponse> getReviews( produces = MediaType.APPLICATION_JSON_VALUE) public BaseResponse writeReview( @Parameter(description = "menuId") @PathVariable("menuId") Long menuId, - @RequestBody ReviewCreateRequest createReviewRequest, + @RequestPart ReviewCreateRequest createReviewRequest, @RequestPart(value = "multipartFileList", required = false) List multipartFileList, @AuthenticationPrincipal CustomUserDetails customUserDetails) { reviewService.createReview(customUserDetails, menuId, createReviewRequest, From c21079e75672c34e0e60e42a4f2957ac5f31dcae Mon Sep 17 00:00:00 2001 From: SY2on Date: Fri, 2 Feb 2024 15:18:14 +0900 Subject: [PATCH 099/399] =?UTF-8?q?[#78]=20Refactor:=20Restaurant=20?= =?UTF-8?q?=EC=97=90=20type=20=EA=B5=AC=EB=B6=84=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/restaurant/entity/Restaurant.java | 25 ++++++------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index ee6d991d..37401765 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -10,16 +10,16 @@ @Getter public enum Restaurant { - DODAM(RestaurantType.VARIABLE, "도담 식당", 6000), - DORMITORY(RestaurantType.VARIABLE, "기숙사 식당", 5000), - FOOD_COURT(RestaurantType.FIXED, "푸드 코트", null), - SNACK_CORNER(RestaurantType.FIXED, "스낵 코너", null), - HAKSIK(RestaurantType.VARIABLE, "학생 식당", 5000); + DODAM("도담 식당", 6000), + DORMITORY("기숙사 식당", 5000), + FOOD_COURT( "푸드 코트", null), + SNACK_CORNER( "스낵 코너", null), + HAKSIK("학생 식당", 5000); - private RestaurantType restaurantType; private String restaurantName; private Integer restaurantPrice; + @JsonCreator public static Restaurant from(String restaurantName) { return Arrays.stream(Restaurant.values()) @@ -28,17 +28,8 @@ public static Restaurant from(String restaurantName) { .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); } - Restaurant(RestaurantType restaurantType, String description, Integer price) { - this.restaurantType = restaurantType; - this.restaurantName = description; + Restaurant(String restaurantName, Integer price) { + this.restaurantName = restaurantName; this.restaurantPrice = price; } - - public boolean isFixed() { - return this.restaurantType == RestaurantType.FIXED; - } - - public boolean isVariable() { - return this.restaurantType == RestaurantType.VARIABLE; - } } \ No newline at end of file From 2f989947c0b8b540f5647e5a63c24553549c43bf Mon Sep 17 00:00:00 2001 From: SY2on Date: Fri, 2 Feb 2024 15:19:06 +0900 Subject: [PATCH 100/399] =?UTF-8?q?[#78]=20Fix:=20ReportType=20=EC=9D=98?= =?UTF-8?q?=20@JsonCreator=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/report/entity/ReportType.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java b/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java index beb521c7..7b6e3c07 100644 --- a/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java +++ b/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java @@ -1,9 +1,10 @@ package ssu.eatssu.domain.report.entity; import com.fasterxml.jackson.annotation.JsonCreator; -import java.util.Arrays; import lombok.Getter; +import java.util.Locale; + @Getter public enum ReportType { NO_ASSOCIATE_CONTENT("메뉴와 관련 없는 내용"), @@ -20,10 +21,7 @@ public enum ReportType { } @JsonCreator - public static ReportType from(final String description) { - return Arrays.stream(ReportType.values()) - .filter(v -> v.getDescription().equals(description)) - .findAny() - .orElseThrow(IllegalArgumentException::new); + public static ReportType from(final String name) { + return ReportType.valueOf(name.toUpperCase(Locale.ROOT)); } } From 4d8253e2000e30bee7b5c5eb8f1ada836bbca7f2 Mon Sep 17 00:00:00 2001 From: SY2on Date: Fri, 2 Feb 2024 15:19:40 +0900 Subject: [PATCH 101/399] =?UTF-8?q?[#78]=20Fix:=20RestaurantType=20?= =?UTF-8?q?=EC=9D=98=20=ED=95=84=EB=93=9C=EB=A5=BC=20final=20=EB=A1=9C=20?= =?UTF-8?q?=EC=84=A0=EC=96=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/restaurant/entity/RestaurantType.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java index 64a2d667..5e771e9b 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java @@ -10,8 +10,8 @@ public enum RestaurantType { FIXED("고정메뉴 식당", Arrays.asList(Restaurant.FOOD_COURT, Restaurant.SNACK_CORNER)), VARIABLE("변동메뉴 식당", Arrays.asList(Restaurant.DODAM, Restaurant.DORMITORY, Restaurant.HAKSIK)); - private String description; - private List restaurants; + private final String description; + private final List restaurants; RestaurantType(String description, List restaurants) { this.description = description; From aa1412ca80eb14364e5a26872b69873ac995e015 Mon Sep 17 00:00:00 2001 From: SY2on Date: Fri, 2 Feb 2024 15:26:43 +0900 Subject: [PATCH 102/399] =?UTF-8?q?[#42]=20Feat:=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EC=8B=A0=EA=B3=A0=20=ED=99=94=EB=A9=B4=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?API=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ManageReportController.java | 30 +++++++++++++ .../eatssu/domain/admin/dto/ReportLine.java | 13 ++++++ .../persistence/LoadReportRepository.java | 45 +++++++++++++++++++ .../admin/service/ManageFixMenuService.java | 2 +- .../admin/service/ManageReportService.java | 21 +++++++++ 5 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java new file mode 100644 index 00000000..5756e75a --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java @@ -0,0 +1,30 @@ +package ssu.eatssu.domain.admin.controller; + +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PageableDefault; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import ssu.eatssu.domain.admin.dto.PageWrapper; +import ssu.eatssu.domain.admin.dto.ReportLine; +import ssu.eatssu.domain.admin.service.ManageReportService; +import ssu.eatssu.global.handler.response.BaseResponse; + +@Controller +@RequestMapping("/admin/reports") +@RequiredArgsConstructor +public class ManageReportController { + private final ManageReportService manageReportService; + + @ResponseBody + @GetMapping("") + public BaseResponse> reportPage(@PageableDefault(size = 20) Pageable pageable, + Model model) { + PageWrapper reportLinePage = manageReportService.getReportBoard(pageable); + return BaseResponse.success(reportLinePage); + } + +} diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java b/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java new file mode 100644 index 00000000..cb7ae4f8 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java @@ -0,0 +1,13 @@ +package ssu.eatssu.domain.admin.dto; + +import ssu.eatssu.domain.review.entity.Report; +import ssu.eatssu.domain.review.entity.Review; + +import java.time.LocalDateTime; + +public record ReportLine(Long reportId, LocalDateTime date, String type, Long reviewId, String reviewText) { + public ReportLine(Report report, Review review) { + this(report.getId(), report.getCreatedDate(), report.getReportType().getDescription(), + review.getId(), review.getContent()); + } +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java new file mode 100644 index 00000000..ec0afe0b --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java @@ -0,0 +1,45 @@ +package ssu.eatssu.domain.admin.persistence; + +import com.querydsl.core.types.Projections; +import com.querydsl.jpa.impl.JPAQuery; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.support.PageableExecutionUtils; +import org.springframework.stereotype.Repository; +import ssu.eatssu.domain.admin.dto.ReportLine; +import ssu.eatssu.domain.review.entity.QReport; +import ssu.eatssu.domain.review.entity.QReview; + +import java.util.List; + +@Repository +@RequiredArgsConstructor +public class LoadReportRepository { + private final JPAQueryFactory queryFactory; + private final QReport report = QReport.report; + private final QReview review = QReview.review; + + + public Page findAll(Pageable pageable) { + return PageableExecutionUtils.getPage(fetchReportLines(pageable), pageable, () -> countReports().fetchOne()); + } + + private JPAQuery countReports() { + return queryFactory + .select(report.count()) + .from(report); + } + + private List fetchReportLines(Pageable pageable) { + return queryFactory + .select(Projections.constructor(ReportLine.class, report, review)) + .from(report) + .join(report.review, review) + .orderBy(report.createdDate.desc()) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .fetch(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java index 3c4f6ed6..adf7daa7 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java @@ -4,9 +4,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.admin.dto.*; -import ssu.eatssu.domain.admin.persistence.MenuRatingRepository; import ssu.eatssu.domain.admin.persistence.LoadFixMenuRepository; import ssu.eatssu.domain.admin.persistence.ManageMenuRepository; +import ssu.eatssu.domain.admin.persistence.MenuRatingRepository; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java new file mode 100644 index 00000000..d11e226b --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java @@ -0,0 +1,21 @@ +package ssu.eatssu.domain.admin.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import ssu.eatssu.domain.admin.dto.PageWrapper; +import ssu.eatssu.domain.admin.dto.ReportLine; +import ssu.eatssu.domain.admin.persistence.LoadReportRepository; + +@Service +@RequiredArgsConstructor +public class ManageReportService { + private final LoadReportRepository loadReportRepository; + + + public PageWrapper getReportBoard(Pageable pageable) { + Page reports = loadReportRepository.findAll(pageable); + return new PageWrapper<>(reports); + } +} From 9905fa8c1c453089d912f0a686c9ac74c6cdc6d4 Mon Sep 17 00:00:00 2001 From: SY2on Date: Fri, 2 Feb 2024 15:40:21 +0900 Subject: [PATCH 103/399] =?UTF-8?q?[#42]=20Feat:=20=EC=8B=A0=EA=B3=A0=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20API=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/ManageReportController.java | 11 ++++++++--- .../admin/persistence/ManageReportRepository.java | 7 +++++++ .../domain/admin/service/ManageReportService.java | 8 +++++++- 3 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/admin/persistence/ManageReportRepository.java diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java index 5756e75a..012e45a0 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java @@ -5,9 +5,7 @@ import org.springframework.data.web.PageableDefault; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.admin.dto.PageWrapper; import ssu.eatssu.domain.admin.dto.ReportLine; import ssu.eatssu.domain.admin.service.ManageReportService; @@ -27,4 +25,11 @@ public BaseResponse> reportPage(@PageableDefault(size = return BaseResponse.success(reportLinePage); } + @ResponseBody + @DeleteMapping("/{reportId}") + public BaseResponse delete(@PathVariable Long reportId) { + manageReportService.delete(reportId); + return BaseResponse.success(); + } + } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReportRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReportRepository.java new file mode 100644 index 00000000..9acce379 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReportRepository.java @@ -0,0 +1,7 @@ +package ssu.eatssu.domain.admin.persistence; + +import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.review.entity.Report; + +public interface ManageReportRepository extends JpaRepository { +} diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java index d11e226b..eb28d0e2 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java @@ -7,15 +7,21 @@ import ssu.eatssu.domain.admin.dto.PageWrapper; import ssu.eatssu.domain.admin.dto.ReportLine; import ssu.eatssu.domain.admin.persistence.LoadReportRepository; +import ssu.eatssu.domain.admin.persistence.ManageReportRepository; @Service @RequiredArgsConstructor public class ManageReportService { - private final LoadReportRepository loadReportRepository; + private final LoadReportRepository loadReportRepository; + private final ManageReportRepository manageReportRepository; public PageWrapper getReportBoard(Pageable pageable) { Page reports = loadReportRepository.findAll(pageable); return new PageWrapper<>(reports); } + + public void delete(Long reportId) { + manageReportRepository.deleteById(reportId); + } } From c26acf183336e00a3eeb84377ca8718962d35ea4 Mon Sep 17 00:00:00 2001 From: SY2on Date: Fri, 2 Feb 2024 17:04:07 +0900 Subject: [PATCH 104/399] =?UTF-8?q?[#42]=20Feat:=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20API=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ManageReviewController.java | 24 +++++++++++++++++++ .../admin/listener/ReportEventListener.java | 19 +++++++++++++++ .../persistence/LoadReportRepository.java | 8 +++++++ .../persistence/ManageReviewRepository.java | 8 +++++++ .../admin/service/ManageReportService.java | 7 ++++++ .../admin/service/ManageReviewService.java | 23 ++++++++++++++++++ 6 files changed, 89 insertions(+) create mode 100644 src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/persistence/ManageReviewRepository.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java new file mode 100644 index 00000000..b0aa1c05 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java @@ -0,0 +1,24 @@ +package ssu.eatssu.domain.admin.controller; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import ssu.eatssu.domain.admin.service.ManageReviewService; +import ssu.eatssu.global.handler.response.BaseResponse; + +@Controller +@RequestMapping("/admin/reviews") +@RequiredArgsConstructor +public class ManageReviewController { + private final ManageReviewService manageReviewService; + + @ResponseBody + @DeleteMapping("/{reviewId}") + public BaseResponse delete(@PathVariable Long reviewId) { + manageReviewService.delete(reviewId); + return BaseResponse.success(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java b/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java new file mode 100644 index 00000000..d357cdc9 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java @@ -0,0 +1,19 @@ +package ssu.eatssu.domain.admin.listener; + +import lombok.RequiredArgsConstructor; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; +import ssu.eatssu.domain.admin.event.ReviewDeleteEvent; +import ssu.eatssu.domain.admin.service.ManageReportService; + +@Component +@RequiredArgsConstructor +public class ReportEventListener { + + private final ManageReportService manageReportService; + + @EventListener + public void deleteReport(ReviewDeleteEvent event) { + manageReportService.deleteAllByReviewId(event.reviewId()); + } +} diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java index ec0afe0b..c5b98250 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java @@ -42,4 +42,12 @@ private List fetchReportLines(Pageable pageable) { .limit(pageable.getPageSize()) .fetch(); } + + public List findAllByReviewId(Long reviewId) { + return queryFactory + .select(report.id) + .from(report) + .where(report.review.id.eq(reviewId)) + .fetch(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReviewRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReviewRepository.java new file mode 100644 index 00000000..598c4876 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReviewRepository.java @@ -0,0 +1,8 @@ +package ssu.eatssu.domain.admin.persistence; + +import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.review.entity.Review; + +public interface ManageReviewRepository extends JpaRepository { + +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java index eb28d0e2..dff28a17 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java @@ -9,6 +9,8 @@ import ssu.eatssu.domain.admin.persistence.LoadReportRepository; import ssu.eatssu.domain.admin.persistence.ManageReportRepository; +import java.util.List; + @Service @RequiredArgsConstructor public class ManageReportService { @@ -24,4 +26,9 @@ public PageWrapper getReportBoard(Pageable pageable) { public void delete(Long reportId) { manageReportRepository.deleteById(reportId); } + + public void deleteAllByReviewId(Long reviewId) { + List reportIds = loadReportRepository.findAllByReviewId(reviewId); + manageReportRepository.deleteAllByIdInBatch(reportIds); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java new file mode 100644 index 00000000..fc3b92fb --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java @@ -0,0 +1,23 @@ +package ssu.eatssu.domain.admin.service; + +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Service; +import ssu.eatssu.domain.admin.event.ReviewDeleteEvent; +import ssu.eatssu.domain.admin.persistence.ManageReviewRepository; + +@Service +@Transactional +@RequiredArgsConstructor +public class ManageReviewService { + private final ManageReviewRepository manageReviewRepository; + private final ApplicationEventPublisher publisher; + + public void delete(Long reviewId) { + // 리뷰 삭제하기 전에 해당 리뷰를 참조하는 신고들을 모두 삭제한다. + publisher.publishEvent(new ReviewDeleteEvent(reviewId)); + + manageReviewRepository.deleteById(reviewId); + } +} From 5d137a25360f387ce35a04e80ae37c3dae1499da Mon Sep 17 00:00:00 2001 From: SY2on Date: Fri, 2 Feb 2024 17:05:21 +0900 Subject: [PATCH 105/399] =?UTF-8?q?[#42]=20Feat:=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20API=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ssu/eatssu/domain/admin/event/ReviewDeleteEvent.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/main/java/ssu/eatssu/domain/admin/event/ReviewDeleteEvent.java diff --git a/src/main/java/ssu/eatssu/domain/admin/event/ReviewDeleteEvent.java b/src/main/java/ssu/eatssu/domain/admin/event/ReviewDeleteEvent.java new file mode 100644 index 00000000..4a5105c9 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/event/ReviewDeleteEvent.java @@ -0,0 +1,4 @@ +package ssu.eatssu.domain.admin.event; + +public record ReviewDeleteEvent(Long reviewId) { +} From f28eead6b71cbc897641264415500f4760a709ed Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Fri, 2 Feb 2024 17:43:57 +0900 Subject: [PATCH 106/399] =?UTF-8?q?hotfix=20:=20@RequestPart=EB=A1=9C=20?= =?UTF-8?q?=ED=86=B5=EC=9D=BC=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/review/presentation/ReviewController.java | 2 +- .../ssu/eatssu/domain/report/service/ReportServiceTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index 9c8b6b4d..d273dba4 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -84,7 +84,7 @@ public BaseResponse> getReviews( produces = MediaType.APPLICATION_JSON_VALUE) public BaseResponse writeReview( @Parameter(description = "menuId") @PathVariable("menuId") Long menuId, - @RequestBody ReviewCreateRequest createReviewRequest, + @RequestPart ReviewCreateRequest createReviewRequest, @RequestPart(value = "multipartFileList", required = false) List multipartFileList, @AuthenticationPrincipal CustomUserDetails customUserDetails) { reviewService.createReview(customUserDetails, menuId, createReviewRequest, diff --git a/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java b/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java index a93f747d..ad2b7b07 100644 --- a/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java @@ -60,7 +60,7 @@ void setUp() { } private User createUser() { - return User.create("test@test.com", OAuthProvider.EATSSU, "1234", "1234"); + return User.create("test1@test.com", OAuthProvider.EATSSU, "1234", "1234"); } private CustomUserDetails createCustomUserDetails(User user) { From ffdade537d4d341f0dfa30368354ec4800ed061e Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Fri, 2 Feb 2024 17:44:08 +0900 Subject: [PATCH 107/399] =?UTF-8?q?hotfix=20:=20Enum=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=20=EB=B0=A9=EC=8B=9D=EC=9D=84=20=EB=B3=80=EA=B2=BD=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/restaurant/entity/Restaurant.java | 11 +++++------ .../eatssu/domain/menu/service/MenuServiceTest.java | 4 ++-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index ee6d991d..8a38b5f9 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -10,17 +10,16 @@ @Getter public enum Restaurant { - DODAM(RestaurantType.VARIABLE, "도담 식당", 6000), - DORMITORY(RestaurantType.VARIABLE, "기숙사 식당", 5000), - FOOD_COURT(RestaurantType.FIXED, "푸드 코트", null), - SNACK_CORNER(RestaurantType.FIXED, "스낵 코너", null), - HAKSIK(RestaurantType.VARIABLE, "학생 식당", 5000); + DODAM(RestaurantType.VARIABLE, "DODAM", 6000), + DORMITORY(RestaurantType.VARIABLE, "DORMITORY", 5000), + FOOD_COURT(RestaurantType.FIXED, "FOOD_COURT", null), + SNACK_CORNER(RestaurantType.FIXED, "SNACK_CORNER", null), + HAKSIK(RestaurantType.VARIABLE, "HAKSIK", 5000); private RestaurantType restaurantType; private String restaurantName; private Integer restaurantPrice; - @JsonCreator public static Restaurant from(String restaurantName) { return Arrays.stream(Restaurant.values()) .filter(r -> r.getRestaurantName().equals(restaurantName)) diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java index 334b6a9b..47dc9cd1 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java @@ -41,7 +41,7 @@ void setUp() { void 식당_이름으로_고정_메뉴를_조회한다() { // given List menus = new ArrayList<>(); - Restaurant foodCourt = Restaurant.from("푸드 코트"); + Restaurant foodCourt = Restaurant.from("FOOD_COURT"); menus.add(Menu.createFixed("라면", foodCourt, 3000, null)); menus.add(Menu.createFixed("떡볶이", foodCourt, 5000, null)); menus.add(Menu.createFixed("짜게치", foodCourt, 4000, null)); @@ -68,7 +68,7 @@ void setUp() { private Long 식단_생성_요청() { // given Date date = Date.valueOf("2024-01-03"); - Restaurant haksik = Restaurant.from("학생 식당"); + Restaurant haksik = Restaurant.from("HAKSIK"); MealCreateRequest request = new MealCreateRequest(List.of("돈까스", "샐러드", "김치")); // when From 7964207aff6c3e13c12b5335a10c75b1ee86ee3a Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Sun, 18 Feb 2024 17:19:53 +0900 Subject: [PATCH 108/399] =?UTF-8?q?hotfix=20:=20AllowUrls=EB=A5=BC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index aa536b43..f81de215 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -25,8 +25,8 @@ public class SecurityConfig { }; private static final String[] AUTH_WHITELIST = { - "/","/oauths/**", "/user/join", "/user/login", "/user/user-emails/{email}/exist", "/user/check-nickname", - "/menu/**", "/restaurants/**", "/review/info","/review/list", "/oauth/**", "/inquiries/{userInquiriesId}", + "/","/oauths/**", "/users/**", + "/menus/**", "/meals/**", "/restaurants/**", "/reviews/**", "/oauth/**", "/inquiries/{userInquiriesId}", "/inquiries/list", "/admin/login" }; From b2484aae212dfb7aeb4392261bd0077d3aa90daa Mon Sep 17 00:00:00 2001 From: soy2on Date: Sat, 24 Feb 2024 21:58:24 +0900 Subject: [PATCH 109/399] =?UTF-8?q?hotfix:=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=97=85=EB=A1=9C=EB=93=9C=20?= =?UTF-8?q?=EC=95=88=EB=90=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/review/service/ReviewService.java | 39 ++++++++++--------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index f4e85059..d14954f5 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -33,6 +33,7 @@ import java.io.IOException; import java.util.List; + import ssu.eatssu.global.util.S3Uploader; @RequiredArgsConstructor @@ -49,13 +50,13 @@ public class ReviewService { private final S3Uploader s3Uploader; public Review createReview(CustomUserDetails userDetails, Long menuId, ReviewCreateRequest request, - List images) { + List images) { User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); Review review = request.toEntity(user, menu); @@ -66,7 +67,7 @@ public Review createReview(CustomUserDetails userDetails, Long menuId, ReviewCre } private void processReviewImages(List images, Review review) { - if (images == null || !images.isEmpty()) { + if (images == null || images.isEmpty()) { return; } for (MultipartFile image : images) { @@ -77,40 +78,40 @@ private void processReviewImages(List images, Review review) { private void addReviewImage(Review review, MultipartFile image) { if (!image.isEmpty()) { try { - String reviewImageUrl = s3Uploader.upload(image, "reviewImg"); - ReviewImage reviewImage = ReviewImage.builder().review(review) - .imageUrl(reviewImageUrl) - .build(); - reviewImageRepository.save(reviewImage); + String reviewImageUrl = s3Uploader.upload(image, "reviewImg"); + ReviewImage reviewImage = ReviewImage.builder().review(review) + .imageUrl(reviewImageUrl) + .build(); + reviewImageRepository.save(reviewImage); } catch (IOException e) { - throw new BaseException(FAIL_IMAGE_UPLOAD); + throw new BaseException(FAIL_IMAGE_UPLOAD); } } } public void updateReview(CustomUserDetails userDetails, Long reviewId, - ReviewUpdateRequest request) { + ReviewUpdateRequest request) { User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); if (review.isNotWrittenBy(user)) { throw new BaseException(REVIEW_PERMISSION_DENIED); } review.update(request.content(), request.mainRate(), request.amountRate(), - request.tasteRate()); + request.tasteRate()); } public void deleteReview(CustomUserDetails userDetails, Long reviewId) { User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); if (review.isNotWrittenBy(user)) { throw new BaseException(REVIEW_PERMISSION_DENIED); @@ -121,7 +122,7 @@ public void deleteReview(CustomUserDetails userDetails, Long reviewId) { public MenuReviewResponse findMenuReviews(Long menuId) { Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); RatingAverages ratingAverages = ratingCalculator.menuAverageRatings(menu); ReviewRatingCount ratingCount = ratingCalculator.menuRatingCount(menu); @@ -132,7 +133,7 @@ public MenuReviewResponse findMenuReviews(Long menuId) { public MealReviewsResponse findMealReviews(Long mealId) { Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); int reviewCount = ratingCalculator.mealTotalReviewCount(meal); @@ -140,6 +141,6 @@ public MealReviewsResponse findMealReviews(Long mealId) { ReviewRatingCount ratingCountMap = ratingCalculator.mealRatingCount(meal); return MealReviewsResponse.of(reviewCount, meal.getMenuNames(), averageRating, - ratingCountMap); + ratingCountMap); } } From 2d53c242412a9cbdb304dea42af396d4b575aa31 Mon Sep 17 00:00:00 2001 From: soy2on Date: Sat, 24 Feb 2024 21:59:36 +0900 Subject: [PATCH 110/399] =?UTF-8?q?fix:=20Restaurant=20<->=20RestaurantTyp?= =?UTF-8?q?e=20=EC=88=9C=ED=99=98=EC=B0=B8=EC=A1=B0=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/restaurant/entity/Restaurant.java | 22 +++++-------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index 8a38b5f9..0a0e822c 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -10,13 +10,12 @@ @Getter public enum Restaurant { - DODAM(RestaurantType.VARIABLE, "DODAM", 6000), - DORMITORY(RestaurantType.VARIABLE, "DORMITORY", 5000), - FOOD_COURT(RestaurantType.FIXED, "FOOD_COURT", null), - SNACK_CORNER(RestaurantType.FIXED, "SNACK_CORNER", null), - HAKSIK(RestaurantType.VARIABLE, "HAKSIK", 5000); + DODAM( "도담 식당", 6000), + DORMITORY( "기숙사 식당", 5000), + FOOD_COURT("푸드 코트", null), + SNACK_CORNER( "스낵 코너", null), + HAKSIK( "학생 식당", 5000); - private RestaurantType restaurantType; private String restaurantName; private Integer restaurantPrice; @@ -27,17 +26,8 @@ public static Restaurant from(String restaurantName) { .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); } - Restaurant(RestaurantType restaurantType, String description, Integer price) { - this.restaurantType = restaurantType; + Restaurant( String description, Integer price) { this.restaurantName = description; this.restaurantPrice = price; } - - public boolean isFixed() { - return this.restaurantType == RestaurantType.FIXED; - } - - public boolean isVariable() { - return this.restaurantType == RestaurantType.VARIABLE; - } } \ No newline at end of file From 544deb0c7e4b7a7afe06a54014e35a78bdfe7dc5 Mon Sep 17 00:00:00 2001 From: soy2on Date: Tue, 27 Feb 2024 00:42:42 +0900 Subject: [PATCH 111/399] =?UTF-8?q?fix:=20Menu,=20Meal=20=EC=9D=98=20Resta?= =?UTF-8?q?urant=20=ED=95=84=EB=93=9C=EC=97=90=20@Enumerated=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 --- .../eatssu/domain/auth/infrastructure/SecurityConfig.java | 4 ++-- src/main/java/ssu/eatssu/domain/menu/entity/Meal.java | 5 +++-- src/main/java/ssu/eatssu/domain/menu/entity/Menu.java | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index aa536b43..f81de215 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -25,8 +25,8 @@ public class SecurityConfig { }; private static final String[] AUTH_WHITELIST = { - "/","/oauths/**", "/user/join", "/user/login", "/user/user-emails/{email}/exist", "/user/check-nickname", - "/menu/**", "/restaurants/**", "/review/info","/review/list", "/oauth/**", "/inquiries/{userInquiriesId}", + "/","/oauths/**", "/users/**", + "/menus/**", "/meals/**", "/restaurants/**", "/reviews/**", "/oauth/**", "/inquiries/{userInquiriesId}", "/inquiries/list", "/admin/login" }; diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index 0bb56e54..251a391b 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -26,10 +26,11 @@ public class Meal { private Date date; @Enumerated(EnumType.STRING) - private TimePart timePart; - private Restaurant restaurant; + @Enumerated(EnumType.STRING) + private TimePart timePart; + @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL) private List mealMenus = new ArrayList<>(); diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index 2f1159a7..c8dcf3fc 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -26,6 +26,7 @@ public class Menu { private Integer price; + @Enumerated(EnumType.STRING) private Restaurant restaurant; @Embedded From 5e7d3c31ddfdc8faa01ec442647206bfa8c125b4 Mon Sep 17 00:00:00 2001 From: soy2on Date: Tue, 27 Feb 2024 03:12:46 +0900 Subject: [PATCH 112/399] =?UTF-8?q?refactor:=20inner=20class=20=EB=A1=9C?= =?UTF-8?q?=20=EA=B4=80=EB=A6=AC=ED=95=98=EB=8D=98=20dto=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/auth/dto/AppleKeys.java | 3 +- .../domain/auth/dto/AppleLoginRequest.java | 4 +- .../domain/auth/dto/KakaoLoginRequest.java | 12 +- .../auth/infrastructure/SecurityConfig.java | 2 +- .../auth/presentation/OAuthController.java | 6 +- .../presentation/InquiryController.java | 2 +- .../domain/menu/dto/BriefMenuInformation.java | 23 +++ .../domain/menu/dto/MealCreateRequest.java | 13 ++ .../menu/dto/MealInformationResponse.java | 46 ++++++ .../domain/menu/dto/MenuInformation.java | 30 ++++ .../menu/dto/MenuInformationListResponse.java | 15 ++ .../eatssu/domain/menu/dto/MenuRequest.java | 23 --- .../eatssu/domain/menu/dto/MenuResponse.java | 110 ------------- .../menu/dto/MenusInformationResponse.java | 31 ++++ .../menu/presentation/MealController.java | 12 +- .../menu/presentation/MenuController.java | 47 +++--- .../domain/menu/service/MenuService.java | 28 ++-- .../domain/menu/util/MenuValidator.java | 4 +- .../report/dto/ReportTypeInformation.java | 19 +++ .../domain/report/dto/ReportTypeList.java | 25 +++ .../domain/report/dto/ReportTypeResponse.java | 31 ---- .../report/presentation/ReportController.java | 7 +- .../domain/report/service/ReportService.java | 6 +- .../review/dto/MealReviewsResponse.java | 3 +- .../domain/review/dto/MenuReviewResponse.java | 4 +- .../review/presentation/ReviewController.java | 150 +++++++++--------- .../user/presentation/UserController.java | 12 +- .../global/handler/response/BaseResponse.java | 3 + 28 files changed, 356 insertions(+), 315 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/menu/dto/BriefMenuInformation.java create mode 100644 src/main/java/ssu/eatssu/domain/menu/dto/MealCreateRequest.java create mode 100644 src/main/java/ssu/eatssu/domain/menu/dto/MealInformationResponse.java create mode 100644 src/main/java/ssu/eatssu/domain/menu/dto/MenuInformation.java create mode 100644 src/main/java/ssu/eatssu/domain/menu/dto/MenuInformationListResponse.java delete mode 100644 src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java delete mode 100644 src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java create mode 100644 src/main/java/ssu/eatssu/domain/menu/dto/MenusInformationResponse.java create mode 100644 src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java create mode 100644 src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java delete mode 100644 src/main/java/ssu/eatssu/domain/report/dto/ReportTypeResponse.java diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java b/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java index 17b84161..8c2f5674 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java @@ -13,7 +13,7 @@ public class AppleKeys { @Getter @NoArgsConstructor - public static class Key{ + public static class Key { private String kty; private String kid; private String use; @@ -22,6 +22,7 @@ public static class Key{ private String e; } + public Optional findKeyBy(String kid, String alg) { return this.keys.stream() .filter(key -> key.getKid().equals(kid) && key.getAlg().equals(alg)) diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java b/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java index bc04c8c4..2d5416ad 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java @@ -4,8 +4,8 @@ @Schema(title = "애플 로그인 및 회원가입") public record AppleLoginRequest( - @Schema(description = "identityToken", example = "eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi...") - String identityToken + @Schema(description = "identityToken", example = "eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi...") + String identityToken ) { } diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java b/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java index dc7f4686..eacf8e65 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java @@ -6,13 +6,13 @@ @Schema(title = "카카오 로그인 및 회원가입") public record KakaoLoginRequest( - @NotBlank(message = "이메일을 입력해주세요.") - @Email(message = "올바른 이메일 주소를 입력해주세요.") - @Schema(description = "이메일", example = "test@email.com") - String email, + @NotBlank(message = "이메일을 입력해주세요.") + @Email(message = "올바른 이메일 주소를 입력해주세요.") + @Schema(description = "이메일", example = "test@email.com") + String email, - @Schema(description = "providerId", example = "10378247832195") - String providerId + @Schema(description = "providerId", example = "10378247832195") + String providerId ) { } diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index f81de215..89a1fac2 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -27,7 +27,7 @@ public class SecurityConfig { private static final String[] AUTH_WHITELIST = { "/","/oauths/**", "/users/**", "/menus/**", "/meals/**", "/restaurants/**", "/reviews/**", "/oauth/**", "/inquiries/{userInquiriesId}", - "/inquiries/list", "/admin/login" + "/inquiries/list", "/admin/login", }; private static final String[] ADMIN_PAGE_LIST = { diff --git a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java index 683605bb..304a2df6 100644 --- a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java @@ -35,7 +35,7 @@ public class OAuthController { 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "카카오 회원가입/로그인 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "카카오 회원가입/로그인 성공") }) @PostMapping("/kakao") public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest request) { @@ -48,7 +48,7 @@ public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest req 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "애플 회원가입/로그인 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "200", description = "애플 회원가입/로그인 성공"), @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping("/apple") @@ -59,7 +59,7 @@ public BaseResponse appleLogin(@Valid @RequestBody AppleLoginRequest req @Operation(summary = "토큰 재발급", description = "accessToken, refreshToken 재발급 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "토큰 재발급 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "토큰 재발급 성공") }) @PostMapping("/reissue/token") public BaseResponse refreshToken() { diff --git a/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java b/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java index 7587cfff..b5e346b9 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java @@ -32,7 +32,7 @@ public class InquiryController { @Operation(summary = "문의 작성", description = "문의를 작성하는 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "문의 작성 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "200", description = "문의 작성 성공"), @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping("/") diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/BriefMenuInformation.java b/src/main/java/ssu/eatssu/domain/menu/dto/BriefMenuInformation.java new file mode 100644 index 00000000..8dc40117 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/dto/BriefMenuInformation.java @@ -0,0 +1,23 @@ +package ssu.eatssu.domain.menu.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.NoArgsConstructor; +import ssu.eatssu.domain.menu.entity.Menu; + +@Getter +@NoArgsConstructor +@Schema(title = "메뉴 간단 설명") +public class BriefMenuInformation { + + @Schema(description = "메뉴 식별자", example = "2") + private Long menuId; + + @Schema(description = "메뉴 이름", example = "돈까스") + private String name; + + protected BriefMenuInformation(Menu menu) { + this.menuId = menu.getId(); + this.name = menu.getName(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MealCreateRequest.java b/src/main/java/ssu/eatssu/domain/menu/dto/MealCreateRequest.java new file mode 100644 index 00000000..7d5ea152 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MealCreateRequest.java @@ -0,0 +1,13 @@ +package ssu.eatssu.domain.menu.dto; + +import io.swagger.v3.oas.annotations.media.Schema; + +import java.util.List; + +@Schema(title = "식단 추가") +public record MealCreateRequest( + @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") + List menuNames +) { + +} diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MealInformationResponse.java b/src/main/java/ssu/eatssu/domain/menu/dto/MealInformationResponse.java new file mode 100644 index 00000000..c0a72fc2 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MealInformationResponse.java @@ -0,0 +1,46 @@ +package ssu.eatssu.domain.menu.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.MealMenu; + +import java.util.List; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +@Schema(title = "오늘의 식단 리스트 조회 Res") +public class MealInformationResponse { + + @Schema(description = "식단 식별자 mealId", example = "12") + private Long mealId; + + @Schema(description = "가격", example = "5000") + private Integer price; + + @Schema(description = "식단 평점(평점이 없으면 null)", example = "4.4") + private Double mainRating; + + @Schema(description = "식단 속 메뉴 정보 리스트") + private List menusInformationList; + + + public static MealInformationResponse from(Meal meal) { + if (!meal.getMealMenus().isEmpty()) { + List menusInformation = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(BriefMenuInformation::new).toList(); + + return new MealInformationResponse(meal.getId(), + meal.getRestaurant().getRestaurantPrice(), + meal.getAverateMainRating(), menusInformation); + } else { + return null; + } + } +} + + diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MenuInformation.java b/src/main/java/ssu/eatssu/domain/menu/dto/MenuInformation.java new file mode 100644 index 00000000..a4969e15 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MenuInformation.java @@ -0,0 +1,30 @@ +package ssu.eatssu.domain.menu.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import ssu.eatssu.domain.menu.entity.Menu; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +@Schema(title = "고정 메뉴 정보") +public class MenuInformation { + @Schema(description = "메뉴 식별자", example = "2") + private Long menuId; + + @Schema(description = "메뉴 이름", example = "돈까스") + private String name; + + @Schema(description = "가격", example = "5000") + private Integer price; + + @Schema(description = "메뉴 평점(평점이 없으면 null)", example = "4.4") + private Double mainRating; + + public static MenuInformation from(Menu menu) { + return new MenuInformation(menu.getId(), menu.getName(), + menu.getPrice(), menu.getReviews().getAverageMainRating()); + } +} diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MenuInformationListResponse.java b/src/main/java/ssu/eatssu/domain/menu/dto/MenuInformationListResponse.java new file mode 100644 index 00000000..4fbc0b1b --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MenuInformationListResponse.java @@ -0,0 +1,15 @@ +package ssu.eatssu.domain.menu.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.List; + +@Getter +@AllArgsConstructor +@Schema(title = "고정 메뉴 목록 조회") +public class MenuInformationListResponse { + @Schema(description = "고정 메뉴 목록") + private List menusInformationList; +} diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java b/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java deleted file mode 100644 index 538ce21e..00000000 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MenuRequest.java +++ /dev/null @@ -1,23 +0,0 @@ -package ssu.eatssu.domain.menu.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import java.util.List; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; - -public class MenuRequest { - - private MenuRequest() { - } - - @Schema(title = "식단 추가") - @Getter - @NoArgsConstructor - @AllArgsConstructor - public static class MealCreateRequest { - - @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") - private List menuNames; - } -} diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java b/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java deleted file mode 100644 index 00879443..00000000 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MenuResponse.java +++ /dev/null @@ -1,110 +0,0 @@ -package ssu.eatssu.domain.menu.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import ssu.eatssu.domain.menu.entity.Meal; -import ssu.eatssu.domain.menu.entity.MealMenu; -import ssu.eatssu.domain.menu.entity.Menu; - -import java.util.List; - -public class MenuResponse { - - private MenuResponse() { - } - - @Schema(title = "오늘의 식단 리스트 조회 Res") - @Getter - @NoArgsConstructor - @AllArgsConstructor - public static class MealInformationResponse { - - @Schema(description = "식단 식별자 mealId", example = "12") - private Long mealId; - - @Schema(description = "가격", example = "5000") - private Integer price; - - @Schema(description = "식단 평점(평점이 없으면 null)", example = "4.4") - private Double mainRating; - - @Schema(description = "식단 속 메뉴 정보 리스트") - private List menusInformation; - - - public static MealInformationResponse from(Meal meal) { - if (!meal.getMealMenus().isEmpty()) { - List menusInformation = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(BriefMenuInformation::new).toList(); - - return new MealInformationResponse(meal.getId(), - meal.getRestaurant().getRestaurantPrice(), - meal.getAverateMainRating(), menusInformation); - } else { - return null; - } - } - } - - @Getter - @NoArgsConstructor - @AllArgsConstructor - public static class MenuInformationResponse { - - @Schema(description = "메뉴 식별자", example = "2") - private Long menuId; - - @Schema(description = "메뉴 이름", example = "돈까스") - private String name; - - @Schema(description = "가격", example = "5000") - private Integer price; - - @Schema(description = "메뉴 평점(평점이 없으면 null)", example = "4.4") - private Double mainRating; - - - public static MenuInformationResponse from(Menu menu) { - return new MenuInformationResponse(menu.getId(), menu.getName(), - menu.getPrice(), menu.getReviews().getAverageMainRating()); - } - } - - @Getter - @NoArgsConstructor - @AllArgsConstructor - public static class MenusInformationResponse { - - private List menusInformation; - - public static MenusInformationResponse from(Meal meal) { - if (!meal.getMealMenus().isEmpty()) { - List menusInformation = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(BriefMenuInformation::new).toList(); - return new MenusInformationResponse(menusInformation); - } else { - return null; - } - } - } - - @Getter - @NoArgsConstructor - private static class BriefMenuInformation { - - @Schema(description = "메뉴 식별자", example = "2") - private Long menuId; - - @Schema(description = "메뉴 이름", example = "돈까스") - private String name; - - private BriefMenuInformation(Menu menu) { - this.menuId = menu.getId(); - this.name = menu.getName(); - } - } -} diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MenusInformationResponse.java b/src/main/java/ssu/eatssu/domain/menu/dto/MenusInformationResponse.java new file mode 100644 index 00000000..9359b250 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MenusInformationResponse.java @@ -0,0 +1,31 @@ +package ssu.eatssu.domain.menu.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.MealMenu; + +import java.util.List; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +@Schema(title ="식단 속 메뉴 정보 리스트") +public class MenusInformationResponse { + + @Schema(description = "식단 속 메뉴 목록", example = "[]") + private List menusInformation; + + public static MenusInformationResponse from(Meal meal) { + if (!meal.getMealMenus().isEmpty()) { + List menusInformation = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(BriefMenuInformation::new).toList(); + return new MenusInformationResponse(menusInformation); + } else { + return null; + } + } +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java index 71573d12..ed4fcc4b 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java @@ -11,8 +11,8 @@ import lombok.RequiredArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.menu.dto.MenuRequest; -import ssu.eatssu.domain.menu.dto.MenuResponse.MealInformationResponse; +import ssu.eatssu.domain.menu.dto.MealCreateRequest; +import ssu.eatssu.domain.menu.dto.MealInformationResponse; import ssu.eatssu.domain.menu.entity.TimePart; import ssu.eatssu.domain.menu.service.MenuService; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -39,7 +39,7 @@ public class MealController { 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 추가 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "200", description = "식단 추가 성공"), @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) @@ -49,7 +49,7 @@ public BaseResponse createMeal( @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, - @RequestBody MenuRequest.MealCreateRequest mealCreateRequest) { + @RequestBody MealCreateRequest mealCreateRequest) { if (RestaurantType.isFixedType(restaurant)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } @@ -64,7 +64,7 @@ public BaseResponse createMeal( 일반적으로 학생식당과 도담의 경우 식단 여러개가 조회되고 기숙사식당은 한개만 조회됩니다.) """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공"), @ApiResponse(responseCode = "400", description = "지원 하지 않는 식당 (고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @@ -83,7 +83,7 @@ public BaseResponse> getMeal( @Operation(summary = "식단 삭제", description = "식단을 삭제하는 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 삭제 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "200", description = "식단 삭제 성공"), @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @DeleteMapping("/{mealId}") diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java index 60ba8452..7a3bd7f8 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java @@ -1,7 +1,5 @@ package ssu.eatssu.domain.menu.presentation; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; @@ -10,17 +8,20 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.menu.dto.MenuResponse.MenuInformationResponse; -import ssu.eatssu.domain.menu.dto.MenuResponse.MenusInformationResponse; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import ssu.eatssu.domain.menu.dto.MenuInformationListResponse; +import ssu.eatssu.domain.menu.dto.MenusInformationResponse; +import ssu.eatssu.domain.menu.service.MenuService; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.restaurant.entity.RestaurantType; import ssu.eatssu.global.handler.response.BaseException; -import ssu.eatssu.domain.menu.service.MenuService; - -import java.util.List; import ssu.eatssu.global.handler.response.BaseResponse; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; + @RestController @RequiredArgsConstructor @RequestMapping("/menus") @@ -30,34 +31,34 @@ public class MenuController { private final MenuService menuService; @Operation(summary = "고정 메뉴 리스트 조회", description = """ - 고정 메뉴 리스트를 조회하는 API 입니다. - 메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 리스트를 조회합니다. - """) + 고정 메뉴 리스트를 조회하는 API 입니다. + 메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 리스트를 조회합니다. + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("") - public BaseResponse> getMenus( - @RequestParam("restaurant") Restaurant restaurant) { - if(RestaurantType.isVariableType(restaurant)){ + public BaseResponse getMenus( + @RequestParam("restaurant") Restaurant restaurant) { + if (RestaurantType.isVariableType(restaurant)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } return BaseResponse.success(menuService.findMenusByRestaurant(restaurant)); } @Operation(summary = "메뉴 정보 리스트 조회", description = """ - 메뉴 정보 리스트를 조회하는 API 입니다.

- 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") - """) + 메뉴 정보 리스트를 조회하는 API 입니다.

+ 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("/in-meal") public BaseResponse getMenusInMeal(@Parameter(description = "mealId") - @RequestParam("mealId") Long mealId) { + @RequestParam("mealId") Long mealId) { return BaseResponse.success(menuService.findMenusInMeal(mealId)); } } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index 7eebbad5..f9dd6da4 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -1,27 +1,25 @@ package ssu.eatssu.domain.menu.service; import jakarta.transaction.Transactional; -import java.util.Date; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import ssu.eatssu.domain.menu.dto.MenuRequest.MealCreateRequest; -import ssu.eatssu.domain.menu.dto.MenuResponse.MenuInformationResponse; -import ssu.eatssu.domain.menu.dto.MenuResponse.MenusInformationResponse; -import ssu.eatssu.domain.menu.dto.MenuResponse.MealInformationResponse; +import ssu.eatssu.domain.menu.dto.*; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; -import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.menu.entity.TimePart; import ssu.eatssu.domain.menu.repository.MealMenuRepository; import ssu.eatssu.domain.menu.repository.MealRepository; import ssu.eatssu.domain.menu.repository.MenuRepository; +import ssu.eatssu.domain.menu.util.MenuValidator; +import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.util.Date; import java.util.List; -import ssu.eatssu.global.handler.response.BaseResponseStatus; -import ssu.eatssu.domain.menu.util.MenuValidator; +import java.util.stream.Collectors; @Slf4j @@ -34,12 +32,14 @@ public class MenuService { private final MealRepository mealRepository; private final MealMenuRepository mealMenuRepository; - public List findMenusByRestaurant(Restaurant restaurant) { + public MenuInformationListResponse findMenusByRestaurant(Restaurant restaurant) { List menus = menuRepository.findAllByRestaurant(restaurant); - return menus.stream() - .map(menu -> MenuInformationResponse.from(menu)) - .toList(); + List menuInformationList = menus.stream() + .map(MenuInformation::from) + .collect(Collectors.toList()); + + return new MenuInformationListResponse(menuInformationList); } public List findSpecificMeals(Date date, @@ -48,7 +48,7 @@ public List findSpecificMeals(Date date, List meals = getMeals(date, timePart, restaurant); return meals.stream() - .map(meal -> MealInformationResponse.from(meal)) + .map(MealInformationResponse::from) .toList(); } @@ -63,7 +63,7 @@ public void createMeal(Date date, Restaurant restaurant, TimePart timePart, mealRepository.save(meal); - addMenusToMeal(meal, restaurant, request.getMenuNames()); + addMenusToMeal(meal, restaurant, request.menuNames()); } public MenusInformationResponse findMenusInMeal(Long mealId) { diff --git a/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java b/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java index 68ea246a..08af601f 100644 --- a/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java +++ b/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java @@ -4,7 +4,7 @@ import java.util.Collections; import java.util.List; import lombok.RequiredArgsConstructor; -import ssu.eatssu.domain.menu.dto.MenuRequest.MealCreateRequest; +import ssu.eatssu.domain.menu.dto.MealCreateRequest; import ssu.eatssu.domain.menu.entity.Meal; @RequiredArgsConstructor @@ -12,7 +12,7 @@ public class MenuValidator { public static boolean validateExistedMeal(List meals, MealCreateRequest request) { - List sortedRequestMenuNames = new ArrayList<>(request.getMenuNames()); + List sortedRequestMenuNames = new ArrayList<>(request.menuNames()); Collections.sort(sortedRequestMenuNames); return meals.stream().anyMatch(meal -> { diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java new file mode 100644 index 00000000..387d2427 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java @@ -0,0 +1,19 @@ +package ssu.eatssu.domain.report.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; + +@Getter +@Schema(title = "리뷰 신고 사유") +public class ReportTypeInformation { + @Schema(description = "신고 사유 타입") + private String type; + + @Schema(description = "신고 사유 설명") + private String description; + + public ReportTypeInformation(String type, String description) { + this.type = type; + this.description = description; + } +} diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java new file mode 100644 index 00000000..95734850 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java @@ -0,0 +1,25 @@ +package ssu.eatssu.domain.report.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import ssu.eatssu.domain.report.entity.ReportType; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Getter +@Schema(title = "리뷰 신고 사유 목록 Response") +public class ReportTypeList { + + @Schema(description = "리뷰 신고 사유 목록") + private final List response = new ArrayList<>(); + + public static ReportTypeList get() { + ReportTypeList reportTypeList = new ReportTypeList(); + Arrays.stream(ReportType.values()) + .forEach(reportType -> reportTypeList.response.add( + new ReportTypeInformation(reportType.name(), reportType.getDescription()))); + return reportTypeList; + } +} diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeResponse.java b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeResponse.java deleted file mode 100644 index 807944d6..00000000 --- a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeResponse.java +++ /dev/null @@ -1,31 +0,0 @@ -package ssu.eatssu.domain.report.dto; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import lombok.Getter; -import ssu.eatssu.domain.report.entity.ReportType; - -@Getter -public class ReportTypeResponse { - - private final List response = new ArrayList<>(); - - public static ReportTypeResponse get() { - Arrays.stream(ReportType.values()) - .forEach(reportType -> get().response.add( - new Information(reportType.name(), reportType.getDescription()))); - return new ReportTypeResponse(); - } - - static class Information { - - private String type; - private String description; - - public Information(String type, String description) { - this.type = type; - this.description = description; - } - } -} diff --git a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java index 0d3bc3b4..0bb97dab 100644 --- a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java +++ b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java @@ -10,12 +10,12 @@ import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.domain.report.dto.ReportTypeList; import ssu.eatssu.domain.review.entity.Report; import ssu.eatssu.domain.report.service.ReportService; import ssu.eatssu.domain.slack.entity.SlackChannel; import ssu.eatssu.domain.slack.entity.SlackMessageFormat; import ssu.eatssu.domain.report.dto.ReportCreateRequest; -import ssu.eatssu.domain.report.dto.ReportTypeResponse; import ssu.eatssu.domain.slack.service.SlackService; import ssu.eatssu.global.handler.response.BaseResponse; @@ -31,8 +31,9 @@ public class ReportController { @Operation(summary = "리뷰 신고 사유 종류 조회", description = "리뷰 신고 사유 종류를 조회하는 API 입니다.") @GetMapping("/types") - public BaseResponse getReportType() { - return BaseResponse.success(reportService.getReportType()); + public BaseResponse getReportType() { + ReportTypeList reportTypeList = reportService.getReportType(); + return BaseResponse.success(reportTypeList); } /** diff --git a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java index b928dae8..ace8599d 100644 --- a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java +++ b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java @@ -7,7 +7,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.auth.security.CustomUserDetails; -import ssu.eatssu.domain.report.dto.ReportTypeResponse; +import ssu.eatssu.domain.report.dto.ReportTypeList; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.Report; import ssu.eatssu.domain.user.entity.User; @@ -39,7 +39,7 @@ public Report reportReview(CustomUserDetails userDetails, ReportCreateRequest re return reportRepository.save(report); } - public ReportTypeResponse getReportType() { - return ReportTypeResponse.get(); + public ReportTypeList getReportType() { + return ReportTypeList.get(); } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java index c142ccad..ce44294a 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java @@ -13,7 +13,7 @@ @Builder public class MealReviewsResponse implements ReviewInformationResponse { - @Schema(description = "메뉴명 리스트", example = "[\"고구마치즈돈까스\", \"막국수\", \"미니밥\", \"단무지\", \"요구르트\"]") + @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") private List menuNames; @Schema(description = "리뷰 개수", example = "15") @@ -28,6 +28,7 @@ public class MealReviewsResponse implements ReviewInformationResponse { @Schema(description = "평점-맛", example = "4.4") private Double tasteRating; + @Schema(description = "평점 별 갯수") private ReviewRatingCount reviewRatingCount; public static MealReviewsResponse of(Integer totalReviewCount, List menuNames, diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java index 76159acf..8014816f 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java @@ -13,7 +13,7 @@ @Builder public class MenuReviewResponse implements ReviewInformationResponse { - @Schema(description = "메뉴 리스트", example = "[\"고구마치즈돈까스\", \"막국수\", \"미니밥\", \"단무지\", \"요구르트\"]") + @Schema(description = "메뉴 이름", example = "바질토마토베이글") private String menuName; @Schema(description = "리뷰 개수", example = "15") @@ -27,6 +27,8 @@ public class MenuReviewResponse implements ReviewInformationResponse { @Schema(description = "평점-맛", example = "4.4") private Double tasteRating; + + @Schema(description = "평점 별 갯수") private ReviewRatingCount reviewRatingCount; public static MenuReviewResponse of(Menu menu, diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index d273dba4..d7e8b8c0 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -19,17 +19,13 @@ import org.springframework.web.multipart.MultipartFile; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.MenuType; -import ssu.eatssu.domain.review.dto.ReviewCreateRequest; -import ssu.eatssu.domain.review.dto.MealReviewsResponse; -import ssu.eatssu.domain.review.dto.MenuReviewResponse; -import ssu.eatssu.domain.review.dto.ReviewDetail; -import ssu.eatssu.domain.review.dto.ReviewUpdateRequest; -import ssu.eatssu.domain.slice.service.SliceService; +import ssu.eatssu.domain.review.dto.*; import ssu.eatssu.domain.review.service.ReviewService; import ssu.eatssu.domain.slice.dto.SliceResponse; +import ssu.eatssu.domain.slice.service.SliceService; +import ssu.eatssu.global.handler.response.BaseResponse; import java.util.List; -import ssu.eatssu.global.handler.response.BaseResponse; @RestController @RequiredArgsConstructor @@ -41,72 +37,72 @@ public class ReviewController { private final SliceService sliceService; @Operation(summary = "리뷰 리스트 조회", description = """ - 리뷰 리스트를 조회하는 API 입니다.

- menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

- menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

- 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

- 페이징 기본 값 = {size=20, sort=date, direction=desc}

- """) + 리뷰 리스트를 조회하는 API 입니다.

+ menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

+ menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

+ 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

+ 페이징 기본 값 = {size=20, sort=date, direction=desc}

+ """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("") public BaseResponse> getReviews( - @Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") MenuType menuType, - @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) Long menuId, - @Parameter(description = "mealId(변동메뉴)") @RequestParam(value = "mealId", required = false) Long mealId, - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) - @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { + @Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") MenuType menuType, + @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) Long menuId, + @Parameter(description = "mealId(변동메뉴)") @RequestParam(value = "mealId", required = false) Long mealId, + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) + @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { SliceResponse myReviews = sliceService.findReviews(menuType, menuId, mealId, - pageable, lastReviewId, customUserDetails); + pageable, lastReviewId, customUserDetails); return BaseResponse.success(myReviews); } @Operation(summary = "리뷰 작성", description = """ - 리뷰를 작성하는 API 입니다.

- reviewCreate는 application/json, multipartFileList는 multipart/form-data로 요청해주세요.

- 사진은 여러장 첨부 가능합니다.(기획상으로는 한 장만 첨부하도록 제한이 있지만 API 스펙 자체는 여러 장 첨부 가능) - """) + 리뷰를 작성하는 API 입니다.

+ reviewCreate는 application/json, multipartFileList는 multipart/form-data로 요청해주세요.

+ 사진은 여러장 첨부 가능합니다.(기획상으로는 한 장만 첨부하도록 제한이 있지만 API 스펙 자체는 여러 장 첨부 가능) + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 작성 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping(value = "/{menuId}", - consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, - produces = MediaType.APPLICATION_JSON_VALUE) + consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, + produces = MediaType.APPLICATION_JSON_VALUE) public BaseResponse writeReview( - @Parameter(description = "menuId") @PathVariable("menuId") Long menuId, - @RequestPart ReviewCreateRequest createReviewRequest, - @RequestPart(value = "multipartFileList", required = false) List multipartFileList, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { + @Parameter(description = "menuId") @PathVariable("menuId") Long menuId, + @RequestPart ReviewCreateRequest createReviewRequest, + @RequestPart(value = "multipartFileList", required = false) List multipartFileList, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { reviewService.createReview(customUserDetails, menuId, createReviewRequest, - multipartFileList); + multipartFileList); return BaseResponse.success(); } @Operation(summary = "리뷰 수정(글 수정)", description = """ - 리뷰 내용을 수정하는 API 입니다.

- 글 수정만 가능하며 사진 수정은 지원하지 않습니다. - """) + 리뷰 내용을 수정하는 API 입니다.

+ 글 수정만 가능하며 사진 수정은 지원하지 않습니다. + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 수정 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 수정 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PatchMapping("/{reviewId}") public BaseResponse updateReview(@Parameter(description = "reviewId") - @PathVariable("reviewId") Long reviewId, - @RequestBody ReviewUpdateRequest request, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { + @PathVariable("reviewId") Long reviewId, + @RequestBody ReviewUpdateRequest request, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { reviewService.updateReview(customUserDetails, reviewId, request); return BaseResponse.success(); } @@ -114,54 +110,52 @@ public BaseResponse updateReview(@Parameter(description = "reviewId") @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @DeleteMapping("/{reviewId}") public BaseResponse deleteReview( - @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { + @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { reviewService.deleteReview(customUserDetails, reviewId); return BaseResponse.success(); } @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회(메뉴명, 평점 등등)", description = """ - 식단 리뷰 정보를 조회하는 API 입니다.

- 메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. - """) + 식단 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) }) @GetMapping("/meals/{mealId}") public BaseResponse getMealReviews( - @Parameter(description = "mealId") - @PathVariable(value = "mealId") Long mealId) { + @Parameter(description = "mealId") + @PathVariable(value = "mealId") Long mealId) { return BaseResponse.success(reviewService.findMealReviews(mealId)); } @Operation(summary = "고정 메뉴 리뷰 정보 조회(메뉴명, 평점 등등)", description = """ - 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

- 메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. - """) + 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) }) @GetMapping("/menus/{menuId}") public BaseResponse getMainReviews( - @Parameter(description = "menuId") - @PathVariable(value = "menuId") Long menuId) { + @Parameter(description = "menuId") + @PathVariable(value = "menuId") Long menuId) { return BaseResponse.success(reviewService.findMenuReviews(menuId)); } diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index af62a3a3..10c32918 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -39,7 +39,7 @@ public class UserController { 중복되지 않은 이메일이면 true 를 반환합니다 """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "중복되지 않은 이메일", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "중복되지 않은 이메일") }) @PostMapping("/validate/email/{email}") //todo: 중복인 경우 error throw, 중복 아니면 ApiReposne return public BaseResponse validateDuplicatedEmail( @@ -52,7 +52,7 @@ public BaseResponse validateDuplicatedEmail( 중복되지 않은 닉네임이면 true 를 반환합니다 """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임") }) @GetMapping("/validate/nickname") public BaseResponse validateDuplicatedNickname(@Parameter(description = "닉네임") @@ -62,7 +62,7 @@ public BaseResponse validateDuplicatedNickname(@Parameter(description = @Operation(summary = "닉네임 수정", description = "닉네임 수정 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "닉네임 수정 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "200", description = "닉네임 수정 성공"), @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PatchMapping("/nickname") @@ -75,7 +75,7 @@ public BaseResponse updateNickname( @Operation(summary = "유저 탈퇴", description = "유저 탈퇴 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공"), @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @DeleteMapping("") @@ -85,7 +85,7 @@ public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("/reviews") @@ -101,7 +101,7 @@ public BaseResponse> getMyReviewList( @Operation(summary = "마이페이지 정보 조회", description = "마이페이지 정보를 조회하는 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공"), @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("/mypage") diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java index 46ba76b4..7726df38 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; @@ -10,10 +11,12 @@ @JsonPropertyOrder({"isSuccess", "code", "message", "result"}) public class BaseResponse { + @Schema(description = "성공 여부") private final Boolean isSuccess; private final String message; private final int code; + @Schema(description = "결과 값") @JsonInclude(JsonInclude.Include.NON_NULL) //Json으로 응답이 나갈 때 null인 경우 포함되지 않음 private T result; From 10465b2479242a038ff85071cc337dd860b630fa Mon Sep 17 00:00:00 2001 From: soy2on Date: Tue, 27 Feb 2024 20:20:39 +0900 Subject: [PATCH 113/399] =?UTF-8?q?Feat:=20CORS=20=EC=A0=95=EC=B1=85=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/infrastructure/SecurityConfig.java | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index f81de215..04cd7a96 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -9,6 +9,9 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.CorsConfigurationSource; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import ssu.eatssu.domain.auth.security.JwtAuthenticationFilter; import ssu.eatssu.domain.auth.security.JwtTokenProvider; import ssu.eatssu.global.handler.JwtAccessDeniedHandler; @@ -20,12 +23,12 @@ @RequiredArgsConstructor public class SecurityConfig { private static final String[] RESOURCE_LIST = { - "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**","/admin/img/**","/css/**", "/js/**", + "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**", "/admin/img/**", "/css/**", "/js/**", "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" }; private static final String[] AUTH_WHITELIST = { - "/","/oauths/**", "/users/**", + "/", "/oauths/**", "/users/**", "/menus/**", "/meals/**", "/restaurants/**", "/reviews/**", "/oauth/**", "/inquiries/{userInquiriesId}", "/inquiries/list", "/admin/login" }; @@ -59,7 +62,24 @@ protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .exceptionHandling() .accessDeniedHandler(jwtAccessDeniedHandler) .authenticationEntryPoint(jwtAuthenticationEntryPoint); + + http + .cors().configurationSource(corsConfigurationSource()); return http.build(); } + @Bean + public CorsConfigurationSource corsConfigurationSource() { + CorsConfiguration configuration = new CorsConfiguration(); + + configuration.addAllowedOriginPattern("*"); + configuration.addAllowedHeader("*"); + configuration.addAllowedMethod("*"); + configuration.setAllowCredentials(true); + + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", configuration); + return source; + } + } From 70117450172564525d19aeec8ab9115035c0515c Mon Sep 17 00:00:00 2001 From: soy2on Date: Wed, 28 Feb 2024 01:58:21 +0900 Subject: [PATCH 114/399] =?UTF-8?q?Feat:=20=EB=B6=84=EB=A6=AC=ED=95=9C=20?= =?UTF-8?q?=EB=A6=AC=EB=B7=B0=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=97=85?= =?UTF-8?q?=EB=A1=9C=EB=93=9C=20API,=20=EB=A6=AC=EB=B7=B0=20=EC=97=85?= =?UTF-8?q?=EB=A1=9C=EB=93=9C=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/review/dto/SavedReviewImage.java | 14 +++++ .../review/dto/UploadReviewRequest.java | 59 +++++++++++++++++++ .../eatssu/domain/review/entity/Review.java | 10 +--- .../domain/review/entity/ReviewImage.java | 6 ++ .../review/presentation/ReviewController.java | 30 ++++++++++ .../domain/review/service/ReviewService.java | 32 ++++++++-- 6 files changed, 137 insertions(+), 14 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/review/dto/SavedReviewImage.java create mode 100644 src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java diff --git a/src/main/java/ssu/eatssu/domain/review/dto/SavedReviewImage.java b/src/main/java/ssu/eatssu/domain/review/dto/SavedReviewImage.java new file mode 100644 index 00000000..0529ad4a --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/dto/SavedReviewImage.java @@ -0,0 +1,14 @@ +package ssu.eatssu.domain.review.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +@Schema(title = "업로드 된 이미지 url") +public class SavedReviewImage { + + @Schema(description = "이미지 url", example = "image123.jpg") + private String url; +} diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java new file mode 100644 index 00000000..699f44c2 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java @@ -0,0 +1,59 @@ +package ssu.eatssu.domain.review.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Max; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.util.Assert; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.rating.entity.Ratings; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.user.entity.User; + +@Getter +@Setter +@Schema(title = "리뷰 작성") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class UploadReviewRequest { + + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; + + @Schema(description = "평점-양", example = "4") + private Integer amountRating; + + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; + + @Max(150) + @Schema(description = "한줄평", example = "맛있어용") + private String content; + + @Schema(description = "리뷰 이미지 URL", example = "https://s3.~~~.jpg") + private String imageUrl; + + public UploadReviewRequest(int mainRating, int amountRating, int tasteRating, String content) { + Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); + this.mainRating = mainRating; + this.amountRating = amountRating; + this.tasteRating = tasteRating; + this.content = content; + } + + public Review toReviewEntity(User user, Menu menu) { + Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + return Review.builder() + .user(user) + .content(this.content) + .ratings(ratings) + .menu(menu) + .build(); + } +} + + diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index 62a3238c..a72c37ee 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -7,6 +7,7 @@ import ssu.eatssu.domain.user.entity.BaseTimeEntity; import ssu.eatssu.domain.user.entity.User; +import java.util.ArrayList; import java.util.List; @@ -36,7 +37,7 @@ public class Review extends BaseTimeEntity { private Menu menu; @OneToMany(mappedBy = "review", cascade = CascadeType.ALL) - private List reviewImages; + private List reviewImages = new ArrayList<>(); //Entity -> Dto 방향 의존관계 제거 public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { @@ -44,13 +45,6 @@ public void update(String content, Integer mainRate, Integer amountRate, Integer this.ratings = Ratings.of(mainRate, amountRate, tasteRate); } - /* - public void update(ReviewUpdateRequest request) { - this.content = request.getContent(); - this.ratings = Ratings.of(request.getMainRate(), request.getAmountRate(), request.getTasteRate()); - } - */ - public boolean isNotWrittenBy(User user) { return !this.user.equals(user); } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java index d3247703..ea26c868 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java @@ -20,4 +20,10 @@ public class ReviewImage { private Review review; private String imageUrl; + + + public ReviewImage(Review review, String imageUrl) { + this.review = review; + this.imageUrl = imageUrl; + } } diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index d7e8b8c0..9f8fff4d 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -88,6 +88,36 @@ public BaseResponse writeReview( return BaseResponse.success(); } + /** + * 리뷰 이미지 업로드 + */ + @Operation(summary = "리뷰 이미지 업로드", description = "리뷰 이미지를 업로드하고 이미지 URL 을 반환합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "이미지 업로드 및 URL 반환 성공"), + @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping(value = "/upload/image", + consumes = MediaType.MULTIPART_FORM_DATA_VALUE, + produces = MediaType.APPLICATION_JSON_VALUE) + public BaseResponse uploadReviewImage(@RequestPart(value = "image") MultipartFile image) { + return BaseResponse.success(reviewService.uploadImage(image)); + } + + @Operation(summary = "리뷰 작성", description = "리뷰를 작성하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + @PostMapping("/write/{menuId}") + public BaseResponse writeReview(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, + @RequestBody UploadReviewRequest uploadReviewRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewService.uploadReview(customUserDetails, menuId, uploadReviewRequest); + return BaseResponse.success(); + } + + @Operation(summary = "리뷰 수정(글 수정)", description = """ 리뷰 내용을 수정하는 API 입니다.

글 수정만 가능하며 사진 수정은 지원하지 않습니다. diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index d14954f5..5b964d4d 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -17,12 +17,7 @@ import ssu.eatssu.domain.menu.repository.MealRepository; import ssu.eatssu.domain.menu.repository.MenuRepository; import ssu.eatssu.domain.rating.entity.JpaProjectionRatingCalculator; -import ssu.eatssu.domain.review.dto.ReviewCreateRequest; -import ssu.eatssu.domain.review.dto.MealReviewsResponse; -import ssu.eatssu.domain.review.dto.MenuReviewResponse; -import ssu.eatssu.domain.review.dto.RatingAverages; -import ssu.eatssu.domain.review.dto.ReviewRatingCount; -import ssu.eatssu.domain.review.dto.ReviewUpdateRequest; +import ssu.eatssu.domain.review.dto.*; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewImage; import ssu.eatssu.domain.review.repository.ReviewImageRepository; @@ -89,6 +84,31 @@ private void addReviewImage(Review review, MultipartFile image) { } } + public SavedReviewImage uploadImage(MultipartFile image) { + try { + String imageUrl = s3Uploader.upload(image, "reviewImg"); + return new SavedReviewImage(imageUrl); + } catch (IOException e) { + throw new BaseException(FAIL_IMAGE_UPLOAD); + } + } + + public void uploadReview(CustomUserDetails userDetails, Long menuId, UploadReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + + Review review = request.toReviewEntity(user, menu); + reviewRepository.save(review); + + ReviewImage reviewImage = new ReviewImage(review, request.getImageUrl()); + reviewImageRepository.save(reviewImage); + + menu.addReview(review); + } + public void updateReview(CustomUserDetails userDetails, Long reviewId, ReviewUpdateRequest request) { User user = userRepository.findById(userDetails.getId()) From c9964770ad77157dec8cc5d28d76d7de6c4bf939 Mon Sep 17 00:00:00 2001 From: soy2on Date: Mon, 4 Mar 2024 00:50:11 +0900 Subject: [PATCH 115/399] =?UTF-8?q?Feat:=20=EC=8B=9D=EB=8B=A8,=20=EA=B3=A0?= =?UTF-8?q?=EC=A0=95=EB=A9=94=EB=89=B4=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=8B=9C=20=EB=A9=94=EC=9D=B8=ED=8F=89=EC=A0=90=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EC=97=90=20querydsl=20=EC=9D=84=20=EC=9D=B4?= =?UTF-8?q?=EC=9A=A9=ED=95=9C=20=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A5=BC=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu/dto/MealInformationResponse.java | 4 +- .../domain/menu/dto/MenuInformation.java | 5 +- .../repository/LoadMenusInMealRepository.java | 33 ++++++++++ .../menu/service/MealRatingService.java | 17 +++++ .../menu/service/MenuRatingService.java | 16 +++++ .../domain/menu/service/MenuService.java | 10 ++- .../service/QuerydslMealRatingCalculator.java | 64 +++++++++++++++++++ .../service/QuerydslMenuRatingCalculator.java | 54 ++++++++++++++++ .../entity/JpaProjectionRatingCalculator.java | 25 -------- .../domain/menu/service/MenuServiceTest.java | 21 +++--- 10 files changed, 209 insertions(+), 40 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/menu/repository/LoadMenusInMealRepository.java create mode 100644 src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java create mode 100644 src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java create mode 100644 src/main/java/ssu/eatssu/domain/menu/service/QuerydslMealRatingCalculator.java create mode 100644 src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCalculator.java diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MealInformationResponse.java b/src/main/java/ssu/eatssu/domain/menu/dto/MealInformationResponse.java index c0a72fc2..e9ecfee4 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MealInformationResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MealInformationResponse.java @@ -28,7 +28,7 @@ public class MealInformationResponse { private List menusInformationList; - public static MealInformationResponse from(Meal meal) { + public static MealInformationResponse from(Meal meal, Double mainRating) { if (!meal.getMealMenus().isEmpty()) { List menusInformation = meal.getMealMenus().stream() .map(MealMenu::getMenu) @@ -36,7 +36,7 @@ public static MealInformationResponse from(Meal meal) { return new MealInformationResponse(meal.getId(), meal.getRestaurant().getRestaurantPrice(), - meal.getAverateMainRating(), menusInformation); + mainRating, menusInformation); } else { return null; } diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MenuInformation.java b/src/main/java/ssu/eatssu/domain/menu/dto/MenuInformation.java index a4969e15..cc39409a 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MenuInformation.java +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MenuInformation.java @@ -23,8 +23,7 @@ public class MenuInformation { @Schema(description = "메뉴 평점(평점이 없으면 null)", example = "4.4") private Double mainRating; - public static MenuInformation from(Menu menu) { - return new MenuInformation(menu.getId(), menu.getName(), - menu.getPrice(), menu.getReviews().getAverageMainRating()); + public static MenuInformation from(Menu menu, Double mainRating) { + return new MenuInformation(menu.getId(), menu.getName(), menu.getPrice(), mainRating); } } diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/LoadMenusInMealRepository.java b/src/main/java/ssu/eatssu/domain/menu/repository/LoadMenusInMealRepository.java new file mode 100644 index 00000000..e4927a54 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/repository/LoadMenusInMealRepository.java @@ -0,0 +1,33 @@ +package ssu.eatssu.domain.menu.repository; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import ssu.eatssu.domain.menu.entity.QMeal; +import ssu.eatssu.domain.menu.entity.QMealMenu; +import ssu.eatssu.domain.menu.entity.QMenu; + +import java.util.List; + +@Component +@RequiredArgsConstructor +public class LoadMenusInMealRepository { + + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + + private final QMeal meal = QMeal.meal; + + private final QMealMenu mealMenu = QMealMenu.mealMenu; + + + public List getMenuIds(Long mealId) { + return queryFactory + .select(menu.id) + .from(meal) + .join(mealMenu).on(meal.id.eq(mealMenu.meal.id)) + .join(menu).on(mealMenu.menu.id.eq(menu.id)) + .where(meal.id.eq(mealId)) + .fetch(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java b/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java new file mode 100644 index 00000000..ab9f4d8a --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java @@ -0,0 +1,17 @@ +package ssu.eatssu.domain.menu.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class MealRatingService { + + private final QuerydslMealRatingCalculator mealRatingCalculator; + + public Double getMainRatingAverage(Long mealId) { + return mealRatingCalculator.getMainRatingAverage(mealId); + } + + +} diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java new file mode 100644 index 00000000..69187d09 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java @@ -0,0 +1,16 @@ +package ssu.eatssu.domain.menu.service; + + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class MenuRatingService { + private final QuerydslMenuRatingCalculator menuRatingCalculator; + + + public Double getMainRatingAverage(Long menuId) { + return menuRatingCalculator.getMainRatingAverage(menuId); + } +} diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index f9dd6da4..cfb483e0 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -32,11 +32,15 @@ public class MenuService { private final MealRepository mealRepository; private final MealMenuRepository mealMenuRepository; + private final MealRatingService mealRatingService; + + private final MenuRatingService menuRatingService; + public MenuInformationListResponse findMenusByRestaurant(Restaurant restaurant) { List menus = menuRepository.findAllByRestaurant(restaurant); List menuInformationList = menus.stream() - .map(MenuInformation::from) + .map(menu -> MenuInformation.from(menu, menuRatingService.getMainRatingAverage(menu.getId()))) .collect(Collectors.toList()); return new MenuInformationListResponse(menuInformationList); @@ -48,10 +52,12 @@ public List findSpecificMeals(Date date, List meals = getMeals(date, timePart, restaurant); return meals.stream() - .map(MealInformationResponse::from) + .map(meal -> MealInformationResponse.from(meal, mealRatingService.getMainRatingAverage(meal.getId()))) .toList(); } + + // TODO 삭제할까 말까 public void createMeal(Date date, Restaurant restaurant, TimePart timePart, MealCreateRequest request) { List meals = getMeals(date, timePart, restaurant); diff --git a/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMealRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMealRatingCalculator.java new file mode 100644 index 00000000..8505913b --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMealRatingCalculator.java @@ -0,0 +1,64 @@ +package ssu.eatssu.domain.menu.service; + +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import ssu.eatssu.domain.menu.entity.QMenu; +import ssu.eatssu.domain.menu.repository.LoadMenusInMealRepository; +import ssu.eatssu.domain.review.entity.QReview; + +import java.util.List; + + +@Repository +@RequiredArgsConstructor +public class QuerydslMealRatingCalculator { + + private final LoadMenusInMealRepository loadMenusInMealRepository; + + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + + private final QReview review = QReview.review; + + public Double getMainRatingAverage(Long mealId) { + List menuIds = loadMenusInMealRepository.getMenuIds(mealId); + return queryFactory + .select(review.ratings.mainRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdIn(menuIds) + ) + .fetchOne(); + } + + public Double getTasteRatingAverage(Long mealId) { + List menuIds = loadMenusInMealRepository.getMenuIds(mealId); + return queryFactory + .select(review.ratings.tasteRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdIn(menuIds) + ) + .fetchOne(); + } + + public Double getAmountRatingAverage(Long mealId) { + List menuIds = loadMenusInMealRepository.getMenuIds(mealId); + return queryFactory + .select(review.ratings.amountRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdIn(menuIds) + ) + .fetchOne(); + } + + private BooleanExpression menuIdIn(List menuIds) { + return menuIds != null && !menuIds.isEmpty() ? menu.id.in(menuIds) : null; + } +} diff --git a/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCalculator.java new file mode 100644 index 00000000..36800113 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCalculator.java @@ -0,0 +1,54 @@ +package ssu.eatssu.domain.menu.service; + +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import ssu.eatssu.domain.menu.entity.QMenu; +import ssu.eatssu.domain.review.entity.QReview; + +@Repository +@RequiredArgsConstructor +public class QuerydslMenuRatingCalculator { + + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QReview review = QReview.review; + + public Double getMainRatingAverage(Long menuId) { + return queryFactory + .select(review.ratings.mainRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId) + ) + .fetchOne(); + } + + public Double getTasteRatingAverage(Long menuId) { + return queryFactory + .select(review.ratings.tasteRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId) + ) + .fetchOne(); + } + + public Double getAmountRatingAverage(Long menuId) { + return queryFactory + .select(review.ratings.amountRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId) + ) + .fetchOne(); + } + + private BooleanExpression menuIdEq(Long menuId) { + return menu.id.eq(menuId); + } +} diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java index fc04c4d8..4ae78cd8 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java @@ -93,33 +93,8 @@ public Double averageRating(Integer totalRating, int totalReviewCount) { return totalRating / (double) totalReviewCount; } - @Override public Integer mealTotalMainRating(Meal meal) { return null; } - @Override - public Integer mealTotalAmountRating(Meal meal) { - return null; - } - - @Override - public Integer mealTotalTasteRating(Meal meal) { - return null; - } - - @Override - public Integer menuTotalMainRating(Menu menu) { - return null; - } - - @Override - public Integer menuTotalAmountRating(Menu menu) { - return null; - } - - @Override - public Integer menuTotalTasteRating(Menu menu) { - return null; - } } diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java index 47dc9cd1..4c60156d 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java @@ -11,13 +11,14 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import ssu.eatssu.domain.menu.dto.MenuRequest.MealCreateRequest; -import ssu.eatssu.domain.menu.dto.MenuResponse.MenuInformationResponse; -import ssu.eatssu.domain.menu.dto.MenuResponse.MenusInformationResponse; +import ssu.eatssu.domain.menu.dto.MealCreateRequest; +import ssu.eatssu.domain.menu.dto.MenuInformationListResponse; +import ssu.eatssu.domain.menu.dto.MenusInformationResponse; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.repository.MealRepository; import ssu.eatssu.domain.menu.repository.MenuRepository; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.menu.dto.MenuInformation; @SpringBootTest class MenuServiceTest { @@ -44,13 +45,17 @@ void setUp() { Restaurant foodCourt = Restaurant.from("FOOD_COURT"); menus.add(Menu.createFixed("라면", foodCourt, 3000, null)); menus.add(Menu.createFixed("떡볶이", foodCourt, 5000, null)); - menus.add(Menu.createFixed("짜게치", foodCourt, 4000, null)); + menus.add(Menu.createFixed("짜계치", foodCourt, 4000, null)); menuRepository.saveAll(menus); - // when & then - assertThat(menuService.findMenusByRestaurant(foodCourt)) - .extracting(MenuInformationResponse::getName) - .containsExactly("라면", "떡볶이", "짜게치"); + //when + MenuInformationListResponse response = menuService.findMenusByRestaurant(foodCourt); + + // then + assertThat(response.getMenusInformationList()) + .extracting(MenuInformation::getName) + .containsExactly("라면", "떡볶이", "짜계치"); + } @Test From e66210caa2a5304c47233f9f4981e1d6d46992d1 Mon Sep 17 00:00:00 2001 From: soy2on Date: Mon, 4 Mar 2024 01:52:50 +0900 Subject: [PATCH 116/399] =?UTF-8?q?Feat:=20=EC=8B=9D=EB=8B=A8,=20=EA=B3=A0?= =?UTF-8?q?=EC=A0=95=EB=A9=94=EB=89=B4=20=EB=A6=AC=EB=B7=B0=20=EB=B3=84?= =?UTF-8?q?=EC=A0=90=20=EC=A0=95=EB=B3=B4=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C?= =?UTF-8?q?=20querydsl=20=EC=9D=84=20=EC=9D=B4=EC=9A=A9=ED=95=9C=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A5=BC=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../QuerydslMealRatingCalculator.java | 2 +- .../repository/QuerydslMealRatingCounter.java | 56 +++++++++++++ .../QuerydslMenuRatingCalculator.java | 2 +- .../repository/QuerydslMenuRatingCounter.java | 44 ++++++++++ .../menu/service/MealRatingService.java | 1 + .../menu/service/MenuRatingService.java | 1 + .../JpaLoadCollectionRatingCalculator.java | 11 ++- .../entity/JpaProjectionRatingCalculator.java | 12 ++- .../rating/entity/RatingCalculator.java | 23 +----- .../domain/rating/entity/RatingCountMap.java | 35 ++++++++ .../review/dto/MealReviewsResponse.java | 4 +- .../domain/review/dto/ReviewRatingCount.java | 2 +- .../review/service/ReviewRatingService.java | 81 +++++++++++++++++++ .../domain/review/service/ReviewService.java | 6 +- 14 files changed, 237 insertions(+), 43 deletions(-) rename src/main/java/ssu/eatssu/domain/menu/{service => repository}/QuerydslMealRatingCalculator.java (97%) create mode 100644 src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCounter.java rename src/main/java/ssu/eatssu/domain/menu/{service => repository}/QuerydslMenuRatingCalculator.java (97%) create mode 100644 src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMenuRatingCounter.java create mode 100644 src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java create mode 100644 src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java diff --git a/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMealRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCalculator.java similarity index 97% rename from src/main/java/ssu/eatssu/domain/menu/service/QuerydslMealRatingCalculator.java rename to src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCalculator.java index 8505913b..012d9782 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMealRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCalculator.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.service; +package ssu.eatssu.domain.menu.repository; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCounter.java b/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCounter.java new file mode 100644 index 00000000..27ec7d2f --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCounter.java @@ -0,0 +1,56 @@ +package ssu.eatssu.domain.menu.repository; + +import com.querydsl.core.Tuple; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import ssu.eatssu.domain.menu.entity.QMenu; +import ssu.eatssu.domain.review.entity.QReview; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Repository +@RequiredArgsConstructor +public class QuerydslMealRatingCounter { + + private final LoadMenusInMealRepository loadMenusInMealRepository; + + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + + private final QReview review = QReview.review; + + public Map getRatingCountMap(Long mealId) { + List tuples = queryFactory.select(review.ratings.mainRating, review.count()) + .from(review) + .join(review.menu, menu) + .groupBy(review.ratings.mainRating) + .where(menuIdIn(loadMenusInMealRepository.getMenuIds(mealId))) + .fetch(); + + Map ratingCountMap = new HashMap<>(); + for (Tuple tuple : tuples) { + Integer rating = tuple.get(review.ratings.mainRating); + Long count = tuple.get(review.count()); + ratingCountMap.put(rating, count); + } + return ratingCountMap; + } + + public Long getTotalRatingCount(Long mealId) { + return queryFactory + .select(review.count()) + .from(review) + .join(review.menu, menu) + .where(menuIdIn(loadMenusInMealRepository.getMenuIds(mealId))) + .fetchOne(); + } + + private BooleanExpression menuIdIn(List menuIds) { + return menuIds != null && !menuIds.isEmpty() ? menu.id.in(menuIds) : null; + } +} + diff --git a/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMenuRatingCalculator.java similarity index 97% rename from src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCalculator.java rename to src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMenuRatingCalculator.java index 36800113..030adfba 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMenuRatingCalculator.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.service; +package ssu.eatssu.domain.menu.repository; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMenuRatingCounter.java b/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMenuRatingCounter.java new file mode 100644 index 00000000..c75e45ca --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMenuRatingCounter.java @@ -0,0 +1,44 @@ +package ssu.eatssu.domain.menu.repository; + +import com.querydsl.core.Tuple; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import ssu.eatssu.domain.menu.entity.QMenu; +import ssu.eatssu.domain.review.entity.QReview; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Repository +@RequiredArgsConstructor +public class QuerydslMenuRatingCounter { + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QReview review = QReview.review; + + public Map getRatingCountMap(Long menuId) { + List tuples = queryFactory.select(review.ratings.mainRating, review.count()) + .from(review) + .join(review.menu, menu) + .groupBy(review.ratings.mainRating) + .where(menuIdEq(menuId)) + .fetch(); + + Map ratingCountMap = new HashMap<>(); + + for (Tuple tuple : tuples) { + Integer rating = tuple.get(review.ratings.mainRating); + Long count = tuple.get(review.count()); + ratingCountMap.put(rating, count); + } + return ratingCountMap; + } + + private BooleanExpression menuIdEq(Long menuId) { + return menu.id.eq(menuId); + } + +} diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java b/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java index ab9f4d8a..6e840480 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java @@ -2,6 +2,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import ssu.eatssu.domain.menu.repository.QuerydslMealRatingCalculator; @Service @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java index 69187d09..e02840d7 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java @@ -3,6 +3,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import ssu.eatssu.domain.menu.repository.QuerydslMenuRatingCalculator; @Service @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java index 4c035203..b14aeb68 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java @@ -10,7 +10,6 @@ /** * JPA 의 OneToMany객체참조를 이용하여 구현한 클래스입니다. */ -@Component public class JpaLoadCollectionRatingCalculator implements RatingCalculator { // 식단에 포함된 메뉴들의 평점 별 리뷰 개수 계산 @@ -33,7 +32,7 @@ public ReviewRatingCount menuRatingCount(Menu menu) { // 식단 평균 평점 세트 계산 public RatingAverages mealAverageRatings(Meal meal) { - int totalReviewCount = mealTotalReviewCount(meal); + long totalReviewCount = mealTotalReviewCount(meal); if (totalReviewCount == 0) return new RatingAverages(null, null, null); @@ -62,7 +61,7 @@ public RatingAverages menuAverageRatings(Menu menu) { // 식단 메인 평점 평균 계산 public Double mealAverageMainRating(Meal meal) { - int totalReviewCount = mealTotalReviewCount(meal); + long totalReviewCount = mealTotalReviewCount(meal); if (totalReviewCount == 0) { return null; @@ -81,14 +80,14 @@ public Double menuAverageMainRating(Menu menu) { } // 식단 총 리뷰 개수 - public int mealTotalReviewCount(Meal meal) { + public long mealTotalReviewCount(Meal meal) { return meal.getMealMenus().stream() .map(MealMenu::getMenu) - .mapToInt(menu -> menu.getReviews().size()).sum(); + .mapToLong(menu -> menu.getReviews().size()).sum(); } // 평균 평점 계산 - public Double averageRating(Integer totalRating, int totalReviewCount) { + public Double averageRating(Integer totalRating, long totalReviewCount) { if (totalRating == null || totalReviewCount == 0) { return null; } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java index 4ae78cd8..0ed59edf 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java @@ -18,7 +18,6 @@ * JpaProjectionRatingCalculator : 174 lines */ -@Component @RequiredArgsConstructor public class JpaProjectionRatingCalculator implements RatingCalculator { @@ -41,7 +40,7 @@ public ReviewRatingCount menuRatingCount(Menu menu) { @Override public RatingAverages mealAverageRatings(Meal meal) { - int totalReviewCount = mealTotalReviewCount(meal); + long totalReviewCount = mealTotalReviewCount(meal); if (totalReviewCount == 0) return new RatingAverages(null, null, null); @@ -66,7 +65,7 @@ public RatingAverages menuAverageRatings(Menu menu) { @Override public Double mealAverageMainRating(Meal meal) { - int totalReviewCount = mealTotalReviewCount(meal); + long totalReviewCount = mealTotalReviewCount(meal); if (totalReviewCount == 0) { return null; @@ -81,12 +80,11 @@ public Double menuAverageMainRating(Menu menu) { } @Override - public int mealTotalReviewCount(Meal meal) { - return reviewRepository.countByMenu_MealMenus_Meal(meal).intValue(); + public long mealTotalReviewCount(Meal meal) { + return reviewRepository.countByMenu_MealMenus_Meal(meal); } - @Override - public Double averageRating(Integer totalRating, int totalReviewCount) { + public Double averageRating(Integer totalRating, long totalReviewCount) { if (totalRating == null || totalReviewCount == 0) { return null; } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java index 557258e3..34261802 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java @@ -26,28 +26,7 @@ public interface RatingCalculator { Double menuAverageMainRating(Menu menu); // 식단 총 리뷰 개수 - int mealTotalReviewCount(Meal meal); - - // 평균 평점 계산 - Double averageRating(Integer totalRating, int totalReviewCount); - - // 식단 메인 평점 총합 - Integer mealTotalMainRating(Meal meal); - - // 식단 양 평점 총합 - Integer mealTotalAmountRating(Meal meal); - - // 식단 맛 평점 총합 - Integer mealTotalTasteRating(Meal meal); - - // 메뉴 메인 평점 총합 - Integer menuTotalMainRating(Menu menu); - - // 메뉴 양 평점 총합 - Integer menuTotalAmountRating(Menu menu); - - // 메뉴 맛 평점 총합 - Integer menuTotalTasteRating(Menu menu); + long mealTotalReviewCount(Meal meal); /** * 리뷰 평접 총합 계산용 diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java new file mode 100644 index 00000000..f17ed226 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java @@ -0,0 +1,35 @@ +package ssu.eatssu.domain.rating.entity; + +import java.util.HashMap; +import java.util.Map; + +public class RatingCountMap { + + private Map ratingCountMap; + + public RatingCountMap() { + this.ratingCountMap = new HashMap<>(); + this.init(); + + } + + private void init(){ + this.ratingCountMap.put(1, 0); + this.ratingCountMap.put(2, 0); + this.ratingCountMap.put(3, 0); + this.ratingCountMap.put(4, 0); + this.ratingCountMap.put(5, 0); + } + + public void setRatingCount(Integer rating, Integer count) { + this.ratingCountMap.put(rating, count); + } + + public void merge(RatingCountMap map) { + for (Map.Entry entry : map.ratingCountMap.entrySet()) { + Integer currentCount = this.ratingCountMap.getOrDefault(entry.getKey(), 0); + Integer newCount = entry.getValue(); + this.ratingCountMap.put(entry.getKey(), currentCount + newCount); + } + } +} diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java index ce44294a..2a343b8a 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java @@ -17,7 +17,7 @@ public class MealReviewsResponse implements ReviewInformationResponse { private List menuNames; @Schema(description = "리뷰 개수", example = "15") - private Integer totalReviewCount; + private Long totalReviewCount; @Schema(description = "평점-메인", example = "4.4") private Double mainRating; @@ -31,7 +31,7 @@ public class MealReviewsResponse implements ReviewInformationResponse { @Schema(description = "평점 별 갯수") private ReviewRatingCount reviewRatingCount; - public static MealReviewsResponse of(Integer totalReviewCount, List menuNames, + public static MealReviewsResponse of(Long totalReviewCount, List menuNames, RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { return MealReviewsResponse.builder() diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java index 689b71ba..5d30b43d 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java @@ -1,7 +1,7 @@ package ssu.eatssu.domain.review.dto; //COMMENT: 더 좋은 매개변수 명이 있을 것 같은데 제 머리로는 이게 한계입니다... 멋진 변수명으로 바꿔주세요 -public record ReviewRatingCount(int oneStarCount, int twoStarCount, int threeStarCount, int fourStarCount, int fiveStarCount) { +public record ReviewRatingCount(long oneStarCount, long twoStarCount, long threeStarCount, long fourStarCount, long fiveStarCount) { public ReviewRatingCount { } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java new file mode 100644 index 00000000..7056a21e --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java @@ -0,0 +1,81 @@ +package ssu.eatssu.domain.review.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.menu.repository.QuerydslMealRatingCalculator; +import ssu.eatssu.domain.menu.repository.QuerydslMealRatingCounter; +import ssu.eatssu.domain.menu.repository.QuerydslMenuRatingCalculator; +import ssu.eatssu.domain.menu.repository.QuerydslMenuRatingCounter; +import ssu.eatssu.domain.rating.entity.RatingCalculator; +import ssu.eatssu.domain.review.dto.RatingAverages; +import ssu.eatssu.domain.review.dto.ReviewRatingCount; + +import java.util.Map; + +@Service +@RequiredArgsConstructor +public class ReviewRatingService implements RatingCalculator { + + private final QuerydslMealRatingCalculator mealRatingCalculator; + private final QuerydslMenuRatingCalculator menuRatingCalculator; + private final QuerydslMealRatingCounter mealRatingCounter; + private final QuerydslMenuRatingCounter menuRatingCounter; + + @Override + public ReviewRatingCount mealRatingCount(Meal meal) { + Map ratingCountMap = mealRatingCounter.getRatingCountMap(meal.getId()); + return getRatingCount(ratingCountMap); + } + + @Override + public ReviewRatingCount menuRatingCount(Menu menu) { + Map ratingCountMap = menuRatingCounter.getRatingCountMap(menu.getId()); + return getRatingCount(ratingCountMap); + } + + @Override + public RatingAverages mealAverageRatings(Meal meal) { + Double mainRatingAverage = mealRatingCalculator.getMainRatingAverage(meal.getId()); + Double amountRatingAverage = mealRatingCalculator.getAmountRatingAverage(meal.getId()); + Double tasteRatingAverage = mealRatingCalculator.getTasteRatingAverage(meal.getId()); + return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); + } + + @Override + public RatingAverages menuAverageRatings(Menu menu) { + Double mainRatingAverage = menuRatingCalculator.getMainRatingAverage(menu.getId()); + Double amountRatingAverage = menuRatingCalculator.getAmountRatingAverage(menu.getId()); + Double tasteRatingAverage = menuRatingCalculator.getTasteRatingAverage(menu.getId()); + return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); + } + + @Override + public Double mealAverageMainRating(Meal meal) { + return mealRatingCalculator.getMainRatingAverage(meal.getId()); + } + + @Override + public Double menuAverageMainRating(Menu menu) { + return menuRatingCalculator.getMainRatingAverage(menu.getId()); + } + + @Override + public long mealTotalReviewCount(Meal meal) { + return mealRatingCounter.getTotalRatingCount(meal.getId()); + } + + private ReviewRatingCount getRatingCount(Map ratingCountMap) { + long oneStarCount = getCount(ratingCountMap, 1); + long twoStarCount = getCount(ratingCountMap, 2); + long threeStarCount = getCount(ratingCountMap, 3); + long fourStarCount = getCount(ratingCountMap, 4); + long fiveStarCount = getCount(ratingCountMap, 5); + return new ReviewRatingCount(oneStarCount, twoStarCount, threeStarCount, fourStarCount, fiveStarCount); + } + + private long getCount(Map ratingCountMap, int star) { + return ratingCountMap.getOrDefault(star, 0L); + } +} diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index 5b964d4d..8823e8f4 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -16,7 +16,7 @@ import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.repository.MealRepository; import ssu.eatssu.domain.menu.repository.MenuRepository; -import ssu.eatssu.domain.rating.entity.JpaProjectionRatingCalculator; +import ssu.eatssu.domain.rating.entity.RatingCalculator; import ssu.eatssu.domain.review.dto.*; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewImage; @@ -41,7 +41,7 @@ public class ReviewService { private final ReviewImageRepository reviewImageRepository; private final MenuRepository menuRepository; private final MealRepository mealRepository; - private final JpaProjectionRatingCalculator ratingCalculator; + private final RatingCalculator ratingCalculator; private final S3Uploader s3Uploader; public Review createReview(CustomUserDetails userDetails, Long menuId, ReviewCreateRequest request, @@ -155,7 +155,7 @@ public MealReviewsResponse findMealReviews(Long mealId) { Meal meal = mealRepository.findById(mealId) .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); - int reviewCount = ratingCalculator.mealTotalReviewCount(meal); + long reviewCount = ratingCalculator.mealTotalReviewCount(meal); RatingAverages averageRating = ratingCalculator.mealAverageRatings(meal); ReviewRatingCount ratingCountMap = ratingCalculator.mealRatingCount(meal); From 946c5310e259a9ab896a7dc231e13933fbd874c8 Mon Sep 17 00:00:00 2001 From: soy2on Date: Mon, 4 Mar 2024 01:54:17 +0900 Subject: [PATCH 117/399] =?UTF-8?q?Style:=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/QuerydslMealRatingCalculator.java | 1 - .../repository/QuerydslMealRatingCounter.java | 10 +++++----- .../JpaLoadCollectionRatingCalculator.java | 1 - .../entity/JpaProjectionRatingCalculator.java | 5 ++--- .../domain/review/dto/MealReviewsResponse.java | 16 ++++++++-------- .../domain/review/dto/ReviewRatingCount.java | 3 ++- .../domain/review/service/ReviewService.java | 10 ++-------- 7 files changed, 19 insertions(+), 27 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCalculator.java index 012d9782..727e3ffb 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCalculator.java @@ -5,7 +5,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import ssu.eatssu.domain.menu.entity.QMenu; -import ssu.eatssu.domain.menu.repository.LoadMenusInMealRepository; import ssu.eatssu.domain.review.entity.QReview; import java.util.List; diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCounter.java b/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCounter.java index 27ec7d2f..663ebcd4 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCounter.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCounter.java @@ -42,11 +42,11 @@ public Map getRatingCountMap(Long mealId) { public Long getTotalRatingCount(Long mealId) { return queryFactory - .select(review.count()) - .from(review) - .join(review.menu, menu) - .where(menuIdIn(loadMenusInMealRepository.getMenuIds(mealId))) - .fetchOne(); + .select(review.count()) + .from(review) + .join(review.menu, menu) + .where(menuIdIn(loadMenusInMealRepository.getMenuIds(mealId))) + .fetchOne(); } private BooleanExpression menuIdIn(List menuIds) { diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java index b14aeb68..735acc97 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java @@ -1,6 +1,5 @@ package ssu.eatssu.domain.rating.entity; -import org.springframework.stereotype.Component; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java index 0ed59edf..0b8fc9c1 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java @@ -1,13 +1,12 @@ package ssu.eatssu.domain.rating.entity; import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; -import ssu.eatssu.domain.review.repository.ReviewRepository; -import ssu.eatssu.domain.review.dto.RatingsDto; import ssu.eatssu.domain.review.dto.RatingAverages; +import ssu.eatssu.domain.review.dto.RatingsDto; import ssu.eatssu.domain.review.dto.ReviewRatingCount; +import ssu.eatssu.domain.review.repository.ReviewRepository; import java.util.Collection; diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java index 2a343b8a..a856c264 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java @@ -32,15 +32,15 @@ public class MealReviewsResponse implements ReviewInformationResponse { private ReviewRatingCount reviewRatingCount; public static MealReviewsResponse of(Long totalReviewCount, List menuNames, - RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { + RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { return MealReviewsResponse.builder() - .menuNames(menuNames) - .mainRating(ratingAverages.mainRating()) - .amountRating(ratingAverages.amountRating()) - .tasteRating(ratingAverages.tasteRating()) - .totalReviewCount(totalReviewCount) - .reviewRatingCount(reviewRatingCount) - .build(); + .menuNames(menuNames) + .mainRating(ratingAverages.mainRating()) + .amountRating(ratingAverages.amountRating()) + .tasteRating(ratingAverages.tasteRating()) + .totalReviewCount(totalReviewCount) + .reviewRatingCount(reviewRatingCount) + .build(); } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java index 5d30b43d..8ee31fbf 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java @@ -1,7 +1,8 @@ package ssu.eatssu.domain.review.dto; //COMMENT: 더 좋은 매개변수 명이 있을 것 같은데 제 머리로는 이게 한계입니다... 멋진 변수명으로 바꿔주세요 -public record ReviewRatingCount(long oneStarCount, long twoStarCount, long threeStarCount, long fourStarCount, long fiveStarCount) { +public record ReviewRatingCount(long oneStarCount, long twoStarCount, long threeStarCount, long fourStarCount, + long fiveStarCount) { public ReviewRatingCount { } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index 8823e8f4..a80a4ade 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -1,12 +1,5 @@ package ssu.eatssu.domain.review.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.FAIL_IMAGE_UPLOAD; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MEAL; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; - import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -25,11 +18,12 @@ import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.util.S3Uploader; import java.io.IOException; import java.util.List; -import ssu.eatssu.global.util.S3Uploader; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; @RequiredArgsConstructor @Service From d46253a1256474269777d2902b2f48fa23a69bfc Mon Sep 17 00:00:00 2001 From: soy2on Date: Sat, 9 Mar 2024 00:22:41 +0900 Subject: [PATCH 118/399] =?UTF-8?q?Feat:=20querydsl=20=EB=A1=9C=20rating?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD=ED=95=9C=EA=B1=B0=20?= =?UTF-8?q?=EB=A8=B8=EC=A7=80=20+=20=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC?= =?UTF-8?q?=20=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/menu/dto/CategoryMenuList.java | 22 ++++++++++++ .../menu/dto/CategoryMenuListCollection.java | 23 ++++++++++++ .../menu/dto/MenuInformationListResponse.java | 15 -------- .../ssu/eatssu/domain/menu/entity/Menu.java | 2 ++ .../menu/presentation/MealController.java | 17 ++++++++- .../menu/presentation/MenuController.java | 18 ++-------- .../repository/MenuCategoryRepository.java | 11 ++++++ .../menu/repository/MenuRepository.java | 3 +- .../domain/menu/service/MenuService.java | 31 +++++++++------- .../QuerydslMenuRatingCountProvider.java | 35 +++++++++++++++++++ .../domain/menu/service/MenuServiceTest.java | 32 +++++++++++------ 11 files changed, 154 insertions(+), 55 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuList.java create mode 100644 src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuListCollection.java delete mode 100644 src/main/java/ssu/eatssu/domain/menu/dto/MenuInformationListResponse.java create mode 100644 src/main/java/ssu/eatssu/domain/menu/repository/MenuCategoryRepository.java create mode 100644 src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuList.java b/src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuList.java new file mode 100644 index 00000000..10a1f6ec --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuList.java @@ -0,0 +1,22 @@ +package ssu.eatssu.domain.menu.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +@Getter +@Schema(title = "카테고리와 메뉴 목록 조회") +public class CategoryMenuList { + @Schema(description = "카테고리명") + private final String category; + + @Schema(description = "카테고리의 메뉴 목록") + private final List menuInformationList; + + public CategoryMenuList(String category, List menuInformationList) { + this.category = category; + this.menuInformationList = menuInformationList; + } +} diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuListCollection.java b/src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuListCollection.java new file mode 100644 index 00000000..ad41f718 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuListCollection.java @@ -0,0 +1,23 @@ +package ssu.eatssu.domain.menu.dto; + +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +@Getter +public class CategoryMenuListCollection { + private final List categoryMenuListCollection; + + private CategoryMenuListCollection(List categoryMenu) { + this.categoryMenuListCollection = categoryMenu; + } + + public static CategoryMenuListCollection init() { + return new CategoryMenuListCollection(new ArrayList<>()); + } + + public void add(CategoryMenuList categoryMenuList) { + this.categoryMenuListCollection.add(categoryMenuList); + } +} diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MenuInformationListResponse.java b/src/main/java/ssu/eatssu/domain/menu/dto/MenuInformationListResponse.java deleted file mode 100644 index 4fbc0b1b..00000000 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MenuInformationListResponse.java +++ /dev/null @@ -1,15 +0,0 @@ -package ssu.eatssu.domain.menu.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Getter; - -import java.util.List; - -@Getter -@AllArgsConstructor -@Schema(title = "고정 메뉴 목록 조회") -public class MenuInformationListResponse { - @Schema(description = "고정 메뉴 목록") - private List menusInformationList; -} diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index c8dcf3fc..b75bc59b 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -39,6 +39,8 @@ public class Menu { @JoinColumn(name = "menu_category_id") private MenuCategory category; + private boolean isDiscontinued = false; + private Menu(String name, Restaurant restaurant, Integer price, MenuCategory category) { this.name = name; this.restaurant = restaurant; diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java index ed4fcc4b..de271ca8 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java @@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.menu.dto.MealCreateRequest; import ssu.eatssu.domain.menu.dto.MealInformationResponse; +import ssu.eatssu.domain.menu.dto.MenusInformationResponse; import ssu.eatssu.domain.menu.entity.TimePart; import ssu.eatssu.domain.menu.service.MenuService; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -28,7 +29,7 @@ @RestController @RequiredArgsConstructor @RequestMapping("/meals") -@Tag(name = "Menu", description = "메뉴 API") +@Tag(name = "Meal", description = "식단 API") public class MealController { private final MenuService menuService; @@ -92,4 +93,18 @@ public BaseResponse deleteMeal( menuService.deleteMeal(mealId); return BaseResponse.success(); } + + @Operation(summary = "메뉴 정보 리스트 조회", description = """ + 메뉴 정보 리스트를 조회하는 API 입니다.

+ 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/{mealId}/menus-info") + public BaseResponse getMenusInMeal(@Parameter(description = "mealId") + @PathVariable("mealId") Long mealId) { + return BaseResponse.success(menuService.findMenusInMeal(mealId)); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java index 7a3bd7f8..e6420527 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java @@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import ssu.eatssu.domain.menu.dto.MenuInformationListResponse; +import ssu.eatssu.domain.menu.dto.CategoryMenuListCollection; import ssu.eatssu.domain.menu.dto.MenusInformationResponse; import ssu.eatssu.domain.menu.service.MenuService; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -40,7 +40,7 @@ public class MenuController { @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("") - public BaseResponse getMenus( + public BaseResponse getMenus( @RequestParam("restaurant") Restaurant restaurant) { if (RestaurantType.isVariableType(restaurant)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); @@ -48,17 +48,5 @@ public BaseResponse getMenus( return BaseResponse.success(menuService.findMenusByRestaurant(restaurant)); } - @Operation(summary = "메뉴 정보 리스트 조회", description = """ - 메뉴 정보 리스트를 조회하는 API 입니다.

- 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/in-meal") - public BaseResponse getMenusInMeal(@Parameter(description = "mealId") - @RequestParam("mealId") Long mealId) { - return BaseResponse.success(menuService.findMenusInMeal(mealId)); - } + } diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/MenuCategoryRepository.java b/src/main/java/ssu/eatssu/domain/menu/repository/MenuCategoryRepository.java new file mode 100644 index 00000000..4772bf42 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/repository/MenuCategoryRepository.java @@ -0,0 +1,11 @@ +package ssu.eatssu.domain.menu.repository; + +import java.util.List; +import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.menu.entity.MenuCategory; +import ssu.eatssu.domain.restaurant.entity.Restaurant; + +public interface MenuCategoryRepository extends JpaRepository { + + List findAllByRestaurant(Restaurant restaurant); +} diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java index da3b7605..04fe104f 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java @@ -2,6 +2,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; import java.util.List; @@ -13,6 +14,6 @@ public interface MenuRepository extends JpaRepository { Optional findByNameAndRestaurant(String name, Restaurant restaurant); List findAllByRestaurant(Restaurant restaurant); - + List findAllByRestaurantAndCategory(Restaurant restaurant, MenuCategory category); List findAll(); } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index cfb483e0..b5733793 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -5,12 +5,10 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import ssu.eatssu.domain.menu.dto.*; -import ssu.eatssu.domain.menu.entity.Meal; -import ssu.eatssu.domain.menu.entity.MealMenu; -import ssu.eatssu.domain.menu.entity.Menu; -import ssu.eatssu.domain.menu.entity.TimePart; +import ssu.eatssu.domain.menu.entity.*; import ssu.eatssu.domain.menu.repository.MealMenuRepository; import ssu.eatssu.domain.menu.repository.MealRepository; +import ssu.eatssu.domain.menu.repository.MenuCategoryRepository; import ssu.eatssu.domain.menu.repository.MenuRepository; import ssu.eatssu.domain.menu.util.MenuValidator; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -18,8 +16,9 @@ import ssu.eatssu.global.handler.response.BaseResponseStatus; import java.util.Date; +import java.util.HashMap; import java.util.List; -import java.util.stream.Collectors; +import java.util.Map; @Slf4j @@ -31,19 +30,25 @@ public class MenuService { private final MenuRepository menuRepository; private final MealRepository mealRepository; private final MealMenuRepository mealMenuRepository; + private final MenuCategoryRepository menuCategoryRepository; private final MealRatingService mealRatingService; - private final MenuRatingService menuRatingService; - public MenuInformationListResponse findMenusByRestaurant(Restaurant restaurant) { - List menus = menuRepository.findAllByRestaurant(restaurant); - - List menuInformationList = menus.stream() - .map(menu -> MenuInformation.from(menu, menuRatingService.getMainRatingAverage(menu.getId()))) - .collect(Collectors.toList()); + public CategoryMenuListCollection findMenusByRestaurant(Restaurant restaurant) { + List categories = menuCategoryRepository.findAllByRestaurant(restaurant); + CategoryMenuListCollection collection = CategoryMenuListCollection.init(); + for (MenuCategory category : categories) { + List menus = menuRepository.findAllByRestaurantAndCategory( + restaurant, category).stream() + .filter(menu -> !menu.isDiscontinued()) + .map(menu -> MenuInformation.from(menu, menuRatingService.getMainRatingAverage(menu.getId()))) + .toList(); + CategoryMenuList categoryMenuList = new CategoryMenuList(category.getName(), menus); + collection.add(categoryMenuList); + } - return new MenuInformationListResponse(menuInformationList); + return collection; } public List findSpecificMeals(Date date, diff --git a/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java b/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java new file mode 100644 index 00000000..1abf25dd --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java @@ -0,0 +1,35 @@ +package ssu.eatssu.domain.menu.service; + +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import ssu.eatssu.domain.menu.entity.QMenu; +import ssu.eatssu.domain.review.entity.QReview; + +@Repository +@RequiredArgsConstructor +public class QuerydslMenuRatingCountProvider { + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QReview review = QReview.review; + + public Integer getReviewCountByStar(Long menuId, Integer star) { + return queryFactory + .select(review.count()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId), + reviewStarIs(star) + ) + .fetchOne().intValue(); + } + private BooleanExpression reviewStarIs(Integer star) { + return review.ratings.mainRating.eq(star); + } + + private BooleanExpression menuIdEq(Long menuId) { + return menu.id.eq(menuId); + } +} diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java index 4c60156d..59144c84 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java @@ -6,19 +6,20 @@ import java.sql.Date; import java.util.ArrayList; import java.util.List; +import java.util.Map; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import ssu.eatssu.domain.menu.dto.MealCreateRequest; -import ssu.eatssu.domain.menu.dto.MenuInformationListResponse; import ssu.eatssu.domain.menu.dto.MenusInformationResponse; import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.menu.repository.MealRepository; +import ssu.eatssu.domain.menu.repository.MenuCategoryRepository; import ssu.eatssu.domain.menu.repository.MenuRepository; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.menu.dto.MenuInformation; @SpringBootTest class MenuServiceTest { @@ -29,6 +30,9 @@ class MenuServiceTest { @Autowired private MenuRepository menuRepository; + @Autowired + private MenuCategoryRepository menuCategoryRepository; + @Autowired private MealRepository mealRepository; @@ -43,18 +47,26 @@ void setUp() { // given List menus = new ArrayList<>(); Restaurant foodCourt = Restaurant.from("FOOD_COURT"); - menus.add(Menu.createFixed("라면", foodCourt, 3000, null)); - menus.add(Menu.createFixed("떡볶이", foodCourt, 5000, null)); - menus.add(Menu.createFixed("짜계치", foodCourt, 4000, null)); + + MenuCategory category1 = MenuCategory.builder().name("분식").restaurant(foodCourt).build(); + MenuCategory category2 = MenuCategory.builder().name("한식").restaurant(foodCourt).build(); + menus.add(Menu.createFixed("라면", foodCourt, 3000, category1)); + menus.add(Menu.createFixed("떡볶이", foodCourt, 5000, category2)); + menus.add(Menu.createFixed("짜게치", foodCourt, 4000, category1)); + menuCategoryRepository.save(category1); + menuCategoryRepository.save(category2); menuRepository.saveAll(menus); - //when - MenuInformationListResponse response = menuService.findMenusByRestaurant(foodCourt); + // when + Map response = menuService.findMenusByRestaurant(foodCourt); // then - assertThat(response.getMenusInformationList()) - .extracting(MenuInformation::getName) - .containsExactly("라면", "떡볶이", "짜계치"); + assertThat(response).hasSize(2); + for (String key : response.keySet()) { + System.out.print(key + " : "); + response.get(key).getMenusInformationList().forEach(menu -> System.out.print(menu.getName() + " ")); + System.out.print("\n"); + } } From 334510bbed99541d4a4962fac2f7471b66bdf517 Mon Sep 17 00:00:00 2001 From: soy2on Date: Sat, 9 Mar 2024 00:24:35 +0900 Subject: [PATCH 119/399] =?UTF-8?q?Style:=20import=20=EB=AC=B8=20=EC=B5=9C?= =?UTF-8?q?=EC=A0=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/menu/dto/CategoryMenuList.java | 3 +-- .../menu/presentation/MenuController.java | 2 -- .../menu/repository/MenuRepository.java | 2 +- .../domain/menu/service/MenuService.java | 2 -- .../QuerydslMenuRatingCountProvider.java | 1 + .../domain/menu/service/MenuServiceTest.java | 26 +++++++++---------- 6 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuList.java b/src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuList.java index 10a1f6ec..887d965f 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuList.java +++ b/src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuList.java @@ -3,7 +3,6 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; -import java.util.ArrayList; import java.util.List; @Getter @@ -14,7 +13,7 @@ public class CategoryMenuList { @Schema(description = "카테고리의 메뉴 목록") private final List menuInformationList; - + public CategoryMenuList(String category, List menuInformationList) { this.category = category; this.menuInformationList = menuInformationList; diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java index e6420527..c49b1e5f 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.menu.presentation; import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; @@ -13,7 +12,6 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.menu.dto.CategoryMenuListCollection; -import ssu.eatssu.domain.menu.dto.MenusInformationResponse; import ssu.eatssu.domain.menu.service.MenuService; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.restaurant.entity.RestaurantType; diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java index 04fe104f..18575b5a 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java @@ -13,7 +13,7 @@ public interface MenuRepository extends JpaRepository { Optional findByNameAndRestaurant(String name, Restaurant restaurant); - List findAllByRestaurant(Restaurant restaurant); List findAllByRestaurantAndCategory(Restaurant restaurant, MenuCategory category); + List findAll(); } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index b5733793..aa7bf39f 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -16,9 +16,7 @@ import ssu.eatssu.global.handler.response.BaseResponseStatus; import java.util.Date; -import java.util.HashMap; import java.util.List; -import java.util.Map; @Slf4j diff --git a/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java b/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java index 1abf25dd..4ae7078c 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java @@ -25,6 +25,7 @@ public Integer getReviewCountByStar(Long menuId, Integer star) { ) .fetchOne().intValue(); } + private BooleanExpression reviewStarIs(Integer star) { return review.ratings.mainRating.eq(star); } diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java index 59144c84..63214a01 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java @@ -1,13 +1,5 @@ package ssu.eatssu.domain.menu.service; -import static org.assertj.core.api.Assertions.*; -import static ssu.eatssu.domain.menu.entity.TimePart.LUNCH; - -import java.sql.Date; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -21,6 +13,14 @@ import ssu.eatssu.domain.menu.repository.MenuRepository; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.sql.Date; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import static org.assertj.core.api.Assertions.assertThat; +import static ssu.eatssu.domain.menu.entity.TimePart.LUNCH; + @SpringBootTest class MenuServiceTest { @@ -78,8 +78,8 @@ void setUp() { assertThat(mealRepository.findAll()).hasSize(1); assertThat(menuRepository.findAll()).hasSize(3); assertThat(menuRepository.findAll()) - .extracting(Menu::getName) - .containsExactly("돈까스", "샐러드", "김치"); + .extracting(Menu::getName) + .containsExactly("돈까스", "샐러드", "김치"); } private Long 식단_생성_요청() { @@ -92,9 +92,9 @@ void setUp() { menuService.createMeal(date, haksik, LUNCH, request); return mealRepository.findAll().stream() - .findFirst() - .orElseThrow(() -> new RuntimeException("Meal not created")) - .getId(); + .findFirst() + .orElseThrow(() -> new RuntimeException("Meal not created")) + .getId(); } @Test From 283a67ec8f48fcf743b6a87e7823170f0193763b Mon Sep 17 00:00:00 2001 From: soy2on Date: Sun, 10 Mar 2024 10:28:11 +0900 Subject: [PATCH 120/399] =?UTF-8?q?Change:=20=EA=B8=B0=EC=88=99=EC=82=AC?= =?UTF-8?q?=20=EC=8B=9D=EB=8B=B9=20=EA=B0=80=EA=B2=A9=EC=9D=84=205500?= =?UTF-8?q?=EC=9B=90=20=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ssu/eatssu/domain/restaurant/entity/Restaurant.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index 0c03869a..3922801e 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -12,7 +12,7 @@ public enum Restaurant { DODAM("도담 식당", 6000), - DORMITORY("기숙사 식당", 5000), + DORMITORY("기숙사 식당", 5500), FOOD_COURT( "푸드 코트", null), SNACK_CORNER( "스낵 코너", null), HAKSIK("학생 식당", 5000); From 3b75db22786a1a6d1688fc44b72b4a2e6c8347f5 Mon Sep 17 00:00:00 2001 From: soy2on Date: Tue, 12 Mar 2024 23:45:04 +0900 Subject: [PATCH 121/399] =?UTF-8?q?Feat:=20Meal=20=EC=97=90=20price=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80,=20=20=EA=B0=80?= =?UTF-8?q?=EA=B2=A9=EC=9D=84=20=EC=99=B8=EB=B6=80=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=A3=BC=EC=9E=85=EB=B0=9B=EB=8A=94=20=EC=8B=9D=EB=8B=A8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20API=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu/dto/MealCreateWithPriceRequest.java | 15 +++++++++++ .../menu/dto/MealInformationResponse.java | 2 +- .../ssu/eatssu/domain/menu/entity/Meal.java | 10 +++++++ .../ssu/eatssu/domain/menu/entity/Menu.java | 6 +---- .../menu/presentation/MealController.java | 27 +++++++++++++++++++ .../domain/menu/service/MenuService.java | 19 ++++++++++++- .../domain/menu/util/MenuValidator.java | 10 +++---- .../domain/restaurant/entity/Restaurant.java | 15 +++++------ 8 files changed, 84 insertions(+), 20 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/menu/dto/MealCreateWithPriceRequest.java diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MealCreateWithPriceRequest.java b/src/main/java/ssu/eatssu/domain/menu/dto/MealCreateWithPriceRequest.java new file mode 100644 index 00000000..36a92c88 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MealCreateWithPriceRequest.java @@ -0,0 +1,15 @@ +package ssu.eatssu.domain.menu.dto; + +import io.swagger.v3.oas.annotations.media.Schema; + +import java.util.List; + +@Schema(title = "식단 추가(가격 입력 받는 버전)") +public record MealCreateWithPriceRequest( + @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") + List menuNames, + @Schema(description = "식단 가격", example = "3000") + Integer price +) { + +} diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MealInformationResponse.java b/src/main/java/ssu/eatssu/domain/menu/dto/MealInformationResponse.java index e9ecfee4..223ffe28 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MealInformationResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/dto/MealInformationResponse.java @@ -35,7 +35,7 @@ public static MealInformationResponse from(Meal meal, Double mainRating) { .map(BriefMenuInformation::new).toList(); return new MealInformationResponse(meal.getId(), - meal.getRestaurant().getRestaurantPrice(), + meal.getPrice(), mainRating, menusInformation); } else { return null; diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index 251a391b..7a572281 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -31,6 +31,8 @@ public class Meal { @Enumerated(EnumType.STRING) private TimePart timePart; + private Integer price; + @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL) private List mealMenus = new ArrayList<>(); @@ -38,6 +40,14 @@ public Meal(Date date, TimePart timePart, Restaurant restaurant) { this.date = date; this.timePart = timePart; this.restaurant = restaurant; + this.price = restaurant.getRestaurantPrice(); + } + + public Meal(Date date, TimePart timePart, Restaurant restaurant, Integer price) { + this.date = date; + this.timePart = timePart; + this.restaurant = restaurant; + this.price = price; } public List getMenuNames() { diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index b75bc59b..6dff9a3d 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -5,7 +5,6 @@ import lombok.Getter; import lombok.NoArgsConstructor; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.RestaurantType; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.Reviews; @@ -50,9 +49,6 @@ private Menu(String name, Restaurant restaurant, Integer price, MenuCategory cat public static Menu createVariable(String name, Restaurant restaurant) { int price = 0; - if (RestaurantType.isVariableType(restaurant)) { - price = restaurant.getRestaurantPrice(); - } return new Menu(name, restaurant, price, null); } @@ -62,7 +58,7 @@ public static Menu createVariable(String name, Restaurant restaurant) { */ public static Menu createFixed(String name, Restaurant restaurant, Integer price, - MenuCategory category) { + MenuCategory category) { return new Menu(name, restaurant, price, category); } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java index de271ca8..0c2a0b8f 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java @@ -12,6 +12,7 @@ import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.menu.dto.MealCreateRequest; +import ssu.eatssu.domain.menu.dto.MealCreateWithPriceRequest; import ssu.eatssu.domain.menu.dto.MealInformationResponse; import ssu.eatssu.domain.menu.dto.MenusInformationResponse; import ssu.eatssu.domain.menu.entity.TimePart; @@ -59,6 +60,32 @@ public BaseResponse createMeal( return BaseResponse.success(); } + @Operation(summary = "식단 추가", description = """ + 식단을 추가하는 API 입니다.

+ 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

+ 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) + 가격을 외부에서 입력받습니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 추가 성공"), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/with-price") + public BaseResponse createMealWithPrice( + @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, + @RequestBody MealCreateWithPriceRequest request) { + if (RestaurantType.isFixedType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } + + menuService.createMealWithPrice(date, restaurant, timePart, request); + return BaseResponse.success(); + } + @Operation(summary = "변동 메뉴 식단 리스트 조회", description = """ 변동 메뉴 식단 리스트를 조회하는 API 입니다. 변동 메뉴 식당 (학생 식당, 도담, 기숙사 식당) 의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회합니다. diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index aa7bf39f..a3cd672f 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -65,7 +65,7 @@ public void createMeal(Date date, Restaurant restaurant, TimePart timePart, MealCreateRequest request) { List meals = getMeals(date, timePart, restaurant); - if (MenuValidator.validateExistedMeal(meals, request)) { + if (MenuValidator.validateExistedMeal(meals, request.menuNames())) { return; } Meal meal = new Meal(date, timePart, restaurant); @@ -75,6 +75,23 @@ public void createMeal(Date date, Restaurant restaurant, TimePart timePart, addMenusToMeal(meal, restaurant, request.menuNames()); } + /** + * 가격 추가 용 + */ + public void createMealWithPrice(Date date, Restaurant restaurant, TimePart timePart, + MealCreateWithPriceRequest request) { + List meals = getMeals(date, timePart, restaurant); + + if (MenuValidator.validateExistedMeal(meals, request.menuNames())) { + return; + } + Meal meal = new Meal(date, timePart, restaurant, request.price()); + + mealRepository.save(meal); + + addMenusToMeal(meal, restaurant, request.menuNames()); + } + public MenusInformationResponse findMenusInMeal(Long mealId) { Meal meal = getMeal(mealId); return MenusInformationResponse.from(meal); diff --git a/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java b/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java index 08af601f..356dc9a5 100644 --- a/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java +++ b/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java @@ -1,18 +1,18 @@ package ssu.eatssu.domain.menu.util; +import lombok.RequiredArgsConstructor; +import ssu.eatssu.domain.menu.entity.Meal; + import java.util.ArrayList; import java.util.Collections; import java.util.List; -import lombok.RequiredArgsConstructor; -import ssu.eatssu.domain.menu.dto.MealCreateRequest; -import ssu.eatssu.domain.menu.entity.Meal; @RequiredArgsConstructor public class MenuValidator { - public static boolean validateExistedMeal(List meals, MealCreateRequest request) { + public static boolean validateExistedMeal(List meals, List menuNames) { - List sortedRequestMenuNames = new ArrayList<>(request.menuNames()); + List sortedRequestMenuNames = new ArrayList<>(menuNames); Collections.sort(sortedRequestMenuNames); return meals.stream().anyMatch(meal -> { diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index 3922801e..95b07eae 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -1,32 +1,31 @@ package ssu.eatssu.domain.restaurant.entity; import com.fasterxml.jackson.annotation.JsonCreator; -import java.util.Arrays; import lombok.Getter; - import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.util.Arrays; + @Getter public enum Restaurant { DODAM("도담 식당", 6000), DORMITORY("기숙사 식당", 5500), - FOOD_COURT( "푸드 코트", null), - SNACK_CORNER( "스낵 코너", null), + FOOD_COURT("푸드 코트", null), + SNACK_CORNER("스낵 코너", null), HAKSIK("학생 식당", 5000); - private String restaurantName; private Integer restaurantPrice; @JsonCreator public static Restaurant from(String restaurantName) { return Arrays.stream(Restaurant.values()) - .filter(r -> r.getRestaurantName().equals(restaurantName)) - .findAny() - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); + .filter(r -> r.getRestaurantName().equals(restaurantName)) + .findAny() + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); } Restaurant(String restaurantName, Integer price) { From 8c0f60e39a05e8faa22c498a3b15eea20424a5f1 Mon Sep 17 00:00:00 2001 From: soy2on Date: Thu, 14 Mar 2024 10:43:24 +0900 Subject: [PATCH 122/399] =?UTF-8?q?Change:=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20request=20dto=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=EB=AA=85=20=EB=B3=80=EA=B2=BD=20~rate=20->?= =?UTF-8?q?=20~rating?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java | 6 +++--- .../ssu/eatssu/domain/review/service/ReviewService.java | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java index 0d0e0bd4..6ce837d5 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java @@ -7,13 +7,13 @@ public record ReviewUpdateRequest( @Schema(description = "평점-메인", example = "4") - Integer mainRate, + Integer mainRating, @Schema(description = "평점-양", example = "4") - Integer amountRate, + Integer amountRating, @Schema(description = "평점-맛", example = "4") - Integer tasteRate, + Integer tasteRating, @Max(150) @Schema(description = "한줄평", example = "맛있어용") diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index a80a4ade..25219612 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -115,8 +115,8 @@ public void updateReview(CustomUserDetails userDetails, Long reviewId, throw new BaseException(REVIEW_PERMISSION_DENIED); } - review.update(request.content(), request.mainRate(), request.amountRate(), - request.tasteRate()); + review.update(request.content(), request.mainRating(), request.amountRating(), + request.tasteRating()); } From 11ca0c7cfb5ec454a8d801875b7a83f886e173e3 Mon Sep 17 00:00:00 2001 From: soy2on Date: Thu, 14 Mar 2024 11:10:08 +0900 Subject: [PATCH 123/399] =?UTF-8?q?Feat:=20=EC=8B=A0=EA=B3=A0=20=EC=8A=AC?= =?UTF-8?q?=EB=9E=99=20=EB=A9=94=EC=84=B8=EC=A7=80=EC=97=90=20=EC=8B=A0?= =?UTF-8?q?=EA=B3=A0=20=EB=82=B4=EC=9A=A9=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../slack/entity/SlackMessageFormat.java | 69 ++++++++++--------- .../domain/slack/service/SlackService.java | 8 +-- 2 files changed, 40 insertions(+), 37 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java index c06a0e7c..bd6aa71a 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java @@ -2,8 +2,8 @@ import org.springframework.stereotype.Component; import ssu.eatssu.domain.inquiry.entity.Inquiry; -import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.Report; +import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; import java.text.MessageFormat; @@ -11,52 +11,55 @@ @Component public class SlackMessageFormat { - private SlackMessageFormat(){} + private SlackMessageFormat() { + } public static String sendReport(Report report) { User reporter = report.getUser(); Review review = report.getReview(); MessageFormat messageFormat = new MessageFormat( """ - =================== - *신고자 INFO* - - 신고자 ID: {0} - - 닉네임: {1} - *신고된 리뷰 INFO* - - 리뷰 ID: {2} - - 리뷰 작성자 ID : {3} - - 리뷰 작성자 닉네임 : {4} - - 리뷰 메뉴: {5} - - 리뷰 내용: {6} - - 리뷰 날짜: {7} - *신고 INFO* - - 신고사유: {8} - - 신고 날짜: {9} - =================== - """ + =================== + *신고자 INFO* + - 신고자 ID: {0} + - 닉네임: {1} + *신고된 리뷰 INFO* + - 리뷰 ID: {2} + - 리뷰 작성자 ID : {3} + - 리뷰 작성자 닉네임 : {4} + - 리뷰 메뉴: {5} + - 리뷰 내용: {6} + - 리뷰 날짜: {7} + *신고 INFO* + - 신고사유: {8} + - 신고내용: {9} + - 신고 날짜: {10} + =================== + """ ); - Object[] args = {reporter.getId(), reporter.getNickname(), review.getId(), review.getUser().getId() - , review.getUser().getNickname(), review.getMenu().getName(), review.getContent(), - review.getModifiedDate().toString(), report.getReportType().getDescription(), report.getCreatedDate()}; + Object[] args = {reporter.getId(), reporter.getNickname(), review.getId(), review.getUser().getId(), + review.getUser().getNickname(), review.getMenu().getName(), review.getContent(), + review.getModifiedDate().toString(), report.getReportType().getDescription(), report.getContent(), + report.getCreatedDate()}; return messageFormat.format(args); } public static String sendUserInquiry(Inquiry inquiry) { MessageFormat messageFormat = new MessageFormat( """ - =================== - *문의 INFO* - - 문의자 ID: {0} - - 닉네임: {1} - - 이메일: {2} - *문의 내용* - - Date: {3} - - Content: {4} - =================== - """ + =================== + *문의 INFO* + - 문의자 ID: {0} + - 닉네임: {1} + - 이메일: {2} + *문의 내용* + - Date: {3} + - Content: {4} + =================== + """ ); - Object[] args = {inquiry.getUser().getId(), inquiry.getUser().getNickname(),inquiry.getUser().getEmail() - ,inquiry.getCreatedDate(), inquiry.getContent()}; + Object[] args = {inquiry.getUser().getId(), inquiry.getUser().getNickname(), inquiry.getUser().getEmail() + , inquiry.getCreatedDate(), inquiry.getContent()}; return messageFormat.format(args); } } diff --git a/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java b/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java index fd092498..3062b348 100644 --- a/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java +++ b/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java @@ -7,9 +7,9 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import ssu.eatssu.domain.slack.entity.SlackChannel; import java.io.IOException; -import ssu.eatssu.domain.slack.entity.SlackChannel; @Slf4j @Service @@ -26,9 +26,9 @@ public void sendSlackMessage(String message, SlackChannel channel) { MethodsClient methods = Slack.getInstance().methods(slackToken); ChatPostMessageRequest request = ChatPostMessageRequest.builder() - .channel(channelAddress) - .text(message) - .build(); + .channel(channelAddress) + .text(message) + .build(); methods.chatPostMessage(request); From bbf1e35fd539fbc767160f92e7bd12e9549c629b Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Fri, 15 Mar 2024 21:27:42 +0900 Subject: [PATCH 124/399] =?UTF-8?q?hotfix=20:=20Entity=20=EA=B0=84=20?= =?UTF-8?q?=EA=B4=80=EA=B3=84=EB=A5=BC=20=EC=9E=AC=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java | 3 +++ src/main/java/ssu/eatssu/domain/menu/entity/Meal.java | 6 ------ src/main/java/ssu/eatssu/domain/menu/entity/Menu.java | 1 - src/main/java/ssu/eatssu/domain/review/entity/Review.java | 3 +-- .../java/ssu/eatssu/domain/review/entity/ReviewImage.java | 1 - .../java/ssu/eatssu/domain/user/service/UserService.java | 2 +- 6 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java b/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java index 99f05190..0752d25b 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java @@ -39,4 +39,7 @@ public void updateStatus(InquiryStatus status) { this.status = status; } + public void clearUser() { + this.user = null; + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index 7a572281..811e1de1 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -53,10 +53,4 @@ public Meal(Date date, TimePart timePart, Restaurant restaurant, Integer price) public List getMenuNames() { return mealMenus.stream().map(mealMenu -> mealMenu.getMenu().getName()).toList(); } - - public Double getAverateMainRating() { - return mealMenus.stream() - .mapToDouble(mealMenu -> mealMenu.getMenu().getReviews().getAverageMainRating()) - .average().orElse(0); - } } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index 6dff9a3d..c51e45cd 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -56,7 +56,6 @@ public static Menu createVariable(String name, Restaurant restaurant) { * 고정 메뉴를 생성합니다. * todo: 고정메뉴 식당이 아니라 변동 메뉴 식당으로 잘못 들어온다면 어떻게 처리? */ - public static Menu createFixed(String name, Restaurant restaurant, Integer price, MenuCategory category) { return new Menu(name, restaurant, price, category); diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index a72c37ee..cbc7fcf9 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -36,10 +36,9 @@ public class Review extends BaseTimeEntity { @JoinColumn(name = "menu_id") private Menu menu; - @OneToMany(mappedBy = "review", cascade = CascadeType.ALL) + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) private List reviewImages = new ArrayList<>(); - //Entity -> Dto 방향 의존관계 제거 public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { this.content = content; this.ratings = Ratings.of(mainRate, amountRate, tasteRate); diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java index ea26c868..0c7cc3e2 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java @@ -21,7 +21,6 @@ public class ReviewImage { private String imageUrl; - public ReviewImage(Review review, String imageUrl) { this.review = review; this.imageUrl = imageUrl; diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index 8048acb5..19d2c97c 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -27,7 +27,6 @@ public class UserService { private final UserRepository userRepository; private final PasswordEncoder passwordEncoder; - public User join(String email, OAuthProvider provider, String providerId) { String credentials = createCredentials(provider, providerId); User user = User.create(email, provider, providerId, credentials); @@ -52,6 +51,7 @@ public boolean withdraw(CustomUserDetails userDetails) { .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); user.getReviews().forEach(Review::clearUser); + user.getUserInquiries().forEach(inquiry -> inquiry.clearUser()); userRepository.delete(user); return true; From bb124fbe6177d14b520abc273833c36cb689839b Mon Sep 17 00:00:00 2001 From: soy2on Date: Tue, 19 Mar 2024 01:59:57 +0900 Subject: [PATCH 125/399] =?UTF-8?q?Fix:=20credential=20=EB=A7=8C=EB=93=9C?= =?UTF-8?q?=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EB=B3=B5=EC=9B=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java | 2 +- src/main/java/ssu/eatssu/domain/user/service/UserService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java index 52b1718c..db77c689 100644 --- a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java @@ -101,7 +101,7 @@ private Tokens generateOauthJwtTokens(String email, OAuthProvider provider, Stri } private String makeOauthCredentials(OAuthProvider provider, String providerId) { - return provider + "_" + providerId; + return provider + providerId; } } diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index 19d2c97c..2ab2e0b5 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -66,6 +66,6 @@ public Boolean validateDuplicatedNickname(String nickname) { } private String createCredentials(OAuthProvider provider, String providerId) { - return passwordEncoder.encode(provider + "_" + providerId); + return passwordEncoder.encode(provider + providerId); } } \ No newline at end of file From 4e5accd0352b5f5d7e61c8ca79da82a3c1681d3a Mon Sep 17 00:00:00 2001 From: soy2on Date: Thu, 21 Mar 2024 21:34:08 +0900 Subject: [PATCH 126/399] =?UTF-8?q?Feat:=20=EC=B9=B4=ED=85=8C=EA=B3=A0?= =?UTF-8?q?=EB=A6=AC=20=EC=B6=94=EA=B0=80=20API=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ManageCategoryController.java | 25 +++++++++++++ .../controller/ManageFixMenuController.java | 11 +++--- .../admin/dto/RegisterCategoryRequest.java | 4 +++ .../persistence/LoadCategoryRepository.java | 24 +++++++++++++ .../persistence/LoadFixMenuRepository.java | 1 + .../persistence/ManageCategoryRepository.java | 10 ++++++ .../admin/service/ManageCategoryService.java | 36 +++++++++++++++++++ .../admin/service/ManageFixMenuService.java | 10 +++--- 8 files changed, 109 insertions(+), 12 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/dto/RegisterCategoryRequest.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/persistence/ManageCategoryRepository.java create mode 100644 src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java new file mode 100644 index 00000000..3d092553 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java @@ -0,0 +1,25 @@ +package ssu.eatssu.domain.admin.controller; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; +import ssu.eatssu.domain.admin.dto.RegisterCategoryRequest; +import ssu.eatssu.domain.admin.service.ManageCategoryService; +import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.global.handler.response.BaseResponse; + +@Controller +@RequestMapping("/admin/menu/category") +@RequiredArgsConstructor +public class ManageCategoryController { + + private final ManageCategoryService manageCategoryService; + + @ResponseBody + @PostMapping("/") + public BaseResponse register(@RequestParam Restaurant restaurant, + @RequestBody RegisterCategoryRequest request) { + manageCategoryService.register(restaurant, request); + return BaseResponse.success(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java index 182405f6..27813827 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java @@ -20,21 +20,20 @@ public class ManageFixMenuController { @ResponseBody @GetMapping("") - public BaseResponse fixMenuPage(Model model) { + public BaseResponse fixMenuPage() { MenuBoards menuBoards = manageFixMenuService.getMenuBoards(); - //model.addAttribute("menuBoards", manageFixMenuService.getMenuBoards()); return BaseResponse.success(menuBoards); } - //TODO ResponseBody 해제 @ResponseBody @PostMapping("") - public String register(@RequestParam Restaurant restaurant, - @RequestBody RegisterFixMenuRequest request) { + public BaseResponse register(@RequestParam Restaurant restaurant, + @RequestBody RegisterFixMenuRequest request) { manageFixMenuService.register(restaurant, request); - return "redirect:/admin/menu/fix-menu"; + return BaseResponse.success(); } + @ResponseBody @PatchMapping("/{menuId}") public String update(@PathVariable Long menuId, diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/RegisterCategoryRequest.java b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterCategoryRequest.java new file mode 100644 index 00000000..a927bcef --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterCategoryRequest.java @@ -0,0 +1,4 @@ +package ssu.eatssu.domain.admin.dto; + +public record RegisterCategoryRequest(String name) { +} diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java new file mode 100644 index 00000000..748ed6fc --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java @@ -0,0 +1,24 @@ +package ssu.eatssu.domain.admin.persistence; + +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import ssu.eatssu.domain.menu.entity.QMenuCategory; +import ssu.eatssu.domain.restaurant.entity.Restaurant; + +@Repository +@RequiredArgsConstructor +public class LoadCategoryRepository { + + private final JPAQueryFactory queryFactory; + private final QMenuCategory category = QMenuCategory.menuCategory; + + + public boolean existsCategory(Restaurant restaurant, String name) { + return queryFactory.select(category.id) + .from(category) + .where(category.name.eq(name), + category.restaurant.eq(restaurant)) + .fetchFirst() != null; + } +} diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java index f44ebd50..bdb2c84b 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java @@ -79,4 +79,5 @@ private BooleanExpression categoryRestaurantNameEq(Restaurant restaurant) { private BooleanExpression menuCategoryIdEq(Long categoryId) { return category.id.eq(categoryId); } + } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageCategoryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageCategoryRepository.java new file mode 100644 index 00000000..21847438 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageCategoryRepository.java @@ -0,0 +1,10 @@ +package ssu.eatssu.domain.admin.persistence; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import ssu.eatssu.domain.menu.entity.MenuCategory; + +@Repository +public interface ManageCategoryRepository extends JpaRepository { + +} diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java new file mode 100644 index 00000000..0fccb100 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java @@ -0,0 +1,36 @@ +package ssu.eatssu.domain.admin.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import ssu.eatssu.domain.admin.dto.RegisterCategoryRequest; +import ssu.eatssu.domain.admin.persistence.LoadCategoryRepository; +import ssu.eatssu.domain.admin.persistence.ManageCategoryRepository; +import ssu.eatssu.domain.menu.entity.MenuCategory; +import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponseStatus; + +@Transactional +@Service +@RequiredArgsConstructor +public class ManageCategoryService { + + private final LoadCategoryRepository loadCategoryRepository; + private final ManageCategoryRepository manageCategoryRepository; + + + public void register(Restaurant restaurant, RegisterCategoryRequest request) { + // 해당 식당에 이미 존재하는 카테고리인지 확인 + if (loadCategoryRepository.existsCategory(restaurant, request.name())) { + throw new BaseException(BaseResponseStatus.CONFLICT); + } + + MenuCategory category = MenuCategory.builder() + .restaurant(restaurant) + .name(request.name()) + .build(); + + manageCategoryRepository.save(category); + } +} diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java index adf7daa7..694dc682 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java @@ -66,13 +66,13 @@ private MenuSection getMenuSection(MenuCategory category) { } public void register(Restaurant restaurant, RegisterFixMenuRequest request) { + + // 해당 식당에 이미 존재하는 메뉴인지 확인 if (loadMenuRepository.existsMenu(request.name(), restaurant)) { throw new BaseException(BaseResponseStatus.CONFLICT); } - /** - * 해당 식당의 메뉴카테고리들 중에 요청받은 카테고리가 존재하는지 확인 - */ + // 해당 식당의 메뉴 카테고리들 중에 요청받은 카테고리가 존재하는지 확인 List menuCategories = loadMenuRepository.findMenuCategoriesByRestaurant(restaurant); MenuCategory category = menuCategories.stream() .filter(menuCategory -> menuCategory.getId().equals(request.categoryId())) @@ -90,9 +90,7 @@ public void updateMenu(Long menuId, UpdateFixMenuRequest request) { Menu menu = manageMenuRepository.findById(menuId) .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); - /** - * 식당에 같은 이름의 메뉴가 있는 지 확인 - */ + // 식당에 같은 이름의 메뉴가 있는 지 확인 Restaurant restaurant = loadMenuRepository.getRestaurant(menuId); duplicateCheck(request.name(), restaurant); menu.update(request.name(), request.price()); From ed6f8b91d333c1b3080f74783db4e482723e40ce Mon Sep 17 00:00:00 2001 From: soy2on Date: Sat, 23 Mar 2024 15:38:29 +0900 Subject: [PATCH 127/399] =?UTF-8?q?Fix:=20Security=20URI=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 --- .../ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 0b06da62..d74698ff 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -28,9 +28,7 @@ public class SecurityConfig { }; private static final String[] AUTH_WHITELIST = { - "/", "/oauths/**", "/users/**", - "/menus/**", "/meals/**", "/restaurants/**", "/reviews/**", "/oauth/**", "/inquiries/{userInquiriesId}", - "/inquiries/list", "/admin/login", + "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", }; private static final String[] ADMIN_PAGE_LIST = { From 7b5d7aab9be6bafa710216335df88aa86a81fb7e Mon Sep 17 00:00:00 2001 From: soy2on Date: Sat, 23 Mar 2024 15:45:09 +0900 Subject: [PATCH 128/399] =?UTF-8?q?Fix:=EA=B3=A0=EC=A0=95=EC=8B=9D?= =?UTF-8?q?=EB=8B=B9=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C=20=EC=B9=B4=ED=85=8C?= =?UTF-8?q?=EA=B3=A0=EB=A6=AC=20Id=20=EB=8F=84=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=EB=90=98=EB=8F=84=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ssu/eatssu/domain/admin/dto/MenuSection.java | 9 ++++++--- .../domain/admin/service/ManageFixMenuService.java | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java index d3e8cb88..7d35e12b 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java @@ -1,12 +1,15 @@ package ssu.eatssu.domain.admin.dto; +import ssu.eatssu.domain.menu.entity.MenuCategory; + import java.util.ArrayList; import java.util.List; -public record MenuSection(String category, List menuLines) implements SectionInBoard{ - public MenuSection(String category) { - this(category, new ArrayList<>()); +public record MenuSection(Long categoryId, String categoryName, List menuLines) implements SectionInBoard { + public MenuSection(MenuCategory category) { + this(category.getId(), category.getName(), new ArrayList<>()); } + @Override public void addMenuLine(MenuLine menuLine) { menuLines.add(menuLine); diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java index 694dc682..73565314 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java @@ -50,7 +50,7 @@ private List getMenuSections(Restaurant restaurant) { } private MenuSection getMenuSection(MenuCategory category) { - MenuSection menuSection = new MenuSection(category.getName()); + MenuSection menuSection = new MenuSection(category); List briefMenus = loadMenuRepository.findBriefMenusByCategoryId(category.getId()); From d0fbbe79146148c152e320ebe7e84a6a275a47bb Mon Sep 17 00:00:00 2001 From: soy2on Date: Sat, 23 Mar 2024 15:53:01 +0900 Subject: [PATCH 129/399] =?UTF-8?q?Feat:=EA=B3=A0=EC=A0=95=20=EB=A9=94?= =?UTF-8?q?=EB=89=B4=EC=9D=98=20=EB=8B=A8=EC=A2=85=20=EC=97=AC=EB=B6=80=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20API=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ManageFixMenuController.java | 14 ++++++++++---- .../admin/service/ManageFixMenuService.java | 16 +++++++++++++++- .../java/ssu/eatssu/domain/menu/entity/Menu.java | 4 ++++ 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java index 27813827..65a9d6a9 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java @@ -36,17 +36,23 @@ public BaseResponse register(@RequestParam Restaurant restaurant, @ResponseBody @PatchMapping("/{menuId}") - public String update(@PathVariable Long menuId, + public BaseResponse update(@PathVariable Long menuId, @RequestBody UpdateFixMenuRequest request) { manageFixMenuService.updateMenu(menuId, request); - return "redirect:/admin/menu/fix-menu"; + return BaseResponse.success(); } @ResponseBody @DeleteMapping("/{menuId}") - public String delete(@PathVariable Long menuId) { + public BaseResponse delete(@PathVariable Long menuId) { manageFixMenuService.delete(menuId); - return "redirect:/admin/menu/fix-menu"; + return BaseResponse.success(); + } + + @ResponseBody + @PatchMapping("/{menuId}/discontinued-status") + public BaseResponse toggleDiscontinuedStatus(@PathVariable Long menuId) { + return BaseResponse.success(manageFixMenuService.changeDiscontinuedStatus(menuId)); } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java index 73565314..c66628be 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java @@ -16,8 +16,8 @@ import java.util.List; -@Transactional @Service +@Transactional @RequiredArgsConstructor public class ManageFixMenuService { @@ -112,4 +112,18 @@ private boolean isFixedMenu(Long menuId) { public void delete(Long menuId) { manageMenuRepository.deleteById(menuId); } + + public Boolean changeDiscontinuedStatus(Long menuId) { + if (isFixedMenu(menuId)) { + throw new BaseException(BaseResponseStatus.NOT_SUPPORT_RESTAURANT); + } + + Menu menu = manageMenuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + + menu.changeDiscontinuedStatus(); + + return menu.isDiscontinued(); + } } + diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index c51e45cd..daff4576 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -74,4 +74,8 @@ public void update(String name, Integer price) { this.name = name; this.price = price; } + + public void changeDiscontinuedStatus() { + this.isDiscontinued = !this.isDiscontinued; + } } \ No newline at end of file From afd2f4f6de22a94134e267baa1c436b039317ee4 Mon Sep 17 00:00:00 2001 From: soy2on Date: Sat, 23 Mar 2024 16:24:12 +0900 Subject: [PATCH 130/399] =?UTF-8?q?Fix:=20=EC=96=B4=EB=93=9C=EB=AF=BC=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=8B=9C=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=95=84=EC=9D=B4=EB=94=94,=20=EB=B9=84=EB=B0=80?= =?UTF-8?q?=EB=B2=88=ED=98=B8=20=EB=AA=A8=EB=91=90=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=EB=B0=9B=EB=8A=94=EA=B1=B8=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/admin/controller/AuthenticationController.java | 7 +------ .../java/ssu/eatssu/domain/admin/dto/LoginRequest.java | 2 +- .../eatssu/domain/admin/service/AuthenticationService.java | 5 +++-- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java b/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java index c573f7f7..43eed660 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java @@ -17,15 +17,10 @@ public class AuthenticationController { private final AuthenticationService authenticationService; - @GetMapping("/login") - public String loginPage() { - return "login"; - } - @ResponseBody @PostMapping("/login") public BaseResponse login(@RequestBody LoginRequest request) { - return BaseResponse.success(authenticationService.login(request.password())); + return BaseResponse.success(authenticationService.login(request)); } } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/LoginRequest.java b/src/main/java/ssu/eatssu/domain/admin/dto/LoginRequest.java index f38fb833..1bafc65d 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/LoginRequest.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/LoginRequest.java @@ -1,4 +1,4 @@ package ssu.eatssu.domain.admin.dto; -public record LoginRequest(String password) { +public record LoginRequest(String loginId, String password) { } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java b/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java index ccc8a83d..a5372fdd 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java @@ -4,6 +4,7 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import ssu.eatssu.domain.admin.controller.AdminAuth; +import ssu.eatssu.domain.admin.dto.LoginRequest; import ssu.eatssu.domain.auth.security.JwtTokenProvider; import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.domain.user.entity.User; @@ -17,8 +18,8 @@ public class AuthenticationService { private final UserRepository userRepository; private final AdminAuth adminAuth; - public Tokens login(String password) { - return tokenProvider.generateTokens(adminAuth.loginId(), password); + public Tokens login(LoginRequest request) { + return tokenProvider.generateTokens(request.loginId(), request.password()); } private void join(String loginId, String password) { From 38c9614301551862ff564613a4923cf76fd01134 Mon Sep 17 00:00:00 2001 From: soy2on Date: Fri, 29 Mar 2024 20:04:10 +0900 Subject: [PATCH 131/399] =?UTF-8?q?Fix:=20=EB=A6=AC=EB=B7=B0=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=ED=86=A0=ED=81=B0=20=EC=A0=9C=ED=95=9C=20=ED=95=B4?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index d74698ff..6dfabadc 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -29,6 +29,7 @@ public class SecurityConfig { private static final String[] AUTH_WHITELIST = { "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", + "/reviews", "/reviews/menus/**", "/reviews/meals/**" }; private static final String[] ADMIN_PAGE_LIST = { From 299b398d0156bd732abc0ad8936462a6d6f606a8 Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Tue, 18 Jun 2024 21:04:26 +0900 Subject: [PATCH 132/399] =?UTF-8?q?hotfix=20:=20Swagger=20Config=20?= =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20=EB=B0=8F=20.gitignore?= =?UTF-8?q?=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- src/main/java/ssu/eatssu/global/config/SwaggerConfig.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index b8e5f8a0..b504a4a1 100644 --- a/.gitignore +++ b/.gitignore @@ -37,4 +37,5 @@ out/ ### VS Code ### .vscode/ -*.properties \ No newline at end of file +*.properties +*.yml \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java b/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java index 506da800..d6a7c45f 100644 --- a/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java +++ b/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java @@ -23,7 +23,7 @@ public class SwaggerConfig { @Value("${swagger.url}") private String SERVER_URL; - @Value("${swagger.url.description}") + @Value("${swagger.description}") private String SERVER_DESCRIPTION; From 16b19680c8a747c1ec91fe86a6074386bd793414 Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Fri, 18 Oct 2024 00:00:26 +0900 Subject: [PATCH 133/399] =?UTF-8?q?refactor=20(Menu)=20:=20=EC=B9=B4?= =?UTF-8?q?=ED=85=8C=EA=B3=A0=EB=A6=AC=EC=99=80=20=EB=A9=94=EB=89=B4?= =?UTF-8?q?=EB=A5=BC=20=EC=A1=B0=ED=9A=8C=ED=95=98=EB=8A=94=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=EC=9D=84=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ManageMealController.java | 2 +- .../ssu/eatssu/domain/admin/dto/MealInfo.java | 2 +- .../admin/persistence/LoadMealRepository.java | 2 + .../admin/service/ManageMealService.java | 2 +- .../domain/menu/dto/CategoryMenuList.java | 21 --- .../menu/dto/CategoryMenuListCollection.java | 23 --- .../ssu/eatssu/domain/menu/entity/Meal.java | 2 + .../ssu/eatssu/domain/menu/entity/Menu.java | 11 +- .../menu/entity/{ => constants}/MenuType.java | 2 +- .../menu/entity/{ => constants}/TimePart.java | 2 +- .../LoadMenusInMealRepository.java | 2 +- .../MealMenuRepository.java | 2 +- .../MealRepository.java | 4 +- .../MenuCategoryRepository.java | 2 +- .../MenuRepository.java | 2 +- .../QuerydslMealRatingCalculator.java | 2 +- .../QuerydslMealRatingCounter.java | 2 +- .../QuerydslMenuRatingCalculator.java | 2 +- .../QuerydslMenuRatingCounter.java | 2 +- .../menu/presentation/MealController.java | 137 ------------------ .../menu/presentation/MenuController.java | 50 ------- .../dto/BriefMenuInformation.java | 4 +- .../dto/CategoryWithMenusResponse.java | 26 ++++ .../dto/MenuResponse.java} | 13 +- .../dto/MenuRestaurantResponse.java | 28 ++++ .../dto/request}/MealCreateRequest.java | 2 +- .../request}/MealCreateWithPriceRequest.java | 2 +- .../response}/MealInformationResponse.java | 13 +- .../response}/MenusInformationResponse.java | 3 +- .../presentation/rest/MealController.java | 137 ++++++++++++++++++ .../presentation/rest/MenuController.java | 45 ++++++ .../menu/service/MealRatingService.java | 2 +- .../menu/service/MenuRatingService.java | 2 +- .../domain/menu/service/MenuService.java | 102 ++++++++----- .../review/presentation/ReviewController.java | 2 +- .../review/service/ReviewRatingService.java | 8 +- .../domain/review/service/ReviewService.java | 4 +- .../domain/slice/service/SliceService.java | 6 +- .../domain/menu/service/MenuServiceTest.java | 26 ++-- .../review/service/ReviewServiceTest.java | 2 +- 40 files changed, 372 insertions(+), 331 deletions(-) delete mode 100644 src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuList.java delete mode 100644 src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuListCollection.java rename src/main/java/ssu/eatssu/domain/menu/entity/{ => constants}/MenuType.java (95%) rename src/main/java/ssu/eatssu/domain/menu/entity/{ => constants}/TimePart.java (92%) rename src/main/java/ssu/eatssu/domain/menu/{repository => persistence}/LoadMenusInMealRepository.java (95%) rename src/main/java/ssu/eatssu/domain/menu/{repository => persistence}/MealMenuRepository.java (81%) rename src/main/java/ssu/eatssu/domain/menu/{repository => persistence}/MealRepository.java (81%) rename src/main/java/ssu/eatssu/domain/menu/{repository => persistence}/MenuCategoryRepository.java (88%) rename src/main/java/ssu/eatssu/domain/menu/{repository => persistence}/MenuRepository.java (93%) rename src/main/java/ssu/eatssu/domain/menu/{repository => persistence}/QuerydslMealRatingCalculator.java (97%) rename src/main/java/ssu/eatssu/domain/menu/{repository => persistence}/QuerydslMealRatingCounter.java (97%) rename src/main/java/ssu/eatssu/domain/menu/{repository => persistence}/QuerydslMenuRatingCalculator.java (97%) rename src/main/java/ssu/eatssu/domain/menu/{repository => persistence}/QuerydslMenuRatingCounter.java (96%) delete mode 100644 src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java delete mode 100644 src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java rename src/main/java/ssu/eatssu/domain/menu/{ => presentation}/dto/BriefMenuInformation.java (84%) create mode 100644 src/main/java/ssu/eatssu/domain/menu/presentation/dto/CategoryWithMenusResponse.java rename src/main/java/ssu/eatssu/domain/menu/{dto/MenuInformation.java => presentation/dto/MenuResponse.java} (60%) create mode 100644 src/main/java/ssu/eatssu/domain/menu/presentation/dto/MenuRestaurantResponse.java rename src/main/java/ssu/eatssu/domain/menu/{dto => presentation/dto/request}/MealCreateRequest.java (83%) rename src/main/java/ssu/eatssu/domain/menu/{dto => presentation/dto/request}/MealCreateWithPriceRequest.java (87%) rename src/main/java/ssu/eatssu/domain/menu/{dto => presentation/dto/response}/MealInformationResponse.java (78%) rename src/main/java/ssu/eatssu/domain/menu/{dto => presentation/dto/response}/MenusInformationResponse.java (88%) create mode 100644 src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java create mode 100644 src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java index bb39d7e3..a3f0b083 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java @@ -9,7 +9,7 @@ import ssu.eatssu.domain.admin.dto.MenuBoards; import ssu.eatssu.domain.admin.dto.RegisterMealRequest; import ssu.eatssu.domain.admin.service.ManageMealService; -import ssu.eatssu.domain.menu.entity.TimePart; +import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.global.handler.response.BaseResponse; diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java b/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java index fe5d6248..56cc82b3 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java @@ -1,6 +1,6 @@ package ssu.eatssu.domain.admin.dto; -import ssu.eatssu.domain.menu.entity.TimePart; +import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; import java.util.Date; diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java index 427bb64c..01172ce9 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java @@ -8,6 +8,8 @@ import ssu.eatssu.domain.admin.dto.BriefMenu; import ssu.eatssu.domain.admin.dto.MealInfo; import ssu.eatssu.domain.menu.entity.*; +import ssu.eatssu.domain.menu.entity.constants.TimePart; +import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.restaurant.entity.Restaurant; import java.util.Date; diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java index abafa533..e0846d9e 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java @@ -7,7 +7,7 @@ import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; -import ssu.eatssu.domain.menu.entity.TimePart; +import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.RestaurantType; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuList.java b/src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuList.java deleted file mode 100644 index 887d965f..00000000 --- a/src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuList.java +++ /dev/null @@ -1,21 +0,0 @@ -package ssu.eatssu.domain.menu.dto; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Getter; - -import java.util.List; - -@Getter -@Schema(title = "카테고리와 메뉴 목록 조회") -public class CategoryMenuList { - @Schema(description = "카테고리명") - private final String category; - - @Schema(description = "카테고리의 메뉴 목록") - private final List menuInformationList; - - public CategoryMenuList(String category, List menuInformationList) { - this.category = category; - this.menuInformationList = menuInformationList; - } -} diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuListCollection.java b/src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuListCollection.java deleted file mode 100644 index ad41f718..00000000 --- a/src/main/java/ssu/eatssu/domain/menu/dto/CategoryMenuListCollection.java +++ /dev/null @@ -1,23 +0,0 @@ -package ssu.eatssu.domain.menu.dto; - -import lombok.Getter; - -import java.util.ArrayList; -import java.util.List; - -@Getter -public class CategoryMenuListCollection { - private final List categoryMenuListCollection; - - private CategoryMenuListCollection(List categoryMenu) { - this.categoryMenuListCollection = categoryMenu; - } - - public static CategoryMenuListCollection init() { - return new CategoryMenuListCollection(new ArrayList<>()); - } - - public void add(CategoryMenuList categoryMenuList) { - this.categoryMenuListCollection.add(categoryMenuList); - } -} diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index 811e1de1..ab8218d1 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -5,6 +5,8 @@ import lombok.Getter; import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; +import ssu.eatssu.domain.menu.entity.MealMenu; +import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; import java.util.ArrayList; diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index daff4576..7e8508a0 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -52,16 +52,11 @@ public static Menu createVariable(String name, Restaurant restaurant) { return new Menu(name, restaurant, price, null); } - /** - * 고정 메뉴를 생성합니다. - * todo: 고정메뉴 식당이 아니라 변동 메뉴 식당으로 잘못 들어온다면 어떻게 처리? - */ public static Menu createFixed(String name, Restaurant restaurant, Integer price, - MenuCategory category) { + MenuCategory category) { return new Menu(name, restaurant, price, category); } - // COMMENT: CASCADE.PERSIST 를 사용하면, Menu 를 저장할 때 Review 도 같이 저장된다. public void addReview(Review review) { reviews.add(review); } @@ -78,4 +73,8 @@ public void update(String name, Integer price) { public void changeDiscontinuedStatus() { this.isDiscontinued = !this.isDiscontinued; } + + public boolean isContinued() { + return !this.isDiscontinued; + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java b/src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java similarity index 95% rename from src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java rename to src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java index bcb04558..f3502feb 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/MenuType.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.entity; +package ssu.eatssu.domain.menu.entity.constants; import com.fasterxml.jackson.annotation.JsonCreator; import lombok.Getter; diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/TimePart.java b/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java similarity index 92% rename from src/main/java/ssu/eatssu/domain/menu/entity/TimePart.java rename to src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java index 6ade3857..020a6a10 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/TimePart.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.entity; +package ssu.eatssu.domain.menu.entity.constants; import com.fasterxml.jackson.annotation.JsonCreator; import java.util.Arrays; diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/LoadMenusInMealRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/LoadMenusInMealRepository.java similarity index 95% rename from src/main/java/ssu/eatssu/domain/menu/repository/LoadMenusInMealRepository.java rename to src/main/java/ssu/eatssu/domain/menu/persistence/LoadMenusInMealRepository.java index e4927a54..3117e896 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/LoadMenusInMealRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/LoadMenusInMealRepository.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.repository; +package ssu.eatssu.domain.menu.persistence; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/MealMenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java similarity index 81% rename from src/main/java/ssu/eatssu/domain/menu/repository/MealMenuRepository.java rename to src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java index 8ebf0bbd..cb92f0f4 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/MealMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.repository; +package ssu.eatssu.domain.menu.persistence; import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.menu.entity.MealMenu; diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java similarity index 81% rename from src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java rename to src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java index c4a78ac0..d968855e 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/MealRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java @@ -1,8 +1,8 @@ -package ssu.eatssu.domain.menu.repository; +package ssu.eatssu.domain.menu.persistence; import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.menu.entity.Meal; -import ssu.eatssu.domain.menu.entity.TimePart; +import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; import java.util.Date; diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/MenuCategoryRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java similarity index 88% rename from src/main/java/ssu/eatssu/domain/menu/repository/MenuCategoryRepository.java rename to src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java index 4772bf42..677559a8 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/MenuCategoryRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.repository; +package ssu.eatssu.domain.menu.persistence; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java similarity index 93% rename from src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java rename to src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java index 18575b5a..e87ece59 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/MenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.repository; +package ssu.eatssu.domain.menu.persistence; import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.menu.entity.Menu; diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java similarity index 97% rename from src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCalculator.java rename to src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java index 727e3ffb..27e4f8b8 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.repository; +package ssu.eatssu.domain.menu.persistence; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCounter.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java similarity index 97% rename from src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCounter.java rename to src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java index 663ebcd4..30cbaab4 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMealRatingCounter.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.repository; +package ssu.eatssu.domain.menu.persistence; import com.querydsl.core.Tuple; import com.querydsl.core.types.dsl.BooleanExpression; diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMenuRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java similarity index 97% rename from src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMenuRatingCalculator.java rename to src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java index 030adfba..e60b5dca 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMenuRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.repository; +package ssu.eatssu.domain.menu.persistence; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; diff --git a/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMenuRatingCounter.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java similarity index 96% rename from src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMenuRatingCounter.java rename to src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java index c75e45ca..dd00c486 100644 --- a/src/main/java/ssu/eatssu/domain/menu/repository/QuerydslMenuRatingCounter.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.repository; +package ssu.eatssu.domain.menu.persistence; import com.querydsl.core.Tuple; import com.querydsl.core.types.dsl.BooleanExpression; diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java deleted file mode 100644 index 0c2a0b8f..00000000 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MealController.java +++ /dev/null @@ -1,137 +0,0 @@ -package ssu.eatssu.domain.menu.presentation; - - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.format.annotation.DateTimeFormat; -import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.menu.dto.MealCreateRequest; -import ssu.eatssu.domain.menu.dto.MealCreateWithPriceRequest; -import ssu.eatssu.domain.menu.dto.MealInformationResponse; -import ssu.eatssu.domain.menu.dto.MenusInformationResponse; -import ssu.eatssu.domain.menu.entity.TimePart; -import ssu.eatssu.domain.menu.service.MenuService; -import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.RestaurantType; -import ssu.eatssu.global.handler.response.BaseException; -import ssu.eatssu.global.handler.response.BaseResponse; - -import java.util.Date; -import java.util.List; - -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; - -@RestController -@RequiredArgsConstructor -@RequestMapping("/meals") -@Tag(name = "Meal", description = "식단 API") -public class MealController { - - private final MenuService menuService; - - @Operation(summary = "식단 추가", description = """ - 식단을 추가하는 API 입니다.

- 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

- 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 추가 성공"), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("") - public BaseResponse createMeal( - @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, - @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, - @RequestBody MealCreateRequest mealCreateRequest) { - if (RestaurantType.isFixedType(restaurant)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } - - menuService.createMeal(date, restaurant, timePart, mealCreateRequest); - return BaseResponse.success(); - } - - @Operation(summary = "식단 추가", description = """ - 식단을 추가하는 API 입니다.

- 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

- 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) - 가격을 외부에서 입력받습니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 추가 성공"), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/with-price") - public BaseResponse createMealWithPrice( - @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, - @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, - @RequestBody MealCreateWithPriceRequest request) { - if (RestaurantType.isFixedType(restaurant)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } - - menuService.createMealWithPrice(date, restaurant, timePart, request); - return BaseResponse.success(); - } - - @Operation(summary = "변동 메뉴 식단 리스트 조회", description = """ - 변동 메뉴 식단 리스트를 조회하는 API 입니다. - 변동 메뉴 식당 (학생 식당, 도담, 기숙사 식당) 의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회합니다. - 일반적으로 학생식당과 도담의 경우 식단 여러개가 조회되고 기숙사식당은 한개만 조회됩니다.) - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "지원 하지 않는 식당 (고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("") - public BaseResponse> getMeal( - @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당 이름") @RequestParam("restaurant") Restaurant restaurant, - @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { - if (RestaurantType.isFixedType(restaurant)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } - - return BaseResponse.success( - menuService.findSpecificMeals(date, restaurant, timePart)); - } - - @Operation(summary = "식단 삭제", description = "식단을 삭제하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 삭제 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("/{mealId}") - public BaseResponse deleteMeal( - @Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { - menuService.deleteMeal(mealId); - return BaseResponse.success(); - } - - @Operation(summary = "메뉴 정보 리스트 조회", description = """ - 메뉴 정보 리스트를 조회하는 API 입니다.

- 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/{mealId}/menus-info") - public BaseResponse getMenusInMeal(@Parameter(description = "mealId") - @PathVariable("mealId") Long mealId) { - return BaseResponse.success(menuService.findMenusInMeal(mealId)); - } -} diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java deleted file mode 100644 index c49b1e5f..00000000 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/MenuController.java +++ /dev/null @@ -1,50 +0,0 @@ -package ssu.eatssu.domain.menu.presentation; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; -import ssu.eatssu.domain.menu.dto.CategoryMenuListCollection; -import ssu.eatssu.domain.menu.service.MenuService; -import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.restaurant.entity.RestaurantType; -import ssu.eatssu.global.handler.response.BaseException; -import ssu.eatssu.global.handler.response.BaseResponse; - -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; - -@RestController -@RequiredArgsConstructor -@RequestMapping("/menus") -@Tag(name = "Menu", description = "메뉴 API") -public class MenuController { - - private final MenuService menuService; - - @Operation(summary = "고정 메뉴 리스트 조회", description = """ - 고정 메뉴 리스트를 조회하는 API 입니다. - 메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 리스트를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("") - public BaseResponse getMenus( - @RequestParam("restaurant") Restaurant restaurant) { - if (RestaurantType.isVariableType(restaurant)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } - return BaseResponse.success(menuService.findMenusByRestaurant(restaurant)); - } - - -} diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/BriefMenuInformation.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/BriefMenuInformation.java similarity index 84% rename from src/main/java/ssu/eatssu/domain/menu/dto/BriefMenuInformation.java rename to src/main/java/ssu/eatssu/domain/menu/presentation/dto/BriefMenuInformation.java index 8dc40117..5c6644fa 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/BriefMenuInformation.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/BriefMenuInformation.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.dto; +package ssu.eatssu.domain.menu.presentation.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; @@ -16,7 +16,7 @@ public class BriefMenuInformation { @Schema(description = "메뉴 이름", example = "돈까스") private String name; - protected BriefMenuInformation(Menu menu) { + public BriefMenuInformation(Menu menu) { this.menuId = menu.getId(); this.name = menu.getName(); } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/CategoryWithMenusResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/CategoryWithMenusResponse.java new file mode 100644 index 00000000..8bd470a1 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/CategoryWithMenusResponse.java @@ -0,0 +1,26 @@ +package ssu.eatssu.domain.menu.presentation.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; + +import java.util.List; + +@Getter +@Schema(title = "카테고리 별 메뉴 목록 Response") +public class CategoryWithMenusResponse { + + @Schema(description = "카테고리명") + private final String category; + + @Schema(description = "카테고리의 메뉴 목록") + private final List menus; + + public CategoryWithMenusResponse(String category, List menus) { + this.category = category; + this.menus = menus; + } + + public static CategoryWithMenusResponse of(String category, List menus) { + return new CategoryWithMenusResponse(category, menus); + } +} diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MenuInformation.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/MenuResponse.java similarity index 60% rename from src/main/java/ssu/eatssu/domain/menu/dto/MenuInformation.java rename to src/main/java/ssu/eatssu/domain/menu/presentation/dto/MenuResponse.java index cc39409a..74e6a608 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MenuInformation.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/MenuResponse.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.dto; +package ssu.eatssu.domain.menu.presentation.dto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; @@ -10,7 +10,8 @@ @NoArgsConstructor @AllArgsConstructor @Schema(title = "고정 메뉴 정보") -public class MenuInformation { +public class MenuResponse { + @Schema(description = "메뉴 식별자", example = "2") private Long menuId; @@ -20,10 +21,10 @@ public class MenuInformation { @Schema(description = "가격", example = "5000") private Integer price; - @Schema(description = "메뉴 평점(평점이 없으면 null)", example = "4.4") - private Double mainRating; + @Schema(description = "메뉴 평점 (평점이 없으면 null) ", example = "4.4") + private Double rating; - public static MenuInformation from(Menu menu, Double mainRating) { - return new MenuInformation(menu.getId(), menu.getName(), menu.getPrice(), mainRating); + public static MenuResponse from(Menu menu, Double rating) { + return new MenuResponse(menu.getId(), menu.getName(), menu.getPrice(), rating); } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/MenuRestaurantResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/MenuRestaurantResponse.java new file mode 100644 index 00000000..23a17239 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/MenuRestaurantResponse.java @@ -0,0 +1,28 @@ +package ssu.eatssu.domain.menu.presentation.dto; + +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +@Getter +public class MenuRestaurantResponse { + + private final List categoryMenuListCollection; + + private MenuRestaurantResponse(List categoryMenu) { + this.categoryMenuListCollection = categoryMenu; + } + + public static MenuRestaurantResponse init() { + return new MenuRestaurantResponse(new ArrayList<>()); + } + + public void add(CategoryWithMenusResponse categoryWithMenusResponse) { + this.categoryMenuListCollection.add(categoryWithMenusResponse); + } + + public void addAll(List categoryWithMenusResponses) { + this.categoryMenuListCollection.addAll(categoryWithMenusResponses); + } +} diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MealCreateRequest.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateRequest.java similarity index 83% rename from src/main/java/ssu/eatssu/domain/menu/dto/MealCreateRequest.java rename to src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateRequest.java index 7d5ea152..7b0dc07c 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MealCreateRequest.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateRequest.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.dto; +package ssu.eatssu.domain.menu.presentation.dto.request; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MealCreateWithPriceRequest.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java similarity index 87% rename from src/main/java/ssu/eatssu/domain/menu/dto/MealCreateWithPriceRequest.java rename to src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java index 36a92c88..7035d835 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MealCreateWithPriceRequest.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.dto; +package ssu.eatssu.domain.menu.presentation.dto.request; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MealInformationResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealInformationResponse.java similarity index 78% rename from src/main/java/ssu/eatssu/domain/menu/dto/MealInformationResponse.java rename to src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealInformationResponse.java index 223ffe28..edebd957 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MealInformationResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealInformationResponse.java @@ -1,9 +1,10 @@ -package ssu.eatssu.domain.menu.dto; +package ssu.eatssu.domain.menu.presentation.dto.response; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import ssu.eatssu.domain.menu.presentation.dto.BriefMenuInformation; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; @@ -12,7 +13,7 @@ @Getter @NoArgsConstructor @AllArgsConstructor -@Schema(title = "오늘의 식단 리스트 조회 Res") +@Schema(title = "오늘의 식단 리스트 조회 Response") public class MealInformationResponse { @Schema(description = "식단 식별자 mealId", example = "12") @@ -31,12 +32,12 @@ public class MealInformationResponse { public static MealInformationResponse from(Meal meal, Double mainRating) { if (!meal.getMealMenus().isEmpty()) { List menusInformation = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(BriefMenuInformation::new).toList(); + .map(MealMenu::getMenu) + .map(BriefMenuInformation::new).toList(); return new MealInformationResponse(meal.getId(), - meal.getPrice(), - mainRating, menusInformation); + meal.getPrice(), + mainRating, menusInformation); } else { return null; } diff --git a/src/main/java/ssu/eatssu/domain/menu/dto/MenusInformationResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInformationResponse.java similarity index 88% rename from src/main/java/ssu/eatssu/domain/menu/dto/MenusInformationResponse.java rename to src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInformationResponse.java index 9359b250..488faee5 100644 --- a/src/main/java/ssu/eatssu/domain/menu/dto/MenusInformationResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInformationResponse.java @@ -1,9 +1,10 @@ -package ssu.eatssu.domain.menu.dto; +package ssu.eatssu.domain.menu.presentation.dto.response; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import ssu.eatssu.domain.menu.presentation.dto.BriefMenuInformation; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java new file mode 100644 index 00000000..4718547b --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java @@ -0,0 +1,137 @@ +package ssu.eatssu.domain.menu.presentation.rest; + + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.bind.annotation.*; +import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateRequest; +import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateWithPriceRequest; +import ssu.eatssu.domain.menu.presentation.dto.response.MealInformationResponse; +import ssu.eatssu.domain.menu.presentation.dto.response.MenusInformationResponse; +import ssu.eatssu.domain.menu.entity.constants.TimePart; +import ssu.eatssu.domain.menu.service.MenuService; +import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.restaurant.entity.RestaurantType; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponse; + +import java.util.Date; +import java.util.List; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/meals") +@Tag(name = "Meal", description = "식단 API") +public class MealController { + + private final MenuService menuService; + + @Operation(summary = "식단 추가", description = """ + 식단을 추가하는 API 입니다.

+ 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

+ 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 추가 성공"), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("") + public BaseResponse createMeal( + @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, + @RequestBody MealCreateRequest mealCreateRequest) { + if (RestaurantType.isFixedType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } + + menuService.createMeal(date, restaurant, timePart, mealCreateRequest); + return BaseResponse.success(); + } + + @Operation(summary = "식단 추가", description = """ + 식단을 추가하는 API 입니다.

+ 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

+ 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) + 가격을 외부에서 입력받습니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 추가 성공"), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/with-price") + public BaseResponse createMealWithPrice( + @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, + @RequestBody MealCreateWithPriceRequest request) { + if (RestaurantType.isFixedType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } + + menuService.createMealWithPrice(date, restaurant, timePart, request); + return BaseResponse.success(); + } + + @Operation(summary = "변동 메뉴 식단 리스트 조회", description = """ + 변동 메뉴 식단 리스트를 조회하는 API 입니다. + 변동 메뉴 식당 (학생 식당, 도담, 기숙사 식당) 의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회합니다. + 일반적으로 학생식당과 도담의 경우 식단 여러개가 조회되고 기숙사식당은 한개만 조회됩니다.) + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "지원 하지 않는 식당 (고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("") + public BaseResponse> getMeal( + @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "식당 이름") @RequestParam("restaurant") Restaurant restaurant, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { + + if (RestaurantType.isFixedType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } + + return BaseResponse.success(menuService.findSpecificMeals(date, restaurant, timePart)); + } + + @Operation(summary = "식단 삭제", description = "식단을 삭제하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 삭제 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("/{mealId}") + public BaseResponse deleteMeal( + @Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { + menuService.deleteMeal(mealId); + return BaseResponse.success(); + } + + @Operation(summary = "메뉴 정보 리스트 조회", description = """ + 메뉴 정보 리스트를 조회하는 API 입니다.

+ 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/{mealId}/menus-info") + public BaseResponse getMenusInMeal(@Parameter(description = "mealId") + @PathVariable("mealId") Long mealId) { + return BaseResponse.success(menuService.findMenusInMeal(mealId)); + } +} diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java new file mode 100644 index 00000000..96f01163 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java @@ -0,0 +1,45 @@ +package ssu.eatssu.domain.menu.presentation.rest; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import ssu.eatssu.domain.menu.presentation.dto.MenuRestaurantResponse; +import ssu.eatssu.domain.menu.service.MenuService; +import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.global.handler.response.BaseResponse; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/menus") +@Tag(name = "Menu", description = "메뉴 API") +public class MenuController { + + private final MenuService menuService; + + @Operation(summary = "고정 메뉴 리스트 조회", + description = + """ + 고정 메뉴 리스트를 조회하는 API 입니다. + 메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 리스트를 조회합니다. + """ + ) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping + public BaseResponse getMenus( + @RequestParam("restaurant") Restaurant restaurant) { + + return BaseResponse.success(menuService.findMenusByRestaurant(restaurant)); + } +} diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java b/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java index 6e840480..c6634caf 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java @@ -2,7 +2,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import ssu.eatssu.domain.menu.repository.QuerydslMealRatingCalculator; +import ssu.eatssu.domain.menu.persistence.QuerydslMealRatingCalculator; @Service @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java index e02840d7..0d76b774 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java @@ -3,7 +3,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import ssu.eatssu.domain.menu.repository.QuerydslMenuRatingCalculator; +import ssu.eatssu.domain.menu.persistence.QuerydslMenuRatingCalculator; @Service @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index a3cd672f..ad176510 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -1,17 +1,30 @@ package ssu.eatssu.domain.menu.service; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; + import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; -import ssu.eatssu.domain.menu.dto.*; +import ssu.eatssu.domain.menu.presentation.dto.CategoryWithMenusResponse; +import ssu.eatssu.domain.menu.presentation.dto.MenuRestaurantResponse; +import ssu.eatssu.domain.menu.presentation.dto.MenuResponse; +import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateRequest; +import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateWithPriceRequest; +import ssu.eatssu.domain.menu.presentation.dto.response.MealInformationResponse; +import ssu.eatssu.domain.menu.presentation.dto.response.MenusInformationResponse; import ssu.eatssu.domain.menu.entity.*; -import ssu.eatssu.domain.menu.repository.MealMenuRepository; -import ssu.eatssu.domain.menu.repository.MealRepository; -import ssu.eatssu.domain.menu.repository.MenuCategoryRepository; -import ssu.eatssu.domain.menu.repository.MenuRepository; +import ssu.eatssu.domain.menu.entity.constants.TimePart; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.menu.persistence.MealMenuRepository; +import ssu.eatssu.domain.menu.persistence.MealRepository; +import ssu.eatssu.domain.menu.persistence.MenuCategoryRepository; +import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.menu.util.MenuValidator; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.restaurant.entity.RestaurantType; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; @@ -33,36 +46,57 @@ public class MenuService { private final MealRatingService mealRatingService; private final MenuRatingService menuRatingService; - public CategoryMenuListCollection findMenusByRestaurant(Restaurant restaurant) { - List categories = menuCategoryRepository.findAllByRestaurant(restaurant); - CategoryMenuListCollection collection = CategoryMenuListCollection.init(); + public MenuRestaurantResponse findMenusByRestaurant(Restaurant restaurant) { + validateMenuRestaurant(restaurant); + + List categories = findCategoriesByRestaurant(restaurant); + + MenuRestaurantResponse response = MenuRestaurantResponse.init(); + for (MenuCategory category : categories) { - List menus = menuRepository.findAllByRestaurantAndCategory( - restaurant, category).stream() - .filter(menu -> !menu.isDiscontinued()) - .map(menu -> MenuInformation.from(menu, menuRatingService.getMainRatingAverage(menu.getId()))) - .toList(); - CategoryMenuList categoryMenuList = new CategoryMenuList(category.getName(), menus); - collection.add(categoryMenuList); + List menus = getMenuResponsesByRestaurantAndCategory(restaurant, category); + response.add(CategoryWithMenusResponse.of(category.getName(), menus)); } - return collection; + return response; + } + + private List findCategoriesByRestaurant(Restaurant restaurant) { + return menuCategoryRepository.findAllByRestaurant(restaurant); + } + + @NotNull + private List getMenuResponsesByRestaurantAndCategory(Restaurant restaurant, + MenuCategory category) { + return menuRepository.findAllByRestaurantAndCategory(restaurant, category) + .stream() + .filter(Menu::isContinued) + .map(menu -> MenuResponse.from(menu, + menuRatingService.getMainRatingAverage(menu.getId()))) + .toList(); + } + + private static void validateMenuRestaurant(Restaurant restaurant) { + if (RestaurantType.isVariableType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } } public List findSpecificMeals(Date date, - Restaurant restaurant, - TimePart timePart) { + Restaurant restaurant, + TimePart timePart) { List meals = getMeals(date, timePart, restaurant); return meals.stream() - .map(meal -> MealInformationResponse.from(meal, mealRatingService.getMainRatingAverage(meal.getId()))) - .toList(); + .map(meal -> MealInformationResponse.from(meal, + mealRatingService.getMainRatingAverage(meal.getId()))) + .toList(); } // TODO 삭제할까 말까 public void createMeal(Date date, Restaurant restaurant, TimePart timePart, - MealCreateRequest request) { + MealCreateRequest request) { List meals = getMeals(date, timePart, restaurant); if (MenuValidator.validateExistedMeal(meals, request.menuNames())) { @@ -79,7 +113,7 @@ public void createMeal(Date date, Restaurant restaurant, TimePart timePart, * 가격 추가 용 */ public void createMealWithPrice(Date date, Restaurant restaurant, TimePart timePart, - MealCreateWithPriceRequest request) { + MealCreateWithPriceRequest request) { List meals = getMeals(date, timePart, restaurant); if (MenuValidator.validateExistedMeal(meals, request.menuNames())) { @@ -101,8 +135,8 @@ public void deleteMeal(Long mealId) { Meal meal = getMeal(mealId); List menus = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .toList(); + .map(MealMenu::getMenu) + .toList(); mealRepository.delete(meal); mealRepository.flush(); @@ -119,39 +153,39 @@ private void addMenusToMeal(Meal meal, Restaurant restaurant, List menuN private Menu createMenuIfNotExists(String menuName, Restaurant restaurant) { return menuRepository.existsByNameAndRestaurant(menuName, restaurant) ? - getMenu(menuName, restaurant) : - menuRepository.save(Menu.createVariable(menuName, restaurant)); + getMenu(menuName, restaurant) : + menuRepository.save(Menu.createVariable(menuName, restaurant)); } private void createMealMenu(Meal meal, Menu menu) { MealMenu mealMenu = MealMenu.builder() - .menu(menu) - .meal(meal) - .build(); + .menu(menu) + .meal(meal) + .build(); mealMenuRepository.save(mealMenu); } private Menu getMenu(String addMenuName, Restaurant restaurant) { Menu menu = menuRepository.findByNameAndRestaurant(addMenuName, restaurant) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); return menu; } private Meal getMeal(Long mealId) { Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); return meal; } private List getMeals(Date date, TimePart timePart, Restaurant restaurant) { List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(date, - timePart, restaurant); + timePart, restaurant); return meals; } private void deleteUnusedMenus(List menus) { menus.stream() - .filter(menu -> menu.getMealMenus().isEmpty()) - .forEach(menuRepository::delete); + .filter(menu -> menu.getMealMenus().isEmpty()) + .forEach(menuRepository::delete); } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index 9f8fff4d..53d2a9e1 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import ssu.eatssu.domain.auth.security.CustomUserDetails; -import ssu.eatssu.domain.menu.entity.MenuType; +import ssu.eatssu.domain.menu.entity.constants.MenuType; import ssu.eatssu.domain.review.dto.*; import ssu.eatssu.domain.review.service.ReviewService; import ssu.eatssu.domain.slice.dto.SliceResponse; diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java index 7056a21e..cf422bc9 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java @@ -4,10 +4,10 @@ import org.springframework.stereotype.Service; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; -import ssu.eatssu.domain.menu.repository.QuerydslMealRatingCalculator; -import ssu.eatssu.domain.menu.repository.QuerydslMealRatingCounter; -import ssu.eatssu.domain.menu.repository.QuerydslMenuRatingCalculator; -import ssu.eatssu.domain.menu.repository.QuerydslMenuRatingCounter; +import ssu.eatssu.domain.menu.persistence.QuerydslMealRatingCalculator; +import ssu.eatssu.domain.menu.persistence.QuerydslMealRatingCounter; +import ssu.eatssu.domain.menu.persistence.QuerydslMenuRatingCalculator; +import ssu.eatssu.domain.menu.persistence.QuerydslMenuRatingCounter; import ssu.eatssu.domain.rating.entity.RatingCalculator; import ssu.eatssu.domain.review.dto.RatingAverages; import ssu.eatssu.domain.review.dto.ReviewRatingCount; diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index 25219612..a5eeea65 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -7,8 +7,8 @@ import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; -import ssu.eatssu.domain.menu.repository.MealRepository; -import ssu.eatssu.domain.menu.repository.MenuRepository; +import ssu.eatssu.domain.menu.persistence.MealRepository; +import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.rating.entity.RatingCalculator; import ssu.eatssu.domain.review.dto.*; import ssu.eatssu.domain.review.entity.Review; diff --git a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java index cfb02645..2e796956 100644 --- a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java +++ b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java @@ -12,9 +12,9 @@ import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; -import ssu.eatssu.domain.menu.entity.MenuType; -import ssu.eatssu.domain.menu.repository.MealRepository; -import ssu.eatssu.domain.menu.repository.MenuRepository; +import ssu.eatssu.domain.menu.entity.constants.MenuType; +import ssu.eatssu.domain.menu.persistence.MealRepository; +import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.review.dto.ReviewDetail; import ssu.eatssu.domain.user.dto.MyReviewDetail; import ssu.eatssu.domain.review.entity.Review; diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java index 63214a01..5f4bd88e 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java @@ -4,22 +4,22 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import ssu.eatssu.domain.menu.dto.MealCreateRequest; -import ssu.eatssu.domain.menu.dto.MenusInformationResponse; +import ssu.eatssu.domain.menu.presentation.dto.MenuRestaurantResponse; +import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateRequest; +import ssu.eatssu.domain.menu.presentation.dto.response.MenusInformationResponse; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.MenuCategory; -import ssu.eatssu.domain.menu.repository.MealRepository; -import ssu.eatssu.domain.menu.repository.MenuCategoryRepository; -import ssu.eatssu.domain.menu.repository.MenuRepository; +import ssu.eatssu.domain.menu.persistence.MealRepository; +import ssu.eatssu.domain.menu.persistence.MenuCategoryRepository; +import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.restaurant.entity.Restaurant; import java.sql.Date; import java.util.ArrayList; import java.util.List; -import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; -import static ssu.eatssu.domain.menu.entity.TimePart.LUNCH; +import static ssu.eatssu.domain.menu.entity.constants.TimePart.LUNCH; @SpringBootTest class MenuServiceTest { @@ -50,24 +50,20 @@ void setUp() { MenuCategory category1 = MenuCategory.builder().name("분식").restaurant(foodCourt).build(); MenuCategory category2 = MenuCategory.builder().name("한식").restaurant(foodCourt).build(); + menus.add(Menu.createFixed("라면", foodCourt, 3000, category1)); menus.add(Menu.createFixed("떡볶이", foodCourt, 5000, category2)); menus.add(Menu.createFixed("짜게치", foodCourt, 4000, category1)); + menuCategoryRepository.save(category1); menuCategoryRepository.save(category2); menuRepository.saveAll(menus); // when - Map response = menuService.findMenusByRestaurant(foodCourt); + MenuRestaurantResponse response = menuService.findMenusByRestaurant(foodCourt); // then - assertThat(response).hasSize(2); - for (String key : response.keySet()) { - System.out.print(key + " : "); - response.get(key).getMenusInformationList().forEach(menu -> System.out.print(menu.getName() + " ")); - System.out.print("\n"); - } - + assertThat(response.getCategoryMenuListCollection()).hasSize(2); } @Test diff --git a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java index 81523db0..4cf64fbe 100644 --- a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java @@ -9,7 +9,7 @@ import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Menu; -import ssu.eatssu.domain.menu.repository.MenuRepository; +import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.ReviewCreateRequest; import ssu.eatssu.domain.review.dto.ReviewUpdateRequest; From 17f7439f56137f03168b34e0eef3c6ce8b7684da Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Fri, 18 Oct 2024 00:19:29 +0900 Subject: [PATCH 134/399] =?UTF-8?q?refactor=20(Meal)=20:=20=EC=8B=9D?= =?UTF-8?q?=EB=8B=A8=20=EC=A1=B0=ED=9A=8C=20=EB=A1=9C=EC=A7=81=EC=9D=84=20?= =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...nformation.java => BriefMenuResponse.java} | 4 +- ...nResponse.java => MealDetailResponse.java} | 35 ++++++------ .../response/MenusInformationResponse.java | 8 +-- .../presentation/rest/MealController.java | 14 +++-- .../domain/menu/service/MealService.java | 54 +++++++++++++++++++ .../domain/menu/service/MenuService.java | 6 +-- 6 files changed, 86 insertions(+), 35 deletions(-) rename src/main/java/ssu/eatssu/domain/menu/presentation/dto/{BriefMenuInformation.java => BriefMenuResponse.java} (86%) rename src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/{MealInformationResponse.java => MealDetailResponse.java} (54%) create mode 100644 src/main/java/ssu/eatssu/domain/menu/service/MealService.java diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/BriefMenuInformation.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/BriefMenuResponse.java similarity index 86% rename from src/main/java/ssu/eatssu/domain/menu/presentation/dto/BriefMenuInformation.java rename to src/main/java/ssu/eatssu/domain/menu/presentation/dto/BriefMenuResponse.java index 5c6644fa..73d545f0 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/BriefMenuInformation.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/BriefMenuResponse.java @@ -8,7 +8,7 @@ @Getter @NoArgsConstructor @Schema(title = "메뉴 간단 설명") -public class BriefMenuInformation { +public class BriefMenuResponse { @Schema(description = "메뉴 식별자", example = "2") private Long menuId; @@ -16,7 +16,7 @@ public class BriefMenuInformation { @Schema(description = "메뉴 이름", example = "돈까스") private String name; - public BriefMenuInformation(Menu menu) { + public BriefMenuResponse(Menu menu) { this.menuId = menu.getId(); this.name = menu.getName(); } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealInformationResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java similarity index 54% rename from src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealInformationResponse.java rename to src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java index edebd957..608bab83 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealInformationResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java @@ -4,7 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; -import ssu.eatssu.domain.menu.presentation.dto.BriefMenuInformation; +import ssu.eatssu.domain.menu.presentation.dto.BriefMenuResponse; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; @@ -14,7 +14,7 @@ @NoArgsConstructor @AllArgsConstructor @Schema(title = "오늘의 식단 리스트 조회 Response") -public class MealInformationResponse { +public class MealDetailResponse { @Schema(description = "식단 식별자 mealId", example = "12") private Long mealId; @@ -23,24 +23,23 @@ public class MealInformationResponse { private Integer price; @Schema(description = "식단 평점(평점이 없으면 null)", example = "4.4") - private Double mainRating; + private Double rating; @Schema(description = "식단 속 메뉴 정보 리스트") - private List menusInformationList; - - - public static MealInformationResponse from(Meal meal, Double mainRating) { - if (!meal.getMealMenus().isEmpty()) { - List menusInformation = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(BriefMenuInformation::new).toList(); - - return new MealInformationResponse(meal.getId(), - meal.getPrice(), - mainRating, menusInformation); - } else { - return null; - } + private List briefMenus; + + public static MealDetailResponse from(Meal meal, Double mainRating) { + List briefMenus = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(BriefMenuResponse::new) + .toList(); + + return new MealDetailResponse( + meal.getId(), + meal.getPrice(), + mainRating, + briefMenus + ); } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInformationResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInformationResponse.java index 488faee5..117ccfbd 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInformationResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInformationResponse.java @@ -4,7 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; -import ssu.eatssu.domain.menu.presentation.dto.BriefMenuInformation; +import ssu.eatssu.domain.menu.presentation.dto.BriefMenuResponse; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; @@ -17,13 +17,13 @@ public class MenusInformationResponse { @Schema(description = "식단 속 메뉴 목록", example = "[]") - private List menusInformation; + private List menusInformation; public static MenusInformationResponse from(Meal meal) { if (!meal.getMealMenus().isEmpty()) { - List menusInformation = meal.getMealMenus().stream() + List menusInformation = meal.getMealMenus().stream() .map(MealMenu::getMenu) - .map(BriefMenuInformation::new).toList(); + .map(BriefMenuResponse::new).toList(); return new MenusInformationResponse(menusInformation); } else { return null; diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java index 4718547b..716eb6e5 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java @@ -13,9 +13,10 @@ import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateRequest; import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateWithPriceRequest; -import ssu.eatssu.domain.menu.presentation.dto.response.MealInformationResponse; +import ssu.eatssu.domain.menu.presentation.dto.response.MealDetailResponse; import ssu.eatssu.domain.menu.presentation.dto.response.MenusInformationResponse; import ssu.eatssu.domain.menu.entity.constants.TimePart; +import ssu.eatssu.domain.menu.service.MealService; import ssu.eatssu.domain.menu.service.MenuService; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.restaurant.entity.RestaurantType; @@ -34,6 +35,7 @@ public class MealController { private final MenuService menuService; + private final MealService mealService; @Operation(summary = "식단 추가", description = """ 식단을 추가하는 API 입니다.

@@ -89,7 +91,7 @@ public BaseResponse createMealWithPrice( @Operation(summary = "변동 메뉴 식단 리스트 조회", description = """ 변동 메뉴 식단 리스트를 조회하는 API 입니다. 변동 메뉴 식당 (학생 식당, 도담, 기숙사 식당) 의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회합니다. - 일반적으로 학생식당과 도담의 경우 식단 여러개가 조회되고 기숙사식당은 한개만 조회됩니다.) + 일반적으로 학생식당과 도담의 경우 식단 여러 개가 조회되고 기숙사식당은 한 개만 조회됩니다.) """) @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공"), @@ -97,16 +99,12 @@ public BaseResponse createMealWithPrice( @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("") - public BaseResponse> getMeal( + public BaseResponse> getMeal( @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, @Parameter(description = "식당 이름") @RequestParam("restaurant") Restaurant restaurant, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { - if (RestaurantType.isFixedType(restaurant)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } - - return BaseResponse.success(menuService.findSpecificMeals(date, restaurant, timePart)); + return BaseResponse.success(mealService.getMealDetailsByDateAndRestaurantAndTimePart(date, restaurant, timePart)); } @Operation(summary = "식단 삭제", description = "식단을 삭제하는 API 입니다.") diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MealService.java b/src/main/java/ssu/eatssu/domain/menu/service/MealService.java new file mode 100644 index 00000000..09f4c9ca --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/menu/service/MealService.java @@ -0,0 +1,54 @@ +package ssu.eatssu.domain.menu.service; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; + +import java.util.Date; +import java.util.List; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.constants.TimePart; +import ssu.eatssu.domain.menu.persistence.MealRepository; +import ssu.eatssu.domain.menu.presentation.dto.response.MealDetailResponse; +import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.restaurant.entity.RestaurantType; +import ssu.eatssu.global.handler.response.BaseException; + +@Slf4j +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class MealService { + + private final MealRepository mealRepository; + private final MealRatingService mealRatingService; + + public List getMealDetailsByDateAndRestaurantAndTimePart( + Date date, + Restaurant restaurant, + TimePart timePart) { + + validateMealRestaurant(restaurant); + + /** + * 해당 날짜, 시간대, 식당에 해당하는 식단을 조회합니다. 식단은 여러 개 존재할 수 있습니다. + */ + List meals = findMealsByDateAndTimePartAndRestaurant(date, timePart, restaurant); + + return meals.stream() + .map(meal -> MealDetailResponse.from(meal, mealRatingService.getMainRatingAverage(meal.getId()))) + .toList(); + } + + private List findMealsByDateAndTimePartAndRestaurant(Date date, TimePart timePart, Restaurant restaurant) { + return mealRepository.findAllByDateAndTimePartAndRestaurant(date, timePart, restaurant); + } + + private void validateMealRestaurant(Restaurant restaurant) { + if (RestaurantType.isFixedType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } + } +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index ad176510..a7ae586a 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -12,7 +12,7 @@ import ssu.eatssu.domain.menu.presentation.dto.MenuResponse; import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateRequest; import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateWithPriceRequest; -import ssu.eatssu.domain.menu.presentation.dto.response.MealInformationResponse; +import ssu.eatssu.domain.menu.presentation.dto.response.MealDetailResponse; import ssu.eatssu.domain.menu.presentation.dto.response.MenusInformationResponse; import ssu.eatssu.domain.menu.entity.*; import ssu.eatssu.domain.menu.entity.constants.TimePart; @@ -82,13 +82,13 @@ private static void validateMenuRestaurant(Restaurant restaurant) { } } - public List findSpecificMeals(Date date, + public List findSpecificMeals(Date date, Restaurant restaurant, TimePart timePart) { List meals = getMeals(date, timePart, restaurant); return meals.stream() - .map(meal -> MealInformationResponse.from(meal, + .map(meal -> MealDetailResponse.from(meal, mealRatingService.getMainRatingAverage(meal.getId()))) .toList(); } From 67889b64d19e5dad0648f92829be10ab9c86d46f Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Fri, 18 Oct 2024 01:12:03 +0900 Subject: [PATCH 135/399] =?UTF-8?q?refactor=20(Meal)=20:=20Menu=EC=99=80?= =?UTF-8?q?=20Meal=20Service=EB=A5=BC=20=EB=B6=84=EB=A6=AC=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...Response.java => MenusInMealResponse.java} | 22 ++-- .../presentation/rest/MealController.java | 18 +-- .../presentation/rest/MenuController.java | 2 +- .../domain/menu/service/MealService.java | 95 +++++++++++++- .../domain/menu/service/MenuService.java | 120 ++---------------- .../domain/menu/service/MenuServiceTest.java | 108 ++++++++-------- 6 files changed, 171 insertions(+), 194 deletions(-) rename src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/{MenusInformationResponse.java => MenusInMealResponse.java} (52%) diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInformationResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java similarity index 52% rename from src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInformationResponse.java rename to src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java index 117ccfbd..9b4dfa21 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInformationResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java @@ -14,19 +14,17 @@ @NoArgsConstructor @AllArgsConstructor @Schema(title ="식단 속 메뉴 정보 리스트") -public class MenusInformationResponse { +public class MenusInMealResponse { @Schema(description = "식단 속 메뉴 목록", example = "[]") - private List menusInformation; + private List briefMenus; - public static MenusInformationResponse from(Meal meal) { - if (!meal.getMealMenus().isEmpty()) { - List menusInformation = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(BriefMenuResponse::new).toList(); - return new MenusInformationResponse(menusInformation); - } else { - return null; - } + public static MenusInMealResponse from(Meal meal) { + List menusInformation = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(BriefMenuResponse::new) + .toList(); + + return new MenusInMealResponse(menusInformation); } -} \ No newline at end of file +} diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java index 716eb6e5..d02a6ad3 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java @@ -14,7 +14,7 @@ import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateRequest; import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateWithPriceRequest; import ssu.eatssu.domain.menu.presentation.dto.response.MealDetailResponse; -import ssu.eatssu.domain.menu.presentation.dto.response.MenusInformationResponse; +import ssu.eatssu.domain.menu.presentation.dto.response.MenusInMealResponse; import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.menu.service.MealService; import ssu.eatssu.domain.menu.service.MenuService; @@ -58,7 +58,7 @@ public BaseResponse createMeal( throw new BaseException(NOT_SUPPORT_RESTAURANT); } - menuService.createMeal(date, restaurant, timePart, mealCreateRequest); + mealService.createMeal(date, restaurant, timePart, mealCreateRequest); return BaseResponse.success(); } @@ -84,7 +84,7 @@ public BaseResponse createMealWithPrice( throw new BaseException(NOT_SUPPORT_RESTAURANT); } - menuService.createMealWithPrice(date, restaurant, timePart, request); + mealService.createMealWithPrice(date, restaurant, timePart, request); return BaseResponse.success(); } @@ -99,12 +99,13 @@ public BaseResponse createMealWithPrice( @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("") - public BaseResponse> getMeal( + public BaseResponse> getMealDetail( @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, @Parameter(description = "식당 이름") @RequestParam("restaurant") Restaurant restaurant, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { - return BaseResponse.success(mealService.getMealDetailsByDateAndRestaurantAndTimePart(date, restaurant, timePart)); + return BaseResponse.success( + mealService.getMealDetailsByDateAndRestaurantAndTimePart(date, restaurant, timePart)); } @Operation(summary = "식단 삭제", description = "식단을 삭제하는 API 입니다.") @@ -115,7 +116,8 @@ public BaseResponse> getMeal( @DeleteMapping("/{mealId}") public BaseResponse deleteMeal( @Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { - menuService.deleteMeal(mealId); + + mealService.deleteByMealId(mealId); return BaseResponse.success(); } @@ -128,8 +130,8 @@ public BaseResponse deleteMeal( @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("/{mealId}/menus-info") - public BaseResponse getMenusInMeal(@Parameter(description = "mealId") + public BaseResponse getMenusInMeal(@Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { - return BaseResponse.success(menuService.findMenusInMeal(mealId)); + return BaseResponse.success(mealService.getMenusInMealByMealId(mealId)); } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java index 96f01163..01b90c36 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java @@ -40,6 +40,6 @@ public class MenuController { public BaseResponse getMenus( @RequestParam("restaurant") Restaurant restaurant) { - return BaseResponse.success(menuService.findMenusByRestaurant(restaurant)); + return BaseResponse.success(menuService.getMenusByRestaurant(restaurant)); } } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MealService.java b/src/main/java/ssu/eatssu/domain/menu/service/MealService.java index 09f4c9ca..6831c26e 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MealService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MealService.java @@ -9,12 +9,19 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.MealMenu; +import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.constants.TimePart; +import ssu.eatssu.domain.menu.persistence.MealMenuRepository; import ssu.eatssu.domain.menu.persistence.MealRepository; +import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateRequest; +import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateWithPriceRequest; import ssu.eatssu.domain.menu.presentation.dto.response.MealDetailResponse; +import ssu.eatssu.domain.menu.presentation.dto.response.MenusInMealResponse; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.restaurant.entity.RestaurantType; import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponseStatus; @Slf4j @Service @@ -23,18 +30,21 @@ public class MealService { private final MealRepository mealRepository; + private final MealMenuRepository mealMenuRepository; private final MealRatingService mealRatingService; + private final MenuService menuService; + + public MenusInMealResponse getMenusInMealByMealId(Long mealId) { + Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + + return MenusInMealResponse.from(meal); + } public List getMealDetailsByDateAndRestaurantAndTimePart( - Date date, - Restaurant restaurant, - TimePart timePart) { + Date date, Restaurant restaurant, TimePart timePart) { validateMealRestaurant(restaurant); - /** - * 해당 날짜, 시간대, 식당에 해당하는 식단을 조회합니다. 식단은 여러 개 존재할 수 있습니다. - */ List meals = findMealsByDateAndTimePartAndRestaurant(date, timePart, restaurant); return meals.stream() @@ -51,4 +61,75 @@ private void validateMealRestaurant(Restaurant restaurant) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } } -} \ No newline at end of file + + @Transactional + public void createMeal(Date date, Restaurant restaurant, TimePart timePart, MealCreateRequest request) { + createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), null); + } + + @Transactional + public void createMealWithPrice(Date date, Restaurant restaurant, TimePart timePart, MealCreateWithPriceRequest request) { + createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), request.price()); + } + + private void createMealWithOptionalPrice(Date date, Restaurant restaurant, TimePart timePart, List menuNames, Integer price) { + if (validateExistedMeal(date, timePart, restaurant, menuNames)) { + return; // 중복된 메뉴가 있는 경우 바로 종료 + } + + Meal meal = new Meal(date, timePart, restaurant, price); + mealRepository.save(meal); + addMenusToMeal(meal, restaurant, menuNames); + } + + private boolean validateExistedMeal(Date date, TimePart timePart, Restaurant restaurant, List menuNames) { + List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(date, timePart, restaurant); + + List sortedRequestMenuNames = menuNames.stream() + .sorted() + .toList(); + + return meals.stream().anyMatch(meal -> { + List sortedMenuNames = meal.getMenuNames().stream() + .sorted() + .toList(); + return sortedMenuNames.equals(sortedRequestMenuNames); + }); + } + + private void addMenusToMeal(Meal meal, Restaurant restaurant, List menuNames) { + for (String menuName : menuNames) { + Menu menu = menuService.createOrGetMenu(menuName, restaurant); + createMealMenu(meal, menu); + } + } + + private void createMealMenu(Meal meal, Menu menu) { + MealMenu mealMenu = MealMenu.builder() + .menu(menu) + .meal(meal) + .build(); + + mealMenuRepository.save(mealMenu); + } + + @Transactional + public void deleteByMealId(Long mealId) { + Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + + List menus = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .toList(); + + mealRepository.delete(meal); + mealRepository.flush(); + + deleteUnusedMenus(menus); + } + + private void deleteUnusedMenus(List menus) { + menus.stream() + .filter(menu -> menu.getMealMenus().isEmpty()) + .forEach(menuService::deleteMenu); + } +} diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index a7ae586a..cb1717c4 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -10,25 +10,17 @@ import ssu.eatssu.domain.menu.presentation.dto.CategoryWithMenusResponse; import ssu.eatssu.domain.menu.presentation.dto.MenuRestaurantResponse; import ssu.eatssu.domain.menu.presentation.dto.MenuResponse; -import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateRequest; -import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateWithPriceRequest; -import ssu.eatssu.domain.menu.presentation.dto.response.MealDetailResponse; -import ssu.eatssu.domain.menu.presentation.dto.response.MenusInformationResponse; import ssu.eatssu.domain.menu.entity.*; -import ssu.eatssu.domain.menu.entity.constants.TimePart; -import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.persistence.MealMenuRepository; import ssu.eatssu.domain.menu.persistence.MealRepository; import ssu.eatssu.domain.menu.persistence.MenuCategoryRepository; import ssu.eatssu.domain.menu.persistence.MenuRepository; -import ssu.eatssu.domain.menu.util.MenuValidator; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.restaurant.entity.RestaurantType; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; -import java.util.Date; import java.util.List; @@ -39,14 +31,10 @@ public class MenuService { private final MenuRepository menuRepository; - private final MealRepository mealRepository; - private final MealMenuRepository mealMenuRepository; private final MenuCategoryRepository menuCategoryRepository; - - private final MealRatingService mealRatingService; private final MenuRatingService menuRatingService; - public MenuRestaurantResponse findMenusByRestaurant(Restaurant restaurant) { + public MenuRestaurantResponse getMenusByRestaurant(Restaurant restaurant) { validateMenuRestaurant(restaurant); List categories = findCategoriesByRestaurant(restaurant); @@ -54,7 +42,8 @@ public MenuRestaurantResponse findMenusByRestaurant(Restaurant restaurant) { MenuRestaurantResponse response = MenuRestaurantResponse.init(); for (MenuCategory category : categories) { - List menus = getMenuResponsesByRestaurantAndCategory(restaurant, category); + List menus = getMenuResponsesByRestaurantAndCategory(restaurant, + category); response.add(CategoryWithMenusResponse.of(category.getName(), menus)); } @@ -82,110 +71,21 @@ private static void validateMenuRestaurant(Restaurant restaurant) { } } - public List findSpecificMeals(Date date, - Restaurant restaurant, - TimePart timePart) { - List meals = getMeals(date, timePart, restaurant); - - return meals.stream() - .map(meal -> MealDetailResponse.from(meal, - mealRatingService.getMainRatingAverage(meal.getId()))) - .toList(); - } - - - // TODO 삭제할까 말까 - public void createMeal(Date date, Restaurant restaurant, TimePart timePart, - MealCreateRequest request) { - List meals = getMeals(date, timePart, restaurant); - - if (MenuValidator.validateExistedMeal(meals, request.menuNames())) { - return; - } - Meal meal = new Meal(date, timePart, restaurant); - - mealRepository.save(meal); - - addMenusToMeal(meal, restaurant, request.menuNames()); - } - - /** - * 가격 추가 용 - */ - public void createMealWithPrice(Date date, Restaurant restaurant, TimePart timePart, - MealCreateWithPriceRequest request) { - List meals = getMeals(date, timePart, restaurant); - - if (MenuValidator.validateExistedMeal(meals, request.menuNames())) { - return; - } - Meal meal = new Meal(date, timePart, restaurant, request.price()); - - mealRepository.save(meal); - - addMenusToMeal(meal, restaurant, request.menuNames()); - } - - public MenusInformationResponse findMenusInMeal(Long mealId) { - Meal meal = getMeal(mealId); - return MenusInformationResponse.from(meal); - } - - public void deleteMeal(Long mealId) { - Meal meal = getMeal(mealId); - - List menus = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .toList(); - - mealRepository.delete(meal); - mealRepository.flush(); - - deleteUnusedMenus(menus); - } - - private void addMenusToMeal(Meal meal, Restaurant restaurant, List menuNames) { - for (String menuName : menuNames) { - Menu menu = createMenuIfNotExists(menuName, restaurant); - createMealMenu(meal, menu); - } - } - - private Menu createMenuIfNotExists(String menuName, Restaurant restaurant) { + @Transactional + public Menu createOrGetMenu(String menuName, Restaurant restaurant) { return menuRepository.existsByNameAndRestaurant(menuName, restaurant) ? - getMenu(menuName, restaurant) : + findMenu(menuName, restaurant) : menuRepository.save(Menu.createVariable(menuName, restaurant)); } - private void createMealMenu(Meal meal, Menu menu) { - MealMenu mealMenu = MealMenu.builder() - .menu(menu) - .meal(meal) - .build(); - mealMenuRepository.save(mealMenu); - } - - private Menu getMenu(String addMenuName, Restaurant restaurant) { + private Menu findMenu(String addMenuName, Restaurant restaurant) { Menu menu = menuRepository.findByNameAndRestaurant(addMenuName, restaurant) .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); return menu; } - private Meal getMeal(Long mealId) { - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); - return meal; - } - - private List getMeals(Date date, TimePart timePart, Restaurant restaurant) { - List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(date, - timePart, restaurant); - return meals; - } - - private void deleteUnusedMenus(List menus) { - menus.stream() - .filter(menu -> menu.getMealMenus().isEmpty()) - .forEach(menuRepository::delete); + @Transactional + public void deleteMenu(Menu menu) { + menuRepository.delete(menu); } } \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java index 5f4bd88e..30363fcb 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java @@ -5,8 +5,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import ssu.eatssu.domain.menu.presentation.dto.MenuRestaurantResponse; -import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateRequest; -import ssu.eatssu.domain.menu.presentation.dto.response.MenusInformationResponse; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.menu.persistence.MealRepository; @@ -14,12 +12,10 @@ import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import java.sql.Date; import java.util.ArrayList; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; -import static ssu.eatssu.domain.menu.entity.constants.TimePart.LUNCH; @SpringBootTest class MenuServiceTest { @@ -60,61 +56,61 @@ void setUp() { menuRepository.saveAll(menus); // when - MenuRestaurantResponse response = menuService.findMenusByRestaurant(foodCourt); + MenuRestaurantResponse response = menuService.getMenusByRestaurant(foodCourt); // then assertThat(response.getCategoryMenuListCollection()).hasSize(2); } - @Test - void 식단을_생성한다() { - 식단_생성_요청(); - - // then - assertThat(mealRepository.findAll()).hasSize(1); - assertThat(menuRepository.findAll()).hasSize(3); - assertThat(menuRepository.findAll()) - .extracting(Menu::getName) - .containsExactly("돈까스", "샐러드", "김치"); - } - - private Long 식단_생성_요청() { - // given - Date date = Date.valueOf("2024-01-03"); - Restaurant haksik = Restaurant.from("HAKSIK"); - MealCreateRequest request = new MealCreateRequest(List.of("돈까스", "샐러드", "김치")); - - // when - menuService.createMeal(date, haksik, LUNCH, request); - - return mealRepository.findAll().stream() - .findFirst() - .orElseThrow(() -> new RuntimeException("Meal not created")) - .getId(); - } - - @Test - void 식단을_조회한다() { - // given - Long createdMealId = 식단_생성_요청(); - - // when - MenusInformationResponse response = menuService.findMenusInMeal(createdMealId); - - // then - assertThat(response.getMenusInformation()).hasSize(3); - } - - @Test - void 식단을_삭제한다() { - // given - Long createdMealId = 식단_생성_요청(); - - // when - menuService.deleteMeal(createdMealId); - - // then - assertThat(mealRepository.findAll()).hasSize(0); - assertThat(menuRepository.findAll()).hasSize(0); - } +// @Test +// void 식단을_생성한다() { +// 식단_생성_요청(); +// +// // then +// assertThat(mealRepository.findAll()).hasSize(1); +// assertThat(menuRepository.findAll()).hasSize(3); +// assertThat(menuRepository.findAll()) +// .extracting(Menu::getName) +// .containsExactly("돈까스", "샐러드", "김치"); +// } +// +// private Long 식단_생성_요청() { +// // given +// Date date = Date.valueOf("2024-01-03"); +// Restaurant haksik = Restaurant.from("HAKSIK"); +// MealCreateRequest request = new MealCreateRequest(List.of("돈까스", "샐러드", "김치")); +// +// // when +// menuService.createMeal(date, haksik, LUNCH, request); +// +// return mealRepository.findAll().stream() +// .findFirst() +// .orElseThrow(() -> new RuntimeException("Meal not created")) +// .getId(); +// } + +// @Test +// void 식단을_조회한다() { +// // given +// Long createdMealId = 식단_생성_요청(); +// +// // when +// MenusInMealResponse response = menuService.findMenusInMeal(createdMealId); +// +// // then +// assertThat(response.getMenusInformation()).hasSize(3); +// } + +// @Test +// void 식단을_삭제한다() { +// // given +// Long createdMealId = 식단_생성_요청(); +// +// // when +// menuService.deleteMeal(createdMealId); +// +// // then +// assertThat(mealRepository.findAll()).hasSize(0); +// assertThat(menuRepository.findAll()).hasSize(0); +// } } \ No newline at end of file From e16a8b9784b6c0557aeff328f1baa5db75205578 Mon Sep 17 00:00:00 2001 From: Geonwoo Pack Date: Fri, 18 Oct 2024 02:33:32 +0900 Subject: [PATCH 136/399] =?UTF-8?q?test=20(Meal)=20:=20MealService=20?= =?UTF-8?q?=EB=82=B4=EC=9D=98=20=EB=A9=94=EC=86=8C=EB=93=9C=EB=A5=BC=20?= =?UTF-8?q?=EB=AA=A8=EB=91=90=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/inquiry/entity/QInquiry.java | 65 +++++++++++++ .../ssu/eatssu/domain/menu/entity/QMeal.java | 48 ++++++++++ .../eatssu/domain/menu/entity/QMealMenu.java | 54 +++++++++++ .../ssu/eatssu/domain/menu/entity/QMenu.java | 64 +++++++++++++ .../domain/menu/entity/QMenuCategory.java | 41 +++++++++ .../eatssu/domain/rating/entity/QRatings.java | 41 +++++++++ .../eatssu/domain/review/entity/QReport.java | 68 ++++++++++++++ .../eatssu/domain/review/entity/QReview.java | 69 ++++++++++++++ .../domain/review/entity/QReviewImage.java | 53 +++++++++++ .../eatssu/domain/review/entity/QReviews.java | 38 ++++++++ .../domain/user/entity/QBaseTimeEntity.java | 39 ++++++++ .../ssu/eatssu/domain/user/entity/QUser.java | 66 +++++++++++++ .../ssu/eatssu/domain/menu/entity/Meal.java | 6 +- .../menu/persistence/MealRepository.java | 3 +- ...ateRequest.java => CreateMealRequest.java} | 2 +- .../dto/{ => response}/BriefMenuResponse.java | 2 +- .../CategoryWithMenusResponse.java | 2 +- .../dto/response/MealDetailResponse.java | 1 - .../dto/{ => response}/MenuResponse.java | 2 +- .../MenuRestaurantResponse.java | 2 +- .../dto/response/MenusInMealResponse.java | 1 - .../presentation/rest/MealController.java | 6 +- .../presentation/rest/MenuController.java | 2 +- .../domain/menu/service/MealService.java | 56 +++++++---- .../menu/service/MenuRatingService.java | 2 +- .../domain/menu/service/MenuService.java | 8 +- .../domain/menu/util/MenuValidator.java | 24 ----- .../domain/restaurant/entity/Restaurant.java | 10 +- .../domain/menu/service/MealServiceTest.java | 92 +++++++++++++++++++ .../domain/menu/service/MenuServiceTest.java | 62 +------------ 30 files changed, 802 insertions(+), 127 deletions(-) create mode 100644 src/main/generated/ssu/eatssu/domain/inquiry/entity/QInquiry.java create mode 100644 src/main/generated/ssu/eatssu/domain/menu/entity/QMeal.java create mode 100644 src/main/generated/ssu/eatssu/domain/menu/entity/QMealMenu.java create mode 100644 src/main/generated/ssu/eatssu/domain/menu/entity/QMenu.java create mode 100644 src/main/generated/ssu/eatssu/domain/menu/entity/QMenuCategory.java create mode 100644 src/main/generated/ssu/eatssu/domain/rating/entity/QRatings.java create mode 100644 src/main/generated/ssu/eatssu/domain/review/entity/QReport.java create mode 100644 src/main/generated/ssu/eatssu/domain/review/entity/QReview.java create mode 100644 src/main/generated/ssu/eatssu/domain/review/entity/QReviewImage.java create mode 100644 src/main/generated/ssu/eatssu/domain/review/entity/QReviews.java create mode 100644 src/main/generated/ssu/eatssu/domain/user/entity/QBaseTimeEntity.java create mode 100644 src/main/generated/ssu/eatssu/domain/user/entity/QUser.java rename src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/{MealCreateRequest.java => CreateMealRequest.java} (90%) rename src/main/java/ssu/eatssu/domain/menu/presentation/dto/{ => response}/BriefMenuResponse.java (90%) rename src/main/java/ssu/eatssu/domain/menu/presentation/dto/{ => response}/CategoryWithMenusResponse.java (92%) rename src/main/java/ssu/eatssu/domain/menu/presentation/dto/{ => response}/MenuResponse.java (93%) rename src/main/java/ssu/eatssu/domain/menu/presentation/dto/{ => response}/MenuRestaurantResponse.java (93%) delete mode 100644 src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java create mode 100644 src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java diff --git a/src/main/generated/ssu/eatssu/domain/inquiry/entity/QInquiry.java b/src/main/generated/ssu/eatssu/domain/inquiry/entity/QInquiry.java new file mode 100644 index 00000000..a2f74be5 --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/inquiry/entity/QInquiry.java @@ -0,0 +1,65 @@ +package ssu.eatssu.domain.inquiry.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QInquiry is a Querydsl query type for Inquiry + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QInquiry extends EntityPathBase { + + private static final long serialVersionUID = 1796285397L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QInquiry inquiry = new QInquiry("inquiry"); + + public final ssu.eatssu.domain.user.entity.QBaseTimeEntity _super = new ssu.eatssu.domain.user.entity.QBaseTimeEntity(this); + + public final StringPath content = createString("content"); + + //inherited + public final DateTimePath createdDate = _super.createdDate; + + public final StringPath email = createString("email"); + + public final NumberPath id = createNumber("id", Long.class); + + //inherited + public final DateTimePath modifiedDate = _super.modifiedDate; + + public final EnumPath status = createEnum("status", InquiryStatus.class); + + public final ssu.eatssu.domain.user.entity.QUser user; + + public QInquiry(String variable) { + this(Inquiry.class, forVariable(variable), INITS); + } + + public QInquiry(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QInquiry(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QInquiry(PathMetadata metadata, PathInits inits) { + this(Inquiry.class, metadata, inits); + } + + public QInquiry(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.user = inits.isInitialized("user") ? new ssu.eatssu.domain.user.entity.QUser(forProperty("user")) : null; + } + +} + diff --git a/src/main/generated/ssu/eatssu/domain/menu/entity/QMeal.java b/src/main/generated/ssu/eatssu/domain/menu/entity/QMeal.java new file mode 100644 index 00000000..6adef93c --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/menu/entity/QMeal.java @@ -0,0 +1,48 @@ +package ssu.eatssu.domain.menu.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMeal is a Querydsl query type for Meal + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMeal extends EntityPathBase { + + private static final long serialVersionUID = 1205817521L; + + public static final QMeal meal = new QMeal("meal"); + + public final DatePath date = createDate("date", java.util.Date.class); + + public final NumberPath id = createNumber("id", Long.class); + + public final ListPath mealMenus = this.createList("mealMenus", MealMenu.class, QMealMenu.class, PathInits.DIRECT2); + + public final NumberPath price = createNumber("price", Integer.class); + + public final EnumPath restaurant = createEnum("restaurant", ssu.eatssu.domain.restaurant.entity.Restaurant.class); + + public final EnumPath timePart = createEnum("timePart", ssu.eatssu.domain.menu.entity.constants.TimePart.class); + + public QMeal(String variable) { + super(Meal.class, forVariable(variable)); + } + + public QMeal(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QMeal(PathMetadata metadata) { + super(Meal.class, metadata); + } + +} + diff --git a/src/main/generated/ssu/eatssu/domain/menu/entity/QMealMenu.java b/src/main/generated/ssu/eatssu/domain/menu/entity/QMealMenu.java new file mode 100644 index 00000000..28708fce --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/menu/entity/QMealMenu.java @@ -0,0 +1,54 @@ +package ssu.eatssu.domain.menu.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMealMenu is a Querydsl query type for MealMenu + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMealMenu extends EntityPathBase { + + private static final long serialVersionUID = -1315300944L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QMealMenu mealMenu = new QMealMenu("mealMenu"); + + public final NumberPath id = createNumber("id", Long.class); + + public final QMeal meal; + + public final QMenu menu; + + public QMealMenu(String variable) { + this(MealMenu.class, forVariable(variable), INITS); + } + + public QMealMenu(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QMealMenu(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QMealMenu(PathMetadata metadata, PathInits inits) { + this(MealMenu.class, metadata, inits); + } + + public QMealMenu(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.meal = inits.isInitialized("meal") ? new QMeal(forProperty("meal")) : null; + this.menu = inits.isInitialized("menu") ? new QMenu(forProperty("menu"), inits.get("menu")) : null; + } + +} + diff --git a/src/main/generated/ssu/eatssu/domain/menu/entity/QMenu.java b/src/main/generated/ssu/eatssu/domain/menu/entity/QMenu.java new file mode 100644 index 00000000..abed2eed --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/menu/entity/QMenu.java @@ -0,0 +1,64 @@ +package ssu.eatssu.domain.menu.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QMenu is a Querydsl query type for Menu + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMenu extends EntityPathBase { + + private static final long serialVersionUID = 1205817933L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QMenu menu = new QMenu("menu"); + + public final QMenuCategory category; + + public final NumberPath id = createNumber("id", Long.class); + + public final BooleanPath isDiscontinued = createBoolean("isDiscontinued"); + + public final ListPath mealMenus = this.createList("mealMenus", MealMenu.class, QMealMenu.class, PathInits.DIRECT2); + + public final StringPath name = createString("name"); + + public final NumberPath price = createNumber("price", Integer.class); + + public final EnumPath restaurant = createEnum("restaurant", ssu.eatssu.domain.restaurant.entity.Restaurant.class); + + public final ssu.eatssu.domain.review.entity.QReviews reviews; + + public QMenu(String variable) { + this(Menu.class, forVariable(variable), INITS); + } + + public QMenu(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QMenu(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QMenu(PathMetadata metadata, PathInits inits) { + this(Menu.class, metadata, inits); + } + + public QMenu(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.category = inits.isInitialized("category") ? new QMenuCategory(forProperty("category")) : null; + this.reviews = inits.isInitialized("reviews") ? new ssu.eatssu.domain.review.entity.QReviews(forProperty("reviews")) : null; + } + +} + diff --git a/src/main/generated/ssu/eatssu/domain/menu/entity/QMenuCategory.java b/src/main/generated/ssu/eatssu/domain/menu/entity/QMenuCategory.java new file mode 100644 index 00000000..510e68b8 --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/menu/entity/QMenuCategory.java @@ -0,0 +1,41 @@ +package ssu.eatssu.domain.menu.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; + + +/** + * QMenuCategory is a Querydsl query type for MenuCategory + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QMenuCategory extends EntityPathBase { + + private static final long serialVersionUID = -2082482581L; + + public static final QMenuCategory menuCategory = new QMenuCategory("menuCategory"); + + public final NumberPath id = createNumber("id", Long.class); + + public final StringPath name = createString("name"); + + public final EnumPath restaurant = createEnum("restaurant", ssu.eatssu.domain.restaurant.entity.Restaurant.class); + + public QMenuCategory(String variable) { + super(MenuCategory.class, forVariable(variable)); + } + + public QMenuCategory(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QMenuCategory(PathMetadata metadata) { + super(MenuCategory.class, metadata); + } + +} + diff --git a/src/main/generated/ssu/eatssu/domain/rating/entity/QRatings.java b/src/main/generated/ssu/eatssu/domain/rating/entity/QRatings.java new file mode 100644 index 00000000..ee394898 --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/rating/entity/QRatings.java @@ -0,0 +1,41 @@ +package ssu.eatssu.domain.rating.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; + + +/** + * QRatings is a Querydsl query type for Ratings + */ +@Generated("com.querydsl.codegen.DefaultEmbeddableSerializer") +public class QRatings extends BeanPath { + + private static final long serialVersionUID = 514329418L; + + public static final QRatings ratings = new QRatings("ratings"); + + public final NumberPath amountRating = createNumber("amountRating", Integer.class); + + public final NumberPath mainRating = createNumber("mainRating", Integer.class); + + public final NumberPath tasteRating = createNumber("tasteRating", Integer.class); + + public QRatings(String variable) { + super(Ratings.class, forVariable(variable)); + } + + public QRatings(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QRatings(PathMetadata metadata) { + super(Ratings.class, metadata); + } + +} + diff --git a/src/main/generated/ssu/eatssu/domain/review/entity/QReport.java b/src/main/generated/ssu/eatssu/domain/review/entity/QReport.java new file mode 100644 index 00000000..55586888 --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/review/entity/QReport.java @@ -0,0 +1,68 @@ +package ssu.eatssu.domain.review.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QReport is a Querydsl query type for Report + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QReport extends EntityPathBase { + + private static final long serialVersionUID = -1159101349L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QReport report = new QReport("report"); + + public final ssu.eatssu.domain.user.entity.QBaseTimeEntity _super = new ssu.eatssu.domain.user.entity.QBaseTimeEntity(this); + + public final StringPath content = createString("content"); + + //inherited + public final DateTimePath createdDate = _super.createdDate; + + public final NumberPath id = createNumber("id", Long.class); + + //inherited + public final DateTimePath modifiedDate = _super.modifiedDate; + + public final EnumPath reportType = createEnum("reportType", ssu.eatssu.domain.report.entity.ReportType.class); + + public final QReview review; + + public final EnumPath status = createEnum("status", ssu.eatssu.domain.report.entity.ReportStatus.class); + + public final ssu.eatssu.domain.user.entity.QUser user; + + public QReport(String variable) { + this(Report.class, forVariable(variable), INITS); + } + + public QReport(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QReport(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QReport(PathMetadata metadata, PathInits inits) { + this(Report.class, metadata, inits); + } + + public QReport(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.review = inits.isInitialized("review") ? new QReview(forProperty("review"), inits.get("review")) : null; + this.user = inits.isInitialized("user") ? new ssu.eatssu.domain.user.entity.QUser(forProperty("user")) : null; + } + +} + diff --git a/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java b/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java new file mode 100644 index 00000000..528f63d2 --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java @@ -0,0 +1,69 @@ +package ssu.eatssu.domain.review.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QReview is a Querydsl query type for Review + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QReview extends EntityPathBase { + + private static final long serialVersionUID = -1158928769L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QReview review = new QReview("review"); + + public final ssu.eatssu.domain.user.entity.QBaseTimeEntity _super = new ssu.eatssu.domain.user.entity.QBaseTimeEntity(this); + + public final StringPath content = createString("content"); + + //inherited + public final DateTimePath createdDate = _super.createdDate; + + public final NumberPath id = createNumber("id", Long.class); + + public final ssu.eatssu.domain.menu.entity.QMenu menu; + + //inherited + public final DateTimePath modifiedDate = _super.modifiedDate; + + public final ssu.eatssu.domain.rating.entity.QRatings ratings; + + public final ListPath reviewImages = this.createList("reviewImages", ReviewImage.class, QReviewImage.class, PathInits.DIRECT2); + + public final ssu.eatssu.domain.user.entity.QUser user; + + public QReview(String variable) { + this(Review.class, forVariable(variable), INITS); + } + + public QReview(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QReview(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QReview(PathMetadata metadata, PathInits inits) { + this(Review.class, metadata, inits); + } + + public QReview(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.menu = inits.isInitialized("menu") ? new ssu.eatssu.domain.menu.entity.QMenu(forProperty("menu"), inits.get("menu")) : null; + this.ratings = inits.isInitialized("ratings") ? new ssu.eatssu.domain.rating.entity.QRatings(forProperty("ratings")) : null; + this.user = inits.isInitialized("user") ? new ssu.eatssu.domain.user.entity.QUser(forProperty("user")) : null; + } + +} + diff --git a/src/main/generated/ssu/eatssu/domain/review/entity/QReviewImage.java b/src/main/generated/ssu/eatssu/domain/review/entity/QReviewImage.java new file mode 100644 index 00000000..9ba36ffc --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/review/entity/QReviewImage.java @@ -0,0 +1,53 @@ +package ssu.eatssu.domain.review.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QReviewImage is a Querydsl query type for ReviewImage + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QReviewImage extends EntityPathBase { + + private static final long serialVersionUID = -307574244L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QReviewImage reviewImage = new QReviewImage("reviewImage"); + + public final NumberPath id = createNumber("id", Long.class); + + public final StringPath imageUrl = createString("imageUrl"); + + public final QReview review; + + public QReviewImage(String variable) { + this(ReviewImage.class, forVariable(variable), INITS); + } + + public QReviewImage(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QReviewImage(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QReviewImage(PathMetadata metadata, PathInits inits) { + this(ReviewImage.class, metadata, inits); + } + + public QReviewImage(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.review = inits.isInitialized("review") ? new QReview(forProperty("review"), inits.get("review")) : null; + } + +} + diff --git a/src/main/generated/ssu/eatssu/domain/review/entity/QReviews.java b/src/main/generated/ssu/eatssu/domain/review/entity/QReviews.java new file mode 100644 index 00000000..ea2e8760 --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/review/entity/QReviews.java @@ -0,0 +1,38 @@ +package ssu.eatssu.domain.review.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QReviews is a Querydsl query type for Reviews + */ +@Generated("com.querydsl.codegen.DefaultEmbeddableSerializer") +public class QReviews extends BeanPath { + + private static final long serialVersionUID = -1567053356L; + + public static final QReviews reviews1 = new QReviews("reviews1"); + + public final ListPath reviews = this.createList("reviews", Review.class, QReview.class, PathInits.DIRECT2); + + public QReviews(String variable) { + super(Reviews.class, forVariable(variable)); + } + + public QReviews(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QReviews(PathMetadata metadata) { + super(Reviews.class, metadata); + } + +} + diff --git a/src/main/generated/ssu/eatssu/domain/user/entity/QBaseTimeEntity.java b/src/main/generated/ssu/eatssu/domain/user/entity/QBaseTimeEntity.java new file mode 100644 index 00000000..338242d9 --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/user/entity/QBaseTimeEntity.java @@ -0,0 +1,39 @@ +package ssu.eatssu.domain.user.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; + + +/** + * QBaseTimeEntity is a Querydsl query type for BaseTimeEntity + */ +@Generated("com.querydsl.codegen.DefaultSupertypeSerializer") +public class QBaseTimeEntity extends EntityPathBase { + + private static final long serialVersionUID = -848113765L; + + public static final QBaseTimeEntity baseTimeEntity = new QBaseTimeEntity("baseTimeEntity"); + + public final DateTimePath createdDate = createDateTime("createdDate", java.time.LocalDateTime.class); + + public final DateTimePath modifiedDate = createDateTime("modifiedDate", java.time.LocalDateTime.class); + + public QBaseTimeEntity(String variable) { + super(BaseTimeEntity.class, forVariable(variable)); + } + + public QBaseTimeEntity(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QBaseTimeEntity(PathMetadata metadata) { + super(BaseTimeEntity.class, metadata); + } + +} + diff --git a/src/main/generated/ssu/eatssu/domain/user/entity/QUser.java b/src/main/generated/ssu/eatssu/domain/user/entity/QUser.java new file mode 100644 index 00000000..cef9fac1 --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/user/entity/QUser.java @@ -0,0 +1,66 @@ +package ssu.eatssu.domain.user.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QUser is a Querydsl query type for User + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QUser extends EntityPathBase { + + private static final long serialVersionUID = -2112045787L; + + public static final QUser user = new QUser("user"); + + public final QBaseTimeEntity _super = new QBaseTimeEntity(this); + + //inherited + public final DateTimePath createdDate = _super.createdDate; + + public final StringPath credentials = createString("credentials"); + + public final StringPath email = createString("email"); + + public final NumberPath id = createNumber("id", Long.class); + + //inherited + public final DateTimePath modifiedDate = _super.modifiedDate; + + public final StringPath nickname = createString("nickname"); + + public final EnumPath provider = createEnum("provider", ssu.eatssu.domain.auth.entity.OAuthProvider.class); + + public final StringPath providerId = createString("providerId"); + + public final ListPath reviewReports = this.createList("reviewReports", ssu.eatssu.domain.review.entity.Report.class, ssu.eatssu.domain.review.entity.QReport.class, PathInits.DIRECT2); + + public final ListPath reviews = this.createList("reviews", ssu.eatssu.domain.review.entity.Review.class, ssu.eatssu.domain.review.entity.QReview.class, PathInits.DIRECT2); + + public final EnumPath role = createEnum("role", Role.class); + + public final EnumPath status = createEnum("status", UserStatus.class); + + public final ListPath userInquiries = this.createList("userInquiries", ssu.eatssu.domain.inquiry.entity.Inquiry.class, ssu.eatssu.domain.inquiry.entity.QInquiry.class, PathInits.DIRECT2); + + public QUser(String variable) { + super(User.class, forVariable(variable)); + } + + public QUser(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QUser(PathMetadata metadata) { + super(User.class, metadata); + } + +} + diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index ab8218d1..b6c9b0d1 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -35,7 +35,7 @@ public class Meal { private Integer price; - @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL) + @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL, fetch = FetchType.LAZY) private List mealMenus = new ArrayList<>(); public Meal(Date date, TimePart timePart, Restaurant restaurant) { @@ -55,4 +55,8 @@ public Meal(Date date, TimePart timePart, Restaurant restaurant, Integer price) public List getMenuNames() { return mealMenus.stream().map(mealMenu -> mealMenu.getMenu().getName()).toList(); } + + public void addMealMenu(MealMenu mealMenu) { + mealMenus.add(mealMenu); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java index d968855e..8dae2c42 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java @@ -10,6 +10,5 @@ public interface MealRepository extends JpaRepository { - List findAllByDateAndTimePartAndRestaurant(Date date, TimePart timePart, - Restaurant restaurant); + List findAllByDateAndTimePartAndRestaurant(Date date, TimePart timePart, Restaurant restaurant); } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateRequest.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java similarity index 90% rename from src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateRequest.java rename to src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java index 7b0dc07c..a865c887 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateRequest.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java @@ -5,7 +5,7 @@ import java.util.List; @Schema(title = "식단 추가") -public record MealCreateRequest( +public record CreateMealRequest( @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") List menuNames ) { diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/BriefMenuResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/BriefMenuResponse.java similarity index 90% rename from src/main/java/ssu/eatssu/domain/menu/presentation/dto/BriefMenuResponse.java rename to src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/BriefMenuResponse.java index 73d545f0..5906c9ab 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/BriefMenuResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/BriefMenuResponse.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.presentation.dto; +package ssu.eatssu.domain.menu.presentation.dto.response; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/CategoryWithMenusResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java similarity index 92% rename from src/main/java/ssu/eatssu/domain/menu/presentation/dto/CategoryWithMenusResponse.java rename to src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java index 8bd470a1..c96c6e19 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/CategoryWithMenusResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.presentation.dto; +package ssu.eatssu.domain.menu.presentation.dto.response; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java index 608bab83..8e98dfe2 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java @@ -4,7 +4,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; -import ssu.eatssu.domain.menu.presentation.dto.BriefMenuResponse; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/MenuResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java similarity index 93% rename from src/main/java/ssu/eatssu/domain/menu/presentation/dto/MenuResponse.java rename to src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java index 74e6a608..bd3f6e87 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/MenuResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.presentation.dto; +package ssu.eatssu.domain.menu.presentation.dto.response; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/MenuRestaurantResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java similarity index 93% rename from src/main/java/ssu/eatssu/domain/menu/presentation/dto/MenuRestaurantResponse.java rename to src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java index 23a17239..8e61d251 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/MenuRestaurantResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.menu.presentation.dto; +package ssu.eatssu.domain.menu.presentation.dto.response; import lombok.Getter; diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java index 9b4dfa21..10097f0b 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java @@ -4,7 +4,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; -import ssu.eatssu.domain.menu.presentation.dto.BriefMenuResponse; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java index d02a6ad3..2f83a548 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java @@ -11,13 +11,12 @@ import lombok.RequiredArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; -import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateRequest; +import ssu.eatssu.domain.menu.presentation.dto.request.CreateMealRequest; import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateWithPriceRequest; import ssu.eatssu.domain.menu.presentation.dto.response.MealDetailResponse; import ssu.eatssu.domain.menu.presentation.dto.response.MenusInMealResponse; import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.menu.service.MealService; -import ssu.eatssu.domain.menu.service.MenuService; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.restaurant.entity.RestaurantType; import ssu.eatssu.global.handler.response.BaseException; @@ -34,7 +33,6 @@ @Tag(name = "Meal", description = "식단 API") public class MealController { - private final MenuService menuService; private final MealService mealService; @Operation(summary = "식단 추가", description = """ @@ -53,7 +51,7 @@ public BaseResponse createMeal( @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, - @RequestBody MealCreateRequest mealCreateRequest) { + @RequestBody CreateMealRequest mealCreateRequest) { if (RestaurantType.isFixedType(restaurant)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java index 01b90c36..3519ea0b 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java @@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import ssu.eatssu.domain.menu.presentation.dto.MenuRestaurantResponse; +import ssu.eatssu.domain.menu.presentation.dto.response.MenuRestaurantResponse; import ssu.eatssu.domain.menu.service.MenuService; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.global.handler.response.BaseResponse; diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MealService.java b/src/main/java/ssu/eatssu/domain/menu/service/MealService.java index 6831c26e..669a3cad 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MealService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MealService.java @@ -4,6 +4,7 @@ import java.util.Date; import java.util.List; +import java.util.Optional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -14,7 +15,7 @@ import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.menu.persistence.MealMenuRepository; import ssu.eatssu.domain.menu.persistence.MealRepository; -import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateRequest; +import ssu.eatssu.domain.menu.presentation.dto.request.CreateMealRequest; import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateWithPriceRequest; import ssu.eatssu.domain.menu.presentation.dto.response.MealDetailResponse; import ssu.eatssu.domain.menu.presentation.dto.response.MenusInMealResponse; @@ -35,7 +36,8 @@ public class MealService { private final MenuService menuService; public MenusInMealResponse getMenusInMealByMealId(Long mealId) { - Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); return MenusInMealResponse.from(meal); } @@ -48,11 +50,13 @@ public List getMealDetailsByDateAndRestaurantAndTimePart( List meals = findMealsByDateAndTimePartAndRestaurant(date, timePart, restaurant); return meals.stream() - .map(meal -> MealDetailResponse.from(meal, mealRatingService.getMainRatingAverage(meal.getId()))) + .map(meal -> MealDetailResponse.from(meal, + mealRatingService.getMainRatingAverage(meal.getId()))) .toList(); } - private List findMealsByDateAndTimePartAndRestaurant(Date date, TimePart timePart, Restaurant restaurant) { + private List findMealsByDateAndTimePartAndRestaurant(Date date, TimePart timePart, + Restaurant restaurant) { return mealRepository.findAllByDateAndTimePartAndRestaurant(date, timePart, restaurant); } @@ -63,38 +67,48 @@ private void validateMealRestaurant(Restaurant restaurant) { } @Transactional - public void createMeal(Date date, Restaurant restaurant, TimePart timePart, MealCreateRequest request) { - createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), null); + public Long createMeal(Date date, Restaurant restaurant, TimePart timePart, + CreateMealRequest request) { + return createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), null); } @Transactional - public void createMealWithPrice(Date date, Restaurant restaurant, TimePart timePart, MealCreateWithPriceRequest request) { - createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), request.price()); + public Long createMealWithPrice(Date date, Restaurant restaurant, TimePart timePart, + MealCreateWithPriceRequest request) { + return createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), request.price()); } - private void createMealWithOptionalPrice(Date date, Restaurant restaurant, TimePart timePart, List menuNames, Integer price) { - if (validateExistedMeal(date, timePart, restaurant, menuNames)) { - return; // 중복된 메뉴가 있는 경우 바로 종료 + private Long createMealWithOptionalPrice(Date date, Restaurant restaurant, TimePart timePart, List menuNames, Integer price) { + + Optional existingMealId = getExistingMealId(date, timePart, restaurant, menuNames); + if (existingMealId.isPresent()) { + return existingMealId.get(); // 이미 존재하는 식단의 ID를 반환 } Meal meal = new Meal(date, timePart, restaurant, price); - mealRepository.save(meal); + Meal savedMeal = mealRepository.save(meal); addMenusToMeal(meal, restaurant, menuNames); + + return savedMeal.getId(); } - private boolean validateExistedMeal(Date date, TimePart timePart, Restaurant restaurant, List menuNames) { + private Optional getExistingMealId(Date date, TimePart timePart, Restaurant restaurant, + List menuNames) { List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(date, timePart, restaurant); List sortedRequestMenuNames = menuNames.stream() .sorted() .toList(); - return meals.stream().anyMatch(meal -> { - List sortedMenuNames = meal.getMenuNames().stream() - .sorted() - .toList(); - return sortedMenuNames.equals(sortedRequestMenuNames); - }); + return meals.stream() + .filter(meal -> { + List sortedMenuNames = meal.getMenuNames().stream() + .sorted() + .toList(); + return sortedMenuNames.equals(sortedRequestMenuNames); + }) + .findFirst() + .map(Meal::getId); } private void addMenusToMeal(Meal meal, Restaurant restaurant, List menuNames) { @@ -111,11 +125,13 @@ private void createMealMenu(Meal meal, Menu menu) { .build(); mealMenuRepository.save(mealMenu); + meal.addMealMenu(mealMenu); } @Transactional public void deleteByMealId(Long mealId) { - Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); List menus = meal.getMealMenus().stream() .map(MealMenu::getMenu) diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java index 0d76b774..8bd7f557 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java @@ -8,8 +8,8 @@ @Service @RequiredArgsConstructor public class MenuRatingService { - private final QuerydslMenuRatingCalculator menuRatingCalculator; + private final QuerydslMenuRatingCalculator menuRatingCalculator; public Double getMainRatingAverage(Long menuId) { return menuRatingCalculator.getMainRatingAverage(menuId); diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index cb1717c4..e14426fd 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -7,13 +7,11 @@ import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; -import ssu.eatssu.domain.menu.presentation.dto.CategoryWithMenusResponse; -import ssu.eatssu.domain.menu.presentation.dto.MenuRestaurantResponse; -import ssu.eatssu.domain.menu.presentation.dto.MenuResponse; +import ssu.eatssu.domain.menu.presentation.dto.response.CategoryWithMenusResponse; +import ssu.eatssu.domain.menu.presentation.dto.response.MenuRestaurantResponse; +import ssu.eatssu.domain.menu.presentation.dto.response.MenuResponse; import ssu.eatssu.domain.menu.entity.*; import ssu.eatssu.domain.menu.entity.Menu; -import ssu.eatssu.domain.menu.persistence.MealMenuRepository; -import ssu.eatssu.domain.menu.persistence.MealRepository; import ssu.eatssu.domain.menu.persistence.MenuCategoryRepository; import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.restaurant.entity.Restaurant; diff --git a/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java b/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java deleted file mode 100644 index 356dc9a5..00000000 --- a/src/main/java/ssu/eatssu/domain/menu/util/MenuValidator.java +++ /dev/null @@ -1,24 +0,0 @@ -package ssu.eatssu.domain.menu.util; - -import lombok.RequiredArgsConstructor; -import ssu.eatssu.domain.menu.entity.Meal; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -@RequiredArgsConstructor -public class MenuValidator { - - public static boolean validateExistedMeal(List meals, List menuNames) { - - List sortedRequestMenuNames = new ArrayList<>(menuNames); - Collections.sort(sortedRequestMenuNames); - - return meals.stream().anyMatch(meal -> { - List sortedMenuNames = new ArrayList<>(meal.getMenuNames()); - Collections.sort(sortedMenuNames); - return sortedMenuNames.equals(sortedRequestMenuNames); - }); - } -} diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index 95b07eae..6a0e6167 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -11,11 +11,11 @@ @Getter public enum Restaurant { - DODAM("도담 식당", 6000), - DORMITORY("기숙사 식당", 5500), - FOOD_COURT("푸드 코트", null), - SNACK_CORNER("스낵 코너", null), - HAKSIK("학생 식당", 5000); + DODAM("DODAM", 6000), + DORMITORY("DORMITORY", 5500), + FOOD_COURT("FOOD_COURT", null), + SNACK_CORNER("SNACK_CORNER", null), + HAKSIK("HAKSIK", 5000); private String restaurantName; private Integer restaurantPrice; diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java new file mode 100644 index 00000000..b8f448f8 --- /dev/null +++ b/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java @@ -0,0 +1,92 @@ +package ssu.eatssu.domain.menu.service; + +import static org.assertj.core.api.Assertions.*; +import static ssu.eatssu.domain.menu.entity.constants.TimePart.LUNCH; + +import java.sql.Date; +import java.util.List; +import java.util.Optional; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.transaction.annotation.Transactional; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.constants.TimePart; +import ssu.eatssu.domain.menu.persistence.MealRepository; +import ssu.eatssu.domain.menu.presentation.dto.request.CreateMealRequest; +import ssu.eatssu.domain.menu.presentation.dto.response.MenusInMealResponse; +import ssu.eatssu.domain.restaurant.entity.Restaurant; + +@SpringBootTest +@DisplayName("MealService 테스트") +@ActiveProfiles("test") +class MealServiceTest { + + @Autowired + private MealService mealService; + + @Autowired + private MealRepository mealRepository; + + @BeforeEach + void setUp() { + mealRepository.deleteAll(); + } + + @Transactional + @Test + void 식단을_생성한다() { + // when + Long mealId = 식단_생성_요청(); + + // then + Optional meal = mealRepository.findById(mealId); + + assertThat(meal).isPresent(); + assertThat(mealRepository.findAll()).hasSize(1); + + Meal createdMeal = meal.get(); + assertThat(createdMeal.getMenuNames()).containsExactlyInAnyOrder("돈까스", "샐러드", "김치"); + assertThat(createdMeal.getRestaurant().name()).isEqualTo("HAKSIK"); + assertThat(createdMeal.getTimePart()).isEqualTo(LUNCH); + } + + private Long 식단_생성_요청() { + // given & when + Date date = Date.valueOf("2024-01-03"); + TimePart timePart = LUNCH; + Restaurant restaurant = Restaurant.from("HAKSIK"); + CreateMealRequest request = new CreateMealRequest(List.of("돈까스", "샐러드", "김치")); + + // then + return mealService.createMeal(date, restaurant, timePart, request); + } + + @Test + void 식단을_조회한다() { + // given + Long meadId = 식단_생성_요청(); + + // when + MenusInMealResponse response = mealService.getMenusInMealByMealId(meadId); + + // then + assertThat(response.getBriefMenus()).hasSize(3); + } + + @Test + void 식단을_삭제한다() { + // given + Long mealId = 식단_생성_요청(); + + // when + mealService.deleteByMealId(mealId); + + // then + assertThat(mealRepository.findAll()).hasSize(0); + assertThat(mealRepository.findAll()).hasSize(0); + } +} \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java index 30363fcb..02eb9fa7 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java @@ -1,10 +1,12 @@ package ssu.eatssu.domain.menu.service; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import ssu.eatssu.domain.menu.presentation.dto.MenuRestaurantResponse; +import org.springframework.test.context.ActiveProfiles; +import ssu.eatssu.domain.menu.presentation.dto.response.MenuRestaurantResponse; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.menu.persistence.MealRepository; @@ -18,6 +20,8 @@ import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest +@DisplayName("MenuService 테스트") +@ActiveProfiles("test") class MenuServiceTest { @Autowired @@ -29,13 +33,9 @@ class MenuServiceTest { @Autowired private MenuCategoryRepository menuCategoryRepository; - @Autowired - private MealRepository mealRepository; - @BeforeEach void setUp() { menuRepository.deleteAll(); - mealRepository.deleteAll(); } @Test @@ -61,56 +61,4 @@ void setUp() { // then assertThat(response.getCategoryMenuListCollection()).hasSize(2); } - -// @Test -// void 식단을_생성한다() { -// 식단_생성_요청(); -// -// // then -// assertThat(mealRepository.findAll()).hasSize(1); -// assertThat(menuRepository.findAll()).hasSize(3); -// assertThat(menuRepository.findAll()) -// .extracting(Menu::getName) -// .containsExactly("돈까스", "샐러드", "김치"); -// } -// -// private Long 식단_생성_요청() { -// // given -// Date date = Date.valueOf("2024-01-03"); -// Restaurant haksik = Restaurant.from("HAKSIK"); -// MealCreateRequest request = new MealCreateRequest(List.of("돈까스", "샐러드", "김치")); -// -// // when -// menuService.createMeal(date, haksik, LUNCH, request); -// -// return mealRepository.findAll().stream() -// .findFirst() -// .orElseThrow(() -> new RuntimeException("Meal not created")) -// .getId(); -// } - -// @Test -// void 식단을_조회한다() { -// // given -// Long createdMealId = 식단_생성_요청(); -// -// // when -// MenusInMealResponse response = menuService.findMenusInMeal(createdMealId); -// -// // then -// assertThat(response.getMenusInformation()).hasSize(3); -// } - -// @Test -// void 식단을_삭제한다() { -// // given -// Long createdMealId = 식단_생성_요청(); -// -// // when -// menuService.deleteMeal(createdMealId); -// -// // then -// assertThat(mealRepository.findAll()).hasSize(0); -// assertThat(menuRepository.findAll()).hasSize(0); -// } } \ No newline at end of file From 23d0b32a8234406c6dacb54030521b41c3602dd2 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Fri, 22 Nov 2024 17:18:03 +0900 Subject: [PATCH 137/399] =?UTF-8?q?feat:=20review=20=EC=8A=A4=ED=82=A4?= =?UTF-8?q?=EB=A7=88=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/menu/entity/Menu.java | 23 +++++++++++++++++++ .../eatssu/domain/review/entity/Review.java | 9 ++++++++ 2 files changed, 32 insertions(+) diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index 7e8508a0..2ec432cc 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -28,6 +28,7 @@ public class Menu { @Enumerated(EnumType.STRING) private Restaurant restaurant; + // TODO : 삭제되어야 함 @Embedded private Reviews reviews = new Reviews(); @@ -40,6 +41,12 @@ public class Menu { private boolean isDiscontinued = false; + @Column(name = "like_count") + private Integer likeCount = 0; + + @Column(name = "unlike_count") + private Integer unlikeCount = 0; + private Menu(String name, Restaurant restaurant, Integer price, MenuCategory category) { this.name = name; this.restaurant = restaurant; @@ -77,4 +84,20 @@ public void changeDiscontinuedStatus() { public boolean isContinued() { return !this.isDiscontinued; } + + public void increaseLikeCount() { + likeCount++; + } + + public void increaseUnlikeCount() { + unlikeCount++; + } + + public void decreaseLikeCount() { + likeCount--; + } + + public void decreaseUnlikeCount() { + unlikeCount--; + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index cbc7fcf9..1dea057b 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -2,6 +2,7 @@ import jakarta.persistence.*; import lombok.*; +import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.user.entity.BaseTimeEntity; @@ -25,17 +26,25 @@ public class Review extends BaseTimeEntity { private String content; + // TODO : 삭제되어야 함 @Embedded private Ratings ratings; + private Integer rating; + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private User user; + // TODO : 삭제되어야 함 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "menu_id") private Menu menu; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "meal_id") + private Meal meal; + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) private List reviewImages = new ArrayList<>(); From 97aaf5695dae8b2b4537b3ca181f50399b16c67c Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Fri, 22 Nov 2024 17:20:36 +0900 Subject: [PATCH 138/399] =?UTF-8?q?feat:=20=EB=A6=AC=EB=B7=B0=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=20api=20v2=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/dto/CreateMealReviewRequest.java | 41 ++++++++++ .../domain/review/dto/MenuLikeRequest.java | 15 ++++ .../domain/review/entity/ReviewMenuLike.java | 43 +++++++++++ .../presentation/MealReviewController.java | 42 ++++++++++ .../repository/ReviewMenuLikeRepository.java | 10 +++ .../review/service/MealReviewService.java | 76 +++++++++++++++++++ 6 files changed, 227 insertions(+) create mode 100644 src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java create mode 100644 src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java create mode 100644 src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java create mode 100644 src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java create mode 100644 src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java create mode 100644 src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java new file mode 100644 index 00000000..5a39dd5b --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java @@ -0,0 +1,41 @@ +package ssu.eatssu.domain.review.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import java.util.List; +import java.util.stream.Collectors; +import lombok.AllArgsConstructor; +import lombok.Getter; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.entity.ReviewImage; +import ssu.eatssu.domain.user.entity.User; + +@Schema(title = "리뷰 작성") +@Getter +@AllArgsConstructor +public class CreateMealReviewRequest { + @Schema(description = "식단 식별자", example = "123") + private Long mealId; + @Schema(description = "평점", example = "4") + private Integer rating; + private List menuLikes; + @Schema(description = "한줄평", example = "맛있어용") + private String content; + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; + + public Review toReviewEntity(User user, Meal meal) { + return Review.builder() + .user(user) + .meal(meal) + .content(content) + .rating(rating) + .build(); + } + + public List createReviewImages(Review review) { + return imageUrls.stream() + .map(imageUrl -> new ReviewImage(review, imageUrl)) + .collect(Collectors.toList()); + } +} diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java new file mode 100644 index 00000000..1042f12c --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java @@ -0,0 +1,15 @@ +package ssu.eatssu.domain.review.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Schema(title = "메뉴 좋아요/싫어요 리뷰") +@Getter +@AllArgsConstructor +public class MenuLikeRequest { + @Schema(description = "메뉴 식별자", example = "123") + private Long menuId; + @Schema(description = "좋아요 or 싫어요", example = "좋아요 : true or 싫어요 : false") + private Boolean isLike; +} diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java new file mode 100644 index 00000000..348e4a07 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java @@ -0,0 +1,43 @@ +package ssu.eatssu.domain.review.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import ssu.eatssu.domain.menu.entity.Menu; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Builder +@AllArgsConstructor +public class ReviewMenuLike { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_menu_like_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "menu_id") + private Menu menu; + + @Column(nullable = false) + private Boolean isLike; // true : 좋아요, false : 싫어요 + + public void updateLike(Boolean like) { + isLike = like; + } +} diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java new file mode 100644 index 00000000..b888c974 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java @@ -0,0 +1,42 @@ +package ssu.eatssu.domain.review.presentation; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; +import ssu.eatssu.domain.review.service.MealReviewService; +import ssu.eatssu.global.handler.response.BaseResponse; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/v2/reviews") +@Tag(name = "Review V2", description = "리뷰 V2 API") +public class MealReviewController { + private final MealReviewService mealReviewService; + + @Operation(summary = "리뷰 작성", description = "리뷰를 작성하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + @PostMapping() + public BaseResponse createReview( + @RequestBody CreateMealReviewRequest createMealReviewRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + mealReviewService.createReview(customUserDetails, createMealReviewRequest); + return BaseResponse.success(); + } + +} diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java new file mode 100644 index 00000000..3c835fc2 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java @@ -0,0 +1,10 @@ +package ssu.eatssu.domain.review.repository; + +import java.util.List; +import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.entity.ReviewMenuLike; + +public interface ReviewMenuLikeRepository extends JpaRepository { + List findByReview(Review review); +} diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java new file mode 100644 index 00000000..f3982fdc --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java @@ -0,0 +1,76 @@ +package ssu.eatssu.domain.review.service; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MEAL; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; + +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.menu.persistence.MealMenuRepository; +import ssu.eatssu.domain.menu.persistence.MealRepository; +import ssu.eatssu.domain.menu.persistence.MenuRepository; +import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; +import ssu.eatssu.domain.review.dto.MenuLikeRequest; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.entity.ReviewImage; +import ssu.eatssu.domain.review.entity.ReviewMenuLike; +import ssu.eatssu.domain.review.repository.ReviewImageRepository; +import ssu.eatssu.domain.review.repository.ReviewMenuLikeRepository; +import ssu.eatssu.domain.review.repository.ReviewRepository; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.user.repository.UserRepository; +import ssu.eatssu.global.handler.response.BaseException; + +@RequiredArgsConstructor +@Service +public class MealReviewService { + private final UserRepository userRepository; + private final ReviewRepository reviewRepository; + private final ReviewImageRepository reviewImageRepository; + private final MenuRepository menuRepository; + private final MealRepository mealRepository; + private final ReviewMenuLikeRepository reviewMenuLikeRepository; + + /** + * 리뷰 생성 + */ + @Transactional + public void createReview(CustomUserDetails userDetails, CreateMealReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Meal meal = mealRepository.findById(request.getMealId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + + Review review = request.toReviewEntity(user, meal); + reviewRepository.save(review); + + List reviewImages = request.createReviewImages(review); + reviewImageRepository.saveAll(reviewImages); + + for (MenuLikeRequest menuLikes : request.getMenuLikes()) { + Menu menu = menuRepository.findById(menuLikes.getMenuId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + + // 리뷰-메뉴 좋아요 정보 저장 + ReviewMenuLike reviewMenuLike = ReviewMenuLike.builder() + .review(review) + .menu(menu) + .isLike(menuLikes.getIsLike()).build(); + reviewMenuLikeRepository.save(reviewMenuLike); + + // 메뉴에 좋아요/싫어요 수 반영 + if (menuLikes.getIsLike()) { + menu.increaseLikeCount(); + } + else { + menu.increaseUnlikeCount(); + } + } + } +} From e46f6514f58bb604d5f66c70eb17b1396982e529 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Fri, 22 Nov 2024 17:27:12 +0900 Subject: [PATCH 139/399] =?UTF-8?q?feat:=20=ED=8A=B9=EC=A0=95=20=EC=8B=9D?= =?UTF-8?q?=EB=8B=B9=20=EB=AA=A8=EB=93=A0=20=EB=A6=AC=EB=B7=B0=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=A1=B0=ED=9A=8C=20api=20v2=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu/persistence/MealMenuRepository.java | 6 +++ .../menu/persistence/MealRepository.java | 2 + .../review/dto/RestaurantReviewResponse.java | 27 +++++++++++ .../domain/review/dto/ReviewRatingCount.java | 12 +++++ .../presentation/MealReviewController.java | 21 +++++++++ .../review/repository/ReviewRepository.java | 1 + .../review/service/MealReviewService.java | 46 +++++++++++++++++++ 7 files changed, 115 insertions(+) create mode 100644 src/main/java/ssu/eatssu/domain/review/dto/RestaurantReviewResponse.java diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java index cb92f0f4..bbccbdf3 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java @@ -1,7 +1,13 @@ package ssu.eatssu.domain.menu.persistence; +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; +import ssu.eatssu.domain.menu.entity.Menu; public interface MealMenuRepository extends JpaRepository { + @Query("SELECT mm.menu FROM MealMenu mm WHERE mm.meal IN :meals") + List findMenusByMeals(List meals); } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java index 8dae2c42..df59f5d7 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java @@ -11,4 +11,6 @@ public interface MealRepository extends JpaRepository { List findAllByDateAndTimePartAndRestaurant(Date date, TimePart timePart, Restaurant restaurant); + + List findByRestaurant(Restaurant restaurant); } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/RestaurantReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/RestaurantReviewResponse.java new file mode 100644 index 00000000..197d6f5f --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/dto/RestaurantReviewResponse.java @@ -0,0 +1,27 @@ +package ssu.eatssu.domain.review.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +@Schema(title = "특정 식당 모든 리뷰 정보(평점 등등)") +@Getter +@AllArgsConstructor +@Builder +public class RestaurantReviewResponse { + @Schema(description = "리뷰 개수", example = "15") + private Integer totalReviewCount; + + @Schema(description = "별점 별 개수") + private ReviewRatingCount reviewRatingCount; + + @Schema(description = "리뷰 평점", example = "4.4") + private Double mainRating; + + @Schema(description = "좋아요 개수", example = "15") + private Integer likeCount; + + @Schema(description = "싫어요 개수", example = "15") + private Integer unlikeCount; +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java index 8ee31fbf..2f165b1b 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java @@ -1,9 +1,21 @@ package ssu.eatssu.domain.review.dto; +import java.util.Map; + //COMMENT: 더 좋은 매개변수 명이 있을 것 같은데 제 머리로는 이게 한계입니다... 멋진 변수명으로 바꿔주세요 public record ReviewRatingCount(long oneStarCount, long twoStarCount, long threeStarCount, long fourStarCount, long fiveStarCount) { public ReviewRatingCount { } + + public static ReviewRatingCount from(Map ratingDistribution) { + return new ReviewRatingCount( + ratingDistribution.getOrDefault(1, 0L), + ratingDistribution.getOrDefault(2, 0L), + ratingDistribution.getOrDefault(3, 0L), + ratingDistribution.getOrDefault(4, 0L), + ratingDistribution.getOrDefault(5, 0L) + ); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java index b888c974..ada3ad75 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.review.presentation; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; @@ -8,12 +9,16 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; +import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; import ssu.eatssu.domain.review.service.MealReviewService; import ssu.eatssu.global.handler.response.BaseResponse; @@ -39,4 +44,20 @@ public BaseResponse createReview( return BaseResponse.success(); } + @Operation(summary = "특정 식당 모든 리뷰 정보 조회(리뷰 개수, 평점 등등)", description = """ + 특정 식당 모든 리뷰 정보를 조회하는 API 입니다.

+ 리뷰 개수, 별점 별 개수, 리뷰 평점, 좋아요 개수, 싫어요 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "path parameter 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/statistics") + public BaseResponse getRestaurantReviews( + @Parameter(description = "restaurant") + @RequestParam Restaurant restaurant + ) { + return BaseResponse.success(mealReviewService.findRestaurantReviews(restaurant)); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java index 8eb296f6..c7c3356c 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java @@ -19,4 +19,5 @@ public interface ReviewRepository extends JpaRepository, ReviewRep Long countByMenu_MealMenus_Meal(Meal meal); + List findByMealIn(List meals); } diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java index f3982fdc..3c2e0c2e 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java @@ -4,7 +4,10 @@ import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -14,8 +17,11 @@ import ssu.eatssu.domain.menu.persistence.MealMenuRepository; import ssu.eatssu.domain.menu.persistence.MealRepository; import ssu.eatssu.domain.menu.persistence.MenuRepository; +import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; import ssu.eatssu.domain.review.dto.MenuLikeRequest; +import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; +import ssu.eatssu.domain.review.dto.ReviewRatingCount; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewImage; import ssu.eatssu.domain.review.entity.ReviewMenuLike; @@ -34,6 +40,7 @@ public class MealReviewService { private final ReviewImageRepository reviewImageRepository; private final MenuRepository menuRepository; private final MealRepository mealRepository; + private final MealMenuRepository mealMenuRepository; private final ReviewMenuLikeRepository reviewMenuLikeRepository; /** @@ -73,4 +80,43 @@ public void createReview(CustomUserDetails userDetails, CreateMealReviewRequest } } } + + /** + * 특정 식당 리뷰 조회 + */ + public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { + List meals = mealRepository.findByRestaurant(restaurant); + + List reviews = reviewRepository.findByMealIn(meals); + + Integer reviewCount = reviews.size(); + + Double averageRating = reviews.stream() + .mapToInt(Review::getRating) + .average() + .orElse(0.0); + + List menus = mealMenuRepository.findMenusByMeals(meals); + + Integer likeCount = menus.stream() + .mapToInt(Menu::getLikeCount) + .sum(); + + Integer unlikeCount = menus.stream() + .mapToInt(Menu::getUnlikeCount) + .sum(); + + Map ratingDistribution = reviews.stream() + .collect(Collectors.groupingBy(Review::getRating, LinkedHashMap::new, Collectors.counting())); + + ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(ratingDistribution); + + return RestaurantReviewResponse.builder() + .totalReviewCount(reviewCount) + .reviewRatingCount(reviewRatingCount) + .mainRating(averageRating) + .likeCount(likeCount) + .unlikeCount(unlikeCount) + .build(); + } } From 51ea5f02b9da43def4365abd28cbf85f662e2fdd Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Fri, 22 Nov 2024 17:32:30 +0900 Subject: [PATCH 140/399] =?UTF-8?q?feat:=20=EB=A6=AC=EB=B7=B0=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20api=20v2=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu/persistence/MealMenuRepository.java | 7 ++ .../domain/review/dto/MealReviewResponse.java | 71 +++++++++++++++++++ .../presentation/MealReviewController.java | 28 ++++++++ .../review/repository/ReviewRepository.java | 9 +++ .../review/service/MealReviewService.java | 38 ++++++++++ .../domain/slice/dto/SliceResponse.java | 5 ++ 6 files changed, 158 insertions(+) create mode 100644 src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java index bbccbdf3..272f8851 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java @@ -3,6 +3,7 @@ import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; @@ -10,4 +11,10 @@ public interface MealMenuRepository extends JpaRepository { @Query("SELECT mm.menu FROM MealMenu mm WHERE mm.meal IN :meals") List findMenusByMeals(List meals); + + @Query("SELECT mm.menu.id FROM MealMenu mm WHERE mm.meal.id = :mealId") + List findMenuIdsByMealId(@Param("mealId") Long mealId); + + @Query("SELECT DISTINCT mm.meal.id FROM MealMenu mm WHERE mm.menu.id IN :menuIds") + List findMealIdsByMenuIds(@Param("menuIds") List menuIds); } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java new file mode 100644 index 00000000..7b688613 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java @@ -0,0 +1,71 @@ +package ssu.eatssu.domain.review.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import ssu.eatssu.domain.review.entity.Review; + +@AllArgsConstructor +@Builder +@Schema(title = "리뷰 상세") +@Getter +public class MealReviewResponse { + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; + + @Schema(description = "작성자 식별자", example = "123") + Long writerId; + + @Schema(description = "본인 글인지 여부(true/false)", example = "true") + Boolean isWriter; + + @Schema(description = "작성자 닉네임", example = "숭시리시리") + private String writerNickname; + + @Schema(description = "평점", example = "4") + private Integer rating; + + @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") + private LocalDate writtenAt; + + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; + + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; + + public static MealReviewResponse from(Review review, Long userId) { + List imageUrls = new ArrayList<>(); + review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); + + MealReviewResponseBuilder builder = MealReviewResponse.builder() + .reviewId(review.getId()) + .rating(review.getRating()) + .writtenAt(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imageUrls(imageUrls); + + if (review.getUser() == null) { + return builder.writerId(null) + .writerNickname("알 수 없음") + .isWriter(false) + .build(); + } + + if (review.getUser().getId().equals(userId)) { + return builder.writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(true) + .build(); + } + + return builder.writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(false) + .build(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java index ada3ad75..3eceddb7 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java @@ -2,12 +2,16 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -18,8 +22,10 @@ import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; +import ssu.eatssu.domain.review.dto.MealReviewResponse; import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; import ssu.eatssu.domain.review.service.MealReviewService; +import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.global.handler.response.BaseResponse; @RestController @@ -60,4 +66,26 @@ public BaseResponse getRestaurantReviews( ) { return BaseResponse.success(mealReviewService.findRestaurantReviews(restaurant)); } + + @Operation(summary = "리뷰 리스트 조회", description = """ + 리뷰 리스트를 조회하는 API 입니다.

+ 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

+ 페이징 기본 값 = {size=20, sort=date, direction=desc}

+ """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("") + public BaseResponse> getReviews( + @Parameter(description = "mealId") + @RequestParam Long mealId, + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) + @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + Pageable pageable = PageRequest.of(0, 20, Sort.by(Sort.Direction.DESC, "id")); + SliceResponse myReviews = mealReviewService.findReviews(mealId, lastReviewId, pageable, + customUserDetails); + return BaseResponse.success(myReviews); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java index c7c3356c..ede57af5 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java @@ -1,6 +1,10 @@ package ssu.eatssu.domain.review.repository; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.review.entity.Review; @@ -20,4 +24,9 @@ public interface ReviewRepository extends JpaRepository, ReviewRep Long countByMenu_MealMenus_Meal(Meal meal); List findByMealIn(List meals); + + @Query("SELECT r FROM Review r WHERE r.meal.id IN :mealIds AND (:lastReviewId IS NULL OR r.id < :lastReviewId) ") + Page findReviewsByMealIds(@Param("mealIds") List mealIds, + @Param("lastReviewId") Long lastReviewId, + Pageable pageable); } diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java index 3c2e0c2e..1d64d594 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java @@ -9,6 +9,8 @@ import java.util.Map; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.auth.security.CustomUserDetails; @@ -19,6 +21,7 @@ import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; +import ssu.eatssu.domain.review.dto.MealReviewResponse; import ssu.eatssu.domain.review.dto.MenuLikeRequest; import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; import ssu.eatssu.domain.review.dto.ReviewRatingCount; @@ -28,6 +31,7 @@ import ssu.eatssu.domain.review.repository.ReviewImageRepository; import ssu.eatssu.domain.review.repository.ReviewMenuLikeRepository; import ssu.eatssu.domain.review.repository.ReviewRepository; +import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; @@ -119,4 +123,38 @@ public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { .unlikeCount(unlikeCount) .build(); } + + /** + * 특정 식단 리뷰 리스트 조회 + */ + public SliceResponse findReviews(Long mealId, Long lastReviewId, Pageable pageable, + CustomUserDetails userDetails) { + if (!mealRepository.existsById(mealId)) { + throw new BaseException(NOT_FOUND_MEAL); + } + + List menuIds = mealMenuRepository.findMenuIdsByMealId(mealId); + + if (menuIds.isEmpty()) { + return SliceResponse.empty(); + } + + List mealIds = mealMenuRepository.findMealIdsByMenuIds(menuIds); + + if (menuIds.isEmpty()) { + return SliceResponse.empty(); + } + + Page pageReviews = reviewRepository.findReviewsByMealIds(mealIds, lastReviewId, pageable); + + List mealReviewResponses = + pageReviews.getContent().stream().map(review -> MealReviewResponse.from(review, + userDetails.getId())).collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(pageReviews.getNumberOfElements()) + .hasNext(pageReviews.hasNext()) + .dataList(mealReviewResponses) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java b/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java index 93e30eb7..d919146c 100644 --- a/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java +++ b/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.slice.dto; import io.swagger.v3.oas.annotations.media.Schema; +import java.util.Collections; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -19,4 +20,8 @@ public class SliceResponse { @Schema(description = "데이터 리스트") private List dataList; + + public static SliceResponse empty() { + return new SliceResponse<>(0, false, Collections.emptyList()); + } } From db76cc6dc2597a69d5230f7d58aeab91893d9202 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Fri, 22 Nov 2024 17:34:30 +0900 Subject: [PATCH 141/399] =?UTF-8?q?feat:=20=EB=A6=AC=EB=B7=B0=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20api=20v2=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/dto/UpdateMealReviewRequest.java | 19 +++++ .../eatssu/domain/review/entity/Review.java | 1 + .../presentation/MealReviewController.java | 25 +++++++ .../review/service/MealReviewService.java | 72 +++++++++++++++++++ 4 files changed, 117 insertions(+) create mode 100644 src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java new file mode 100644 index 00000000..e1e79bb9 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java @@ -0,0 +1,19 @@ +package ssu.eatssu.domain.review.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Max; +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Schema(title = "리뷰 수정(글)") +@Getter +@AllArgsConstructor +public class UpdateMealReviewRequest { + @Schema(description = "평점", example = "4") + private Integer rating; + private List menuLikes; + @Max(150) + @Schema(description = "한줄평", example = "맛있어용") + private String content; +} diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index 1dea057b..accfa3f1 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -14,6 +14,7 @@ @Entity @Getter +@Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Builder @AllArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java index 3eceddb7..950b29c1 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java @@ -14,6 +14,8 @@ import org.springframework.data.domain.Sort; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -24,6 +26,7 @@ import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; import ssu.eatssu.domain.review.dto.MealReviewResponse; import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; +import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; import ssu.eatssu.domain.review.service.MealReviewService; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.global.handler.response.BaseResponse; @@ -88,4 +91,26 @@ public BaseResponse> getReviews( customUserDetails); return BaseResponse.success(myReviews); } + + @Operation(summary = "리뷰 수정(글 수정)", description = """ + 리뷰 내용을 수정하는 API 입니다.

+ 글 수정만 가능하며 사진 수정은 지원하지 않습니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 수정 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @PatchMapping("/{reviewId}") + public BaseResponse updateReview(@Parameter(description = "reviewId") + @PathVariable("reviewId") Long reviewId, + @RequestBody UpdateMealReviewRequest request, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + mealReviewService.updateReview(customUserDetails, reviewId, request); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java index 1d64d594..b95cf080 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java @@ -2,7 +2,9 @@ import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MEAL; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; import java.util.LinkedHashMap; import java.util.List; @@ -25,6 +27,7 @@ import ssu.eatssu.domain.review.dto.MenuLikeRequest; import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; import ssu.eatssu.domain.review.dto.ReviewRatingCount; +import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewImage; import ssu.eatssu.domain.review.entity.ReviewMenuLike; @@ -157,4 +160,73 @@ public SliceResponse findReviews(Long mealId, Long lastRevie .dataList(mealReviewResponses) .build(); } + + /** + * 리뷰 수정 + */ + @Transactional + public void updateReview(CustomUserDetails userDetails, Long reviewId, UpdateMealReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (review.isNotWrittenBy(user)) { + throw new BaseException(REVIEW_PERMISSION_DENIED); + } + + List reviewMenuLikes = reviewMenuLikeRepository.findByReview(review); + + Map menuLikes = request.getMenuLikes().stream() + .collect(Collectors.toMap(MenuLikeRequest::getMenuId, MenuLikeRequest::getIsLike)); + + // 기존 데이터 수정 또는 삭제 + for (ReviewMenuLike reviewMenuLike : reviewMenuLikes) { + Boolean updatedIsLike = menuLikes.get(reviewMenuLike.getMenu().getId()); + if (updatedIsLike == null) { + // 요청 데이터에 없으면 삭제 + reviewMenuLikeRepository.delete(reviewMenuLike); + if (reviewMenuLike.getIsLike()) { + reviewMenuLike.getMenu().decreaseLikeCount(); + } else { + reviewMenuLike.getMenu().increaseUnlikeCount(); + } + } else if (!reviewMenuLike.getIsLike().equals(updatedIsLike)) { + // 요청 데이터와 다르면 수정 + reviewMenuLike.updateLike(updatedIsLike); + if (updatedIsLike) { + reviewMenuLike.getMenu().increaseLikeCount(); + reviewMenuLike.getMenu().decreaseUnlikeCount(); + } else { + reviewMenuLike.getMenu().increaseUnlikeCount(); + reviewMenuLike.getMenu().decreaseLikeCount(); + } + } + menuLikes.remove(reviewMenuLike.getMenu().getId()); + } + + // 새롭게 리뷰 요청된 메뉴 데이터 처리 + for (Map.Entry entry : menuLikes.entrySet()) { + Menu menu = menuRepository.findById(entry.getKey()) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + + ReviewMenuLike reviewMenuLike = ReviewMenuLike.builder() + .review(review) + .menu(menu) + .isLike(entry.getValue()).build(); + reviewMenuLikeRepository.save(reviewMenuLike); + + if (entry.getValue()) { + menu.increaseLikeCount(); + } else { + menu.increaseUnlikeCount(); + } + } + + // 리뷰 본문 및 평점 수정 + review.setContent(request.getContent()); + review.setRating(request.getRating()); + reviewRepository.save(review); + } } From c843b115145c49180f99507190621d516ab7411f Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Fri, 22 Nov 2024 17:35:37 +0900 Subject: [PATCH 142/399] =?UTF-8?q?feat:=20=EB=A6=AC=EB=B7=B0=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20api=20v2=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/MealReviewController.java | 16 ++++++++++ .../review/service/MealReviewService.java | 31 +++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java index 950b29c1..6cee387b 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java @@ -13,6 +13,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -113,4 +114,19 @@ public BaseResponse updateReview(@Parameter(description = "reviewId") mealReviewService.updateReview(customUserDetails, reviewId, request); return BaseResponse.success(); } + + @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("/{reviewId}") + public BaseResponse deleteReview( + @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + mealReviewService.deleteReview(customUserDetails, reviewId); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java index b95cf080..2c8ffac7 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java @@ -229,4 +229,35 @@ public void updateReview(CustomUserDetails userDetails, Long reviewId, UpdateMea review.setRating(request.getRating()); reviewRepository.save(review); } + + /** + * 리뷰 삭제 + */ + @Transactional + public void deleteReview(CustomUserDetails userDetails, Long reviewId) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (review.isNotWrittenBy(user)) { + throw new BaseException(REVIEW_PERMISSION_DENIED); + } + + List reviewMenuLikes = reviewMenuLikeRepository.findByReview(review); + + // ReviewMenuLike 삭제 전, 메뉴의 likeCount와 unlikeCount 수정 + for (ReviewMenuLike reviewMenuLike : reviewMenuLikes) { + Menu menu = reviewMenuLike.getMenu(); + if (reviewMenuLike.getIsLike()) { + menu.decreaseLikeCount(); + } else { + menu.decreaseUnlikeCount(); + } + } + + reviewMenuLikeRepository.deleteAll(reviewMenuLikes); + reviewRepository.delete(review); + } } From 91c75bc1b6a876f9f3c1954534bbab81d162f948 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Fri, 22 Nov 2024 17:38:43 +0900 Subject: [PATCH 143/399] =?UTF-8?q?feat:=20=EB=82=B4=EA=B0=80=20=EC=93=B4?= =?UTF-8?q?=20=EB=A6=AC=EB=B7=B0=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20api=20v2=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/service/MealReviewService.java | 23 ++++++++++ .../domain/user/dto/MyMealReviewResponse.java | 44 +++++++++++++++++++ .../user/presentation/UserController.java | 19 ++++++++ 3 files changed, 86 insertions(+) create mode 100644 src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java index 2c8ffac7..f8f1b16d 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java @@ -13,6 +13,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.auth.security.CustomUserDetails; @@ -35,6 +36,7 @@ import ssu.eatssu.domain.review.repository.ReviewMenuLikeRepository; import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.slice.dto.SliceResponse; +import ssu.eatssu.domain.user.dto.MyMealReviewResponse; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; @@ -260,4 +262,25 @@ public void deleteReview(CustomUserDetails userDetails, Long reviewId) { reviewMenuLikeRepository.deleteAll(reviewMenuLikes); reviewRepository.delete(review); } + + /** + * 내 리뷰 리스트 조회 + */ + public SliceResponse findMyReviews(CustomUserDetails userDetails, Long lastReviewId, + Pageable pageable) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, + pageable); + + List myMealReviewResponses = sliceReviews.getContent().stream() + .map(MyMealReviewResponse::from).toList(); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(myMealReviewResponses) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java new file mode 100644 index 00000000..e3624180 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -0,0 +1,44 @@ +package ssu.eatssu.domain.user.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import ssu.eatssu.domain.review.entity.Review; + +@AllArgsConstructor +@Builder +@Schema(title = "리뷰 상세 - 내 리뷰 리스트 조회 용") +@Getter +public class MyMealReviewResponse { + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; + + @Schema(description = "평점", example = "4") + private Integer rating; + + @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") + private LocalDate writtenAt; + + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; + + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; + + public static MyMealReviewResponse from(Review review) { + List imgUrlList = new ArrayList<>(); + review.getReviewImages().forEach(i->imgUrlList.add(i.getImageUrl())); + + return MyMealReviewResponse.builder() + .reviewId(review.getId()) + .rating(review.getRating()) + .writtenAt(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imageUrls(imgUrlList) + .build(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 10c32918..d50b7b68 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -17,6 +17,8 @@ import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.domain.review.service.MealReviewService; +import ssu.eatssu.domain.user.dto.MyMealReviewResponse; import ssu.eatssu.domain.user.dto.MyReviewDetail; import ssu.eatssu.domain.user.dto.MyPageResponse; import ssu.eatssu.domain.slice.dto.SliceResponse; @@ -33,6 +35,7 @@ public class UserController { private final UserService userService; private final SliceService sliceService; + private final MealReviewService mealReviewService; @Operation(summary = "이메일 중복 체크", description = """ 이메일 중복 체크 API 입니다.

@@ -99,6 +102,22 @@ public BaseResponse> getMyReviewList( return BaseResponse.success(myReviews); } + @Operation(summary = "내가 쓴 리뷰 리스트 조회 V2", description = "내가 쓴 리뷰 리스트를 조회하는 API V2 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/v2/reviews") + public BaseResponse> getMyReviews( + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = mealReviewService.findMyReviews(customUserDetails, + lastReviewId, + pageable); + return BaseResponse.success(myReviews); + } + @Operation(summary = "마이페이지 정보 조회", description = "마이페이지 정보를 조회하는 API 입니다.") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공"), From 085b16de6ac1ce64ea2dcd6749b87ba36001195c Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Fri, 22 Nov 2024 17:42:08 +0900 Subject: [PATCH 144/399] =?UTF-8?q?feat:=20=EB=A6=AC=EB=B7=B0=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4/=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20ap?= =?UTF-8?q?i=20=EC=9D=B8=EA=B0=80=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 6dfabadc..fd07362d 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -29,7 +29,7 @@ public class SecurityConfig { private static final String[] AUTH_WHITELIST = { "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", - "/reviews", "/reviews/menus/**", "/reviews/meals/**" + "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics", "/v2/reviews" }; private static final String[] ADMIN_PAGE_LIST = { From 38c0353d3764b6495da3d5ab0855d43cc0b32f9b Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Fri, 22 Nov 2024 17:44:03 +0900 Subject: [PATCH 145/399] =?UTF-8?q?feat:=20=EB=A6=AC=EB=B7=B0=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=20api=20v0=20=EC=8A=A4=EC=9B=A8=EA=B1=B0=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=88=A8=EA=B9=80=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/review/presentation/ReviewController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index 53d2a9e1..678fc2d9 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -1,5 +1,6 @@ package ssu.eatssu.domain.review.presentation; +import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; @@ -64,6 +65,7 @@ public BaseResponse> getReviews( return BaseResponse.success(myReviews); } + @Hidden @Operation(summary = "리뷰 작성", description = """ 리뷰를 작성하는 API 입니다.

reviewCreate는 application/json, multipartFileList는 multipart/form-data로 요청해주세요.

From 3c649914cf3b1536278b3834b4797c9dc9daa67b Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Fri, 22 Nov 2024 17:56:01 +0900 Subject: [PATCH 146/399] =?UTF-8?q?feat:=20q=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/menu/entity/QMenu.java | 4 ++ .../eatssu/domain/review/entity/QReview.java | 5 ++ .../domain/review/entity/QReviewMenuLike.java | 56 +++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 src/main/generated/ssu/eatssu/domain/review/entity/QReviewMenuLike.java diff --git a/src/main/generated/ssu/eatssu/domain/menu/entity/QMenu.java b/src/main/generated/ssu/eatssu/domain/menu/entity/QMenu.java index abed2eed..5b85bb33 100644 --- a/src/main/generated/ssu/eatssu/domain/menu/entity/QMenu.java +++ b/src/main/generated/ssu/eatssu/domain/menu/entity/QMenu.java @@ -28,6 +28,8 @@ public class QMenu extends EntityPathBase { public final BooleanPath isDiscontinued = createBoolean("isDiscontinued"); + public final NumberPath likeCount = createNumber("likeCount", Integer.class); + public final ListPath mealMenus = this.createList("mealMenus", MealMenu.class, QMealMenu.class, PathInits.DIRECT2); public final StringPath name = createString("name"); @@ -38,6 +40,8 @@ public class QMenu extends EntityPathBase { public final ssu.eatssu.domain.review.entity.QReviews reviews; + public final NumberPath unlikeCount = createNumber("unlikeCount", Integer.class); + public QMenu(String variable) { this(Menu.class, forVariable(variable), INITS); } diff --git a/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java b/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java index 528f63d2..04902739 100644 --- a/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java +++ b/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java @@ -31,11 +31,15 @@ public class QReview extends EntityPathBase { public final NumberPath id = createNumber("id", Long.class); + public final ssu.eatssu.domain.menu.entity.QMeal meal; + public final ssu.eatssu.domain.menu.entity.QMenu menu; //inherited public final DateTimePath modifiedDate = _super.modifiedDate; + public final NumberPath rating = createNumber("rating", Integer.class); + public final ssu.eatssu.domain.rating.entity.QRatings ratings; public final ListPath reviewImages = this.createList("reviewImages", ReviewImage.class, QReviewImage.class, PathInits.DIRECT2); @@ -60,6 +64,7 @@ public QReview(PathMetadata metadata, PathInits inits) { public QReview(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); + this.meal = inits.isInitialized("meal") ? new ssu.eatssu.domain.menu.entity.QMeal(forProperty("meal")) : null; this.menu = inits.isInitialized("menu") ? new ssu.eatssu.domain.menu.entity.QMenu(forProperty("menu"), inits.get("menu")) : null; this.ratings = inits.isInitialized("ratings") ? new ssu.eatssu.domain.rating.entity.QRatings(forProperty("ratings")) : null; this.user = inits.isInitialized("user") ? new ssu.eatssu.domain.user.entity.QUser(forProperty("user")) : null; diff --git a/src/main/generated/ssu/eatssu/domain/review/entity/QReviewMenuLike.java b/src/main/generated/ssu/eatssu/domain/review/entity/QReviewMenuLike.java new file mode 100644 index 00000000..60ffea6b --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/review/entity/QReviewMenuLike.java @@ -0,0 +1,56 @@ +package ssu.eatssu.domain.review.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QReviewMenuLike is a Querydsl query type for ReviewMenuLike + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QReviewMenuLike extends EntityPathBase { + + private static final long serialVersionUID = -1523380939L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QReviewMenuLike reviewMenuLike = new QReviewMenuLike("reviewMenuLike"); + + public final NumberPath id = createNumber("id", Long.class); + + public final BooleanPath isLike = createBoolean("isLike"); + + public final ssu.eatssu.domain.menu.entity.QMenu menu; + + public final QReview review; + + public QReviewMenuLike(String variable) { + this(ReviewMenuLike.class, forVariable(variable), INITS); + } + + public QReviewMenuLike(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QReviewMenuLike(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QReviewMenuLike(PathMetadata metadata, PathInits inits) { + this(ReviewMenuLike.class, metadata, inits); + } + + public QReviewMenuLike(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.menu = inits.isInitialized("menu") ? new ssu.eatssu.domain.menu.entity.QMenu(forProperty("menu"), inits.get("menu")) : null; + this.review = inits.isInitialized("review") ? new QReview(forProperty("review"), inits.get("review")) : null; + } + +} + From 61f0c4c3ea2a99be6a23bed045c6b793c3c360c1 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sat, 23 Nov 2024 14:30:20 +0900 Subject: [PATCH 147/399] =?UTF-8?q?refactor:=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=20api=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/review/entity/QReview.java | 2 ++ .../eatssu/domain/review/entity/Review.java | 30 +++++++++++++++++++ .../domain/review/entity/ReviewMenuLike.java | 8 +++++ .../review/presentation/ReviewController.java | 1 - .../review/service/MealReviewService.java | 26 ++++------------ 5 files changed, 46 insertions(+), 21 deletions(-) diff --git a/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java b/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java index 04902739..c1beaf60 100644 --- a/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java +++ b/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java @@ -44,6 +44,8 @@ public class QReview extends EntityPathBase { public final ListPath reviewImages = this.createList("reviewImages", ReviewImage.class, QReviewImage.class, PathInits.DIRECT2); + public final ListPath reviewMenuLikes = this.createList("reviewMenuLikes", ReviewMenuLike.class, QReviewMenuLike.class, PathInits.DIRECT2); + public final ssu.eatssu.domain.user.entity.QUser user; public QReview(String variable) { diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index accfa3f1..762408df 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -46,9 +46,14 @@ public class Review extends BaseTimeEntity { @JoinColumn(name = "meal_id") private Meal meal; + @Builder.Default @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) private List reviewImages = new ArrayList<>(); + @Builder.Default + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) + private List reviewMenuLikes = new ArrayList<>(); + public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { this.content = content; this.ratings = Ratings.of(mainRate, amountRate, tasteRate); @@ -62,4 +67,29 @@ public void clearUser() { this.user = null; } + public void addReviewImage(String imageUrl) { + ReviewImage reviewImage = new ReviewImage(this, imageUrl); + this.reviewImages.add(reviewImage); + } + + public void addReviewMenuLike(Menu menu, boolean isLike) { + ReviewMenuLike reviewMenuLike = ReviewMenuLike.create(this, menu, isLike); + this.reviewMenuLikes.add(reviewMenuLike); + + if (isLike) { + menu.increaseLikeCount(); + } else { + menu.increaseUnlikeCount(); + } + } + + public void removeReviewMenuLike(ReviewMenuLike reviewMenuLike) { + this.reviewMenuLikes.remove(reviewMenuLike); + + if (reviewMenuLike.getIsLike()) { + reviewMenuLike.getMenu().decreaseLikeCount(); + } else { + reviewMenuLike.getMenu().decreaseUnlikeCount(); + } + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java index 348e4a07..3c4483fa 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java @@ -40,4 +40,12 @@ public class ReviewMenuLike { public void updateLike(Boolean like) { isLike = like; } + + public static ReviewMenuLike create(Review review, Menu menu, Boolean isLike) { + return ReviewMenuLike.builder() + .review(review) + .menu(menu) + .isLike(isLike) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index 678fc2d9..a767e2aa 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -119,7 +119,6 @@ public BaseResponse writeReview(@Parameter(description = "menuId") @PathVaria return BaseResponse.success(); } - @Operation(summary = "리뷰 수정(글 수정)", description = """ 리뷰 내용을 수정하는 API 입니다.

글 수정만 가능하며 사진 수정은 지원하지 않습니다. diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java index f8f1b16d..f14f5216 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java @@ -64,30 +64,16 @@ public void createReview(CustomUserDetails userDetails, CreateMealReviewRequest .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); Review review = request.toReviewEntity(user, meal); - reviewRepository.save(review); - List reviewImages = request.createReviewImages(review); - reviewImageRepository.saveAll(reviewImages); + request.getImageUrls().forEach(review::addReviewImage); - for (MenuLikeRequest menuLikes : request.getMenuLikes()) { - Menu menu = menuRepository.findById(menuLikes.getMenuId()) + for (MenuLikeRequest menuLike : request.getMenuLikes()) { + Menu menu = menuRepository.findById(menuLike.getMenuId()) .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - - // 리뷰-메뉴 좋아요 정보 저장 - ReviewMenuLike reviewMenuLike = ReviewMenuLike.builder() - .review(review) - .menu(menu) - .isLike(menuLikes.getIsLike()).build(); - reviewMenuLikeRepository.save(reviewMenuLike); - - // 메뉴에 좋아요/싫어요 수 반영 - if (menuLikes.getIsLike()) { - menu.increaseLikeCount(); - } - else { - menu.increaseUnlikeCount(); - } + review.addReviewMenuLike(menu, menuLike.getIsLike()); } + + reviewRepository.save(review); } /** From 87bc15471b267b2e6895777245035114b38e6de8 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sat, 23 Nov 2024 15:22:38 +0900 Subject: [PATCH 148/399] =?UTF-8?q?refactor:=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20api=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/menu/entity/Menu.java | 18 ++++++ .../eatssu/domain/review/entity/Review.java | 35 ++++++++++++ .../review/service/MealReviewService.java | 55 ++----------------- 3 files changed, 58 insertions(+), 50 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index 2ec432cc..27624211 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -100,4 +100,22 @@ public void decreaseLikeCount() { public void decreaseUnlikeCount() { unlikeCount--; } + + public void changeLikeStatus(Boolean isLike) { + if (isLike) { + decreaseUnlikeCount(); + increaseLikeCount(); + } else { + decreaseLikeCount(); + increaseUnlikeCount(); + } + } + + public void adjustLikeCount(int count, Boolean isLike) { + if (isLike) { + this.likeCount += count; + } else { + this.unlikeCount += count; + } + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index 762408df..c527045c 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -1,6 +1,8 @@ package ssu.eatssu.domain.review.entity; import jakarta.persistence.*; +import java.util.Map; +import java.util.stream.Collectors; import lombok.*; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -92,4 +94,37 @@ public void removeReviewMenuLike(ReviewMenuLike reviewMenuLike) { reviewMenuLike.getMenu().decreaseUnlikeCount(); } } + + public void update(String content, int rating, Map updatedMenuLikes) { + this.content = content; + this.rating = rating; + + // 현재 menu like 상태를 menu를 기준으로 매핑 + Map currentMenuLikes = this.reviewMenuLikes.stream() + .collect(Collectors.toMap(ReviewMenuLike::getMenu, menuLike -> menuLike)); + + for (Map.Entry entry : updatedMenuLikes.entrySet()) { + Menu menu = entry.getKey(); + Boolean isLike = entry.getValue(); + + ReviewMenuLike currentMenuLike = currentMenuLikes.get(menu); + + if (currentMenuLike == null) { + // 새롭게 추가된 menu like + this.addReviewMenuLike(menu, isLike); + } else if (!currentMenuLike.getIsLike().equals(isLike)) { + // 기존 menu like 수정 + currentMenuLike.updateLike(isLike); + menu.changeLikeStatus(isLike); + } + // 수정 후 map에서 제거(나머지는 삭제 대상) + currentMenuLikes.remove(menu); + } + + // 리뷰 요청 데이터에 없는 menu 항목이므로 삭제 + for (ReviewMenuLike remainingMenuLike : currentMenuLikes.values()) { + this.reviewMenuLikes.remove(remainingMenuLike); + remainingMenuLike.getMenu().adjustLikeCount(-1, remainingMenuLike.getIsLike()); + } + } } diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java index f14f5216..df961cb8 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java @@ -164,57 +164,12 @@ public void updateReview(CustomUserDetails userDetails, Long reviewId, UpdateMea throw new BaseException(REVIEW_PERMISSION_DENIED); } - List reviewMenuLikes = reviewMenuLikeRepository.findByReview(review); - - Map menuLikes = request.getMenuLikes().stream() - .collect(Collectors.toMap(MenuLikeRequest::getMenuId, MenuLikeRequest::getIsLike)); - - // 기존 데이터 수정 또는 삭제 - for (ReviewMenuLike reviewMenuLike : reviewMenuLikes) { - Boolean updatedIsLike = menuLikes.get(reviewMenuLike.getMenu().getId()); - if (updatedIsLike == null) { - // 요청 데이터에 없으면 삭제 - reviewMenuLikeRepository.delete(reviewMenuLike); - if (reviewMenuLike.getIsLike()) { - reviewMenuLike.getMenu().decreaseLikeCount(); - } else { - reviewMenuLike.getMenu().increaseUnlikeCount(); - } - } else if (!reviewMenuLike.getIsLike().equals(updatedIsLike)) { - // 요청 데이터와 다르면 수정 - reviewMenuLike.updateLike(updatedIsLike); - if (updatedIsLike) { - reviewMenuLike.getMenu().increaseLikeCount(); - reviewMenuLike.getMenu().decreaseUnlikeCount(); - } else { - reviewMenuLike.getMenu().increaseUnlikeCount(); - reviewMenuLike.getMenu().decreaseLikeCount(); - } - } - menuLikes.remove(reviewMenuLike.getMenu().getId()); - } - - // 새롭게 리뷰 요청된 메뉴 데이터 처리 - for (Map.Entry entry : menuLikes.entrySet()) { - Menu menu = menuRepository.findById(entry.getKey()) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - - ReviewMenuLike reviewMenuLike = ReviewMenuLike.builder() - .review(review) - .menu(menu) - .isLike(entry.getValue()).build(); - reviewMenuLikeRepository.save(reviewMenuLike); - - if (entry.getValue()) { - menu.increaseLikeCount(); - } else { - menu.increaseUnlikeCount(); - } - } + Map menuLikes = request.getMenuLikes().stream() + .collect(Collectors.toMap(menuLike -> menuRepository.findById(menuLike.getMenuId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)), + MenuLikeRequest::getIsLike)); - // 리뷰 본문 및 평점 수정 - review.setContent(request.getContent()); - review.setRating(request.getRating()); + review.update(request.getContent(), request.getRating(), menuLikes); reviewRepository.save(review); } From 1c7966df1b2c4488efa026c1d21be554e4563320 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sat, 23 Nov 2024 15:48:16 +0900 Subject: [PATCH 149/399] =?UTF-8?q?refactor:=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20api=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/review/entity/QReview.java | 4 ++-- .../ssu/eatssu/domain/review/entity/Review.java | 17 ++++++++++++----- .../domain/review/entity/ReviewMenuLike.java | 4 ++++ .../review/service/MealReviewService.java | 14 +------------- 4 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java b/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java index c1beaf60..ba39fb86 100644 --- a/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java +++ b/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java @@ -35,6 +35,8 @@ public class QReview extends EntityPathBase { public final ssu.eatssu.domain.menu.entity.QMenu menu; + public final ListPath menuLikes = this.createList("menuLikes", ReviewMenuLike.class, QReviewMenuLike.class, PathInits.DIRECT2); + //inherited public final DateTimePath modifiedDate = _super.modifiedDate; @@ -44,8 +46,6 @@ public class QReview extends EntityPathBase { public final ListPath reviewImages = this.createList("reviewImages", ReviewImage.class, QReviewImage.class, PathInits.DIRECT2); - public final ListPath reviewMenuLikes = this.createList("reviewMenuLikes", ReviewMenuLike.class, QReviewMenuLike.class, PathInits.DIRECT2); - public final ssu.eatssu.domain.user.entity.QUser user; public QReview(String variable) { diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index c527045c..7cc6d009 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -54,7 +54,7 @@ public class Review extends BaseTimeEntity { @Builder.Default @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) - private List reviewMenuLikes = new ArrayList<>(); + private List menuLikes = new ArrayList<>(); public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { this.content = content; @@ -76,7 +76,7 @@ public void addReviewImage(String imageUrl) { public void addReviewMenuLike(Menu menu, boolean isLike) { ReviewMenuLike reviewMenuLike = ReviewMenuLike.create(this, menu, isLike); - this.reviewMenuLikes.add(reviewMenuLike); + this.menuLikes.add(reviewMenuLike); if (isLike) { menu.increaseLikeCount(); @@ -86,7 +86,7 @@ public void addReviewMenuLike(Menu menu, boolean isLike) { } public void removeReviewMenuLike(ReviewMenuLike reviewMenuLike) { - this.reviewMenuLikes.remove(reviewMenuLike); + this.menuLikes.remove(reviewMenuLike); if (reviewMenuLike.getIsLike()) { reviewMenuLike.getMenu().decreaseLikeCount(); @@ -100,7 +100,7 @@ public void update(String content, int rating, Map updatedMenuLik this.rating = rating; // 현재 menu like 상태를 menu를 기준으로 매핑 - Map currentMenuLikes = this.reviewMenuLikes.stream() + Map currentMenuLikes = this.menuLikes.stream() .collect(Collectors.toMap(ReviewMenuLike::getMenu, menuLike -> menuLike)); for (Map.Entry entry : updatedMenuLikes.entrySet()) { @@ -123,8 +123,15 @@ public void update(String content, int rating, Map updatedMenuLik // 리뷰 요청 데이터에 없는 menu 항목이므로 삭제 for (ReviewMenuLike remainingMenuLike : currentMenuLikes.values()) { - this.reviewMenuLikes.remove(remainingMenuLike); + this.menuLikes.remove(remainingMenuLike); remainingMenuLike.getMenu().adjustLikeCount(-1, remainingMenuLike.getIsLike()); } } + + public void resetMenuLikes() { + for (ReviewMenuLike reviewMenuLike : this.menuLikes) { + reviewMenuLike.resetMenuLikeStatus(); + } + this.menuLikes.clear(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java index 3c4483fa..94eeea8f 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java @@ -48,4 +48,8 @@ public static ReviewMenuLike create(Review review, Menu menu, Boolean isLike) { .isLike(isLike) .build(); } + + public void resetMenuLikeStatus() { + menu.adjustLikeCount(-1, this.isLike); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java index df961cb8..a8a201fa 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java @@ -188,19 +188,7 @@ public void deleteReview(CustomUserDetails userDetails, Long reviewId) { throw new BaseException(REVIEW_PERMISSION_DENIED); } - List reviewMenuLikes = reviewMenuLikeRepository.findByReview(review); - - // ReviewMenuLike 삭제 전, 메뉴의 likeCount와 unlikeCount 수정 - for (ReviewMenuLike reviewMenuLike : reviewMenuLikes) { - Menu menu = reviewMenuLike.getMenu(); - if (reviewMenuLike.getIsLike()) { - menu.decreaseLikeCount(); - } else { - menu.decreaseUnlikeCount(); - } - } - - reviewMenuLikeRepository.deleteAll(reviewMenuLikes); + review.resetMenuLikes(); reviewRepository.delete(review); } From e7ad60820cdde4262fc499134e65db9c85713755 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sun, 24 Nov 2024 01:05:01 +0900 Subject: [PATCH 150/399] =?UTF-8?q?refactor:=20=ED=8A=B9=EC=A0=95=20?= =?UTF-8?q?=EC=8B=9D=EB=8B=B9=20=EB=A6=AC=EB=B7=B0=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?api=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/review/dto/ReviewRatingCount.java | 9 ++++++++- .../review/service/MealReviewService.java | 18 +++--------------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java index 2f165b1b..46ac274d 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java @@ -1,6 +1,10 @@ package ssu.eatssu.domain.review.dto; +import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; +import ssu.eatssu.domain.review.entity.Review; //COMMENT: 더 좋은 매개변수 명이 있을 것 같은데 제 머리로는 이게 한계입니다... 멋진 변수명으로 바꿔주세요 public record ReviewRatingCount(long oneStarCount, long twoStarCount, long threeStarCount, long fourStarCount, @@ -9,7 +13,10 @@ public record ReviewRatingCount(long oneStarCount, long twoStarCount, long three public ReviewRatingCount { } - public static ReviewRatingCount from(Map ratingDistribution) { + public static ReviewRatingCount from(List reviews) { + Map ratingDistribution = reviews.stream() + .collect(Collectors.groupingBy(Review::getRating, LinkedHashMap::new, Collectors.counting())); + return new ReviewRatingCount( ratingDistribution.getOrDefault(1, 0L), ratingDistribution.getOrDefault(2, 0L), diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java index a8a201fa..db13a0f7 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java @@ -6,7 +6,6 @@ import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -30,8 +29,6 @@ import ssu.eatssu.domain.review.dto.ReviewRatingCount; import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.review.entity.ReviewImage; -import ssu.eatssu.domain.review.entity.ReviewMenuLike; import ssu.eatssu.domain.review.repository.ReviewImageRepository; import ssu.eatssu.domain.review.repository.ReviewMenuLikeRepository; import ssu.eatssu.domain.review.repository.ReviewRepository; @@ -46,11 +43,9 @@ public class MealReviewService { private final UserRepository userRepository; private final ReviewRepository reviewRepository; - private final ReviewImageRepository reviewImageRepository; private final MenuRepository menuRepository; private final MealRepository mealRepository; private final MealMenuRepository mealMenuRepository; - private final ReviewMenuLikeRepository reviewMenuLikeRepository; /** * 리뷰 생성 @@ -81,18 +76,14 @@ public void createReview(CustomUserDetails userDetails, CreateMealReviewRequest */ public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { List meals = mealRepository.findByRestaurant(restaurant); - List reviews = reviewRepository.findByMealIn(meals); - - Integer reviewCount = reviews.size(); + List menus = mealMenuRepository.findMenusByMeals(meals); Double averageRating = reviews.stream() .mapToInt(Review::getRating) .average() .orElse(0.0); - List menus = mealMenuRepository.findMenusByMeals(meals); - Integer likeCount = menus.stream() .mapToInt(Menu::getLikeCount) .sum(); @@ -101,13 +92,10 @@ public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { .mapToInt(Menu::getUnlikeCount) .sum(); - Map ratingDistribution = reviews.stream() - .collect(Collectors.groupingBy(Review::getRating, LinkedHashMap::new, Collectors.counting())); - - ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(ratingDistribution); + ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); return RestaurantReviewResponse.builder() - .totalReviewCount(reviewCount) + .totalReviewCount(reviews.size()) .reviewRatingCount(reviewRatingCount) .mainRating(averageRating) .likeCount(likeCount) From 6e4087fae9849d9f430fa39cdf5daf27079bbb25 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sun, 24 Nov 2024 01:25:46 +0900 Subject: [PATCH 151/399] =?UTF-8?q?feat:=20=EC=8B=9D=EB=8B=A8=20=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EC=8B=9C=20=EC=98=88=EC=99=B8=20=EC=B2=98=EB=A6=AC=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 --- .../ssu/eatssu/domain/review/service/MealReviewService.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java index db13a0f7..1eb38044 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java @@ -113,14 +113,12 @@ public SliceResponse findReviews(Long mealId, Long lastRevie } List menuIds = mealMenuRepository.findMenuIdsByMealId(mealId); - if (menuIds.isEmpty()) { return SliceResponse.empty(); } List mealIds = mealMenuRepository.findMealIdsByMenuIds(menuIds); - - if (menuIds.isEmpty()) { + if (mealIds.isEmpty()) { return SliceResponse.empty(); } From 337fb2c4e8d439bb0ca6bb61685ee134f3e70908 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Tue, 26 Nov 2024 16:56:42 +0900 Subject: [PATCH 152/399] =?UTF-8?q?fix:=20=EB=A6=AC=EB=B7=B0=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C,=20?= =?UTF-8?q?=EC=9D=B8=EC=A6=9D=20=ED=86=A0=ED=81=B0=20=EC=97=86=EB=8A=94=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0=20NPE=20=EB=B0=9C=EC=83=9D=ED=95=98=EB=8A=94?= =?UTF-8?q?=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ssu/eatssu/domain/slice/service/SliceService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java index 2e796956..318468e9 100644 --- a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java +++ b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java @@ -68,7 +68,8 @@ public SliceResponse findReviews(MenuType menuType, pageable); } - return convertToReviewDetail(sliceReviews, userDetails.getId()); + Long userId = (userDetails != null) ? userDetails.getId() : null; + return convertToReviewDetail(sliceReviews, userId); } private SliceResponse convertToReviewDetail(Slice sliceReviews, From 2f2eb62c788d69af383c89060c8b3707f052d3d6 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Tue, 26 Nov 2024 16:57:47 +0900 Subject: [PATCH 153/399] =?UTF-8?q?docs:=20=EC=9D=B8=EC=A6=9D=20=ED=86=A0?= =?UTF-8?q?=ED=81=B0=20=ED=95=84=EC=88=98/=ED=95=84=EC=9A=94=20=EC=97=86?= =?UTF-8?q?=EB=8A=94=20api=20=EC=8A=A4=EC=9B=A8=EA=B1=B0=EC=97=90=20?= =?UTF-8?q?=EB=AA=85=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/auth/presentation/OAuthController.java | 4 ++-- .../domain/menu/presentation/rest/MealController.java | 10 +++++----- .../domain/menu/presentation/rest/MenuController.java | 2 +- .../domain/review/presentation/ReviewController.java | 8 +++++--- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java index 304a2df6..5f93410a 100644 --- a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java @@ -30,7 +30,7 @@ public class OAuthController { private final OAuthService oauthService; - @Operation(summary = "카카오 회원가입, 로그인", description = """ + @Operation(summary = "카카오 회원가입, 로그인 [인증 토큰 필요 X]", description = """ 카카오 회원가입, 로그인 API 입니다.

가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. """) @@ -43,7 +43,7 @@ public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest req return BaseResponse.success(tokens); } - @Operation(summary = "애플 회원가입, 로그인", description = """ + @Operation(summary = "애플 회원가입, 로그인 [인증 토큰 필요 X]", description = """ 애플 로그인, 회원가입 API 입니다.

가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. """) diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java index 2f83a548..6270c425 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java @@ -35,7 +35,7 @@ public class MealController { private final MealService mealService; - @Operation(summary = "식단 추가", description = """ + @Operation(summary = "식단 추가 [인증 토큰 필요 X]", description = """ 식단을 추가하는 API 입니다.

변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) @@ -60,7 +60,7 @@ public BaseResponse createMeal( return BaseResponse.success(); } - @Operation(summary = "식단 추가", description = """ + @Operation(summary = "식단 추가 [인증 토큰 필요 X]", description = """ 식단을 추가하는 API 입니다.

변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) @@ -86,7 +86,7 @@ public BaseResponse createMealWithPrice( return BaseResponse.success(); } - @Operation(summary = "변동 메뉴 식단 리스트 조회", description = """ + @Operation(summary = "변동 메뉴 식단 리스트 조회 [인증 토큰 필요 X]", description = """ 변동 메뉴 식단 리스트를 조회하는 API 입니다. 변동 메뉴 식당 (학생 식당, 도담, 기숙사 식당) 의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회합니다. 일반적으로 학생식당과 도담의 경우 식단 여러 개가 조회되고 기숙사식당은 한 개만 조회됩니다.) @@ -106,7 +106,7 @@ public BaseResponse> getMealDetail( mealService.getMealDetailsByDateAndRestaurantAndTimePart(date, restaurant, timePart)); } - @Operation(summary = "식단 삭제", description = "식단을 삭제하는 API 입니다.") + @Operation(summary = "식단 삭제 [인증 토큰 필요 X]", description = "식단을 삭제하는 API 입니다.") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "식단 삭제 성공"), @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) @@ -119,7 +119,7 @@ public BaseResponse deleteMeal( return BaseResponse.success(); } - @Operation(summary = "메뉴 정보 리스트 조회", description = """ + @Operation(summary = "메뉴 정보 리스트 조회 [인증 토큰 필요 X]", description = """ 메뉴 정보 리스트를 조회하는 API 입니다.

식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") """) diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java index 3519ea0b..e117f72a 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java @@ -24,7 +24,7 @@ public class MenuController { private final MenuService menuService; - @Operation(summary = "고정 메뉴 리스트 조회", + @Operation(summary = "고정 메뉴 리스트 조회 [인증 토큰 필요 X]", description = """ 고정 메뉴 리스트를 조회하는 API 입니다. diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index 53d2a9e1..d8f594ee 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -1,5 +1,6 @@ package ssu.eatssu.domain.review.presentation; +import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; @@ -36,7 +37,7 @@ public class ReviewController { private final ReviewService reviewService; private final SliceService sliceService; - @Operation(summary = "리뷰 리스트 조회", description = """ + @Operation(summary = "리뷰 리스트 조회 [인증 토큰 필수 X]", description = """ 리뷰 리스트를 조회하는 API 입니다.

menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

@@ -64,6 +65,7 @@ public BaseResponse> getReviews( return BaseResponse.success(myReviews); } + @Hidden @Operation(summary = "리뷰 작성", description = """ 리뷰를 작성하는 API 입니다.

reviewCreate는 application/json, multipartFileList는 multipart/form-data로 요청해주세요.

@@ -153,7 +155,7 @@ public BaseResponse deleteReview( return BaseResponse.success(); } - @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회(메뉴명, 평점 등등)", description = """ + @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ 식단 리뷰 정보를 조회하는 API 입니다.

메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. """) @@ -171,7 +173,7 @@ public BaseResponse getMealReviews( return BaseResponse.success(reviewService.findMealReviews(mealId)); } - @Operation(summary = "고정 메뉴 리뷰 정보 조회(메뉴명, 평점 등등)", description = """ + @Operation(summary = "고정 메뉴 리뷰 정보 조회(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. """) From 7b1df99a5bf870f06efefd0e5050e1853a1e13c5 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sat, 21 Dec 2024 23:13:37 +0900 Subject: [PATCH 154/399] =?UTF-8?q?fix:=20=EB=A6=AC=EB=B7=B0=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C,=20?= =?UTF-8?q?=EC=9D=B8=EC=A6=9D=20=ED=86=A0=ED=81=B0=20=EC=97=86=EB=8A=94=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0=20npe=20=EB=B0=9C=EC=83=9D=ED=95=98=EB=8A=94?= =?UTF-8?q?=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/review/service/MealReviewService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java index 1eb38044..2266fbe5 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java @@ -124,9 +124,10 @@ public SliceResponse findReviews(Long mealId, Long lastRevie Page pageReviews = reviewRepository.findReviewsByMealIds(mealIds, lastReviewId, pageable); + Long userId = (userDetails != null) ? userDetails.getId() : null; List mealReviewResponses = pageReviews.getContent().stream().map(review -> MealReviewResponse.from(review, - userDetails.getId())).collect(Collectors.toList()); + userId)).collect(Collectors.toList()); return SliceResponse.builder() .numberOfElements(pageReviews.getNumberOfElements()) From 19e812a6979749d6e8c7968a442797df44a305fd Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sat, 21 Dec 2024 23:14:36 +0900 Subject: [PATCH 155/399] =?UTF-8?q?refactor:=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?/=EC=8B=AB=EC=96=B4=EC=9A=94=20=EC=B7=A8=EC=86=8C=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ssu/eatssu/domain/menu/entity/Menu.java | 6 +++--- src/main/java/ssu/eatssu/domain/review/entity/Review.java | 2 +- .../ssu/eatssu/domain/review/entity/ReviewMenuLike.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index 27624211..46f32450 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -111,11 +111,11 @@ public void changeLikeStatus(Boolean isLike) { } } - public void adjustLikeCount(int count, Boolean isLike) { + public void cancelLike(Boolean isLike) { if (isLike) { - this.likeCount += count; + decreaseLikeCount(); } else { - this.unlikeCount += count; + decreaseUnlikeCount(); } } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index 7cc6d009..ea6b0dda 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -124,7 +124,7 @@ public void update(String content, int rating, Map updatedMenuLik // 리뷰 요청 데이터에 없는 menu 항목이므로 삭제 for (ReviewMenuLike remainingMenuLike : currentMenuLikes.values()) { this.menuLikes.remove(remainingMenuLike); - remainingMenuLike.getMenu().adjustLikeCount(-1, remainingMenuLike.getIsLike()); + remainingMenuLike.getMenu().cancelLike(remainingMenuLike.getIsLike()); } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java index 94eeea8f..794f7d19 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java @@ -50,6 +50,6 @@ public static ReviewMenuLike create(Review review, Menu menu, Boolean isLike) { } public void resetMenuLikeStatus() { - menu.adjustLikeCount(-1, this.isLike); + menu.cancelLike(this.isLike); } } From 045011c881147a719efbae139bdfcac9294ec5c5 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sun, 22 Dec 2024 14:39:03 +0900 Subject: [PATCH 156/399] =?UTF-8?q?feat:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=8B=9C=20=EA=B8=B0=EB=B3=B8=20=EB=8B=89=EB=84=A4=EC=9E=84=20?= =?UTF-8?q?user-uuid=EB=A1=9C=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ssu/eatssu/domain/user/entity/User.java | 10 ++++++---- .../ssu/eatssu/domain/user/service/UserService.java | 10 +++++++++- .../domain/report/service/ReportServiceTest.java | 2 +- .../domain/review/service/ReviewServiceTest.java | 2 +- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index 0ffe96b2..4d72033d 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -55,9 +55,10 @@ public class User extends BaseTimeEntity { /** * Oauth 회원가입 용 생성자 */ - private User(@NotNull String email, @NotNull Role role, @NotNull OAuthProvider provider, + private User(@NotNull String email, String nickname, @NotNull Role role, @NotNull OAuthProvider provider, @NotNull String providerId, @NotNull UserStatus status, @NotNull String credentials) { this.email = email; + this.nickname = nickname; this.role = role; this.provider = provider; this.providerId = providerId; @@ -69,9 +70,10 @@ private User(@NotNull String email, @NotNull Role role, @NotNull OAuthProvider p * <--Static Factory Method--> * Oauth 회원가입 */ - public static User create(@NotNull String email, @NotNull OAuthProvider provider, String providerId, + public static User create(@NotNull String email, @NotNull String nickname, @NotNull OAuthProvider provider, + String providerId, String credentials) { - return new User(email, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials); + return new User(email, nickname, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials); } /** @@ -80,7 +82,7 @@ public static User create(@NotNull String email, @NotNull OAuthProvider provider * Role 은 다른 방법으로 세팅할 예정 */ public static User adminJoin(@NotNull String loginId, @NotNull String credentials) { - return new User(loginId, Role.USER, OAuthProvider.EATSSU, loginId, UserStatus.INACTIVE, credentials); + return new User(loginId, null, Role.USER, OAuthProvider.EATSSU, loginId, UserStatus.INACTIVE, credentials); } public void updateNickname(@NotNull String nickname) { diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index 2ab2e0b5..e7a26c49 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -3,6 +3,7 @@ import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; import jakarta.transaction.Transactional; +import java.util.UUID; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.crypto.password.PasswordEncoder; @@ -29,7 +30,8 @@ public class UserService { public User join(String email, OAuthProvider provider, String providerId) { String credentials = createCredentials(provider, providerId); - User user = User.create(email, provider, providerId, credentials); + String nickname = createNickname(); + User user = User.create(email, nickname, provider, providerId, credentials); return userRepository.save(user); } @@ -65,6 +67,12 @@ public Boolean validateDuplicatedNickname(String nickname) { return !userRepository.existsByNickname(nickname); } + public String createNickname() { + String uuid = UUID.randomUUID().toString(); + String shortUUID = uuid.substring(0, 4); + return "user-" + shortUUID; + } + private String createCredentials(OAuthProvider provider, String providerId) { return passwordEncoder.encode(provider + providerId); } diff --git a/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java b/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java index ad2b7b07..22e28cb8 100644 --- a/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java @@ -60,7 +60,7 @@ void setUp() { } private User createUser() { - return User.create("test1@test.com", OAuthProvider.EATSSU, "1234", "1234"); + return User.create("test1@test.com", "user-test", OAuthProvider.EATSSU, "1234", "1234"); } private CustomUserDetails createCustomUserDetails(User user) { diff --git a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java index 4cf64fbe..c69579c8 100644 --- a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java @@ -95,7 +95,7 @@ void setup() { } private User createUser() { - return User.create("test@test.com", OAuthProvider.EATSSU, "1234", "1234"); + return User.create("test@test.com", "user-test", OAuthProvider.EATSSU, "1234", "1234"); } private CustomUserDetails createCustomUserDetails(User user) { From 470ca598c6eed130d3c3f3d49a502dcef671b344 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Wed, 5 Feb 2025 10:24:53 +0900 Subject: [PATCH 157/399] =?UTF-8?q?[Docs]=20README=EC=97=90=20=EA=B8=B0?= =?UTF-8?q?=EC=B4=88=EC=A0=81=EC=9D=B8=20=EB=AC=B8=EC=84=9C=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .github/README.md diff --git a/.github/README.md b/.github/README.md new file mode 100644 index 00000000..f36a45de --- /dev/null +++ b/.github/README.md @@ -0,0 +1,13 @@ +![eatssu_main](https://github.com/user-attachments/assets/ae21de9d-8333-46fb-b0ad-d8578f572fda) + +# EAT-SSU: 숭실대 학식 리뷰 앱 +**EAT-SSU는 숭실대학교 학생들의 즐겁고 편리한 학식 이용을 꿈꾸는 프로젝트입니다.** +- `학생식당`, `도담식당`, `푸드코트`, `스낵코너`, `기숙사 식당`의 모든 메뉴를 비교할 수 있어요. +- 학식에 대한 리뷰를 통해 숭실대 학우들과 정보를 공유할 수 있어요. +- 식당의 운영시간과 위치를 확인할 수 있어요! +- [More & Contact](https://hi-jin-1514.notion.site/EAT-SSU-b04aaec9b7814a628c6ef6b3e08c74a3) + +## 다운로드 +2023.11.27~ 서비스 중 +- [App Store](https://apps.apple.com/kr/app/eat-ssu-%EC%88%AD%EC%8B%A4%EB%8C%80-%ED%95%99%EC%8B%9D-%EB%A6%AC%EB%B7%B0-%EC%95%B1/id6472618331) +- [Play Store](https://play.google.com/store/apps/details?id=com.eatssu.android) \ No newline at end of file From 09e58f739d8162d3e7b4e1f893864a5e0e8c5cbd Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Fri, 7 Feb 2025 11:15:04 +0900 Subject: [PATCH 158/399] =?UTF-8?q?feat:=20=ED=8A=B9=EC=A0=95=20=EC=8B=9D?= =?UTF-8?q?=EB=8B=B9=20=EB=AA=A8=EB=93=A0=20=EB=A6=AC=EB=B7=B0=20=EC=B4=9D?= =?UTF-8?q?=20=ED=8F=89=EC=A0=90=20=EB=B0=98=EC=98=AC=EB=A6=BC=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/review/service/MealReviewService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java index 2266fbe5..f0182d47 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java @@ -97,7 +97,7 @@ public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { return RestaurantReviewResponse.builder() .totalReviewCount(reviews.size()) .reviewRatingCount(reviewRatingCount) - .mainRating(averageRating) + .mainRating(Math.round(averageRating * 10) / 10.0) .likeCount(likeCount) .unlikeCount(unlikeCount) .build(); From a68f9cd8a2d6aebed5430797208b543d7673bd3e Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Fri, 7 Feb 2025 11:45:34 +0900 Subject: [PATCH 159/399] =?UTF-8?q?feat:=20=EB=A6=AC=EB=B7=B0=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=9D=91=EB=8B=B5=EC=97=90=20=EC=A2=8B?= =?UTF-8?q?=EC=95=84=EC=9A=94=ED=95=9C=20=EB=A9=94=EB=89=B4=EB=AA=85=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/review/dto/MealReviewResponse.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java index 7b688613..502ac029 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java @@ -4,10 +4,12 @@ import java.time.LocalDate; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.entity.ReviewMenuLike; @AllArgsConstructor @Builder @@ -38,16 +40,25 @@ public class MealReviewResponse { @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") private List imageUrls; + @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") + private List likedMenuNames; + public static MealReviewResponse from(Review review, Long userId) { List imageUrls = new ArrayList<>(); review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); + List likedMenuNames = review.getMenuLikes().stream() + .filter(ReviewMenuLike::getIsLike) + .map(like -> like.getMenu().getName()) + .collect(Collectors.toList()); + MealReviewResponseBuilder builder = MealReviewResponse.builder() .reviewId(review.getId()) .rating(review.getRating()) .writtenAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) - .imageUrls(imageUrls); + .imageUrls(imageUrls) + .likedMenuNames(likedMenuNames); if (review.getUser() == null) { return builder.writerId(null) From 65dc447a227db6680701d423340ebe83856b3952 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Fri, 7 Feb 2025 13:35:30 +0900 Subject: [PATCH 160/399] =?UTF-8?q?feat:=20=EB=A6=AC=EB=B7=B0=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20api=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/review/entity/Review.java | 31 +++++++------------ 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index ea6b0dda..54a7b800 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -61,6 +61,7 @@ public void update(String content, Integer mainRate, Integer amountRate, Integer this.ratings = Ratings.of(mainRate, amountRate, tasteRate); } + // TODO : this.user가 null이면? public boolean isNotWrittenBy(User user) { return !this.user.equals(user); } @@ -105,26 +106,18 @@ public void update(String content, int rating, Map updatedMenuLik for (Map.Entry entry : updatedMenuLikes.entrySet()) { Menu menu = entry.getKey(); - Boolean isLike = entry.getValue(); - - ReviewMenuLike currentMenuLike = currentMenuLikes.get(menu); - - if (currentMenuLike == null) { - // 새롭게 추가된 menu like - this.addReviewMenuLike(menu, isLike); - } else if (!currentMenuLike.getIsLike().equals(isLike)) { - // 기존 menu like 수정 - currentMenuLike.updateLike(isLike); - menu.changeLikeStatus(isLike); + Boolean newState = entry.getValue(); + ReviewMenuLike existingReviewMenuLike = currentMenuLikes.get(menu); + if (existingReviewMenuLike == null) { + // 기존에 없는 메뉴이면 새롭게 추가 + this.addReviewMenuLike(menu, newState); + } else { + // 기존에 있는 경우 : 상태가 다르면 업데이트 + if (!existingReviewMenuLike.getIsLike().equals(newState)) { + existingReviewMenuLike.updateLike(newState); + menu.changeLikeStatus(newState); + } } - // 수정 후 map에서 제거(나머지는 삭제 대상) - currentMenuLikes.remove(menu); - } - - // 리뷰 요청 데이터에 없는 menu 항목이므로 삭제 - for (ReviewMenuLike remainingMenuLike : currentMenuLikes.values()) { - this.menuLikes.remove(remainingMenuLike); - remainingMenuLike.getMenu().cancelLike(remainingMenuLike.getIsLike()); } } From 70a58b69627a3d415c0e8a9f257c01174f638d9a Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sat, 8 Feb 2025 13:10:27 +0900 Subject: [PATCH 161/399] =?UTF-8?q?feat:=20=EB=A6=AC=EB=B7=B0=20=EC=A2=8B?= =?UTF-8?q?=EC=95=84=EC=9A=94=20=EB=88=84=EB=A5=B4=EA=B8=B0/=EC=B7=A8?= =?UTF-8?q?=EC=86=8C=ED=95=98=EA=B8=B0=20api=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/review/entity/Review.java | 3 ++ .../domain/review/entity/ReviewLike.java | 38 +++++++++++++++++++ .../presentation/MealReviewController.java | 14 +++++++ .../repository/ReviewLikeRepository.java | 11 ++++++ .../review/service/MealReviewService.java | 30 ++++++++++++++- .../ssu/eatssu/domain/user/entity/User.java | 9 +++++ 6 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java create mode 100644 src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index 54a7b800..06213bf9 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -56,6 +56,9 @@ public class Review extends BaseTimeEntity { @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) private List menuLikes = new ArrayList<>(); + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) + private List reviewLikes = new ArrayList<>(); + public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { this.content = content; this.ratings = Ratings.of(mainRate, amountRate, tasteRate); diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java new file mode 100644 index 00000000..4d6006fb --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java @@ -0,0 +1,38 @@ +package ssu.eatssu.domain.review.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import ssu.eatssu.domain.user.entity.User; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +public class ReviewLike { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_like_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + public static ReviewLike create(User user, Review review) { + return new ReviewLike(null, review, user); + } +} diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java index 6cee387b..276869ae 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java @@ -129,4 +129,18 @@ public BaseResponse deleteReview( mealReviewService.deleteReview(customUserDetails, reviewId); return BaseResponse.success(); } + + @Operation(summary = "리뷰 좋아요 누르기/취소하기", description = "리뷰에 좋아요(찜)를 누르거나 취소하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 좋아요 토글 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/{reviewId}/like") + public BaseResponse toggleReviewLike( + @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + mealReviewService.toggleReviewLike(customUserDetails, reviewId); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java new file mode 100644 index 00000000..1c669c7a --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java @@ -0,0 +1,11 @@ +package ssu.eatssu.domain.review.repository; + +import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.entity.ReviewLike; +import ssu.eatssu.domain.user.entity.User; + +public interface ReviewLikeRepository extends JpaRepository { + Optional findByReviewAndUser(Review review, User user); +} diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java index f0182d47..9e019fd0 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java @@ -8,6 +8,7 @@ import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; @@ -29,8 +30,8 @@ import ssu.eatssu.domain.review.dto.ReviewRatingCount; import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.review.repository.ReviewImageRepository; -import ssu.eatssu.domain.review.repository.ReviewMenuLikeRepository; +import ssu.eatssu.domain.review.entity.ReviewLike; +import ssu.eatssu.domain.review.repository.ReviewLikeRepository; import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.domain.user.dto.MyMealReviewResponse; @@ -46,6 +47,7 @@ public class MealReviewService { private final MenuRepository menuRepository; private final MealRepository mealRepository; private final MealMenuRepository mealMenuRepository; + private final ReviewLikeRepository reviewLikeRepository; /** * 리뷰 생성 @@ -199,4 +201,28 @@ public SliceResponse findMyReviews(CustomUserDetails userD .dataList(myMealReviewResponses) .build(); } + + /** + * 리뷰 좋아요 누르기/취소하기 + */ + @Transactional + public void toggleReviewLike(CustomUserDetails userDetails, Long reviewId) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + Optional optionalReviewLike = reviewLikeRepository.findByReviewAndUser(review, user); + if (optionalReviewLike.isPresent()) { + // 이미 좋아요 한 경우 -> 좋아요 취소 처리 + ReviewLike reviewLike = optionalReviewLike.get(); + review.getReviewLikes().remove(reviewLike); + reviewLikeRepository.delete(reviewLike); + } else { + // 좋아요 하지 않은 경우 -> 좋아요 추가 처리 + ReviewLike reviewLike = ReviewLike.create(user, review); + review.getReviewLikes().add(reviewLike); + reviewLikeRepository.save(reviewLike); + } + } } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index 4d72033d..e3ab753e 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -8,11 +8,13 @@ import lombok.NoArgsConstructor; import org.jetbrains.annotations.NotNull; import ssu.eatssu.domain.auth.entity.OAuthProvider; +import ssu.eatssu.domain.department.entity.Department; import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.Report; import java.util.List; +import ssu.eatssu.domain.review.entity.ReviewLike; @Entity @Getter @@ -52,6 +54,13 @@ public class User extends BaseTimeEntity { @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) private List userInquiries = new ArrayList<>(); + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "department_id") + private Department department; + + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) + private List reviewLikes = new ArrayList<>(); + /** * Oauth 회원가입 용 생성자 */ From 77f87a5842c3a4ca6115d6d647c375932b81aeff Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sat, 8 Feb 2025 13:17:38 +0900 Subject: [PATCH 162/399] =?UTF-8?q?feat:=20=EB=A6=AC=EB=B7=B0=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=9D=91=EB=8B=B5=EC=97=90=20=EC=B0=9C=20=EC=97=AC?= =?UTF-8?q?=EB=B6=80,=20=EC=A2=8B=EC=95=84=EC=9A=94=20=EA=B0=9C=EC=88=98?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/review/dto/MealReviewResponse.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java index 502ac029..bc07a3ff 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java @@ -43,6 +43,12 @@ public class MealReviewResponse { @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") private List likedMenuNames; + @Schema(description = "본인이 이 리뷰에 좋아요를 눌렀는지 여부(true/false)", example = "true") + private Boolean isLikedByUser; + + @Schema(description = "리뷰 좋아요 개수", example = "10") + private Integer likeCount; + public static MealReviewResponse from(Review review, Long userId) { List imageUrls = new ArrayList<>(); review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); @@ -52,13 +58,18 @@ public static MealReviewResponse from(Review review, Long userId) { .map(like -> like.getMenu().getName()) .collect(Collectors.toList()); + boolean isLikedByUser = (userId != null) && review.getReviewLikes().stream() + .anyMatch(like -> like.getUser().getId().equals(userId)); + MealReviewResponseBuilder builder = MealReviewResponse.builder() .reviewId(review.getId()) .rating(review.getRating()) .writtenAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imageUrls(imageUrls) - .likedMenuNames(likedMenuNames); + .likedMenuNames(likedMenuNames) + .isLikedByUser(isLikedByUser) + .likeCount(review.getReviewLikes().size()); if (review.getUser() == null) { return builder.writerId(null) From 336660ad1aa5a4a683472bb81d14724f2a5e7a69 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sat, 8 Feb 2025 18:37:19 +0900 Subject: [PATCH 163/399] =?UTF-8?q?feat:=20=EB=A6=AC=EB=B7=B0=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=9D=91=EB=8B=B5=EC=97=90=20=EB=A6=AC=EB=B7=B0?= =?UTF-8?q?=EC=9E=90=20=EB=B3=84=EC=B9=AD=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/review/dto/MealReviewResponse.java | 10 +++++- .../domain/user/util/UserAliasUtil.java | 32 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java index bc07a3ff..90bf50bc 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java @@ -10,6 +10,7 @@ import lombok.Getter; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewMenuLike; +import ssu.eatssu.domain.user.util.UserAliasUtil; @AllArgsConstructor @Builder @@ -49,6 +50,9 @@ public class MealReviewResponse { @Schema(description = "리뷰 좋아요 개수", example = "10") private Integer likeCount; + @Schema(description = "별칭", example = "미슈테리 미식가") + private String alias; + public static MealReviewResponse from(Review review, Long userId) { List imageUrls = new ArrayList<>(); review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); @@ -61,6 +65,9 @@ public static MealReviewResponse from(Review review, Long userId) { boolean isLikedByUser = (userId != null) && review.getReviewLikes().stream() .anyMatch(like -> like.getUser().getId().equals(userId)); + String alias = (review.getUser() != null) ? UserAliasUtil.getUserAlias(review.getUser(), + review.getUser().getReviews()) : "알 수 없음"; + MealReviewResponseBuilder builder = MealReviewResponse.builder() .reviewId(review.getId()) .rating(review.getRating()) @@ -69,7 +76,8 @@ public static MealReviewResponse from(Review review, Long userId) { .imageUrls(imageUrls) .likedMenuNames(likedMenuNames) .isLikedByUser(isLikedByUser) - .likeCount(review.getReviewLikes().size()); + .likeCount(review.getReviewLikes().size()) + .alias(alias); if (review.getUser() == null) { return builder.writerId(null) diff --git a/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java b/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java new file mode 100644 index 00000000..bdbee84d --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java @@ -0,0 +1,32 @@ +package ssu.eatssu.domain.user.util; + +import java.util.List; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.user.entity.User; + +public class UserAliasUtil { + public static String getUserAlias(User user, List reviews) { + if (reviews == null || reviews.isEmpty()) { + return "미슈테리 미식가"; + } + double avg = reviews.stream() + .mapToInt(Review::getRating) + .average() + .orElse(0.0); + int avgRating = (int) Math.round(avg); + switch (avgRating) { + case 1: + return "깐깐슈"; + case 2: + return "아이슈"; + case 3: + return "밸런슈"; + case 4: + return "딱좋슈"; + case 5: + return "다 맛있슈"; + default: + return "미슈테리 미식가"; + } + } +} From 7f2c0867da793854beda42b96943d9b836a6feed Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Wed, 12 Feb 2025 15:11:56 +0900 Subject: [PATCH 164/399] =?UTF-8?q?[Fix]=20QueryDslConfig=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=EC=9D=98=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EA=B2=BD?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ssu/eatssu/global/config/QueryDslConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java b/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java index e26f86d8..8262a5ce 100644 --- a/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java +++ b/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java @@ -1,4 +1,4 @@ -package ssu.eatssu.config; +package ssu.eatssu.global.config; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; From e5dc2f69ef37f001f59db2e75b02a51e24c84dc3 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sun, 16 Feb 2025 10:43:58 +0900 Subject: [PATCH 165/399] =?UTF-8?q?feat:=20=EC=A0=9C=ED=9C=B4=20=EC=97=94?= =?UTF-8?q?=ED=8B=B0=ED=8B=B0=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/department/entity/QCollege.java | 44 ++++++++++++++ .../domain/department/entity/QDepartment.java | 55 ++++++++++++++++++ .../domain/inquiry/entity/QInquiry.java | 2 +- .../partnership/entity/QPartnership.java | 58 +++++++++++++++++++ .../entity/QPartnershipCollege.java | 54 +++++++++++++++++ .../entity/QPartnershipDepartment.java | 54 +++++++++++++++++ .../partnership/entity/QPartnershipLike.java | 54 +++++++++++++++++ .../eatssu/domain/review/entity/QReport.java | 2 +- .../eatssu/domain/review/entity/QReview.java | 4 +- .../domain/review/entity/QReviewLike.java | 54 +++++++++++++++++ .../ssu/eatssu/domain/user/entity/QUser.java | 23 +++++++- .../domain/department/entity/College.java | 34 +++++++++++ .../domain/department/entity/Department.java | 38 ++++++++++++ .../partnership/entity/Partnership.java | 58 +++++++++++++++++++ .../entity/PartnershipCollege.java | 32 ++++++++++ .../entity/PartnershipDepartment.java | 32 ++++++++++ .../partnership/entity/PartnershipLike.java | 32 ++++++++++ .../partnership/entity/PartnershipType.java | 17 ++++++ .../partnership/entity/RestaurantType.java | 12 ++++ .../ssu/eatssu/domain/user/entity/User.java | 6 +- 20 files changed, 658 insertions(+), 7 deletions(-) create mode 100644 src/main/generated/ssu/eatssu/domain/department/entity/QCollege.java create mode 100644 src/main/generated/ssu/eatssu/domain/department/entity/QDepartment.java create mode 100644 src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnership.java create mode 100644 src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipCollege.java create mode 100644 src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipDepartment.java create mode 100644 src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipLike.java create mode 100644 src/main/generated/ssu/eatssu/domain/review/entity/QReviewLike.java create mode 100644 src/main/java/ssu/eatssu/domain/department/entity/College.java create mode 100644 src/main/java/ssu/eatssu/domain/department/entity/Department.java create mode 100644 src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java create mode 100644 src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java create mode 100644 src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java create mode 100644 src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java create mode 100644 src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java create mode 100644 src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java diff --git a/src/main/generated/ssu/eatssu/domain/department/entity/QCollege.java b/src/main/generated/ssu/eatssu/domain/department/entity/QCollege.java new file mode 100644 index 00000000..9107b5ee --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/department/entity/QCollege.java @@ -0,0 +1,44 @@ +package ssu.eatssu.domain.department.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QCollege is a Querydsl query type for College + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QCollege extends EntityPathBase { + + private static final long serialVersionUID = -1622040298L; + + public static final QCollege college = new QCollege("college"); + + public final ListPath departments = this.createList("departments", Department.class, QDepartment.class, PathInits.DIRECT2); + + public final NumberPath id = createNumber("id", Long.class); + + public final StringPath name = createString("name"); + + public final ListPath partnershipColleges = this.createList("partnershipColleges", ssu.eatssu.domain.partnership.entity.PartnershipCollege.class, ssu.eatssu.domain.partnership.entity.QPartnershipCollege.class, PathInits.DIRECT2); + + public QCollege(String variable) { + super(College.class, forVariable(variable)); + } + + public QCollege(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QCollege(PathMetadata metadata) { + super(College.class, metadata); + } + +} + diff --git a/src/main/generated/ssu/eatssu/domain/department/entity/QDepartment.java b/src/main/generated/ssu/eatssu/domain/department/entity/QDepartment.java new file mode 100644 index 00000000..6eea3a4f --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/department/entity/QDepartment.java @@ -0,0 +1,55 @@ +package ssu.eatssu.domain.department.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QDepartment is a Querydsl query type for Department + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QDepartment extends EntityPathBase { + + private static final long serialVersionUID = -1234083981L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QDepartment department = new QDepartment("department"); + + public final QCollege college; + + public final NumberPath id = createNumber("id", Long.class); + + public final StringPath name = createString("name"); + + public final ListPath partnershipDepartments = this.createList("partnershipDepartments", ssu.eatssu.domain.partnership.entity.PartnershipDepartment.class, ssu.eatssu.domain.partnership.entity.QPartnershipDepartment.class, PathInits.DIRECT2); + + public QDepartment(String variable) { + this(Department.class, forVariable(variable), INITS); + } + + public QDepartment(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QDepartment(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QDepartment(PathMetadata metadata, PathInits inits) { + this(Department.class, metadata, inits); + } + + public QDepartment(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.college = inits.isInitialized("college") ? new QCollege(forProperty("college")) : null; + } + +} + diff --git a/src/main/generated/ssu/eatssu/domain/inquiry/entity/QInquiry.java b/src/main/generated/ssu/eatssu/domain/inquiry/entity/QInquiry.java index a2f74be5..e60508e2 100644 --- a/src/main/generated/ssu/eatssu/domain/inquiry/entity/QInquiry.java +++ b/src/main/generated/ssu/eatssu/domain/inquiry/entity/QInquiry.java @@ -58,7 +58,7 @@ public QInquiry(PathMetadata metadata, PathInits inits) { public QInquiry(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); - this.user = inits.isInitialized("user") ? new ssu.eatssu.domain.user.entity.QUser(forProperty("user")) : null; + this.user = inits.isInitialized("user") ? new ssu.eatssu.domain.user.entity.QUser(forProperty("user"), inits.get("user")) : null; } } diff --git a/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnership.java b/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnership.java new file mode 100644 index 00000000..70f70b11 --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnership.java @@ -0,0 +1,58 @@ +package ssu.eatssu.domain.partnership.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QPartnership is a Querydsl query type for Partnership + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QPartnership extends EntityPathBase { + + private static final long serialVersionUID = 477296821L; + + public static final QPartnership partnership = new QPartnership("partnership"); + + public final DatePath endDate = createDate("endDate", java.time.LocalDate.class); + + public final NumberPath id = createNumber("id", Long.class); + + public final NumberPath latitude = createNumber("latitude", Double.class); + + public final ListPath likes = this.createList("likes", PartnershipLike.class, QPartnershipLike.class, PathInits.DIRECT2); + + public final NumberPath longitude = createNumber("longitude", Double.class); + + public final ListPath partnershipColleges = this.createList("partnershipColleges", PartnershipCollege.class, QPartnershipCollege.class, PathInits.DIRECT2); + + public final ListPath partnershipDepartments = this.createList("partnershipDepartments", PartnershipDepartment.class, QPartnershipDepartment.class, PathInits.DIRECT2); + + public final EnumPath partnershipType = createEnum("partnershipType", PartnershipType.class); + + public final EnumPath restaurantType = createEnum("restaurantType", RestaurantType.class); + + public final DatePath startDate = createDate("startDate", java.time.LocalDate.class); + + public final StringPath storeName = createString("storeName"); + + public QPartnership(String variable) { + super(Partnership.class, forVariable(variable)); + } + + public QPartnership(Path path) { + super(path.getType(), path.getMetadata()); + } + + public QPartnership(PathMetadata metadata) { + super(Partnership.class, metadata); + } + +} + diff --git a/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipCollege.java b/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipCollege.java new file mode 100644 index 00000000..7508f243 --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipCollege.java @@ -0,0 +1,54 @@ +package ssu.eatssu.domain.partnership.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QPartnershipCollege is a Querydsl query type for PartnershipCollege + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QPartnershipCollege extends EntityPathBase { + + private static final long serialVersionUID = -1865762014L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QPartnershipCollege partnershipCollege = new QPartnershipCollege("partnershipCollege"); + + public final ssu.eatssu.domain.department.entity.QCollege college; + + public final NumberPath id = createNumber("id", Long.class); + + public final QPartnership partnership; + + public QPartnershipCollege(String variable) { + this(PartnershipCollege.class, forVariable(variable), INITS); + } + + public QPartnershipCollege(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QPartnershipCollege(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QPartnershipCollege(PathMetadata metadata, PathInits inits) { + this(PartnershipCollege.class, metadata, inits); + } + + public QPartnershipCollege(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.college = inits.isInitialized("college") ? new ssu.eatssu.domain.department.entity.QCollege(forProperty("college")) : null; + this.partnership = inits.isInitialized("partnership") ? new QPartnership(forProperty("partnership")) : null; + } + +} + diff --git a/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipDepartment.java b/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipDepartment.java new file mode 100644 index 00000000..b5bb7f2f --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipDepartment.java @@ -0,0 +1,54 @@ +package ssu.eatssu.domain.partnership.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QPartnershipDepartment is a Querydsl query type for PartnershipDepartment + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QPartnershipDepartment extends EntityPathBase { + + private static final long serialVersionUID = 841972199L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QPartnershipDepartment partnershipDepartment = new QPartnershipDepartment("partnershipDepartment"); + + public final ssu.eatssu.domain.department.entity.QDepartment department; + + public final NumberPath id = createNumber("id", Long.class); + + public final QPartnership partnership; + + public QPartnershipDepartment(String variable) { + this(PartnershipDepartment.class, forVariable(variable), INITS); + } + + public QPartnershipDepartment(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QPartnershipDepartment(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QPartnershipDepartment(PathMetadata metadata, PathInits inits) { + this(PartnershipDepartment.class, metadata, inits); + } + + public QPartnershipDepartment(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.department = inits.isInitialized("department") ? new ssu.eatssu.domain.department.entity.QDepartment(forProperty("department"), inits.get("department")) : null; + this.partnership = inits.isInitialized("partnership") ? new QPartnership(forProperty("partnership")) : null; + } + +} + diff --git a/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipLike.java b/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipLike.java new file mode 100644 index 00000000..53afcc5d --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipLike.java @@ -0,0 +1,54 @@ +package ssu.eatssu.domain.partnership.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QPartnershipLike is a Querydsl query type for PartnershipLike + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QPartnershipLike extends EntityPathBase { + + private static final long serialVersionUID = 1146206700L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QPartnershipLike partnershipLike = new QPartnershipLike("partnershipLike"); + + public final NumberPath id = createNumber("id", Long.class); + + public final QPartnership partnership; + + public final ssu.eatssu.domain.user.entity.QUser user; + + public QPartnershipLike(String variable) { + this(PartnershipLike.class, forVariable(variable), INITS); + } + + public QPartnershipLike(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QPartnershipLike(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QPartnershipLike(PathMetadata metadata, PathInits inits) { + this(PartnershipLike.class, metadata, inits); + } + + public QPartnershipLike(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.partnership = inits.isInitialized("partnership") ? new QPartnership(forProperty("partnership")) : null; + this.user = inits.isInitialized("user") ? new ssu.eatssu.domain.user.entity.QUser(forProperty("user"), inits.get("user")) : null; + } + +} + diff --git a/src/main/generated/ssu/eatssu/domain/review/entity/QReport.java b/src/main/generated/ssu/eatssu/domain/review/entity/QReport.java index 55586888..76ff16c2 100644 --- a/src/main/generated/ssu/eatssu/domain/review/entity/QReport.java +++ b/src/main/generated/ssu/eatssu/domain/review/entity/QReport.java @@ -61,7 +61,7 @@ public QReport(PathMetadata metadata, PathInits inits) { public QReport(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.review = inits.isInitialized("review") ? new QReview(forProperty("review"), inits.get("review")) : null; - this.user = inits.isInitialized("user") ? new ssu.eatssu.domain.user.entity.QUser(forProperty("user")) : null; + this.user = inits.isInitialized("user") ? new ssu.eatssu.domain.user.entity.QUser(forProperty("user"), inits.get("user")) : null; } } diff --git a/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java b/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java index ba39fb86..6c73ff18 100644 --- a/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java +++ b/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java @@ -46,6 +46,8 @@ public class QReview extends EntityPathBase { public final ListPath reviewImages = this.createList("reviewImages", ReviewImage.class, QReviewImage.class, PathInits.DIRECT2); + public final ListPath reviewLikes = this.createList("reviewLikes", ReviewLike.class, QReviewLike.class, PathInits.DIRECT2); + public final ssu.eatssu.domain.user.entity.QUser user; public QReview(String variable) { @@ -69,7 +71,7 @@ public QReview(Class type, PathMetadata metadata, PathInits in this.meal = inits.isInitialized("meal") ? new ssu.eatssu.domain.menu.entity.QMeal(forProperty("meal")) : null; this.menu = inits.isInitialized("menu") ? new ssu.eatssu.domain.menu.entity.QMenu(forProperty("menu"), inits.get("menu")) : null; this.ratings = inits.isInitialized("ratings") ? new ssu.eatssu.domain.rating.entity.QRatings(forProperty("ratings")) : null; - this.user = inits.isInitialized("user") ? new ssu.eatssu.domain.user.entity.QUser(forProperty("user")) : null; + this.user = inits.isInitialized("user") ? new ssu.eatssu.domain.user.entity.QUser(forProperty("user"), inits.get("user")) : null; } } diff --git a/src/main/generated/ssu/eatssu/domain/review/entity/QReviewLike.java b/src/main/generated/ssu/eatssu/domain/review/entity/QReviewLike.java new file mode 100644 index 00000000..cbfbd97a --- /dev/null +++ b/src/main/generated/ssu/eatssu/domain/review/entity/QReviewLike.java @@ -0,0 +1,54 @@ +package ssu.eatssu.domain.review.entity; + +import static com.querydsl.core.types.PathMetadataFactory.*; + +import com.querydsl.core.types.dsl.*; + +import com.querydsl.core.types.PathMetadata; +import javax.annotation.processing.Generated; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.PathInits; + + +/** + * QReviewLike is a Querydsl query type for ReviewLike + */ +@Generated("com.querydsl.codegen.DefaultEntitySerializer") +public class QReviewLike extends EntityPathBase { + + private static final long serialVersionUID = -2088045898L; + + private static final PathInits INITS = PathInits.DIRECT2; + + public static final QReviewLike reviewLike = new QReviewLike("reviewLike"); + + public final NumberPath id = createNumber("id", Long.class); + + public final QReview review; + + public final ssu.eatssu.domain.user.entity.QUser user; + + public QReviewLike(String variable) { + this(ReviewLike.class, forVariable(variable), INITS); + } + + public QReviewLike(Path path) { + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); + } + + public QReviewLike(PathMetadata metadata) { + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QReviewLike(PathMetadata metadata, PathInits inits) { + this(ReviewLike.class, metadata, inits); + } + + public QReviewLike(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.review = inits.isInitialized("review") ? new QReview(forProperty("review"), inits.get("review")) : null; + this.user = inits.isInitialized("user") ? new ssu.eatssu.domain.user.entity.QUser(forProperty("user"), inits.get("user")) : null; + } + +} + diff --git a/src/main/generated/ssu/eatssu/domain/user/entity/QUser.java b/src/main/generated/ssu/eatssu/domain/user/entity/QUser.java index cef9fac1..769e3f90 100644 --- a/src/main/generated/ssu/eatssu/domain/user/entity/QUser.java +++ b/src/main/generated/ssu/eatssu/domain/user/entity/QUser.java @@ -18,6 +18,8 @@ public class QUser extends EntityPathBase { private static final long serialVersionUID = -2112045787L; + private static final PathInits INITS = PathInits.DIRECT2; + public static final QUser user = new QUser("user"); public final QBaseTimeEntity _super = new QBaseTimeEntity(this); @@ -27,6 +29,8 @@ public class QUser extends EntityPathBase { public final StringPath credentials = createString("credentials"); + public final ssu.eatssu.domain.department.entity.QDepartment department; + public final StringPath email = createString("email"); public final NumberPath id = createNumber("id", Long.class); @@ -36,10 +40,14 @@ public class QUser extends EntityPathBase { public final StringPath nickname = createString("nickname"); + public final ListPath partnershipLikes = this.createList("partnershipLikes", ssu.eatssu.domain.partnership.entity.PartnershipLike.class, ssu.eatssu.domain.partnership.entity.QPartnershipLike.class, PathInits.DIRECT2); + public final EnumPath provider = createEnum("provider", ssu.eatssu.domain.auth.entity.OAuthProvider.class); public final StringPath providerId = createString("providerId"); + public final ListPath reviewLikes = this.createList("reviewLikes", ssu.eatssu.domain.review.entity.ReviewLike.class, ssu.eatssu.domain.review.entity.QReviewLike.class, PathInits.DIRECT2); + public final ListPath reviewReports = this.createList("reviewReports", ssu.eatssu.domain.review.entity.Report.class, ssu.eatssu.domain.review.entity.QReport.class, PathInits.DIRECT2); public final ListPath reviews = this.createList("reviews", ssu.eatssu.domain.review.entity.Review.class, ssu.eatssu.domain.review.entity.QReview.class, PathInits.DIRECT2); @@ -51,15 +59,24 @@ public class QUser extends EntityPathBase { public final ListPath userInquiries = this.createList("userInquiries", ssu.eatssu.domain.inquiry.entity.Inquiry.class, ssu.eatssu.domain.inquiry.entity.QInquiry.class, PathInits.DIRECT2); public QUser(String variable) { - super(User.class, forVariable(variable)); + this(User.class, forVariable(variable), INITS); } public QUser(Path path) { - super(path.getType(), path.getMetadata()); + this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); } public QUser(PathMetadata metadata) { - super(User.class, metadata); + this(metadata, PathInits.getFor(metadata, INITS)); + } + + public QUser(PathMetadata metadata, PathInits inits) { + this(User.class, metadata, inits); + } + + public QUser(Class type, PathMetadata metadata, PathInits inits) { + super(type, metadata, inits); + this.department = inits.isInitialized("department") ? new ssu.eatssu.domain.department.entity.QDepartment(forProperty("department"), inits.get("department")) : null; } } diff --git a/src/main/java/ssu/eatssu/domain/department/entity/College.java b/src/main/java/ssu/eatssu/domain/department/entity/College.java new file mode 100644 index 00000000..ae4c77f7 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/department/entity/College.java @@ -0,0 +1,34 @@ +package ssu.eatssu.domain.department.entity; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import java.util.ArrayList; +import java.util.List; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import ssu.eatssu.domain.partnership.entity.PartnershipCollege; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class College { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "college_id") + private Long id; + + @Column(nullable = false, unique = true) + private String name; + + @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) + private List departments = new ArrayList<>(); + + @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) + private List partnershipColleges = new ArrayList<>(); +} diff --git a/src/main/java/ssu/eatssu/domain/department/entity/Department.java b/src/main/java/ssu/eatssu/domain/department/entity/Department.java new file mode 100644 index 00000000..d883aaaf --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/department/entity/Department.java @@ -0,0 +1,38 @@ +package ssu.eatssu.domain.department.entity; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import java.util.ArrayList; +import java.util.List; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import ssu.eatssu.domain.partnership.entity.PartnershipDepartment; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Department { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "department_id") + private Long id; + + @Column(nullable = false, unique = true) + private String name; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "college_id") + private College college; + + @OneToMany(mappedBy = "department", cascade = CascadeType.ALL, orphanRemoval = true) + private List partnershipDepartments = new ArrayList<>(); +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java new file mode 100644 index 00000000..a065a347 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java @@ -0,0 +1,58 @@ +package ssu.eatssu.domain.partnership.entity; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Partnership { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "partnership_id") + private Long id; + + @Enumerated(EnumType.STRING) + @Column(name = "partnership_type", nullable = false) + private PartnershipType partnershipType; + + @Column(name = "store_name", nullable = false) + private String storeName; + + @Column(name = "start_date", nullable = false) + private LocalDate startDate; + + @Column(name = "end_date", nullable = false) + private LocalDate endDate; + + @Column(name = "restaurant_type", nullable = false) + private RestaurantType restaurantType; + + @Column(name = "longitude", nullable = false) + private Double longitude; // 경도 == x축 + + @Column(name = "latitude", nullable = false) + private Double latitude; // 위도 == y축 + + @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) + private List partnershipColleges = new ArrayList<>(); + + @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) + private List partnershipDepartments = new ArrayList<>(); + + @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) + private List likes = new ArrayList<>(); +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java new file mode 100644 index 00000000..4a7103c6 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java @@ -0,0 +1,32 @@ +package ssu.eatssu.domain.partnership.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import ssu.eatssu.domain.department.entity.College; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class PartnershipCollege { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "partnership_college_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "partnership_id") + private Partnership partnership; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "college_id") + private College college; +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java new file mode 100644 index 00000000..af3358f0 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java @@ -0,0 +1,32 @@ +package ssu.eatssu.domain.partnership.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import ssu.eatssu.domain.department.entity.Department; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class PartnershipDepartment { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "partnership_college_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "partnership_id") + private Partnership partnership; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "department_id") + private Department department; +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java new file mode 100644 index 00000000..eb4938c4 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java @@ -0,0 +1,32 @@ +package ssu.eatssu.domain.partnership.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import ssu.eatssu.domain.user.entity.User; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class PartnershipLike { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "partnership_like_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "partnership_id") + private Partnership partnership; +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java new file mode 100644 index 00000000..9d91ab0e --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java @@ -0,0 +1,17 @@ +package ssu.eatssu.domain.partnership.entity; + +import lombok.Getter; + +@Getter +public enum PartnershipType { + DRINK("음료"), + DISCOUNT("할인"), + SIDE("사이드"), + OTHER("기타"); + + private final String type; + + PartnershipType(String type) { + this.type = type; + } +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java new file mode 100644 index 00000000..d0af2505 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java @@ -0,0 +1,12 @@ +package ssu.eatssu.domain.partnership.entity; + +public enum RestaurantType { + RESTAURANT("음식점"), + CAFE("카페"); + + private final String type;; + + RestaurantType(String type) { + this.type = type; + } +} diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index e3ab753e..6ca99281 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -10,6 +10,7 @@ import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.department.entity.Department; import ssu.eatssu.domain.inquiry.entity.Inquiry; +import ssu.eatssu.domain.partnership.entity.PartnershipLike; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.Report; @@ -54,12 +55,15 @@ public class User extends BaseTimeEntity { @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) private List userInquiries = new ArrayList<>(); + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) + private List reviewLikes = new ArrayList<>(); + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "department_id") private Department department; @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) - private List reviewLikes = new ArrayList<>(); + private List partnershipLikes = new ArrayList<>(); /** * Oauth 회원가입 용 생성자 From b5891e7ec0c9cd9551f9a3bb7f57ab8260807d10 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sun, 16 Feb 2025 15:04:47 +0900 Subject: [PATCH 166/399] =?UTF-8?q?feat:=20=EC=A0=9C=ED=9C=B4=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20api=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../partnership/entity/QPartnership.java | 2 + .../auth/infrastructure/SecurityConfig.java | 3 +- .../domain/department/entity/Department.java | 2 +- .../persistence/CollegeRepository.java | 9 ++++ .../persistence/DepartmentRepository.java | 9 ++++ .../dto/CreatePartnershipRequest.java | 36 ++++++++++++++ .../partnership/entity/Partnership.java | 11 +++++ .../entity/PartnershipCollege.java | 5 ++ .../entity/PartnershipDepartment.java | 5 ++ .../persistence/PartnershipRepository.java | 8 ++++ .../presentation/PartnershipController.java | 32 +++++++++++++ .../service/PartnershipService.java | 48 +++++++++++++++++++ .../handler/response/BaseResponseStatus.java | 4 +- 13 files changed, 171 insertions(+), 3 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/department/persistence/CollegeRepository.java create mode 100644 src/main/java/ssu/eatssu/domain/department/persistence/DepartmentRepository.java create mode 100644 src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java create mode 100644 src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java create mode 100644 src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java create mode 100644 src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java diff --git a/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnership.java b/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnership.java index 70f70b11..0d0d712b 100644 --- a/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnership.java +++ b/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnership.java @@ -20,6 +20,8 @@ public class QPartnership extends EntityPathBase { public static final QPartnership partnership = new QPartnership("partnership"); + public final StringPath description = createString("description"); + public final DatePath endDate = createDate("endDate", java.time.LocalDate.class); public final NumberPath id = createNumber("id", Long.class); diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index fd07362d..d41dac5a 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -29,7 +29,8 @@ public class SecurityConfig { private static final String[] AUTH_WHITELIST = { "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", - "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics", "/v2/reviews" + "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics", "/v2/reviews", + "/partnerships" }; private static final String[] ADMIN_PAGE_LIST = { diff --git a/src/main/java/ssu/eatssu/domain/department/entity/Department.java b/src/main/java/ssu/eatssu/domain/department/entity/Department.java index d883aaaf..d59c7b9a 100644 --- a/src/main/java/ssu/eatssu/domain/department/entity/Department.java +++ b/src/main/java/ssu/eatssu/domain/department/entity/Department.java @@ -26,7 +26,7 @@ public class Department { @Column(name = "department_id") private Long id; - @Column(nullable = false, unique = true) + @Column(nullable = false) private String name; @ManyToOne(fetch = FetchType.LAZY) diff --git a/src/main/java/ssu/eatssu/domain/department/persistence/CollegeRepository.java b/src/main/java/ssu/eatssu/domain/department/persistence/CollegeRepository.java new file mode 100644 index 00000000..706a2bd8 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/department/persistence/CollegeRepository.java @@ -0,0 +1,9 @@ +package ssu.eatssu.domain.department.persistence; + +import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.department.entity.College; + +public interface CollegeRepository extends JpaRepository { + Optional findByName(String name); +} diff --git a/src/main/java/ssu/eatssu/domain/department/persistence/DepartmentRepository.java b/src/main/java/ssu/eatssu/domain/department/persistence/DepartmentRepository.java new file mode 100644 index 00000000..aad52c52 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/department/persistence/DepartmentRepository.java @@ -0,0 +1,9 @@ +package ssu.eatssu.domain.department.persistence; + +import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.department.entity.Department; + +public interface DepartmentRepository extends JpaRepository { + Optional findByName(String name); +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java new file mode 100644 index 00000000..78086aef --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java @@ -0,0 +1,36 @@ +package ssu.eatssu.domain.partnership.dto; + +import java.time.LocalDate; +import lombok.AllArgsConstructor; +import lombok.Getter; +import ssu.eatssu.domain.partnership.entity.Partnership; +import ssu.eatssu.domain.partnership.entity.PartnershipType; +import ssu.eatssu.domain.partnership.entity.RestaurantType; + +@Getter +@AllArgsConstructor +public class CreatePartnershipRequest { + private String storeName; + private PartnershipType partnershipType; + private String targetType; // college or department + private String targetName; + private String description; + private LocalDate startDate; + private LocalDate endDate; + private RestaurantType restaurantType; + private Double longitude; + private Double latitude; + + public Partnership toPartnershipEntity() { + return Partnership.builder() + .partnershipType(partnershipType) + .storeName(storeName) + .description(description) + .startDate(startDate) + .endDate(endDate) + .restaurantType(restaurantType) + .longitude(longitude) + .latitude(latitude) + .build(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java index a065a347..847fce54 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java @@ -13,12 +13,16 @@ import java.util.ArrayList; import java.util.List; import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) +@Builder +@AllArgsConstructor public class Partnership { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -32,12 +36,16 @@ public class Partnership { @Column(name = "store_name", nullable = false) private String storeName; + @Column(name = "description", nullable = false) + private String description; + @Column(name = "start_date", nullable = false) private LocalDate startDate; @Column(name = "end_date", nullable = false) private LocalDate endDate; + @Enumerated(EnumType.STRING) @Column(name = "restaurant_type", nullable = false) private RestaurantType restaurantType; @@ -47,12 +55,15 @@ public class Partnership { @Column(name = "latitude", nullable = false) private Double latitude; // 위도 == y축 + @Builder.Default @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) private List partnershipColleges = new ArrayList<>(); + @Builder.Default @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) private List partnershipDepartments = new ArrayList<>(); + @Builder.Default @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) private List likes = new ArrayList<>(); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java index 4a7103c6..95082d91 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java @@ -29,4 +29,9 @@ public class PartnershipCollege { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "college_id") private College college; + + public PartnershipCollege(Partnership partnership, College college) { + this.partnership = partnership; + this.college = college; + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java index af3358f0..080c5e37 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java @@ -29,4 +29,9 @@ public class PartnershipDepartment { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "department_id") private Department department; + + public PartnershipDepartment(Partnership partnership, Department department) { + this.partnership = partnership; + this.department = department; + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java new file mode 100644 index 00000000..6bc54a2c --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java @@ -0,0 +1,8 @@ +package ssu.eatssu.domain.partnership.persistence; + +import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.partnership.entity.Partnership; + +public interface PartnershipRepository extends JpaRepository { + +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java new file mode 100644 index 00000000..47f0371e --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java @@ -0,0 +1,32 @@ +package ssu.eatssu.domain.partnership.presentation; + +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import ssu.eatssu.domain.partnership.dto.CreatePartnershipRequest; +import ssu.eatssu.domain.partnership.entity.Partnership; +import ssu.eatssu.domain.partnership.service.PartnershipService; +import ssu.eatssu.global.handler.response.BaseResponse; + +@RestController +@RequestMapping("/partnerships") +@RequiredArgsConstructor +public class PartnershipController { + private final PartnershipService partnershipService; + + @PostMapping + public BaseResponse createPartnership(@RequestBody CreatePartnershipRequest request) { + partnershipService.createPartnership(request); + return BaseResponse.success(); + } + + @GetMapping + public ResponseEntity> getAllPartnerships() { + return ResponseEntity.ok(partnershipService.getAllPartnerships()); + } +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java new file mode 100644 index 00000000..754c6f6a --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -0,0 +1,48 @@ +package ssu.eatssu.domain.partnership.service; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.INVALID_TARGET_TYPE; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_COLLEGE; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_DEPARTMENT; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import ssu.eatssu.domain.department.entity.College; +import ssu.eatssu.domain.department.entity.Department; +import ssu.eatssu.domain.department.persistence.CollegeRepository; +import ssu.eatssu.domain.department.persistence.DepartmentRepository; +import ssu.eatssu.domain.partnership.dto.CreatePartnershipRequest; +import ssu.eatssu.domain.partnership.entity.Partnership; +import ssu.eatssu.domain.partnership.entity.PartnershipCollege; +import ssu.eatssu.domain.partnership.entity.PartnershipDepartment; +import ssu.eatssu.domain.partnership.persistence.PartnershipRepository; +import ssu.eatssu.global.handler.response.BaseException; + +@Service +@RequiredArgsConstructor +public class PartnershipService { + private final PartnershipRepository partnershipRepository; + private final CollegeRepository collegeRepository; + private final DepartmentRepository departmentRepository; + + @Transactional + public void createPartnership(CreatePartnershipRequest request) { + Partnership partnership = request.toPartnershipEntity(); + + if ("college".equalsIgnoreCase(request.getTargetType())) { + College college = collegeRepository.findByName(request.getTargetName()) + .orElseThrow(() -> new BaseException(NOT_FOUND_COLLEGE)); + PartnershipCollege partnershipCollege = new PartnershipCollege(partnership, college); + partnership.getPartnershipColleges().add(partnershipCollege); + } else if ("department".equalsIgnoreCase(request.getTargetType())) { + Department department = departmentRepository.findByName(request.getTargetName()) + .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); + PartnershipDepartment partnershipDepartment = new PartnershipDepartment(partnership, department); + partnership.getPartnershipDepartments().add(partnershipDepartment); + } else { + throw new BaseException(INVALID_TARGET_TYPE); + } + partnershipRepository.save(partnership); + } + +} diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index 25becb87..47a9b58d 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -29,7 +29,7 @@ public enum BaseResponseStatus { NOT_SUPPORT_RESTAURANT(false, HttpStatus.BAD_REQUEST, 40009, "해당 식당은 지원하지 않습니다."), INVALID_IDENTITY_TOKEN(false, HttpStatus.BAD_REQUEST, 40010, "잘못된 identityToken 입니다."), EXISTED_MEAL(false, HttpStatus.BAD_REQUEST, 40011, "이미 존재하는 식단입니다."), - + INVALID_TARGET_TYPE(false, HttpStatus.BAD_REQUEST, 40012, "잘못된 targetType 입니다."), /** * 401 UNAUTHORIZED 권한없음(인증 실패) @@ -54,6 +54,8 @@ public enum BaseResponseStatus { NOT_FOUND_REVIEW(false, HttpStatus.NOT_FOUND, 40405, "해당 리뷰을 찾을 수 없습니다."), NOT_FOUND_REVIEW_REPORT(false, HttpStatus.NOT_FOUND, 40406, "해당 리뷰 신고 내역을 찾을 수 없습니다."), NOT_FOUND_USER_INQUIRY(false, HttpStatus.NOT_FOUND, 40407, "해당 문의 내역을 찾을 수 없습니다."), + NOT_FOUND_COLLEGE(false, HttpStatus.NOT_FOUND, 40408, "해당 대학을 찾을 수 없습니다."), + NOT_FOUND_DEPARTMENT(false, HttpStatus.NOT_FOUND, 40409, "해당 학과를 찾을 수 없습니다."), /** * 405 METHOD_NOT_ALLOWED 지원하지 않은 method 호출 From 80fdd8323873f1d463d7d41ecdc22aed0ec55748 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sun, 16 Feb 2025 17:32:13 +0900 Subject: [PATCH 167/399] =?UTF-8?q?feat:=20=EC=A0=9C=ED=9C=B4=20=EC=A0=84?= =?UTF-8?q?=EC=B2=B4/=EA=B0=9C=EB=B3=84=20=EC=A1=B0=ED=9A=8C=20api=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/PartnershipDetailResponse.java | 53 +++++++++++++++++++ .../partnership/dto/PartnershipResponse.java | 49 +++++++++++++++++ .../PartnershipLikeRepository.java | 11 ++++ .../presentation/PartnershipController.java | 18 +++++-- .../service/PartnershipService.java | 28 ++++++++++ .../handler/response/BaseResponseStatus.java | 1 + 6 files changed, 156 insertions(+), 4 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java create mode 100644 src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java create mode 100644 src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java new file mode 100644 index 00000000..cdf87a36 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java @@ -0,0 +1,53 @@ +package ssu.eatssu.domain.partnership.dto; + +import java.time.LocalDate; +import java.util.List; +import java.util.stream.Collectors; +import lombok.AllArgsConstructor; +import lombok.Getter; +import ssu.eatssu.domain.partnership.entity.Partnership; +import ssu.eatssu.domain.partnership.entity.PartnershipType; +import ssu.eatssu.domain.partnership.entity.RestaurantType; + +@Getter +@AllArgsConstructor +public class PartnershipDetailResponse { + private Long id; + private PartnershipType partnershipType; + private String storeName; + private String description; + private LocalDate startDate; + private LocalDate endDate; + private RestaurantType restaurantType; + private Double longitude; + private Double latitude; + private List collegeNames; + private List departmentNames; + private int partnershipLikeCount; + private boolean likedByUser; + + public static PartnershipDetailResponse fromEntity(Partnership partnership, boolean likedByUser) { + List collegeNames = partnership.getPartnershipColleges().stream() + .map(pc -> pc.getCollege().getName()) + .collect(Collectors.toList()); + List departmentNames = partnership.getPartnershipDepartments().stream() + .map(pc -> pc.getDepartment().getName()) + .collect(Collectors.toList()); + + return new PartnershipDetailResponse( + partnership.getId(), + partnership.getPartnershipType(), + partnership.getStoreName(), + partnership.getDescription(), + partnership.getStartDate(), + partnership.getEndDate(), + partnership.getRestaurantType(), + partnership.getLongitude(), + partnership.getLatitude(), + collegeNames, + departmentNames, + partnership.getLikes().size(), + likedByUser + ); + } +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java new file mode 100644 index 00000000..431fa5ba --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java @@ -0,0 +1,49 @@ +package ssu.eatssu.domain.partnership.dto; + +import java.time.LocalDate; +import java.util.List; +import java.util.stream.Collectors; +import lombok.AllArgsConstructor; +import lombok.Getter; +import ssu.eatssu.domain.partnership.entity.Partnership; +import ssu.eatssu.domain.partnership.entity.PartnershipType; +import ssu.eatssu.domain.partnership.entity.RestaurantType; + +@Getter +@AllArgsConstructor +public class PartnershipResponse { + private Long id; + private PartnershipType partnershipType; + private String storeName; + private String description; + private LocalDate startDate; + private LocalDate endDate; + private RestaurantType restaurantType; + private Double longitude; + private Double latitude; + private List collegeNames; + private List departmentNames; + + public static PartnershipResponse fromEntity(Partnership partnership) { + List collegeNames = partnership.getPartnershipColleges().stream() + .map(pc -> pc.getCollege().getName()) + .collect(Collectors.toList()); + List departmentNames = partnership.getPartnershipDepartments().stream() + .map(pc -> pc.getDepartment().getName()) + .collect(Collectors.toList()); + + return new PartnershipResponse( + partnership.getId(), + partnership.getPartnershipType(), + partnership.getStoreName(), + partnership.getDescription(), + partnership.getStartDate(), + partnership.getEndDate(), + partnership.getRestaurantType(), + partnership.getLongitude(), + partnership.getLatitude(), + collegeNames, + departmentNames + ); + } +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java new file mode 100644 index 00000000..06668050 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java @@ -0,0 +1,11 @@ +package ssu.eatssu.domain.partnership.persistence; + +import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.partnership.entity.Partnership; +import ssu.eatssu.domain.partnership.entity.PartnershipLike; +import ssu.eatssu.domain.user.entity.User; + +public interface PartnershipLikeRepository extends JpaRepository { + Optional findByUserAndPartnership(User user, Partnership partnership); +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java index 47f0371e..b2118450 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java +++ b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java @@ -2,14 +2,17 @@ import java.util.List; import lombok.RequiredArgsConstructor; -import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.CreatePartnershipRequest; -import ssu.eatssu.domain.partnership.entity.Partnership; +import ssu.eatssu.domain.partnership.dto.PartnershipDetailResponse; +import ssu.eatssu.domain.partnership.dto.PartnershipResponse; import ssu.eatssu.domain.partnership.service.PartnershipService; import ssu.eatssu.global.handler.response.BaseResponse; @@ -26,7 +29,14 @@ public BaseResponse createPartnership(@RequestBody CreatePartnershipRequest r } @GetMapping - public ResponseEntity> getAllPartnerships() { - return ResponseEntity.ok(partnershipService.getAllPartnerships()); + public BaseResponse> getAllPartnerships() { + return BaseResponse.success(partnershipService.getAllPartnerships()); + } + + @GetMapping("/{partnershipId}") + public BaseResponse getPartnership( + @PathVariable Long partnershipId, + @AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(partnershipService.getPartnership(partnershipId, userDetails)); } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java index 754c6f6a..07b4800f 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -3,19 +3,29 @@ import static ssu.eatssu.global.handler.response.BaseResponseStatus.INVALID_TARGET_TYPE; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_COLLEGE; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_DEPARTMENT; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_PARTNERSHIP; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import java.util.List; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.department.entity.College; import ssu.eatssu.domain.department.entity.Department; import ssu.eatssu.domain.department.persistence.CollegeRepository; import ssu.eatssu.domain.department.persistence.DepartmentRepository; import ssu.eatssu.domain.partnership.dto.CreatePartnershipRequest; +import ssu.eatssu.domain.partnership.dto.PartnershipDetailResponse; +import ssu.eatssu.domain.partnership.dto.PartnershipResponse; import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipCollege; import ssu.eatssu.domain.partnership.entity.PartnershipDepartment; +import ssu.eatssu.domain.partnership.persistence.PartnershipLikeRepository; import ssu.eatssu.domain.partnership.persistence.PartnershipRepository; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; @Service @@ -24,6 +34,8 @@ public class PartnershipService { private final PartnershipRepository partnershipRepository; private final CollegeRepository collegeRepository; private final DepartmentRepository departmentRepository; + private final UserRepository userRepository; + private final PartnershipLikeRepository partnershipLikeRepository; @Transactional public void createPartnership(CreatePartnershipRequest request) { @@ -45,4 +57,20 @@ public void createPartnership(CreatePartnershipRequest request) { partnershipRepository.save(partnership); } + public List getAllPartnerships() { + List partnerships = partnershipRepository.findAll(); + return partnerships.stream().map(PartnershipResponse::fromEntity) + .collect(Collectors.toList()); + } + + public PartnershipDetailResponse getPartnership(Long partnershipId, CustomUserDetails userDetails) { + Partnership partnership = partnershipRepository.findById(partnershipId) + .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + boolean likedByUser = partnershipLikeRepository.findByUserAndPartnership(user, partnership).isPresent(); + + return PartnershipDetailResponse.fromEntity(partnership, likedByUser); + } } diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index 47a9b58d..039c8f8f 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -56,6 +56,7 @@ public enum BaseResponseStatus { NOT_FOUND_USER_INQUIRY(false, HttpStatus.NOT_FOUND, 40407, "해당 문의 내역을 찾을 수 없습니다."), NOT_FOUND_COLLEGE(false, HttpStatus.NOT_FOUND, 40408, "해당 대학을 찾을 수 없습니다."), NOT_FOUND_DEPARTMENT(false, HttpStatus.NOT_FOUND, 40409, "해당 학과를 찾을 수 없습니다."), + NOT_FOUND_PARTNERSHIP(false, HttpStatus.NOT_FOUND, 40410, "해당 제휴를 찾을 수 없습니다."), /** * 405 METHOD_NOT_ALLOWED 지원하지 않은 method 호출 From c76e84d3e352bac1e5469060f2f18010590eb680 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sun, 16 Feb 2025 18:41:47 +0900 Subject: [PATCH 168/399] =?UTF-8?q?feat:=20=EC=A0=9C=ED=9C=B4=20=EC=B0=9C?= =?UTF-8?q?=20=EB=88=84=EB=A5=B4=EA=B8=B0/=EC=B7=A8=EC=86=8C=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20api=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../partnership/entity/PartnershipLike.java | 5 +++++ .../presentation/PartnershipController.java | 8 +++++++ .../service/PartnershipService.java | 21 +++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java index eb4938c4..210b4ac2 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java @@ -29,4 +29,9 @@ public class PartnershipLike { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "partnership_id") private Partnership partnership; + + public PartnershipLike(User user, Partnership partnership) { + this.user = user; + this.partnership = partnership; + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java index b2118450..4daf3cec 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java +++ b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java @@ -39,4 +39,12 @@ public BaseResponse getPartnership( @AuthenticationPrincipal CustomUserDetails userDetails) { return BaseResponse.success(partnershipService.getPartnership(partnershipId, userDetails)); } + + @PostMapping("/{partnershipId}/like") + public BaseResponse togglePartnershipLike( + @PathVariable Long partnershipId, + @AuthenticationPrincipal CustomUserDetails userDetails) { + partnershipService.togglePartnershipLike(partnershipId, userDetails); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java index 07b4800f..c09be39d 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -7,6 +7,7 @@ import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -22,6 +23,7 @@ import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipCollege; import ssu.eatssu.domain.partnership.entity.PartnershipDepartment; +import ssu.eatssu.domain.partnership.entity.PartnershipLike; import ssu.eatssu.domain.partnership.persistence.PartnershipLikeRepository; import ssu.eatssu.domain.partnership.persistence.PartnershipRepository; import ssu.eatssu.domain.user.entity.User; @@ -73,4 +75,23 @@ public PartnershipDetailResponse getPartnership(Long partnershipId, CustomUserDe return PartnershipDetailResponse.fromEntity(partnership, likedByUser); } + + @Transactional + public void togglePartnershipLike(Long partnershipId, CustomUserDetails userDetails) { + Partnership partnership = partnershipRepository.findById(partnershipId) + .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Optional optionalPartnershipLike = partnershipLikeRepository.findByUserAndPartnership(user, partnership); + if (optionalPartnershipLike.isPresent()) { + PartnershipLike partnershipLike = optionalPartnershipLike.get(); + partnership.getLikes().remove(partnershipLike); + partnershipLikeRepository.delete(partnershipLike); + } else { + PartnershipLike partnershipLike = new PartnershipLike(user, partnership); + partnership.getLikes().add(partnershipLike); + partnershipLikeRepository.save(partnershipLike); + } + } } From 0fa3136e276c3f93fb654eafa84c757270a10e3a Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sun, 16 Feb 2025 19:02:31 +0900 Subject: [PATCH 169/399] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EA=B0=80=20=EC=B0=9C=ED=95=9C=20=EC=A0=9C=ED=9C=B4=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20api=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/PartnershipLikeRepository.java | 2 ++ .../domain/partnership/service/PartnershipService.java | 9 +++++++++ .../eatssu/domain/user/presentation/UserController.java | 9 +++++++++ 3 files changed, 20 insertions(+) diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java index 06668050..8aa7495f 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java @@ -1,5 +1,6 @@ package ssu.eatssu.domain.partnership.persistence; +import java.util.List; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.partnership.entity.Partnership; @@ -8,4 +9,5 @@ public interface PartnershipLikeRepository extends JpaRepository { Optional findByUserAndPartnership(User user, Partnership partnership); + List findAllByUser(User user); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java index c09be39d..d6cfb116 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -94,4 +94,13 @@ public void togglePartnershipLike(Long partnershipId, CustomUserDetails userDeta partnershipLikeRepository.save(partnershipLike); } } + + public List getUserLikedPartnerships(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + List likes = partnershipLikeRepository.findAllByUser(user); + return likes.stream().map(PartnershipLike::getPartnership) + .map(PartnershipResponse::fromEntity).collect(Collectors.toList()); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index d50b7b68..48ef26e7 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -9,6 +9,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.Pageable; @@ -17,6 +18,8 @@ import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.domain.partnership.dto.PartnershipResponse; +import ssu.eatssu.domain.partnership.service.PartnershipService; import ssu.eatssu.domain.review.service.MealReviewService; import ssu.eatssu.domain.user.dto.MyMealReviewResponse; import ssu.eatssu.domain.user.dto.MyReviewDetail; @@ -36,6 +39,7 @@ public class UserController { private final UserService userService; private final SliceService sliceService; private final MealReviewService mealReviewService; + private final PartnershipService partnershipService; @Operation(summary = "이메일 중복 체크", description = """ 이메일 중복 체크 API 입니다.

@@ -128,4 +132,9 @@ public BaseResponse getMyPage( @AuthenticationPrincipal CustomUserDetails customUserDetails) { return BaseResponse.success(userService.findMyPage(customUserDetails)); } + + @GetMapping("/partnerships") + public BaseResponse> getUserLikedPartnerships(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(partnershipService.getUserLikedPartnerships(userDetails)); + } } From e474d708cc7a8e9a85ec3399ae731dd7139388c8 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sun, 16 Feb 2025 19:29:33 +0900 Subject: [PATCH 170/399] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=ED=95=99=EA=B3=BC=20=EB=93=B1=EB=A1=9D=ED=95=98=EA=B8=B0=20api?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../partnership/entity/QPartnershipCollege.java | 4 ++-- .../entity/QPartnershipDepartment.java | 4 ++-- .../{ => user}/department/entity/QCollege.java | 4 ++-- .../{ => user}/department/entity/QDepartment.java | 4 ++-- .../ssu/eatssu/domain/user/entity/QUser.java | 4 ++-- .../partnership/entity/PartnershipCollege.java | 2 +- .../partnership/entity/PartnershipDepartment.java | 2 +- .../partnership/service/PartnershipService.java | 8 ++++---- .../{ => user}/department/entity/College.java | 2 +- .../{ => user}/department/entity/Department.java | 2 +- .../department/persistence/CollegeRepository.java | 4 ++-- .../persistence/DepartmentRepository.java | 4 ++-- .../domain/user/dto/UpdateDepartmentRequest.java | 12 ++++++++++++ .../java/ssu/eatssu/domain/user/entity/User.java | 6 +++++- .../domain/user/presentation/UserController.java | 7 +++++++ .../eatssu/domain/user/service/UserService.java | 15 +++++++++++++++ 16 files changed, 61 insertions(+), 23 deletions(-) rename src/main/generated/ssu/eatssu/domain/{ => user}/department/entity/QCollege.java (93%) rename src/main/generated/ssu/eatssu/domain/{ => user}/department/entity/QDepartment.java (94%) rename src/main/java/ssu/eatssu/domain/{ => user}/department/entity/College.java (95%) rename src/main/java/ssu/eatssu/domain/{ => user}/department/entity/Department.java (95%) rename src/main/java/ssu/eatssu/domain/{ => user}/department/persistence/CollegeRepository.java (65%) rename src/main/java/ssu/eatssu/domain/{ => user}/department/persistence/DepartmentRepository.java (65%) create mode 100644 src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java diff --git a/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipCollege.java b/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipCollege.java index 7508f243..6b85de78 100644 --- a/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipCollege.java +++ b/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipCollege.java @@ -22,7 +22,7 @@ public class QPartnershipCollege extends EntityPathBase { public static final QPartnershipCollege partnershipCollege = new QPartnershipCollege("partnershipCollege"); - public final ssu.eatssu.domain.department.entity.QCollege college; + public final ssu.eatssu.domain.user.department.entity.QCollege college; public final NumberPath id = createNumber("id", Long.class); @@ -46,7 +46,7 @@ public QPartnershipCollege(PathMetadata metadata, PathInits inits) { public QPartnershipCollege(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); - this.college = inits.isInitialized("college") ? new ssu.eatssu.domain.department.entity.QCollege(forProperty("college")) : null; + this.college = inits.isInitialized("college") ? new ssu.eatssu.domain.user.department.entity.QCollege(forProperty("college")) : null; this.partnership = inits.isInitialized("partnership") ? new QPartnership(forProperty("partnership")) : null; } diff --git a/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipDepartment.java b/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipDepartment.java index b5bb7f2f..df7f69f9 100644 --- a/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipDepartment.java +++ b/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipDepartment.java @@ -22,7 +22,7 @@ public class QPartnershipDepartment extends EntityPathBase id = createNumber("id", Long.class); @@ -46,7 +46,7 @@ public QPartnershipDepartment(PathMetadata metadata, PathInits inits) { public QPartnershipDepartment(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); - this.department = inits.isInitialized("department") ? new ssu.eatssu.domain.department.entity.QDepartment(forProperty("department"), inits.get("department")) : null; + this.department = inits.isInitialized("department") ? new ssu.eatssu.domain.user.department.entity.QDepartment(forProperty("department"), inits.get("department")) : null; this.partnership = inits.isInitialized("partnership") ? new QPartnership(forProperty("partnership")) : null; } diff --git a/src/main/generated/ssu/eatssu/domain/department/entity/QCollege.java b/src/main/generated/ssu/eatssu/domain/user/department/entity/QCollege.java similarity index 93% rename from src/main/generated/ssu/eatssu/domain/department/entity/QCollege.java rename to src/main/generated/ssu/eatssu/domain/user/department/entity/QCollege.java index 9107b5ee..3a3d8850 100644 --- a/src/main/generated/ssu/eatssu/domain/department/entity/QCollege.java +++ b/src/main/generated/ssu/eatssu/domain/user/department/entity/QCollege.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.department.entity; +package ssu.eatssu.domain.user.department.entity; import static com.querydsl.core.types.PathMetadataFactory.*; @@ -16,7 +16,7 @@ @Generated("com.querydsl.codegen.DefaultEntitySerializer") public class QCollege extends EntityPathBase { - private static final long serialVersionUID = -1622040298L; + private static final long serialVersionUID = 498379863L; public static final QCollege college = new QCollege("college"); diff --git a/src/main/generated/ssu/eatssu/domain/department/entity/QDepartment.java b/src/main/generated/ssu/eatssu/domain/user/department/entity/QDepartment.java similarity index 94% rename from src/main/generated/ssu/eatssu/domain/department/entity/QDepartment.java rename to src/main/generated/ssu/eatssu/domain/user/department/entity/QDepartment.java index 6eea3a4f..1b27df61 100644 --- a/src/main/generated/ssu/eatssu/domain/department/entity/QDepartment.java +++ b/src/main/generated/ssu/eatssu/domain/user/department/entity/QDepartment.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.department.entity; +package ssu.eatssu.domain.user.department.entity; import static com.querydsl.core.types.PathMetadataFactory.*; @@ -16,7 +16,7 @@ @Generated("com.querydsl.codegen.DefaultEntitySerializer") public class QDepartment extends EntityPathBase { - private static final long serialVersionUID = -1234083981L; + private static final long serialVersionUID = 2118910098L; private static final PathInits INITS = PathInits.DIRECT2; diff --git a/src/main/generated/ssu/eatssu/domain/user/entity/QUser.java b/src/main/generated/ssu/eatssu/domain/user/entity/QUser.java index 769e3f90..55fcbacf 100644 --- a/src/main/generated/ssu/eatssu/domain/user/entity/QUser.java +++ b/src/main/generated/ssu/eatssu/domain/user/entity/QUser.java @@ -29,7 +29,7 @@ public class QUser extends EntityPathBase { public final StringPath credentials = createString("credentials"); - public final ssu.eatssu.domain.department.entity.QDepartment department; + public final ssu.eatssu.domain.user.department.entity.QDepartment department; public final StringPath email = createString("email"); @@ -76,7 +76,7 @@ public QUser(PathMetadata metadata, PathInits inits) { public QUser(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); - this.department = inits.isInitialized("department") ? new ssu.eatssu.domain.department.entity.QDepartment(forProperty("department"), inits.get("department")) : null; + this.department = inits.isInitialized("department") ? new ssu.eatssu.domain.user.department.entity.QDepartment(forProperty("department"), inits.get("department")) : null; } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java index 95082d91..2ba00666 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java @@ -11,7 +11,7 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; -import ssu.eatssu.domain.department.entity.College; +import ssu.eatssu.domain.user.department.entity.College; @Entity @Getter diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java index 080c5e37..8b9c243b 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java @@ -11,7 +11,7 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; -import ssu.eatssu.domain.department.entity.Department; +import ssu.eatssu.domain.user.department.entity.Department; @Entity @Getter diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java index d6cfb116..1f638ecf 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -13,10 +13,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.auth.security.CustomUserDetails; -import ssu.eatssu.domain.department.entity.College; -import ssu.eatssu.domain.department.entity.Department; -import ssu.eatssu.domain.department.persistence.CollegeRepository; -import ssu.eatssu.domain.department.persistence.DepartmentRepository; +import ssu.eatssu.domain.user.department.entity.College; +import ssu.eatssu.domain.user.department.entity.Department; +import ssu.eatssu.domain.user.department.persistence.CollegeRepository; +import ssu.eatssu.domain.user.department.persistence.DepartmentRepository; import ssu.eatssu.domain.partnership.dto.CreatePartnershipRequest; import ssu.eatssu.domain.partnership.dto.PartnershipDetailResponse; import ssu.eatssu.domain.partnership.dto.PartnershipResponse; diff --git a/src/main/java/ssu/eatssu/domain/department/entity/College.java b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java similarity index 95% rename from src/main/java/ssu/eatssu/domain/department/entity/College.java rename to src/main/java/ssu/eatssu/domain/user/department/entity/College.java index ae4c77f7..7a9256fb 100644 --- a/src/main/java/ssu/eatssu/domain/department/entity/College.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.department.entity; +package ssu.eatssu.domain.user.department.entity; import jakarta.persistence.CascadeType; import jakarta.persistence.Column; diff --git a/src/main/java/ssu/eatssu/domain/department/entity/Department.java b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java similarity index 95% rename from src/main/java/ssu/eatssu/domain/department/entity/Department.java rename to src/main/java/ssu/eatssu/domain/user/department/entity/Department.java index d59c7b9a..b46d0aa7 100644 --- a/src/main/java/ssu/eatssu/domain/department/entity/Department.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java @@ -1,4 +1,4 @@ -package ssu.eatssu.domain.department.entity; +package ssu.eatssu.domain.user.department.entity; import jakarta.persistence.CascadeType; import jakarta.persistence.Column; diff --git a/src/main/java/ssu/eatssu/domain/department/persistence/CollegeRepository.java b/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java similarity index 65% rename from src/main/java/ssu/eatssu/domain/department/persistence/CollegeRepository.java rename to src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java index 706a2bd8..aea49353 100644 --- a/src/main/java/ssu/eatssu/domain/department/persistence/CollegeRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java @@ -1,8 +1,8 @@ -package ssu.eatssu.domain.department.persistence; +package ssu.eatssu.domain.user.department.persistence; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.department.entity.College; +import ssu.eatssu.domain.user.department.entity.College; public interface CollegeRepository extends JpaRepository { Optional findByName(String name); diff --git a/src/main/java/ssu/eatssu/domain/department/persistence/DepartmentRepository.java b/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java similarity index 65% rename from src/main/java/ssu/eatssu/domain/department/persistence/DepartmentRepository.java rename to src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java index aad52c52..702d6dc1 100644 --- a/src/main/java/ssu/eatssu/domain/department/persistence/DepartmentRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java @@ -1,8 +1,8 @@ -package ssu.eatssu.domain.department.persistence; +package ssu.eatssu.domain.user.department.persistence; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.department.entity.Department; +import ssu.eatssu.domain.user.department.entity.Department; public interface DepartmentRepository extends JpaRepository { Optional findByName(String name); diff --git a/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java b/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java new file mode 100644 index 00000000..50aeadad --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java @@ -0,0 +1,12 @@ +package ssu.eatssu.domain.user.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@AllArgsConstructor +@NoArgsConstructor +public class UpdateDepartmentRequest { + private String departmentName; +} diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index 6ca99281..890f39be 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -8,7 +8,7 @@ import lombok.NoArgsConstructor; import org.jetbrains.annotations.NotNull; import ssu.eatssu.domain.auth.entity.OAuthProvider; -import ssu.eatssu.domain.department.entity.Department; +import ssu.eatssu.domain.user.department.entity.Department; import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.partnership.entity.PartnershipLike; import ssu.eatssu.domain.review.entity.Review; @@ -106,4 +106,8 @@ public void updateEmail(String email) { this.email = email; } + public void updateDepartment(Department department) { + this.department = department; + } + } diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 48ef26e7..f38fbc47 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -27,6 +27,7 @@ import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.domain.slice.service.SliceService; import ssu.eatssu.domain.user.dto.NicknameUpdateRequest; +import ssu.eatssu.domain.user.dto.UpdateDepartmentRequest; import ssu.eatssu.domain.user.service.UserService; import ssu.eatssu.global.handler.response.BaseResponse; @@ -137,4 +138,10 @@ public BaseResponse getMyPage( public BaseResponse> getUserLikedPartnerships(@AuthenticationPrincipal CustomUserDetails userDetails) { return BaseResponse.success(partnershipService.getUserLikedPartnerships(userDetails)); } + + @PostMapping("/department") + public BaseResponse registerDepartment(@RequestBody UpdateDepartmentRequest request, @AuthenticationPrincipal CustomUserDetails userDetails) { + userService.registerDepartment(request, userDetails); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index e7a26c49..2ed6d60a 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -1,5 +1,6 @@ package ssu.eatssu.domain.user.service; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_DEPARTMENT; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; import jakarta.transaction.Transactional; @@ -11,8 +12,11 @@ import org.springframework.stereotype.Service; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.domain.user.department.entity.Department; +import ssu.eatssu.domain.user.department.persistence.DepartmentRepository; import ssu.eatssu.domain.user.dto.MyPageResponse; import ssu.eatssu.domain.user.dto.NicknameUpdateRequest; +import ssu.eatssu.domain.user.dto.UpdateDepartmentRequest; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; @@ -27,6 +31,7 @@ public class UserService { private final UserRepository userRepository; private final PasswordEncoder passwordEncoder; + private final DepartmentRepository departmentRepository; public User join(String email, OAuthProvider provider, String providerId) { String credentials = createCredentials(provider, providerId); @@ -76,4 +81,14 @@ public String createNickname() { private String createCredentials(OAuthProvider provider, String providerId) { return passwordEncoder.encode(provider + providerId); } + + @Transactional + public void registerDepartment(UpdateDepartmentRequest request, CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + Department department = departmentRepository.findByName(request.getDepartmentName()) + .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); + + user.updateDepartment(department); + } } \ No newline at end of file From 6ac55dd0b6fdfda267d0b18c1d8a2805216c2d02 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sun, 16 Feb 2025 20:04:30 +0900 Subject: [PATCH 171/399] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EC=9D=98=20=ED=95=99=EA=B3=BC/=EB=8B=A8=EA=B3=BC=EB=8C=80=20?= =?UTF-8?q?=EC=A0=9C=ED=9C=B4=20=EC=A1=B0=ED=9A=8C=20api=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/partnership/entity/Partnership.java | 2 ++ .../persistence/PartnershipRepository.java | 14 +++++++++++++- .../partnership/service/PartnershipService.java | 14 ++++++++++++++ .../domain/user/presentation/UserController.java | 5 +++++ .../handler/response/BaseResponseStatus.java | 1 + 5 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java index 847fce54..36db6b1e 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java @@ -17,12 +17,14 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import org.hibernate.annotations.Where; @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Builder @AllArgsConstructor +@Where(clause = "end_date >= CURRENT_DATE") public class Partnership { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java index 6bc54a2c..84a59853 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java @@ -1,8 +1,20 @@ package ssu.eatssu.domain.partnership.persistence; +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import ssu.eatssu.domain.partnership.entity.Partnership; +import ssu.eatssu.domain.user.department.entity.College; +import ssu.eatssu.domain.user.department.entity.Department; public interface PartnershipRepository extends JpaRepository { - + @Query("SELECT DISTINCT p FROM Partnership p " + + "LEFT JOIN p.partnershipColleges pc " + + "LEFT JOIN pc.college c " + + "LEFT JOIN p.partnershipDepartments pd " + + "LEFT JOIN pd.department d " + + "WHERE (c = :college OR d = :department OR (c IS NOT NULL AND c.name = '총학'))") + List findRelevantPartnerships(@Param("college") College college, + @Param("department") Department department); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java index 1f638ecf..0ef9434a 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.partnership.service; import static ssu.eatssu.global.handler.response.BaseResponseStatus.INVALID_TARGET_TYPE; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.MISSING_USER_DEPARTMENT; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_COLLEGE; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_DEPARTMENT; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_PARTNERSHIP; @@ -103,4 +104,17 @@ public List getUserLikedPartnerships(CustomUserDetails user return likes.stream().map(PartnershipLike::getPartnership) .map(PartnershipResponse::fromEntity).collect(Collectors.toList()); } + + public List getUserDepartmentPartnerships(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Department department = user.getDepartment(); + if (department == null) { + throw new BaseException(MISSING_USER_DEPARTMENT); + } + College college = department.getCollege(); + + return partnershipRepository.findRelevantPartnerships(college, department).stream().map(PartnershipResponse::fromEntity).collect(Collectors.toList()); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index f38fbc47..1e5bfcb0 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -144,4 +144,9 @@ public BaseResponse registerDepartment(@RequestBody UpdateDepartmentRequest r userService.registerDepartment(request, userDetails); return BaseResponse.success(); } + + @GetMapping("/department/partnerships") + public BaseResponse> getUserDepartmentPartnerships(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(partnershipService.getUserDepartmentPartnerships(userDetails)); + } } diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index 039c8f8f..016af180 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -30,6 +30,7 @@ public enum BaseResponseStatus { INVALID_IDENTITY_TOKEN(false, HttpStatus.BAD_REQUEST, 40010, "잘못된 identityToken 입니다."), EXISTED_MEAL(false, HttpStatus.BAD_REQUEST, 40011, "이미 존재하는 식단입니다."), INVALID_TARGET_TYPE(false, HttpStatus.BAD_REQUEST, 40012, "잘못된 targetType 입니다."), + MISSING_USER_DEPARTMENT(false, HttpStatus.BAD_REQUEST, 40013, "사용자의 학과 정보가 없습니다."), /** * 401 UNAUTHORIZED 권한없음(인증 실패) From ff035d868c95f6a7459e21c11da6394cf3b9d142 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sun, 16 Feb 2025 20:48:20 +0900 Subject: [PATCH 172/399] =?UTF-8?q?feat:=20=EC=9D=B8=EC=A6=9D=20=ED=86=A0?= =?UTF-8?q?=ED=81=B0=20=EC=97=86=EC=9D=B4=20=EA=B0=9C=EB=B3=84=20=EC=A0=9C?= =?UTF-8?q?=ED=9C=B4=20=EC=A1=B0=ED=9A=8C=20=EA=B0=80=EB=8A=A5=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/auth/infrastructure/SecurityConfig.java | 3 ++- .../domain/partnership/service/PartnershipService.java | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index d41dac5a..91702a3a 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -30,7 +30,7 @@ public class SecurityConfig { private static final String[] AUTH_WHITELIST = { "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics", "/v2/reviews", - "/partnerships" + "/partnerships/**" }; private static final String[] ADMIN_PAGE_LIST = { @@ -53,6 +53,7 @@ protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .csrf().disable() .authorizeHttpRequests(authorize -> authorize .shouldFilterAllDispatcherTypes(false) + .requestMatchers("/partnerships/*/like").authenticated() .requestMatchers(AUTH_WHITELIST).permitAll() .requestMatchers(RESOURCE_LIST).permitAll() .requestMatchers(ADMIN_PAGE_LIST).hasRole("ADMIN") diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java index 0ef9434a..4bf5a8aa 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -69,10 +69,13 @@ public List getAllPartnerships() { public PartnershipDetailResponse getPartnership(Long partnershipId, CustomUserDetails userDetails) { Partnership partnership = partnershipRepository.findById(partnershipId) .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - boolean likedByUser = partnershipLikeRepository.findByUserAndPartnership(user, partnership).isPresent(); + boolean likedByUser = false; + if (userDetails != null) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + likedByUser = partnershipLikeRepository.findByUserAndPartnership(user, partnership).isPresent(); + } return PartnershipDetailResponse.fromEntity(partnership, likedByUser); } From 313069e4d8ca81e7b1c411d49b8d85746846da81 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Sun, 16 Feb 2025 20:48:43 +0900 Subject: [PATCH 173/399] =?UTF-8?q?feat:=20=EC=A0=9C=ED=9C=B4=20api=20?= =?UTF-8?q?=EC=8A=A4=EC=9B=A8=EA=B1=B0=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/CreatePartnershipRequest.java | 12 +++++++ .../presentation/PartnershipController.java | 33 +++++++++++++++++++ .../user/dto/UpdateDepartmentRequest.java | 3 ++ .../user/presentation/UserController.java | 22 +++++++++++++ 4 files changed, 70 insertions(+) diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java index 78086aef..5de75685 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java @@ -1,5 +1,6 @@ package ssu.eatssu.domain.partnership.dto; +import io.swagger.v3.oas.annotations.media.Schema; import java.time.LocalDate; import lombok.AllArgsConstructor; import lombok.Getter; @@ -7,18 +8,29 @@ import ssu.eatssu.domain.partnership.entity.PartnershipType; import ssu.eatssu.domain.partnership.entity.RestaurantType; +@Schema(title = "제휴 등록") @Getter @AllArgsConstructor public class CreatePartnershipRequest { + @Schema(description = "제휴 가게 이름", example = "먹돼지") private String storeName; + @Schema(description = "제휴 종류(DRINK, DISCOUNT, SIDE, OTHER)", example = "DISCOUNT") private PartnershipType partnershipType; + @Schema(description = "제휴 타겟 종류(college or department)", example = "college") private String targetType; // college or department + @Schema(description = "제휴 타겟", example = "IT대") private String targetName; + @Schema(description = "제휴 내용", example = "IT대 학생증은 10% 할인") private String description; + @Schema(description = "제휴 시작 날짜", example = "2025-03-01") private LocalDate startDate; + @Schema(description = "제휴 종료 날짜", example = "2025-07-30") private LocalDate endDate; + @Schema(description = "제휴 가게 종류(RESTAURANT, CAFE)", example = "RESTAURANT") private RestaurantType restaurantType; + @Schema(description = "경도(x축)", example = "126.9566592") private Double longitude; + @Schema(description = "위도(y축)", example = "37.4949404") private Double latitude; public Partnership toPartnershipEntity() { diff --git a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java index 4daf3cec..213c2326 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java +++ b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java @@ -1,5 +1,11 @@ package ssu.eatssu.domain.partnership.presentation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.security.core.annotation.AuthenticationPrincipal; @@ -19,20 +25,40 @@ @RestController @RequestMapping("/partnerships") @RequiredArgsConstructor +@Tag(name = "Partnership", description = "제휴 API") public class PartnershipController { private final PartnershipService partnershipService; + @Operation(summary = "제휴 등록", description = "제휴를 등록하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "제휴 등록 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 대학", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 학과", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) @PostMapping public BaseResponse createPartnership(@RequestBody CreatePartnershipRequest request) { partnershipService.createPartnership(request); return BaseResponse.success(); } + @Operation(summary = "전체 제휴 조회", description = "전체 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "제휴 조회 성공"), + }) @GetMapping public BaseResponse> getAllPartnerships() { return BaseResponse.success(partnershipService.getAllPartnerships()); } + @Operation(summary = "개별 제휴 조회", description = "개별 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "제휴 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 제휴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) @GetMapping("/{partnershipId}") public BaseResponse getPartnership( @PathVariable Long partnershipId, @@ -40,6 +66,13 @@ public BaseResponse getPartnership( return BaseResponse.success(partnershipService.getPartnership(partnershipId, userDetails)); } + @Operation(summary = "제휴 찜 등록하기/취소하기", description = "제휴 찜 등록하기/취소하기(토글) API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "제휴 찜 등록/취소 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 제휴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) @PostMapping("/{partnershipId}/like") public BaseResponse togglePartnershipLike( @PathVariable Long partnershipId, diff --git a/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java b/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java index 50aeadad..c93bd8b1 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java @@ -1,12 +1,15 @@ package ssu.eatssu.domain.user.dto; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +@Schema(title = "유저 학과 등록") @Getter @AllArgsConstructor @NoArgsConstructor public class UpdateDepartmentRequest { + @Schema(description = "학과 이름", example = "소프트") private String departmentName; } diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 1e5bfcb0..df10bcfd 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -134,17 +134,39 @@ public BaseResponse getMyPage( return BaseResponse.success(userService.findMyPage(customUserDetails)); } + @Operation(summary = "유저가 찜한 제휴 조회", description = "유저가 찜한 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저가 찜한 제휴 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) @GetMapping("/partnerships") public BaseResponse> getUserLikedPartnerships(@AuthenticationPrincipal CustomUserDetails userDetails) { return BaseResponse.success(partnershipService.getUserLikedPartnerships(userDetails)); } + @Operation(summary = "유저의 학과 등록", description = "유저의 학과를 등록하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저의 학과 등록 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 학과", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) @PostMapping("/department") public BaseResponse registerDepartment(@RequestBody UpdateDepartmentRequest request, @AuthenticationPrincipal CustomUserDetails userDetails) { userService.registerDepartment(request, userDetails); return BaseResponse.success(); } + @Operation(summary = "유저의 단과대/학과 제휴 조회", description = "유저의 단과대/학과 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저의 단과대/학과 제휴 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) @GetMapping("/department/partnerships") public BaseResponse> getUserDepartmentPartnerships(@AuthenticationPrincipal CustomUserDetails userDetails) { return BaseResponse.success(partnershipService.getUserDepartmentPartnerships(userDetails)); From 24860b5e341f6416192edc8c03e7ec09b3fd91a1 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Thu, 13 Feb 2025 14:53:51 +0900 Subject: [PATCH 174/399] =?UTF-8?q?fix:=20S3Config=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EA=B2=BD=EB=A1=9C=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 --- src/main/java/ssu/eatssu/global/config/S3Config.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/global/config/S3Config.java b/src/main/java/ssu/eatssu/global/config/S3Config.java index 31955864..e85cddd3 100644 --- a/src/main/java/ssu/eatssu/global/config/S3Config.java +++ b/src/main/java/ssu/eatssu/global/config/S3Config.java @@ -1,4 +1,4 @@ -package ssu.eatssu.config; +package ssu.eatssu.global.config; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSStaticCredentialsProvider; From 3f4e588e26324ae666880bca2e5e0a3815067a67 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Thu, 13 Feb 2025 14:54:16 +0900 Subject: [PATCH 175/399] =?UTF-8?q?fix:=20S3Config=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EC=97=90=EC=84=9C=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=ED=8C=A8=ED=82=A4=EC=A7=80=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ssu/eatssu/global/config/S3Config.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/ssu/eatssu/global/config/S3Config.java b/src/main/java/ssu/eatssu/global/config/S3Config.java index e85cddd3..575d76dc 100644 --- a/src/main/java/ssu/eatssu/global/config/S3Config.java +++ b/src/main/java/ssu/eatssu/global/config/S3Config.java @@ -3,12 +3,11 @@ import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; -import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.beans.factory.annotation.Value; @Configuration public class S3Config { @@ -26,7 +25,7 @@ public class S3Config { public AmazonS3Client amazonS3Client() { AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); - return (AmazonS3Client)AmazonS3ClientBuilder + return (AmazonS3Client) AmazonS3ClientBuilder .standard() .withCredentials(new AWSStaticCredentialsProvider(credentials)) .withRegion(region) From 8d4571fe90e102e0c93ef8141ceac2b198ac66cf Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Mon, 24 Feb 2025 15:46:50 +0900 Subject: [PATCH 176/399] =?UTF-8?q?feat:=20=ED=95=99=EA=B3=BC=20=EA=B8=B0?= =?UTF-8?q?=EC=9E=85=20=EC=97=AC=EB=B6=80=20=EC=B2=B4=ED=81=AC=20api=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/user/presentation/UserController.java | 12 ++++++++++++ .../ssu/eatssu/domain/user/service/UserService.java | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index df10bcfd..230902df 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -171,4 +171,16 @@ public BaseResponse registerDepartment(@RequestBody UpdateDepartmentRequest r public BaseResponse> getUserDepartmentPartnerships(@AuthenticationPrincipal CustomUserDetails userDetails) { return BaseResponse.success(partnershipService.getUserDepartmentPartnerships(userDetails)); } + + @Operation(summary = "학과 기입 여부 체크", description = """ + 학과 기입 여부 체크 API 입니다.

+ 학과를 기입했으면 true, 아니면 false 를 반환합니다 + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "학과 기입함") + }) + @GetMapping("/validate/department") + public BaseResponse validateDepartmentExists(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(userService.validateDepartmentExists(userDetails)); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index 2ed6d60a..368f2222 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -91,4 +91,10 @@ public void registerDepartment(UpdateDepartmentRequest request, CustomUserDetail user.updateDepartment(department); } + + public Boolean validateDepartmentExists(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + return user.getDepartment() != null; + } } \ No newline at end of file From 23a8daa32156625e743b83c88127d5e5d92acd60 Mon Sep 17 00:00:00 2001 From: chaeyeon0130 Date: Mon, 24 Feb 2025 15:58:53 +0900 Subject: [PATCH 177/399] =?UTF-8?q?feat:=20=ED=95=99=EA=B3=BC=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20api=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/user/dto/DepartmentResponse.java | 10 ++++++++++ .../domain/user/presentation/UserController.java | 14 ++++++++++++++ .../eatssu/domain/user/service/UserService.java | 12 ++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java diff --git a/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java new file mode 100644 index 00000000..7df39fdb --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java @@ -0,0 +1,10 @@ +package ssu.eatssu.domain.user.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class DepartmentResponse { + private String departmentName; +} diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 230902df..5719584e 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -21,6 +21,7 @@ import ssu.eatssu.domain.partnership.dto.PartnershipResponse; import ssu.eatssu.domain.partnership.service.PartnershipService; import ssu.eatssu.domain.review.service.MealReviewService; +import ssu.eatssu.domain.user.dto.DepartmentResponse; import ssu.eatssu.domain.user.dto.MyMealReviewResponse; import ssu.eatssu.domain.user.dto.MyReviewDetail; import ssu.eatssu.domain.user.dto.MyPageResponse; @@ -183,4 +184,17 @@ public BaseResponse> getUserDepartmentPartnerships(@Au public BaseResponse validateDepartmentExists(@AuthenticationPrincipal CustomUserDetails userDetails) { return BaseResponse.success(userService.validateDepartmentExists(userDetails)); } + + @Operation(summary = "유저의 학과 조회", description = "유저의 학과를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저의 학과 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @GetMapping("/department") + public BaseResponse getDepartment(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(userService.getDepartment(userDetails)); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index 368f2222..8d2745c3 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -1,5 +1,6 @@ package ssu.eatssu.domain.user.service; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.MISSING_USER_DEPARTMENT; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_DEPARTMENT; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; @@ -14,6 +15,7 @@ import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.user.department.entity.Department; import ssu.eatssu.domain.user.department.persistence.DepartmentRepository; +import ssu.eatssu.domain.user.dto.DepartmentResponse; import ssu.eatssu.domain.user.dto.MyPageResponse; import ssu.eatssu.domain.user.dto.NicknameUpdateRequest; import ssu.eatssu.domain.user.dto.UpdateDepartmentRequest; @@ -97,4 +99,14 @@ public Boolean validateDepartmentExists(CustomUserDetails userDetails) { .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); return user.getDepartment() != null; } + + public DepartmentResponse getDepartment(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + Department department = user.getDepartment(); + if (department == null) { + throw new BaseException(MISSING_USER_DEPARTMENT); + } + return new DepartmentResponse(department.getName()); + } } \ No newline at end of file From d160e8edd966251fbe02467a036d13c7bae939a7 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Thu, 20 Feb 2025 13:37:09 +0900 Subject: [PATCH 178/399] =?UTF-8?q?fix:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=ED=8C=A8=ED=82=A4=EC=A7=80=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20@NonNull=20=EC=96=B4=EB=85=B8?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EC=85=98=20=EB=B6=99=EC=9D=B4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/GlobalExceptionHandler.java | 129 ++++++++++++------ 1 file changed, 91 insertions(+), 38 deletions(-) diff --git a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java index 08f28d78..ee8bf9c7 100644 --- a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java @@ -22,6 +22,7 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import org.springframework.lang.NonNull; /** * 전역 Controller 예외처리 @@ -34,7 +35,7 @@ public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { * BaseException 처리 */ @ExceptionHandler(BaseException.class) - public ResponseEntity handleBaseException(BaseException e) { + public ResponseEntity> handleBaseException(BaseException e) { log.info(e.getStatus().toString()); return ResponseEntity.status(e.getStatus().getHttpStatus()).body(BaseResponse.fail(e.getStatus())); } @@ -43,8 +44,11 @@ public ResponseEntity handleBaseException(BaseException e) { * 경로는 있으나 지원하지 않는 http method로 요청 시 */ @Override - protected ResponseEntity handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException ex, - HttpHeaders headers, HttpStatusCode status, WebRequest request) { + protected ResponseEntity handleHttpRequestMethodNotSupported( + @NonNull HttpRequestMethodNotSupportedException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { return ResponseEntity.status(HttpStatus.METHOD_NOT_ALLOWED).body(BaseResponse.fail( BaseResponseStatus.METHOD_NOT_ALLOWED)); } @@ -53,64 +57,91 @@ protected ResponseEntity handleHttpRequestMethodNotSupported(HttpRequest * 지원하지 않는 content type으로 요청 시 */ @Override - protected ResponseEntity handleHttpMediaTypeNotSupported(HttpMediaTypeNotSupportedException ex, - HttpHeaders headers, HttpStatusCode status, WebRequest request) { - return ResponseEntity.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE).body(BaseResponse.fail(BaseResponseStatus.UNSUPPORTED_MEDIA_TYPE)); - + protected ResponseEntity handleHttpMediaTypeNotSupported( + @NonNull HttpMediaTypeNotSupportedException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE) + .body(BaseResponse.fail(BaseResponseStatus.UNSUPPORTED_MEDIA_TYPE)); } /** * 인식할 수 없는 content type으로 요청 시 */ @Override - protected ResponseEntity handleHttpMediaTypeNotAcceptable(HttpMediaTypeNotAcceptableException ex, - HttpHeaders headers, HttpStatusCode status, WebRequest request) { - return ResponseEntity.status(HttpStatus.NOT_ACCEPTABLE).body(BaseResponse.fail(BaseResponseStatus.NOT_ACCEPTABLE)); + protected ResponseEntity handleHttpMediaTypeNotAcceptable( + @NonNull HttpMediaTypeNotAcceptableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.NOT_ACCEPTABLE) + .body(BaseResponse.fail(BaseResponseStatus.NOT_ACCEPTABLE)); } /** * PathVariable 값 누락 시 */ @Override - protected ResponseEntity handleMissingPathVariable(MissingPathVariableException ex, HttpHeaders headers, - HttpStatusCode status, WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(BaseResponse.fail(BaseResponseStatus.MISSING_PATH_VARIABLE)); + protected ResponseEntity handleMissingPathVariable( + @NonNull MissingPathVariableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISSING_PATH_VARIABLE)); } /*** * RequestParam 값 누락 시 */ @Override - protected ResponseEntity handleMissingServletRequestParameter(MissingServletRequestParameterException ex, - HttpHeaders headers, HttpStatusCode status, WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PARAM)); + protected ResponseEntity handleMissingServletRequestParameter( + @NonNull MissingServletRequestParameterException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PARAM)); } /** * RequestPart 값 누락 시 */ @Override - protected ResponseEntity handleMissingServletRequestPart(MissingServletRequestPartException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PART)); + protected ResponseEntity handleMissingServletRequestPart( + @NonNull MissingServletRequestPartException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PART)); } /** * 요청 값 바인딩 처리에 실패한 경우 */ @Override - protected ResponseEntity handleServletRequestBindingException(ServletRequestBindingException ex, - HttpHeaders headers, HttpStatusCode status, WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(BaseResponse.fail(BaseResponseStatus.REQ_BINDING_FAIL)); + protected ResponseEntity handleServletRequestBindingException( + @NonNull ServletRequestBindingException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.REQ_BINDING_FAIL)); } /** * request @Valid 유효성 체크를 통과하지 못한 경우 */ @Override - protected ResponseEntity handleMethodArgumentNotValid(MethodArgumentNotValidException ex, - HttpHeaders headers, HttpStatusCode status, - WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(BaseResponse.fail(BaseResponseStatus.FAILED_VALIDATION)); + protected ResponseEntity handleMethodArgumentNotValid( + @NonNull MethodArgumentNotValidException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.FAILED_VALIDATION)); } /** @@ -119,43 +150,65 @@ protected ResponseEntity handleMethodArgumentNotValid(MethodArgumentNotV * NoHandlerFoundException 예외를 발생

*/ @Override - protected ResponseEntity handleNoHandlerFoundException(NoHandlerFoundException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { - return ResponseEntity.status(HttpStatus.NOT_FOUND).body(BaseResponse.fail(BaseResponseStatus.NOT_FOUND)); + protected ResponseEntity handleNoHandlerFoundException( + @NonNull NoHandlerFoundException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.NOT_FOUND) + .body(BaseResponse.fail(BaseResponseStatus.NOT_FOUND)); } /** * 비동기 요청의 응답시간이 초과될 경우 */ @Override - protected ResponseEntity handleAsyncRequestTimeoutException(AsyncRequestTimeoutException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { - return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE).body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_TIME_OUT)); + protected ResponseEntity handleAsyncRequestTimeoutException( + @NonNull AsyncRequestTimeoutException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE) + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_TIME_OUT)); } /** * 파라미터 타입 불일치가 발생한 경우 */ @Override - protected ResponseEntity handleTypeMismatch(TypeMismatchException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(BaseResponse.fail(BaseResponseStatus.MISMATCH_PARAM_TYPE)); + protected ResponseEntity handleTypeMismatch( + @NonNull TypeMismatchException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISMATCH_PARAM_TYPE)); } /** * 적절하지 않은 RequestBody 때문에 HttpMessageConverter.read 메소드 실패한 경우 */ @Override - protected ResponseEntity handleHttpMessageNotReadable(HttpMessageNotReadableException ex, - HttpHeaders headers, HttpStatusCode status, WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(BaseResponse.fail(BaseResponseStatus.BAD_REQUEST)); + protected ResponseEntity handleHttpMessageNotReadable( + @NonNull HttpMessageNotReadableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.BAD_REQUEST)); } /** * 직렬화 실패한 경우 */ @Override - protected ResponseEntity handleHttpMessageNotWritable(HttpMessageNotWritableException ex, - HttpHeaders headers, HttpStatusCode status, - WebRequest request) { - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); + protected ResponseEntity handleHttpMessageNotWritable( + @NonNull HttpMessageNotWritableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); } } From b1b8ff9cd45fe128bc34e595edca21c2099a1513 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Thu, 20 Feb 2025 14:38:11 +0900 Subject: [PATCH 179/399] =?UTF-8?q?refactor:=20generated=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=B6=94=EC=A0=81=EC=97=90=EC=84=9C=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0=20&=20gitignore=20=EC=88=98=EC=A0=95=20&=20build.grad?= =?UTF-8?q?le=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 11 ++- build.gradle | 93 +++++++++++++++++++ .../domain/inquiry/entity/QInquiry.java | 65 ------------- .../ssu/eatssu/domain/menu/entity/QMeal.java | 48 ---------- .../eatssu/domain/menu/entity/QMealMenu.java | 54 ----------- .../ssu/eatssu/domain/menu/entity/QMenu.java | 68 -------------- .../domain/menu/entity/QMenuCategory.java | 41 -------- .../partnership/entity/QPartnership.java | 60 ------------ .../entity/QPartnershipCollege.java | 54 ----------- .../entity/QPartnershipDepartment.java | 54 ----------- .../partnership/entity/QPartnershipLike.java | 54 ----------- .../eatssu/domain/rating/entity/QRatings.java | 41 -------- .../eatssu/domain/review/entity/QReport.java | 68 -------------- .../eatssu/domain/review/entity/QReview.java | 78 ---------------- .../domain/review/entity/QReviewImage.java | 53 ----------- .../domain/review/entity/QReviewLike.java | 54 ----------- .../domain/review/entity/QReviewMenuLike.java | 56 ----------- .../eatssu/domain/review/entity/QReviews.java | 38 -------- .../user/department/entity/QCollege.java | 44 --------- .../user/department/entity/QDepartment.java | 55 ----------- .../domain/user/entity/QBaseTimeEntity.java | 39 -------- .../ssu/eatssu/domain/user/entity/QUser.java | 83 ----------------- 22 files changed, 100 insertions(+), 1111 deletions(-) create mode 100644 build.gradle delete mode 100644 src/main/generated/ssu/eatssu/domain/inquiry/entity/QInquiry.java delete mode 100644 src/main/generated/ssu/eatssu/domain/menu/entity/QMeal.java delete mode 100644 src/main/generated/ssu/eatssu/domain/menu/entity/QMealMenu.java delete mode 100644 src/main/generated/ssu/eatssu/domain/menu/entity/QMenu.java delete mode 100644 src/main/generated/ssu/eatssu/domain/menu/entity/QMenuCategory.java delete mode 100644 src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnership.java delete mode 100644 src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipCollege.java delete mode 100644 src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipDepartment.java delete mode 100644 src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipLike.java delete mode 100644 src/main/generated/ssu/eatssu/domain/rating/entity/QRatings.java delete mode 100644 src/main/generated/ssu/eatssu/domain/review/entity/QReport.java delete mode 100644 src/main/generated/ssu/eatssu/domain/review/entity/QReview.java delete mode 100644 src/main/generated/ssu/eatssu/domain/review/entity/QReviewImage.java delete mode 100644 src/main/generated/ssu/eatssu/domain/review/entity/QReviewLike.java delete mode 100644 src/main/generated/ssu/eatssu/domain/review/entity/QReviewMenuLike.java delete mode 100644 src/main/generated/ssu/eatssu/domain/review/entity/QReviews.java delete mode 100644 src/main/generated/ssu/eatssu/domain/user/department/entity/QCollege.java delete mode 100644 src/main/generated/ssu/eatssu/domain/user/department/entity/QDepartment.java delete mode 100644 src/main/generated/ssu/eatssu/domain/user/entity/QBaseTimeEntity.java delete mode 100644 src/main/generated/ssu/eatssu/domain/user/entity/QUser.java diff --git a/.gitignore b/.gitignore index b504a4a1..e97e8f6b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,9 @@ -HELP.md -.gradle +### Build files ### +.gradle/ build/ !gradle/wrapper/gradle-wrapper.jar !**/src/main/**/build/ !**/src/test/**/build/ -build.gradle ### STS ### .apt_generated @@ -37,5 +36,9 @@ out/ ### VS Code ### .vscode/ +### application files ### *.properties -*.yml \ No newline at end of file +*.yml + +### Generated files ### +/src/main/generated/ diff --git a/build.gradle b/build.gradle new file mode 100644 index 00000000..dfdd9116 --- /dev/null +++ b/build.gradle @@ -0,0 +1,93 @@ +import javax.tools.JavaCompiler + +plugins { + id 'java' + id 'org.springframework.boot' version '3.0.4' + id 'io.spring.dependency-management' version '1.1.0' +} + +group = 'ssu' +version = '0.0.1-SNAPSHOT' +sourceCompatibility = '17' + +bootJar{ + archivesBaseName = 'EatSsu' + archiveFileName = 'eat-ssu.jar' + archiveVersion = "0.0.1" +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.jetbrains:annotations:20.1.0' + implementation 'org.springframework.boot:spring-boot-starter-security' + implementation 'org.hibernate.validator:hibernate-validator:8.0.0.Final' + + // Lombok + annotationProcessor 'org.projectlombok:lombok' + compileOnly 'org.projectlombok:lombok' + + developmentOnly 'org.springframework.boot:spring-boot-devtools' + + runtimeOnly 'com.mysql:mysql-connector-j' + + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testImplementation 'org.springframework.security:spring-security-test' + + implementation 'com.h2database:h2' + + + //openApi + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' + + //jwt + implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2' + runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2' + runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2' + + //httpClient + implementation 'org.apache.httpcomponents.client5:httpclient5:5.3-alpha1' + + // Querydsl 추가 + implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' + annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" + annotationProcessor "jakarta.annotation:jakarta.annotation-api" + annotationProcessor "jakarta.persistence:jakarta.persistence-api" + + //S3 + implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' + + //slack + implementation("com.slack.api:bolt:1.35.0") + implementation("com.slack.api:bolt-servlet:1.35.0") + implementation("com.slack.api:bolt-jetty:1.35.0") + implementation("org.slf4j:slf4j-simple:1.7.36") +} + +tasks.named('test') { + useJUnitPlatform() +} + +def generated = 'src/main/generated' + +tasks.withType(JavaCompile) { + options.getGeneratedSourceOutputDirectory().set(file(generated)) +} + +sourceSets { + main.java.srcDirs += [generated] +} + +clean { + delete file('src/main/generated') +} \ No newline at end of file diff --git a/src/main/generated/ssu/eatssu/domain/inquiry/entity/QInquiry.java b/src/main/generated/ssu/eatssu/domain/inquiry/entity/QInquiry.java deleted file mode 100644 index e60508e2..00000000 --- a/src/main/generated/ssu/eatssu/domain/inquiry/entity/QInquiry.java +++ /dev/null @@ -1,65 +0,0 @@ -package ssu.eatssu.domain.inquiry.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QInquiry is a Querydsl query type for Inquiry - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QInquiry extends EntityPathBase { - - private static final long serialVersionUID = 1796285397L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QInquiry inquiry = new QInquiry("inquiry"); - - public final ssu.eatssu.domain.user.entity.QBaseTimeEntity _super = new ssu.eatssu.domain.user.entity.QBaseTimeEntity(this); - - public final StringPath content = createString("content"); - - //inherited - public final DateTimePath createdDate = _super.createdDate; - - public final StringPath email = createString("email"); - - public final NumberPath id = createNumber("id", Long.class); - - //inherited - public final DateTimePath modifiedDate = _super.modifiedDate; - - public final EnumPath status = createEnum("status", InquiryStatus.class); - - public final ssu.eatssu.domain.user.entity.QUser user; - - public QInquiry(String variable) { - this(Inquiry.class, forVariable(variable), INITS); - } - - public QInquiry(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QInquiry(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QInquiry(PathMetadata metadata, PathInits inits) { - this(Inquiry.class, metadata, inits); - } - - public QInquiry(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.user = inits.isInitialized("user") ? new ssu.eatssu.domain.user.entity.QUser(forProperty("user"), inits.get("user")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/menu/entity/QMeal.java b/src/main/generated/ssu/eatssu/domain/menu/entity/QMeal.java deleted file mode 100644 index 6adef93c..00000000 --- a/src/main/generated/ssu/eatssu/domain/menu/entity/QMeal.java +++ /dev/null @@ -1,48 +0,0 @@ -package ssu.eatssu.domain.menu.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QMeal is a Querydsl query type for Meal - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QMeal extends EntityPathBase { - - private static final long serialVersionUID = 1205817521L; - - public static final QMeal meal = new QMeal("meal"); - - public final DatePath date = createDate("date", java.util.Date.class); - - public final NumberPath id = createNumber("id", Long.class); - - public final ListPath mealMenus = this.createList("mealMenus", MealMenu.class, QMealMenu.class, PathInits.DIRECT2); - - public final NumberPath price = createNumber("price", Integer.class); - - public final EnumPath restaurant = createEnum("restaurant", ssu.eatssu.domain.restaurant.entity.Restaurant.class); - - public final EnumPath timePart = createEnum("timePart", ssu.eatssu.domain.menu.entity.constants.TimePart.class); - - public QMeal(String variable) { - super(Meal.class, forVariable(variable)); - } - - public QMeal(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QMeal(PathMetadata metadata) { - super(Meal.class, metadata); - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/menu/entity/QMealMenu.java b/src/main/generated/ssu/eatssu/domain/menu/entity/QMealMenu.java deleted file mode 100644 index 28708fce..00000000 --- a/src/main/generated/ssu/eatssu/domain/menu/entity/QMealMenu.java +++ /dev/null @@ -1,54 +0,0 @@ -package ssu.eatssu.domain.menu.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QMealMenu is a Querydsl query type for MealMenu - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QMealMenu extends EntityPathBase { - - private static final long serialVersionUID = -1315300944L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QMealMenu mealMenu = new QMealMenu("mealMenu"); - - public final NumberPath id = createNumber("id", Long.class); - - public final QMeal meal; - - public final QMenu menu; - - public QMealMenu(String variable) { - this(MealMenu.class, forVariable(variable), INITS); - } - - public QMealMenu(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QMealMenu(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QMealMenu(PathMetadata metadata, PathInits inits) { - this(MealMenu.class, metadata, inits); - } - - public QMealMenu(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.meal = inits.isInitialized("meal") ? new QMeal(forProperty("meal")) : null; - this.menu = inits.isInitialized("menu") ? new QMenu(forProperty("menu"), inits.get("menu")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/menu/entity/QMenu.java b/src/main/generated/ssu/eatssu/domain/menu/entity/QMenu.java deleted file mode 100644 index 5b85bb33..00000000 --- a/src/main/generated/ssu/eatssu/domain/menu/entity/QMenu.java +++ /dev/null @@ -1,68 +0,0 @@ -package ssu.eatssu.domain.menu.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QMenu is a Querydsl query type for Menu - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QMenu extends EntityPathBase { - - private static final long serialVersionUID = 1205817933L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QMenu menu = new QMenu("menu"); - - public final QMenuCategory category; - - public final NumberPath id = createNumber("id", Long.class); - - public final BooleanPath isDiscontinued = createBoolean("isDiscontinued"); - - public final NumberPath likeCount = createNumber("likeCount", Integer.class); - - public final ListPath mealMenus = this.createList("mealMenus", MealMenu.class, QMealMenu.class, PathInits.DIRECT2); - - public final StringPath name = createString("name"); - - public final NumberPath price = createNumber("price", Integer.class); - - public final EnumPath restaurant = createEnum("restaurant", ssu.eatssu.domain.restaurant.entity.Restaurant.class); - - public final ssu.eatssu.domain.review.entity.QReviews reviews; - - public final NumberPath unlikeCount = createNumber("unlikeCount", Integer.class); - - public QMenu(String variable) { - this(Menu.class, forVariable(variable), INITS); - } - - public QMenu(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QMenu(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QMenu(PathMetadata metadata, PathInits inits) { - this(Menu.class, metadata, inits); - } - - public QMenu(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.category = inits.isInitialized("category") ? new QMenuCategory(forProperty("category")) : null; - this.reviews = inits.isInitialized("reviews") ? new ssu.eatssu.domain.review.entity.QReviews(forProperty("reviews")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/menu/entity/QMenuCategory.java b/src/main/generated/ssu/eatssu/domain/menu/entity/QMenuCategory.java deleted file mode 100644 index 510e68b8..00000000 --- a/src/main/generated/ssu/eatssu/domain/menu/entity/QMenuCategory.java +++ /dev/null @@ -1,41 +0,0 @@ -package ssu.eatssu.domain.menu.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; - - -/** - * QMenuCategory is a Querydsl query type for MenuCategory - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QMenuCategory extends EntityPathBase { - - private static final long serialVersionUID = -2082482581L; - - public static final QMenuCategory menuCategory = new QMenuCategory("menuCategory"); - - public final NumberPath id = createNumber("id", Long.class); - - public final StringPath name = createString("name"); - - public final EnumPath restaurant = createEnum("restaurant", ssu.eatssu.domain.restaurant.entity.Restaurant.class); - - public QMenuCategory(String variable) { - super(MenuCategory.class, forVariable(variable)); - } - - public QMenuCategory(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QMenuCategory(PathMetadata metadata) { - super(MenuCategory.class, metadata); - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnership.java b/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnership.java deleted file mode 100644 index 0d0d712b..00000000 --- a/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnership.java +++ /dev/null @@ -1,60 +0,0 @@ -package ssu.eatssu.domain.partnership.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QPartnership is a Querydsl query type for Partnership - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QPartnership extends EntityPathBase { - - private static final long serialVersionUID = 477296821L; - - public static final QPartnership partnership = new QPartnership("partnership"); - - public final StringPath description = createString("description"); - - public final DatePath endDate = createDate("endDate", java.time.LocalDate.class); - - public final NumberPath id = createNumber("id", Long.class); - - public final NumberPath latitude = createNumber("latitude", Double.class); - - public final ListPath likes = this.createList("likes", PartnershipLike.class, QPartnershipLike.class, PathInits.DIRECT2); - - public final NumberPath longitude = createNumber("longitude", Double.class); - - public final ListPath partnershipColleges = this.createList("partnershipColleges", PartnershipCollege.class, QPartnershipCollege.class, PathInits.DIRECT2); - - public final ListPath partnershipDepartments = this.createList("partnershipDepartments", PartnershipDepartment.class, QPartnershipDepartment.class, PathInits.DIRECT2); - - public final EnumPath partnershipType = createEnum("partnershipType", PartnershipType.class); - - public final EnumPath restaurantType = createEnum("restaurantType", RestaurantType.class); - - public final DatePath startDate = createDate("startDate", java.time.LocalDate.class); - - public final StringPath storeName = createString("storeName"); - - public QPartnership(String variable) { - super(Partnership.class, forVariable(variable)); - } - - public QPartnership(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QPartnership(PathMetadata metadata) { - super(Partnership.class, metadata); - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipCollege.java b/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipCollege.java deleted file mode 100644 index 6b85de78..00000000 --- a/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipCollege.java +++ /dev/null @@ -1,54 +0,0 @@ -package ssu.eatssu.domain.partnership.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QPartnershipCollege is a Querydsl query type for PartnershipCollege - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QPartnershipCollege extends EntityPathBase { - - private static final long serialVersionUID = -1865762014L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QPartnershipCollege partnershipCollege = new QPartnershipCollege("partnershipCollege"); - - public final ssu.eatssu.domain.user.department.entity.QCollege college; - - public final NumberPath id = createNumber("id", Long.class); - - public final QPartnership partnership; - - public QPartnershipCollege(String variable) { - this(PartnershipCollege.class, forVariable(variable), INITS); - } - - public QPartnershipCollege(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QPartnershipCollege(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QPartnershipCollege(PathMetadata metadata, PathInits inits) { - this(PartnershipCollege.class, metadata, inits); - } - - public QPartnershipCollege(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.college = inits.isInitialized("college") ? new ssu.eatssu.domain.user.department.entity.QCollege(forProperty("college")) : null; - this.partnership = inits.isInitialized("partnership") ? new QPartnership(forProperty("partnership")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipDepartment.java b/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipDepartment.java deleted file mode 100644 index df7f69f9..00000000 --- a/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipDepartment.java +++ /dev/null @@ -1,54 +0,0 @@ -package ssu.eatssu.domain.partnership.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QPartnershipDepartment is a Querydsl query type for PartnershipDepartment - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QPartnershipDepartment extends EntityPathBase { - - private static final long serialVersionUID = 841972199L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QPartnershipDepartment partnershipDepartment = new QPartnershipDepartment("partnershipDepartment"); - - public final ssu.eatssu.domain.user.department.entity.QDepartment department; - - public final NumberPath id = createNumber("id", Long.class); - - public final QPartnership partnership; - - public QPartnershipDepartment(String variable) { - this(PartnershipDepartment.class, forVariable(variable), INITS); - } - - public QPartnershipDepartment(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QPartnershipDepartment(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QPartnershipDepartment(PathMetadata metadata, PathInits inits) { - this(PartnershipDepartment.class, metadata, inits); - } - - public QPartnershipDepartment(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.department = inits.isInitialized("department") ? new ssu.eatssu.domain.user.department.entity.QDepartment(forProperty("department"), inits.get("department")) : null; - this.partnership = inits.isInitialized("partnership") ? new QPartnership(forProperty("partnership")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipLike.java b/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipLike.java deleted file mode 100644 index 53afcc5d..00000000 --- a/src/main/generated/ssu/eatssu/domain/partnership/entity/QPartnershipLike.java +++ /dev/null @@ -1,54 +0,0 @@ -package ssu.eatssu.domain.partnership.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QPartnershipLike is a Querydsl query type for PartnershipLike - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QPartnershipLike extends EntityPathBase { - - private static final long serialVersionUID = 1146206700L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QPartnershipLike partnershipLike = new QPartnershipLike("partnershipLike"); - - public final NumberPath id = createNumber("id", Long.class); - - public final QPartnership partnership; - - public final ssu.eatssu.domain.user.entity.QUser user; - - public QPartnershipLike(String variable) { - this(PartnershipLike.class, forVariable(variable), INITS); - } - - public QPartnershipLike(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QPartnershipLike(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QPartnershipLike(PathMetadata metadata, PathInits inits) { - this(PartnershipLike.class, metadata, inits); - } - - public QPartnershipLike(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.partnership = inits.isInitialized("partnership") ? new QPartnership(forProperty("partnership")) : null; - this.user = inits.isInitialized("user") ? new ssu.eatssu.domain.user.entity.QUser(forProperty("user"), inits.get("user")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/rating/entity/QRatings.java b/src/main/generated/ssu/eatssu/domain/rating/entity/QRatings.java deleted file mode 100644 index ee394898..00000000 --- a/src/main/generated/ssu/eatssu/domain/rating/entity/QRatings.java +++ /dev/null @@ -1,41 +0,0 @@ -package ssu.eatssu.domain.rating.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; - - -/** - * QRatings is a Querydsl query type for Ratings - */ -@Generated("com.querydsl.codegen.DefaultEmbeddableSerializer") -public class QRatings extends BeanPath { - - private static final long serialVersionUID = 514329418L; - - public static final QRatings ratings = new QRatings("ratings"); - - public final NumberPath amountRating = createNumber("amountRating", Integer.class); - - public final NumberPath mainRating = createNumber("mainRating", Integer.class); - - public final NumberPath tasteRating = createNumber("tasteRating", Integer.class); - - public QRatings(String variable) { - super(Ratings.class, forVariable(variable)); - } - - public QRatings(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QRatings(PathMetadata metadata) { - super(Ratings.class, metadata); - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/review/entity/QReport.java b/src/main/generated/ssu/eatssu/domain/review/entity/QReport.java deleted file mode 100644 index 76ff16c2..00000000 --- a/src/main/generated/ssu/eatssu/domain/review/entity/QReport.java +++ /dev/null @@ -1,68 +0,0 @@ -package ssu.eatssu.domain.review.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QReport is a Querydsl query type for Report - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QReport extends EntityPathBase { - - private static final long serialVersionUID = -1159101349L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QReport report = new QReport("report"); - - public final ssu.eatssu.domain.user.entity.QBaseTimeEntity _super = new ssu.eatssu.domain.user.entity.QBaseTimeEntity(this); - - public final StringPath content = createString("content"); - - //inherited - public final DateTimePath createdDate = _super.createdDate; - - public final NumberPath id = createNumber("id", Long.class); - - //inherited - public final DateTimePath modifiedDate = _super.modifiedDate; - - public final EnumPath reportType = createEnum("reportType", ssu.eatssu.domain.report.entity.ReportType.class); - - public final QReview review; - - public final EnumPath status = createEnum("status", ssu.eatssu.domain.report.entity.ReportStatus.class); - - public final ssu.eatssu.domain.user.entity.QUser user; - - public QReport(String variable) { - this(Report.class, forVariable(variable), INITS); - } - - public QReport(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QReport(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QReport(PathMetadata metadata, PathInits inits) { - this(Report.class, metadata, inits); - } - - public QReport(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.review = inits.isInitialized("review") ? new QReview(forProperty("review"), inits.get("review")) : null; - this.user = inits.isInitialized("user") ? new ssu.eatssu.domain.user.entity.QUser(forProperty("user"), inits.get("user")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java b/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java deleted file mode 100644 index 6c73ff18..00000000 --- a/src/main/generated/ssu/eatssu/domain/review/entity/QReview.java +++ /dev/null @@ -1,78 +0,0 @@ -package ssu.eatssu.domain.review.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QReview is a Querydsl query type for Review - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QReview extends EntityPathBase { - - private static final long serialVersionUID = -1158928769L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QReview review = new QReview("review"); - - public final ssu.eatssu.domain.user.entity.QBaseTimeEntity _super = new ssu.eatssu.domain.user.entity.QBaseTimeEntity(this); - - public final StringPath content = createString("content"); - - //inherited - public final DateTimePath createdDate = _super.createdDate; - - public final NumberPath id = createNumber("id", Long.class); - - public final ssu.eatssu.domain.menu.entity.QMeal meal; - - public final ssu.eatssu.domain.menu.entity.QMenu menu; - - public final ListPath menuLikes = this.createList("menuLikes", ReviewMenuLike.class, QReviewMenuLike.class, PathInits.DIRECT2); - - //inherited - public final DateTimePath modifiedDate = _super.modifiedDate; - - public final NumberPath rating = createNumber("rating", Integer.class); - - public final ssu.eatssu.domain.rating.entity.QRatings ratings; - - public final ListPath reviewImages = this.createList("reviewImages", ReviewImage.class, QReviewImage.class, PathInits.DIRECT2); - - public final ListPath reviewLikes = this.createList("reviewLikes", ReviewLike.class, QReviewLike.class, PathInits.DIRECT2); - - public final ssu.eatssu.domain.user.entity.QUser user; - - public QReview(String variable) { - this(Review.class, forVariable(variable), INITS); - } - - public QReview(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QReview(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QReview(PathMetadata metadata, PathInits inits) { - this(Review.class, metadata, inits); - } - - public QReview(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.meal = inits.isInitialized("meal") ? new ssu.eatssu.domain.menu.entity.QMeal(forProperty("meal")) : null; - this.menu = inits.isInitialized("menu") ? new ssu.eatssu.domain.menu.entity.QMenu(forProperty("menu"), inits.get("menu")) : null; - this.ratings = inits.isInitialized("ratings") ? new ssu.eatssu.domain.rating.entity.QRatings(forProperty("ratings")) : null; - this.user = inits.isInitialized("user") ? new ssu.eatssu.domain.user.entity.QUser(forProperty("user"), inits.get("user")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/review/entity/QReviewImage.java b/src/main/generated/ssu/eatssu/domain/review/entity/QReviewImage.java deleted file mode 100644 index 9ba36ffc..00000000 --- a/src/main/generated/ssu/eatssu/domain/review/entity/QReviewImage.java +++ /dev/null @@ -1,53 +0,0 @@ -package ssu.eatssu.domain.review.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QReviewImage is a Querydsl query type for ReviewImage - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QReviewImage extends EntityPathBase { - - private static final long serialVersionUID = -307574244L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QReviewImage reviewImage = new QReviewImage("reviewImage"); - - public final NumberPath id = createNumber("id", Long.class); - - public final StringPath imageUrl = createString("imageUrl"); - - public final QReview review; - - public QReviewImage(String variable) { - this(ReviewImage.class, forVariable(variable), INITS); - } - - public QReviewImage(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QReviewImage(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QReviewImage(PathMetadata metadata, PathInits inits) { - this(ReviewImage.class, metadata, inits); - } - - public QReviewImage(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.review = inits.isInitialized("review") ? new QReview(forProperty("review"), inits.get("review")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/review/entity/QReviewLike.java b/src/main/generated/ssu/eatssu/domain/review/entity/QReviewLike.java deleted file mode 100644 index cbfbd97a..00000000 --- a/src/main/generated/ssu/eatssu/domain/review/entity/QReviewLike.java +++ /dev/null @@ -1,54 +0,0 @@ -package ssu.eatssu.domain.review.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QReviewLike is a Querydsl query type for ReviewLike - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QReviewLike extends EntityPathBase { - - private static final long serialVersionUID = -2088045898L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QReviewLike reviewLike = new QReviewLike("reviewLike"); - - public final NumberPath id = createNumber("id", Long.class); - - public final QReview review; - - public final ssu.eatssu.domain.user.entity.QUser user; - - public QReviewLike(String variable) { - this(ReviewLike.class, forVariable(variable), INITS); - } - - public QReviewLike(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QReviewLike(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QReviewLike(PathMetadata metadata, PathInits inits) { - this(ReviewLike.class, metadata, inits); - } - - public QReviewLike(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.review = inits.isInitialized("review") ? new QReview(forProperty("review"), inits.get("review")) : null; - this.user = inits.isInitialized("user") ? new ssu.eatssu.domain.user.entity.QUser(forProperty("user"), inits.get("user")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/review/entity/QReviewMenuLike.java b/src/main/generated/ssu/eatssu/domain/review/entity/QReviewMenuLike.java deleted file mode 100644 index 60ffea6b..00000000 --- a/src/main/generated/ssu/eatssu/domain/review/entity/QReviewMenuLike.java +++ /dev/null @@ -1,56 +0,0 @@ -package ssu.eatssu.domain.review.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QReviewMenuLike is a Querydsl query type for ReviewMenuLike - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QReviewMenuLike extends EntityPathBase { - - private static final long serialVersionUID = -1523380939L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QReviewMenuLike reviewMenuLike = new QReviewMenuLike("reviewMenuLike"); - - public final NumberPath id = createNumber("id", Long.class); - - public final BooleanPath isLike = createBoolean("isLike"); - - public final ssu.eatssu.domain.menu.entity.QMenu menu; - - public final QReview review; - - public QReviewMenuLike(String variable) { - this(ReviewMenuLike.class, forVariable(variable), INITS); - } - - public QReviewMenuLike(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QReviewMenuLike(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QReviewMenuLike(PathMetadata metadata, PathInits inits) { - this(ReviewMenuLike.class, metadata, inits); - } - - public QReviewMenuLike(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.menu = inits.isInitialized("menu") ? new ssu.eatssu.domain.menu.entity.QMenu(forProperty("menu"), inits.get("menu")) : null; - this.review = inits.isInitialized("review") ? new QReview(forProperty("review"), inits.get("review")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/review/entity/QReviews.java b/src/main/generated/ssu/eatssu/domain/review/entity/QReviews.java deleted file mode 100644 index ea2e8760..00000000 --- a/src/main/generated/ssu/eatssu/domain/review/entity/QReviews.java +++ /dev/null @@ -1,38 +0,0 @@ -package ssu.eatssu.domain.review.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QReviews is a Querydsl query type for Reviews - */ -@Generated("com.querydsl.codegen.DefaultEmbeddableSerializer") -public class QReviews extends BeanPath { - - private static final long serialVersionUID = -1567053356L; - - public static final QReviews reviews1 = new QReviews("reviews1"); - - public final ListPath reviews = this.createList("reviews", Review.class, QReview.class, PathInits.DIRECT2); - - public QReviews(String variable) { - super(Reviews.class, forVariable(variable)); - } - - public QReviews(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QReviews(PathMetadata metadata) { - super(Reviews.class, metadata); - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/user/department/entity/QCollege.java b/src/main/generated/ssu/eatssu/domain/user/department/entity/QCollege.java deleted file mode 100644 index 3a3d8850..00000000 --- a/src/main/generated/ssu/eatssu/domain/user/department/entity/QCollege.java +++ /dev/null @@ -1,44 +0,0 @@ -package ssu.eatssu.domain.user.department.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QCollege is a Querydsl query type for College - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QCollege extends EntityPathBase { - - private static final long serialVersionUID = 498379863L; - - public static final QCollege college = new QCollege("college"); - - public final ListPath departments = this.createList("departments", Department.class, QDepartment.class, PathInits.DIRECT2); - - public final NumberPath id = createNumber("id", Long.class); - - public final StringPath name = createString("name"); - - public final ListPath partnershipColleges = this.createList("partnershipColleges", ssu.eatssu.domain.partnership.entity.PartnershipCollege.class, ssu.eatssu.domain.partnership.entity.QPartnershipCollege.class, PathInits.DIRECT2); - - public QCollege(String variable) { - super(College.class, forVariable(variable)); - } - - public QCollege(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QCollege(PathMetadata metadata) { - super(College.class, metadata); - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/user/department/entity/QDepartment.java b/src/main/generated/ssu/eatssu/domain/user/department/entity/QDepartment.java deleted file mode 100644 index 1b27df61..00000000 --- a/src/main/generated/ssu/eatssu/domain/user/department/entity/QDepartment.java +++ /dev/null @@ -1,55 +0,0 @@ -package ssu.eatssu.domain.user.department.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QDepartment is a Querydsl query type for Department - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QDepartment extends EntityPathBase { - - private static final long serialVersionUID = 2118910098L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QDepartment department = new QDepartment("department"); - - public final QCollege college; - - public final NumberPath id = createNumber("id", Long.class); - - public final StringPath name = createString("name"); - - public final ListPath partnershipDepartments = this.createList("partnershipDepartments", ssu.eatssu.domain.partnership.entity.PartnershipDepartment.class, ssu.eatssu.domain.partnership.entity.QPartnershipDepartment.class, PathInits.DIRECT2); - - public QDepartment(String variable) { - this(Department.class, forVariable(variable), INITS); - } - - public QDepartment(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QDepartment(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QDepartment(PathMetadata metadata, PathInits inits) { - this(Department.class, metadata, inits); - } - - public QDepartment(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.college = inits.isInitialized("college") ? new QCollege(forProperty("college")) : null; - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/user/entity/QBaseTimeEntity.java b/src/main/generated/ssu/eatssu/domain/user/entity/QBaseTimeEntity.java deleted file mode 100644 index 338242d9..00000000 --- a/src/main/generated/ssu/eatssu/domain/user/entity/QBaseTimeEntity.java +++ /dev/null @@ -1,39 +0,0 @@ -package ssu.eatssu.domain.user.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; - - -/** - * QBaseTimeEntity is a Querydsl query type for BaseTimeEntity - */ -@Generated("com.querydsl.codegen.DefaultSupertypeSerializer") -public class QBaseTimeEntity extends EntityPathBase { - - private static final long serialVersionUID = -848113765L; - - public static final QBaseTimeEntity baseTimeEntity = new QBaseTimeEntity("baseTimeEntity"); - - public final DateTimePath createdDate = createDateTime("createdDate", java.time.LocalDateTime.class); - - public final DateTimePath modifiedDate = createDateTime("modifiedDate", java.time.LocalDateTime.class); - - public QBaseTimeEntity(String variable) { - super(BaseTimeEntity.class, forVariable(variable)); - } - - public QBaseTimeEntity(Path path) { - super(path.getType(), path.getMetadata()); - } - - public QBaseTimeEntity(PathMetadata metadata) { - super(BaseTimeEntity.class, metadata); - } - -} - diff --git a/src/main/generated/ssu/eatssu/domain/user/entity/QUser.java b/src/main/generated/ssu/eatssu/domain/user/entity/QUser.java deleted file mode 100644 index 55fcbacf..00000000 --- a/src/main/generated/ssu/eatssu/domain/user/entity/QUser.java +++ /dev/null @@ -1,83 +0,0 @@ -package ssu.eatssu.domain.user.entity; - -import static com.querydsl.core.types.PathMetadataFactory.*; - -import com.querydsl.core.types.dsl.*; - -import com.querydsl.core.types.PathMetadata; -import javax.annotation.processing.Generated; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.dsl.PathInits; - - -/** - * QUser is a Querydsl query type for User - */ -@Generated("com.querydsl.codegen.DefaultEntitySerializer") -public class QUser extends EntityPathBase { - - private static final long serialVersionUID = -2112045787L; - - private static final PathInits INITS = PathInits.DIRECT2; - - public static final QUser user = new QUser("user"); - - public final QBaseTimeEntity _super = new QBaseTimeEntity(this); - - //inherited - public final DateTimePath createdDate = _super.createdDate; - - public final StringPath credentials = createString("credentials"); - - public final ssu.eatssu.domain.user.department.entity.QDepartment department; - - public final StringPath email = createString("email"); - - public final NumberPath id = createNumber("id", Long.class); - - //inherited - public final DateTimePath modifiedDate = _super.modifiedDate; - - public final StringPath nickname = createString("nickname"); - - public final ListPath partnershipLikes = this.createList("partnershipLikes", ssu.eatssu.domain.partnership.entity.PartnershipLike.class, ssu.eatssu.domain.partnership.entity.QPartnershipLike.class, PathInits.DIRECT2); - - public final EnumPath provider = createEnum("provider", ssu.eatssu.domain.auth.entity.OAuthProvider.class); - - public final StringPath providerId = createString("providerId"); - - public final ListPath reviewLikes = this.createList("reviewLikes", ssu.eatssu.domain.review.entity.ReviewLike.class, ssu.eatssu.domain.review.entity.QReviewLike.class, PathInits.DIRECT2); - - public final ListPath reviewReports = this.createList("reviewReports", ssu.eatssu.domain.review.entity.Report.class, ssu.eatssu.domain.review.entity.QReport.class, PathInits.DIRECT2); - - public final ListPath reviews = this.createList("reviews", ssu.eatssu.domain.review.entity.Review.class, ssu.eatssu.domain.review.entity.QReview.class, PathInits.DIRECT2); - - public final EnumPath role = createEnum("role", Role.class); - - public final EnumPath status = createEnum("status", UserStatus.class); - - public final ListPath userInquiries = this.createList("userInquiries", ssu.eatssu.domain.inquiry.entity.Inquiry.class, ssu.eatssu.domain.inquiry.entity.QInquiry.class, PathInits.DIRECT2); - - public QUser(String variable) { - this(User.class, forVariable(variable), INITS); - } - - public QUser(Path path) { - this(path.getType(), path.getMetadata(), PathInits.getFor(path.getMetadata(), INITS)); - } - - public QUser(PathMetadata metadata) { - this(metadata, PathInits.getFor(metadata, INITS)); - } - - public QUser(PathMetadata metadata, PathInits inits) { - this(User.class, metadata, inits); - } - - public QUser(Class type, PathMetadata metadata, PathInits inits) { - super(type, metadata, inits); - this.department = inits.isInitialized("department") ? new ssu.eatssu.domain.user.department.entity.QDepartment(forProperty("department"), inits.get("department")) : null; - } - -} - From 2b7ae95cf22b5f0eed2a4ced79aa07e026712a3f Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Thu, 20 Feb 2025 14:42:02 +0900 Subject: [PATCH 180/399] =?UTF-8?q?docs:=20application=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=EC=9D=80=20=ED=8C=80=20=EB=82=B4=EB=B6=80=EC=97=90?= =?UTF-8?q?=EC=84=9C=EB=A7=8C=20=EA=B3=B5=EC=9C=A0=EB=90=98=EB=8A=94=20?= =?UTF-8?q?=EC=A0=90=20=EB=AA=85=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/README.md b/.github/README.md index f36a45de..27b3172d 100644 --- a/.github/README.md +++ b/.github/README.md @@ -1,6 +1,7 @@ ![eatssu_main](https://github.com/user-attachments/assets/ae21de9d-8333-46fb-b0ad-d8578f572fda) # EAT-SSU: 숭실대 학식 리뷰 앱 + **EAT-SSU는 숭실대학교 학생들의 즐겁고 편리한 학식 이용을 꿈꾸는 프로젝트입니다.** - `학생식당`, `도담식당`, `푸드코트`, `스낵코너`, `기숙사 식당`의 모든 메뉴를 비교할 수 있어요. - 학식에 대한 리뷰를 통해 숭실대 학우들과 정보를 공유할 수 있어요. @@ -8,6 +9,11 @@ - [More & Contact](https://hi-jin-1514.notion.site/EAT-SSU-b04aaec9b7814a628c6ef6b3e08c74a3) ## 다운로드 + 2023.11.27~ 서비스 중 - [App Store](https://apps.apple.com/kr/app/eat-ssu-%EC%88%AD%EC%8B%A4%EB%8C%80-%ED%95%99%EC%8B%9D-%EB%A6%AC%EB%B7%B0-%EC%95%B1/id6472618331) -- [Play Store](https://play.google.com/store/apps/details?id=com.eatssu.android) \ No newline at end of file +- [Play Store](https://play.google.com/store/apps/details?id=com.eatssu.android) + +## 개발 조건 + +- `application.yml` 파일은 팀 내부에서만 공유합니다. \ No newline at end of file From 70e10fe1ad62548fd98c053c2554f3c479ea24f9 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Thu, 27 Feb 2025 13:31:28 +0900 Subject: [PATCH 181/399] =?UTF-8?q?docs:=20=EC=A3=BC=EC=84=9D=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ssu/eatssu/global/handler/response/BaseResponse.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java index 7726df38..1e82b2b2 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java @@ -17,11 +17,11 @@ public class BaseResponse { private final int code; @Schema(description = "결과 값") - @JsonInclude(JsonInclude.Include.NON_NULL) //Json으로 응답이 나갈 때 null인 경우 포함되지 않음 + @JsonInclude(JsonInclude.Include.NON_NULL) //JSON으로 응답이 나갈 때 null인 경우 포함되지 않음 private T result; /** - * 정적 팩토리 메서드 + * 정적 팩토리 메서드를 위한 private 생성자 */ private BaseResponse(BaseResponseStatus status) { this.isSuccess = status.isSuccess(); From 003e33c71a206dcf02ee3a356d3c664c3eceb792 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Sat, 1 Mar 2025 10:55:21 +0900 Subject: [PATCH 182/399] =?UTF-8?q?refactor:=20=EC=B2=B4=EC=9D=B4=EB=8B=9D?= =?UTF-8?q?=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EB=A6=AC=ED=8C=A9=ED=84=B0?= =?UTF-8?q?=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 체이닝은 줄로 끊어서 작성하는 것이 가독성에 더욱 좋다고 판단함 --- .../service/PartnershipService.java | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java index 4bf5a8aa..1e666e63 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -1,23 +1,9 @@ package ssu.eatssu.domain.partnership.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.INVALID_TARGET_TYPE; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.MISSING_USER_DEPARTMENT; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_COLLEGE; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_DEPARTMENT; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_PARTNERSHIP; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; - -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.auth.security.CustomUserDetails; -import ssu.eatssu.domain.user.department.entity.College; -import ssu.eatssu.domain.user.department.entity.Department; -import ssu.eatssu.domain.user.department.persistence.CollegeRepository; -import ssu.eatssu.domain.user.department.persistence.DepartmentRepository; import ssu.eatssu.domain.partnership.dto.CreatePartnershipRequest; import ssu.eatssu.domain.partnership.dto.PartnershipDetailResponse; import ssu.eatssu.domain.partnership.dto.PartnershipResponse; @@ -27,10 +13,20 @@ import ssu.eatssu.domain.partnership.entity.PartnershipLike; import ssu.eatssu.domain.partnership.persistence.PartnershipLikeRepository; import ssu.eatssu.domain.partnership.persistence.PartnershipRepository; +import ssu.eatssu.domain.user.department.entity.College; +import ssu.eatssu.domain.user.department.entity.Department; +import ssu.eatssu.domain.user.department.persistence.CollegeRepository; +import ssu.eatssu.domain.user.department.persistence.DepartmentRepository; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; + @Service @RequiredArgsConstructor public class PartnershipService { @@ -104,8 +100,11 @@ public List getUserLikedPartnerships(CustomUserDetails user .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); List likes = partnershipLikeRepository.findAllByUser(user); - return likes.stream().map(PartnershipLike::getPartnership) - .map(PartnershipResponse::fromEntity).collect(Collectors.toList()); + return likes + .stream() + .map(PartnershipLike::getPartnership) + .map(PartnershipResponse::fromEntity) + .collect(Collectors.toList()); } public List getUserDepartmentPartnerships(CustomUserDetails userDetails) { @@ -118,6 +117,10 @@ public List getUserDepartmentPartnerships(CustomUserDetails } College college = department.getCollege(); - return partnershipRepository.findRelevantPartnerships(college, department).stream().map(PartnershipResponse::fromEntity).collect(Collectors.toList()); + return partnershipRepository + .findRelevantPartnerships(college, department) + .stream() + .map(PartnershipResponse::fromEntity) + .collect(Collectors.toList()); } } From cc28ad3f3efb3c4ea53cee48f91c6d99820aad88 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Sat, 1 Mar 2025 11:12:28 +0900 Subject: [PATCH 183/399] =?UTF-8?q?refactor:=20InteliJ=EC=9D=98=20Reformat?= =?UTF-8?q?=20Code=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 96 +++++++++---------- .../controller/AuthenticationController.java | 5 +- .../controller/ManageCategoryController.java | 2 +- .../controller/ManageFixMenuController.java | 3 +- .../eatssu/domain/admin/dto/MenuSection.java | 2 +- .../eatssu/domain/admin/dto/PageWrapper.java | 7 +- .../persistence/LoadInquiryRepository.java | 1 + .../admin/persistence/LoadMealRepository.java | 6 +- .../admin/service/ManageMealService.java | 2 +- .../ssu/eatssu/domain/auth/dto/AppleKeys.java | 12 +-- .../auth/infrastructure/SecurityUtil.java | 3 +- .../auth/presentation/OAuthController.java | 28 +++--- .../auth/security/CustomUserDetails.java | 2 +- .../security/CustomUserDetailsService.java | 2 +- .../auth/security/JwtTokenProvider.java | 1 - .../auth/security/UserPrincipalDto.java | 2 +- .../domain/auth/service/OAuthService.java | 29 +++--- .../inquiry/repository/InquiryRepository.java | 2 +- .../ssu/eatssu/domain/menu/entity/Meal.java | 1 - .../ssu/eatssu/domain/menu/entity/Menu.java | 2 +- .../menu/entity/constants/TimePart.java | 9 +- .../menu/persistence/MealMenuRepository.java | 3 +- .../persistence/MenuCategoryRepository.java | 3 +- .../dto/response/MealDetailResponse.java | 14 +-- .../dto/response/MenusInMealResponse.java | 8 +- .../presentation/rest/MealController.java | 92 +++++++++--------- .../presentation/rest/MenuController.java | 18 ++-- .../domain/menu/service/MealService.java | 65 ++++++------- .../domain/menu/service/MenuService.java | 44 ++++----- .../dto/CreatePartnershipRequest.java | 3 +- .../dto/PartnershipDetailResponse.java | 7 +- .../partnership/dto/PartnershipResponse.java | 7 +- .../partnership/entity/Partnership.java | 19 +--- .../entity/PartnershipCollege.java | 9 +- .../entity/PartnershipDepartment.java | 9 +- .../partnership/entity/PartnershipLike.java | 9 +- .../partnership/entity/RestaurantType.java | 3 +- .../PartnershipLikeRepository.java | 6 +- .../persistence/PartnershipRepository.java | 15 +-- .../presentation/PartnershipController.java | 10 +- .../domain/rating/entity/RatingCountMap.java | 12 +-- .../domain/rating/entity/ReviewRating.java | 12 +-- .../domain/report/entity/ReportStatus.java | 9 +- .../report/presentation/ReportController.java | 13 ++- .../report/repository/ReportRepository.java | 2 +- .../domain/report/service/ReportService.java | 18 ++-- .../domain/restaurant/entity/Restaurant.java | 10 +- .../review/dto/CreateMealReviewRequest.java | 5 +- .../domain/review/dto/MealReviewResponse.java | 9 +- .../domain/review/dto/MenuReviewResponse.java | 19 ++-- .../eatssu/domain/review/dto/RatingsDto.java | 5 +- .../review/dto/ReviewCreateRequest.java | 10 +- .../domain/review/dto/ReviewDetail.java | 40 ++++---- .../domain/review/dto/ReviewRatingCount.java | 3 +- .../review/dto/ReviewUpdateRequest.java | 18 ++-- .../review/dto/UpdateMealReviewRequest.java | 3 +- .../eatssu/domain/review/entity/Report.java | 16 ++-- .../eatssu/domain/review/entity/Review.java | 4 +- .../domain/review/entity/ReviewImage.java | 2 +- .../domain/review/entity/ReviewLike.java | 9 +- .../domain/review/entity/ReviewMenuLike.java | 23 ++--- .../eatssu/domain/review/entity/Reviews.java | 7 +- .../presentation/MealReviewController.java | 16 +--- .../repository/ReviewLikeRepository.java | 3 +- .../repository/ReviewMenuLikeRepository.java | 3 +- .../review/repository/ReviewRepository.java | 4 +- .../repository/ReviewRepositoryCustom.java | 2 +- .../repository/ReviewRepositoryImpl.java | 6 +- .../review/service/MealReviewService.java | 32 +++---- .../domain/slack/entity/SlackChannel.java | 2 +- .../domain/slice/dto/SliceResponse.java | 2 +- .../domain/slice/service/SliceService.java | 67 ++++++------- .../user/department/entity/College.java | 13 +-- .../user/department/entity/Department.java | 16 +--- .../persistence/CollegeRepository.java | 3 +- .../persistence/DepartmentRepository.java | 3 +- .../domain/user/dto/MyMealReviewResponse.java | 9 +- .../domain/user/dto/MyReviewDetail.java | 4 +- .../user/dto/NicknameUpdateRequest.java | 2 +- .../ssu/eatssu/domain/user/entity/User.java | 12 +-- .../user/presentation/UserController.java | 68 +++++++------ .../user/repository/UserRepository.java | 2 + .../domain/user/service/UserService.java | 13 ++- .../domain/user/util/UserAliasUtil.java | 3 +- .../eatssu/global/config/SwaggerConfig.java | 18 ++-- .../handler/GlobalExceptionHandler.java | 91 +++++++++--------- .../handler/response/BaseResponseStatus.java | 12 +-- .../ssu/eatssu/global/util/S3Uploader.java | 8 +- src/main/resources/static/css/style.css | 7 +- 89 files changed, 590 insertions(+), 641 deletions(-) diff --git a/build.gradle b/build.gradle index dfdd9116..8817ac9e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,93 +1,91 @@ -import javax.tools.JavaCompiler - plugins { - id 'java' - id 'org.springframework.boot' version '3.0.4' - id 'io.spring.dependency-management' version '1.1.0' + id 'java' + id 'org.springframework.boot' version '3.0.4' + id 'io.spring.dependency-management' version '1.1.0' } group = 'ssu' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' -bootJar{ - archivesBaseName = 'EatSsu' - archiveFileName = 'eat-ssu.jar' - archiveVersion = "0.0.1" +bootJar { + archivesBaseName = 'EatSsu' + archiveFileName = 'eat-ssu.jar' + archiveVersion = "0.0.1" } configurations { - compileOnly { - extendsFrom annotationProcessor - } + compileOnly { + extendsFrom annotationProcessor + } } repositories { - mavenCentral() + mavenCentral() } dependencies { - implementation 'org.springframework.boot:spring-boot-starter-data-jpa' - implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.jetbrains:annotations:20.1.0' - implementation 'org.springframework.boot:spring-boot-starter-security' - implementation 'org.hibernate.validator:hibernate-validator:8.0.0.Final' + implementation 'org.springframework.boot:spring-boot-starter-security' + implementation 'org.hibernate.validator:hibernate-validator:8.0.0.Final' - // Lombok - annotationProcessor 'org.projectlombok:lombok' - compileOnly 'org.projectlombok:lombok' + // Lombok + annotationProcessor 'org.projectlombok:lombok' + compileOnly 'org.projectlombok:lombok' - developmentOnly 'org.springframework.boot:spring-boot-devtools' + developmentOnly 'org.springframework.boot:spring-boot-devtools' - runtimeOnly 'com.mysql:mysql-connector-j' + runtimeOnly 'com.mysql:mysql-connector-j' - testImplementation 'org.springframework.boot:spring-boot-starter-test' - testImplementation 'org.springframework.security:spring-security-test' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testImplementation 'org.springframework.security:spring-security-test' - implementation 'com.h2database:h2' + implementation 'com.h2database:h2' - //openApi - implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' + //openApi + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' - //jwt - implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2' - runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2' - runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2' + //jwt + implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2' + runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2' + runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2' - //httpClient - implementation 'org.apache.httpcomponents.client5:httpclient5:5.3-alpha1' + //httpClient + implementation 'org.apache.httpcomponents.client5:httpclient5:5.3-alpha1' - // Querydsl 추가 - implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' - annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" - annotationProcessor "jakarta.annotation:jakarta.annotation-api" - annotationProcessor "jakarta.persistence:jakarta.persistence-api" + // Querydsl 추가 + implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' + annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" + annotationProcessor "jakarta.annotation:jakarta.annotation-api" + annotationProcessor "jakarta.persistence:jakarta.persistence-api" - //S3 - implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' + //S3 + implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' - //slack - implementation("com.slack.api:bolt:1.35.0") - implementation("com.slack.api:bolt-servlet:1.35.0") - implementation("com.slack.api:bolt-jetty:1.35.0") - implementation("org.slf4j:slf4j-simple:1.7.36") + //slack + implementation("com.slack.api:bolt:1.35.0") + implementation("com.slack.api:bolt-servlet:1.35.0") + implementation("com.slack.api:bolt-jetty:1.35.0") + implementation("org.slf4j:slf4j-simple:1.7.36") } tasks.named('test') { - useJUnitPlatform() + useJUnitPlatform() } def generated = 'src/main/generated' tasks.withType(JavaCompile) { - options.getGeneratedSourceOutputDirectory().set(file(generated)) + options.getGeneratedSourceOutputDirectory().set(file(generated)) } sourceSets { - main.java.srcDirs += [generated] + main.java.srcDirs += [generated] } clean { - delete file('src/main/generated') + delete file('src/main/generated') } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java b/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java index 43eed660..8291506c 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java @@ -3,7 +3,10 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; import ssu.eatssu.domain.admin.dto.LoginRequest; import ssu.eatssu.domain.admin.service.AuthenticationService; import ssu.eatssu.domain.user.dto.Tokens; diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java index 3d092553..3dbc566d 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java @@ -18,7 +18,7 @@ public class ManageCategoryController { @ResponseBody @PostMapping("/") public BaseResponse register(@RequestParam Restaurant restaurant, - @RequestBody RegisterCategoryRequest request) { + @RequestBody RegisterCategoryRequest request) { manageCategoryService.register(restaurant, request); return BaseResponse.success(); } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java index 65a9d6a9..ed4bfcd7 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java @@ -2,7 +2,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.admin.dto.MenuBoards; import ssu.eatssu.domain.admin.dto.RegisterFixMenuRequest; @@ -37,7 +36,7 @@ public BaseResponse register(@RequestParam Restaurant restaurant, @ResponseBody @PatchMapping("/{menuId}") public BaseResponse update(@PathVariable Long menuId, - @RequestBody UpdateFixMenuRequest request) { + @RequestBody UpdateFixMenuRequest request) { manageFixMenuService.updateMenu(menuId, request); return BaseResponse.success(); } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java index 7d35e12b..48aeaad0 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java @@ -5,7 +5,7 @@ import java.util.ArrayList; import java.util.List; -public record MenuSection(Long categoryId, String categoryName, List menuLines) implements SectionInBoard { +public record MenuSection(Long categoryId, String categoryName, List menuLines) implements SectionInBoard { public MenuSection(MenuCategory category) { this(category.getId(), category.getName(), new ArrayList<>()); } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java b/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java index bb3cc814..4f17e0eb 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java @@ -4,9 +4,10 @@ import java.util.List; -public record PageWrapper(List content, int totalPages, long totalElements, int number, int size,int numberOfElements, - boolean isFirst, boolean isLast){ +public record PageWrapper(List content, int totalPages, long totalElements, int number, int size, + int numberOfElements, + boolean isFirst, boolean isLast) { public PageWrapper(Page page) { - this(page.getContent(), page.getTotalPages(), page.getTotalElements(), page.getNumber(), page.getSize(),page.getNumberOfElements(), page.isFirst(), page.isLast()); + this(page.getContent(), page.getTotalPages(), page.getTotalElements(), page.getNumber(), page.getSize(), page.getNumberOfElements(), page.isFirst(), page.isLast()); } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java index b6ce49bd..361ff218 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java @@ -31,6 +31,7 @@ private JPAQuery countInquiries() { .select(inquiry.count()) .from(inquiry); } + private List fetchInquiries(Pageable pageable) { return queryFactory .selectFrom(inquiry) diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java index 01172ce9..66f25d68 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java @@ -7,9 +7,11 @@ import org.springframework.stereotype.Repository; import ssu.eatssu.domain.admin.dto.BriefMenu; import ssu.eatssu.domain.admin.dto.MealInfo; -import ssu.eatssu.domain.menu.entity.*; -import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.menu.entity.QMeal; +import ssu.eatssu.domain.menu.entity.QMealMenu; +import ssu.eatssu.domain.menu.entity.QMenu; +import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; import java.util.Date; diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java index e0846d9e..e746e415 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java @@ -117,7 +117,7 @@ public void delete(Long mealId) { private void deleteUnusedMenus(List menuIds) { menuIds.forEach(menuId -> { - if(loadMealRepository.countMealMenuByMenuId(menuId)==0){ + if (loadMealRepository.countMealMenuByMenuId(menuId) == 0) { manageMenuRepository.deleteById(menuId); } }); diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java b/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java index 8c2f5674..ac9387db 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java @@ -11,6 +11,12 @@ public class AppleKeys { private List keys; + public Optional findKeyBy(String kid, String alg) { + return this.keys.stream() + .filter(key -> key.getKid().equals(kid) && key.getAlg().equals(alg)) + .findFirst(); + } + @Getter @NoArgsConstructor public static class Key { @@ -22,10 +28,4 @@ public static class Key { private String e; } - - public Optional findKeyBy(String kid, String alg) { - return this.keys.stream() - .filter(key -> key.getKid().equals(kid) && key.getAlg().equals(alg)) - .findFirst(); - } } diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java index 604d1a8f..62e3f845 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java @@ -1,6 +1,5 @@ package ssu.eatssu.domain.auth.infrastructure; -import org.springframework.security.access.AuthorizationServiceException; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; @@ -20,7 +19,7 @@ public static UserPrincipalDto getLoginUserPrincipal() { } } - public static Authentication getLoginUser(){ + public static Authentication getLoginUser() { return SecurityContextHolder.getContext().getAuthentication(); } diff --git a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java index 5f93410a..57970be0 100644 --- a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java @@ -1,7 +1,5 @@ package ssu.eatssu.domain.auth.presentation; -import static ssu.eatssu.domain.auth.infrastructure.SecurityUtil.getLoginUser; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -15,11 +13,13 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import ssu.eatssu.domain.auth.service.OAuthService; -import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; +import ssu.eatssu.domain.auth.service.OAuthService; import ssu.eatssu.domain.user.dto.Tokens; +import ssu.eatssu.global.handler.response.BaseResponse; + +import static ssu.eatssu.domain.auth.infrastructure.SecurityUtil.getLoginUser; @Slf4j @RestController @@ -31,11 +31,11 @@ public class OAuthController { private final OAuthService oauthService; @Operation(summary = "카카오 회원가입, 로그인 [인증 토큰 필요 X]", description = """ - 카카오 회원가입, 로그인 API 입니다.

- 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. - """) + 카카오 회원가입, 로그인 API 입니다.

+ 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "카카오 회원가입/로그인 성공") + @ApiResponse(responseCode = "200", description = "카카오 회원가입/로그인 성공") }) @PostMapping("/kakao") public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest request) { @@ -44,12 +44,12 @@ public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest req } @Operation(summary = "애플 회원가입, 로그인 [인증 토큰 필요 X]", description = """ - 애플 로그인, 회원가입 API 입니다.

- 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. - """) + 애플 로그인, 회원가입 API 입니다.

+ 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "애플 회원가입/로그인 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "애플 회원가입/로그인 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping("/apple") public BaseResponse appleLogin(@Valid @RequestBody AppleLoginRequest request) { @@ -59,7 +59,7 @@ public BaseResponse appleLogin(@Valid @RequestBody AppleLoginRequest req @Operation(summary = "토큰 재발급", description = "accessToken, refreshToken 재발급 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "토큰 재발급 성공") + @ApiResponse(responseCode = "200", description = "토큰 재발급 성공") }) @PostMapping("/reissue/token") public BaseResponse refreshToken() { diff --git a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java index 5f7c3570..69d46322 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java @@ -18,7 +18,7 @@ public class CustomUserDetails implements UserDetails { private final String credentials; private final GrantedAuthority role; - public CustomUserDetails(User user){ + public CustomUserDetails(User user) { this.id = user.getId(); this.email = user.getEmail(); this.credentials = user.getCredentials(); diff --git a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java index 99ead803..5158c602 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java @@ -20,7 +20,7 @@ public class CustomUserDetailsService implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) { User user = userRepository.findByEmail(username) - .orElseThrow(()-> new BaseException(BaseResponseStatus.NOT_FOUND_USER)); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_USER)); return new CustomUserDetails(user); } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java index 90476af0..9a507f0d 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java @@ -8,7 +8,6 @@ import io.jsonwebtoken.io.Decoders; import io.jsonwebtoken.security.Keys; import jakarta.annotation.PostConstruct; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; diff --git a/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java b/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java index ad36c65c..320a3016 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java @@ -14,7 +14,7 @@ public class UserPrincipalDto { private String email; private String role; - public static UserPrincipalDto from(CustomUserDetails userDetails){ + public static UserPrincipalDto from(CustomUserDetails userDetails) { return UserPrincipalDto.builder() .id(userDetails.getId()) .email(userDetails.getEmail()) diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java index db77c689..23102bbf 100644 --- a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java @@ -1,8 +1,6 @@ package ssu.eatssu.domain.auth.service; -import static ssu.eatssu.domain.auth.entity.OAuthProvider.*; - import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -12,15 +10,18 @@ import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; +import ssu.eatssu.domain.auth.dto.OAuthInfo; import ssu.eatssu.domain.auth.entity.AppleAuthenticator; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.JwtTokenProvider; +import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; -import ssu.eatssu.domain.auth.dto.OAuthInfo; -import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.domain.user.service.UserService; +import static ssu.eatssu.domain.auth.entity.OAuthProvider.APPLE; +import static ssu.eatssu.domain.auth.entity.OAuthProvider.KAKAO; + @Slf4j @Service @@ -36,26 +37,26 @@ public class OAuthService { public Tokens kakaoLogin(KakaoLoginRequest request) { User user = userRepository.findByProviderId(request.providerId()) - .orElseGet( - () -> userService.join(request.email(), KAKAO, request.providerId())); + .orElseGet( + () -> userService.join(request.email(), KAKAO, request.providerId())); return generateOauthJwtTokens(user.getEmail(), KAKAO, - request.providerId()); + request.providerId()); } public Tokens appleLogin(AppleLoginRequest request) { OAuthInfo oAuthInfo = appleAuthenticator.getOAuthInfoByIdentityToken( - request.identityToken()); + request.identityToken()); User user = userRepository.findByProviderId(oAuthInfo.providerId()) - .orElseGet(() -> userService.join(oAuthInfo.email(), APPLE, - oAuthInfo.providerId())); + .orElseGet(() -> userService.join(oAuthInfo.email(), APPLE, + oAuthInfo.providerId())); //todo 이메일 갱신의 이유? updateAppleUserEmail(user, oAuthInfo.email()); return generateOauthJwtTokens(user.getEmail(), APPLE, - oAuthInfo.providerId()); + oAuthInfo.providerId()); } /** @@ -88,13 +89,13 @@ private Tokens generateOauthJwtTokens(String email, OAuthProvider provider, Stri // email, credentials 를 기반으로 Authentication 객체 생성 // 이때 authentication 은 인증 여부를 확인하는 authenticated 값이 false UsernamePasswordAuthenticationToken authenticationToken = - new UsernamePasswordAuthenticationToken(email, - makeOauthCredentials(provider, providerId)); + new UsernamePasswordAuthenticationToken(email, + makeOauthCredentials(provider, providerId)); // 실제 검증 (사용자 비밀번호 체크) // authenticate 메서드 실행 => CustomUserDetailsService 에서 만든 loadUserByUsername 메서드 실행 Authentication authentication = authenticationManagerBuilder.getObject() - .authenticate(authenticationToken); + .authenticate(authenticationToken); // 인증 정보를 바탕으로 JWT 토큰 생성 return jwtTokenProvider.generateTokens(authentication); diff --git a/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java b/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java index f8f444ae..8dd6d21f 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java @@ -3,5 +3,5 @@ import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.inquiry.entity.Inquiry; -public interface InquiryRepository extends JpaRepository{ +public interface InquiryRepository extends JpaRepository { } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index b6c9b0d1..1fd7fc88 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -5,7 +5,6 @@ import lombok.Getter; import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; -import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index 46f32450..3aa0a36b 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -60,7 +60,7 @@ public static Menu createVariable(String name, Restaurant restaurant) { } public static Menu createFixed(String name, Restaurant restaurant, Integer price, - MenuCategory category) { + MenuCategory category) { return new Menu(name, restaurant, price, category); } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java b/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java index 020a6a10..31d78dd6 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java @@ -1,9 +1,10 @@ package ssu.eatssu.domain.menu.entity.constants; import com.fasterxml.jackson.annotation.JsonCreator; -import java.util.Arrays; import lombok.Getter; +import java.util.Arrays; + @Getter public enum TimePart { MORNING("조식"), @@ -19,8 +20,8 @@ public enum TimePart { @JsonCreator public static TimePart from(String description) { return Arrays.stream(TimePart.values()) - .filter(d -> d.getDescription().equals(description)) - .findAny() - .orElseThrow(IllegalArgumentException::new); + .filter(d -> d.getDescription().equals(description)) + .findAny() + .orElseThrow(IllegalArgumentException::new); } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java index 272f8851..4ddb5c3c 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java @@ -1,6 +1,5 @@ package ssu.eatssu.domain.menu.persistence; -import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -8,6 +7,8 @@ import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; +import java.util.List; + public interface MealMenuRepository extends JpaRepository { @Query("SELECT mm.menu FROM MealMenu mm WHERE mm.meal IN :meals") List findMenusByMeals(List meals); diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java index 677559a8..ffc0fcdd 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java @@ -1,10 +1,11 @@ package ssu.eatssu.domain.menu.persistence; -import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.util.List; + public interface MenuCategoryRepository extends JpaRepository { List findAllByRestaurant(Restaurant restaurant); diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java index 8e98dfe2..ec3bb35f 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java @@ -29,15 +29,15 @@ public class MealDetailResponse { public static MealDetailResponse from(Meal meal, Double mainRating) { List briefMenus = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(BriefMenuResponse::new) - .toList(); + .map(MealMenu::getMenu) + .map(BriefMenuResponse::new) + .toList(); return new MealDetailResponse( - meal.getId(), - meal.getPrice(), - mainRating, - briefMenus + meal.getId(), + meal.getPrice(), + mainRating, + briefMenus ); } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java index 10097f0b..00d32895 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java @@ -12,7 +12,7 @@ @Getter @NoArgsConstructor @AllArgsConstructor -@Schema(title ="식단 속 메뉴 정보 리스트") +@Schema(title = "식단 속 메뉴 정보 리스트") public class MenusInMealResponse { @Schema(description = "식단 속 메뉴 목록", example = "[]") @@ -20,9 +20,9 @@ public class MenusInMealResponse { public static MenusInMealResponse from(Meal meal) { List menusInformation = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(BriefMenuResponse::new) - .toList(); + .map(MealMenu::getMenu) + .map(BriefMenuResponse::new) + .toList(); return new MenusInMealResponse(menusInformation); } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java index 6270c425..b64b6999 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java @@ -11,11 +11,11 @@ import lombok.RequiredArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; +import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.menu.presentation.dto.request.CreateMealRequest; import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateWithPriceRequest; import ssu.eatssu.domain.menu.presentation.dto.response.MealDetailResponse; import ssu.eatssu.domain.menu.presentation.dto.response.MenusInMealResponse; -import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.menu.service.MealService; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.restaurant.entity.RestaurantType; @@ -36,22 +36,22 @@ public class MealController { private final MealService mealService; @Operation(summary = "식단 추가 [인증 토큰 필요 X]", description = """ - 식단을 추가하는 API 입니다.

- 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

- 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) - """) + 식단을 추가하는 API 입니다.

+ 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

+ 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 추가 성공"), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "식단 추가 성공"), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping("") public BaseResponse createMeal( - @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, - @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, - @RequestBody CreateMealRequest mealCreateRequest) { + @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, + @RequestBody CreateMealRequest mealCreateRequest) { if (RestaurantType.isFixedType(restaurant)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } @@ -61,23 +61,23 @@ public BaseResponse createMeal( } @Operation(summary = "식단 추가 [인증 토큰 필요 X]", description = """ - 식단을 추가하는 API 입니다.

- 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

- 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) - 가격을 외부에서 입력받습니다. - """) + 식단을 추가하는 API 입니다.

+ 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

+ 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) + 가격을 외부에서 입력받습니다. + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 추가 성공"), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "식단 추가 성공"), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PostMapping("/with-price") public BaseResponse createMealWithPrice( - @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, - @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, - @RequestBody MealCreateWithPriceRequest request) { + @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, + @RequestBody MealCreateWithPriceRequest request) { if (RestaurantType.isFixedType(restaurant)) { throw new BaseException(NOT_SUPPORT_RESTAURANT); } @@ -87,49 +87,49 @@ public BaseResponse createMealWithPrice( } @Operation(summary = "변동 메뉴 식단 리스트 조회 [인증 토큰 필요 X]", description = """ - 변동 메뉴 식단 리스트를 조회하는 API 입니다. - 변동 메뉴 식당 (학생 식당, 도담, 기숙사 식당) 의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회합니다. - 일반적으로 학생식당과 도담의 경우 식단 여러 개가 조회되고 기숙사식당은 한 개만 조회됩니다.) - """) + 변동 메뉴 식단 리스트를 조회하는 API 입니다. + 변동 메뉴 식당 (학생 식당, 도담, 기숙사 식당) 의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회합니다. + 일반적으로 학생식당과 도담의 경우 식단 여러 개가 조회되고 기숙사식당은 한 개만 조회됩니다.) + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "지원 하지 않는 식당 (고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "지원 하지 않는 식당 (고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("") public BaseResponse> getMealDetail( - @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당 이름") @RequestParam("restaurant") Restaurant restaurant, - @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { + @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "식당 이름") @RequestParam("restaurant") Restaurant restaurant, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { return BaseResponse.success( - mealService.getMealDetailsByDateAndRestaurantAndTimePart(date, restaurant, timePart)); + mealService.getMealDetailsByDateAndRestaurantAndTimePart(date, restaurant, timePart)); } @Operation(summary = "식단 삭제 [인증 토큰 필요 X]", description = "식단을 삭제하는 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 삭제 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "식단 삭제 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @DeleteMapping("/{mealId}") public BaseResponse deleteMeal( - @Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { + @Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { mealService.deleteByMealId(mealId); return BaseResponse.success(); } @Operation(summary = "메뉴 정보 리스트 조회 [인증 토큰 필요 X]", description = """ - 메뉴 정보 리스트를 조회하는 API 입니다.

- 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") - """) + 메뉴 정보 리스트를 조회하는 API 입니다.

+ 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("/{mealId}/menus-info") public BaseResponse getMenusInMeal(@Parameter(description = "mealId") - @PathVariable("mealId") Long mealId) { + @PathVariable("mealId") Long mealId) { return BaseResponse.success(mealService.getMenusInMealByMealId(mealId)); } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java index e117f72a..7c125034 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java @@ -25,20 +25,20 @@ public class MenuController { private final MenuService menuService; @Operation(summary = "고정 메뉴 리스트 조회 [인증 토큰 필요 X]", - description = - """ - 고정 메뉴 리스트를 조회하는 API 입니다. - 메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 리스트를 조회합니다. - """ + description = + """ + 고정 메뉴 리스트를 조회하는 API 입니다. + 메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 리스트를 조회합니다. + """ ) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping public BaseResponse getMenus( - @RequestParam("restaurant") Restaurant restaurant) { + @RequestParam("restaurant") Restaurant restaurant) { return BaseResponse.success(menuService.getMenusByRestaurant(restaurant)); } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MealService.java b/src/main/java/ssu/eatssu/domain/menu/service/MealService.java index 669a3cad..49814b32 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MealService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MealService.java @@ -1,10 +1,5 @@ package ssu.eatssu.domain.menu.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; - -import java.util.Date; -import java.util.List; -import java.util.Optional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -24,6 +19,12 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.util.Date; +import java.util.List; +import java.util.Optional; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; + @Slf4j @Service @RequiredArgsConstructor @@ -37,26 +38,26 @@ public class MealService { public MenusInMealResponse getMenusInMealByMealId(Long mealId) { Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); return MenusInMealResponse.from(meal); } public List getMealDetailsByDateAndRestaurantAndTimePart( - Date date, Restaurant restaurant, TimePart timePart) { + Date date, Restaurant restaurant, TimePart timePart) { validateMealRestaurant(restaurant); List meals = findMealsByDateAndTimePartAndRestaurant(date, timePart, restaurant); return meals.stream() - .map(meal -> MealDetailResponse.from(meal, - mealRatingService.getMainRatingAverage(meal.getId()))) - .toList(); + .map(meal -> MealDetailResponse.from(meal, + mealRatingService.getMainRatingAverage(meal.getId()))) + .toList(); } private List findMealsByDateAndTimePartAndRestaurant(Date date, TimePart timePart, - Restaurant restaurant) { + Restaurant restaurant) { return mealRepository.findAllByDateAndTimePartAndRestaurant(date, timePart, restaurant); } @@ -68,13 +69,13 @@ private void validateMealRestaurant(Restaurant restaurant) { @Transactional public Long createMeal(Date date, Restaurant restaurant, TimePart timePart, - CreateMealRequest request) { + CreateMealRequest request) { return createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), null); } @Transactional public Long createMealWithPrice(Date date, Restaurant restaurant, TimePart timePart, - MealCreateWithPriceRequest request) { + MealCreateWithPriceRequest request) { return createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), request.price()); } @@ -93,22 +94,22 @@ private Long createMealWithOptionalPrice(Date date, Restaurant restaurant, TimeP } private Optional getExistingMealId(Date date, TimePart timePart, Restaurant restaurant, - List menuNames) { + List menuNames) { List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(date, timePart, restaurant); List sortedRequestMenuNames = menuNames.stream() - .sorted() - .toList(); + .sorted() + .toList(); return meals.stream() - .filter(meal -> { - List sortedMenuNames = meal.getMenuNames().stream() - .sorted() - .toList(); - return sortedMenuNames.equals(sortedRequestMenuNames); - }) - .findFirst() - .map(Meal::getId); + .filter(meal -> { + List sortedMenuNames = meal.getMenuNames().stream() + .sorted() + .toList(); + return sortedMenuNames.equals(sortedRequestMenuNames); + }) + .findFirst() + .map(Meal::getId); } private void addMenusToMeal(Meal meal, Restaurant restaurant, List menuNames) { @@ -120,9 +121,9 @@ private void addMenusToMeal(Meal meal, Restaurant restaurant, List menuN private void createMealMenu(Meal meal, Menu menu) { MealMenu mealMenu = MealMenu.builder() - .menu(menu) - .meal(meal) - .build(); + .menu(menu) + .meal(meal) + .build(); mealMenuRepository.save(mealMenu); meal.addMealMenu(mealMenu); @@ -131,11 +132,11 @@ private void createMealMenu(Meal meal, Menu menu) { @Transactional public void deleteByMealId(Long mealId) { Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); List menus = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .toList(); + .map(MealMenu::getMenu) + .toList(); mealRepository.delete(meal); mealRepository.flush(); @@ -145,7 +146,7 @@ public void deleteByMealId(Long mealId) { private void deleteUnusedMenus(List menus) { menus.stream() - .filter(menu -> menu.getMealMenus().isEmpty()) - .forEach(menuService::deleteMenu); + .filter(menu -> menu.getMealMenus().isEmpty()) + .forEach(menuService::deleteMenu); } } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index e14426fd..4d53068b 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -1,19 +1,17 @@ package ssu.eatssu.domain.menu.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; - import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; -import ssu.eatssu.domain.menu.presentation.dto.response.CategoryWithMenusResponse; -import ssu.eatssu.domain.menu.presentation.dto.response.MenuRestaurantResponse; -import ssu.eatssu.domain.menu.presentation.dto.response.MenuResponse; -import ssu.eatssu.domain.menu.entity.*; import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.menu.persistence.MenuCategoryRepository; import ssu.eatssu.domain.menu.persistence.MenuRepository; +import ssu.eatssu.domain.menu.presentation.dto.response.CategoryWithMenusResponse; +import ssu.eatssu.domain.menu.presentation.dto.response.MenuResponse; +import ssu.eatssu.domain.menu.presentation.dto.response.MenuRestaurantResponse; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.restaurant.entity.RestaurantType; import ssu.eatssu.global.handler.response.BaseException; @@ -21,6 +19,8 @@ import java.util.List; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; + @Slf4j @Service @@ -32,6 +32,12 @@ public class MenuService { private final MenuCategoryRepository menuCategoryRepository; private final MenuRatingService menuRatingService; + private static void validateMenuRestaurant(Restaurant restaurant) { + if (RestaurantType.isVariableType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } + } + public MenuRestaurantResponse getMenusByRestaurant(Restaurant restaurant) { validateMenuRestaurant(restaurant); @@ -41,7 +47,7 @@ public MenuRestaurantResponse getMenusByRestaurant(Restaurant restaurant) { for (MenuCategory category : categories) { List menus = getMenuResponsesByRestaurantAndCategory(restaurant, - category); + category); response.add(CategoryWithMenusResponse.of(category.getName(), menus)); } @@ -54,31 +60,25 @@ private List findCategoriesByRestaurant(Restaurant restaurant) { @NotNull private List getMenuResponsesByRestaurantAndCategory(Restaurant restaurant, - MenuCategory category) { + MenuCategory category) { return menuRepository.findAllByRestaurantAndCategory(restaurant, category) - .stream() - .filter(Menu::isContinued) - .map(menu -> MenuResponse.from(menu, - menuRatingService.getMainRatingAverage(menu.getId()))) - .toList(); - } - - private static void validateMenuRestaurant(Restaurant restaurant) { - if (RestaurantType.isVariableType(restaurant)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } + .stream() + .filter(Menu::isContinued) + .map(menu -> MenuResponse.from(menu, + menuRatingService.getMainRatingAverage(menu.getId()))) + .toList(); } @Transactional public Menu createOrGetMenu(String menuName, Restaurant restaurant) { return menuRepository.existsByNameAndRestaurant(menuName, restaurant) ? - findMenu(menuName, restaurant) : - menuRepository.save(Menu.createVariable(menuName, restaurant)); + findMenu(menuName, restaurant) : + menuRepository.save(Menu.createVariable(menuName, restaurant)); } private Menu findMenu(String addMenuName, Restaurant restaurant) { Menu menu = menuRepository.findByNameAndRestaurant(addMenuName, restaurant) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); return menu; } diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java index 5de75685..29f50394 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java @@ -1,13 +1,14 @@ package ssu.eatssu.domain.partnership.dto; import io.swagger.v3.oas.annotations.media.Schema; -import java.time.LocalDate; import lombok.AllArgsConstructor; import lombok.Getter; import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipType; import ssu.eatssu.domain.partnership.entity.RestaurantType; +import java.time.LocalDate; + @Schema(title = "제휴 등록") @Getter @AllArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java index cdf87a36..66fa24cf 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java @@ -1,14 +1,15 @@ package ssu.eatssu.domain.partnership.dto; -import java.time.LocalDate; -import java.util.List; -import java.util.stream.Collectors; import lombok.AllArgsConstructor; import lombok.Getter; import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipType; import ssu.eatssu.domain.partnership.entity.RestaurantType; +import java.time.LocalDate; +import java.util.List; +import java.util.stream.Collectors; + @Getter @AllArgsConstructor public class PartnershipDetailResponse { diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java index 431fa5ba..c2b2975c 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java @@ -1,14 +1,15 @@ package ssu.eatssu.domain.partnership.dto; -import java.time.LocalDate; -import java.util.List; -import java.util.stream.Collectors; import lombok.AllArgsConstructor; import lombok.Getter; import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipType; import ssu.eatssu.domain.partnership.entity.RestaurantType; +import java.time.LocalDate; +import java.util.List; +import java.util.stream.Collectors; + @Getter @AllArgsConstructor public class PartnershipResponse { diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java index 36db6b1e..8f8927f1 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java @@ -1,23 +1,12 @@ package ssu.eatssu.domain.partnership.entity; -import jakarta.persistence.CascadeType; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; +import jakarta.persistence.*; +import lombok.*; +import org.hibernate.annotations.Where; + import java.time.LocalDate; import java.util.ArrayList; import java.util.List; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.hibernate.annotations.Where; @Entity @Getter diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java index 2ba00666..0591bc45 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java @@ -1,13 +1,6 @@ package ssu.eatssu.domain.partnership.entity; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; +import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java index 8b9c243b..5ff0b221 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java @@ -1,13 +1,6 @@ package ssu.eatssu.domain.partnership.entity; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; +import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java index 210b4ac2..1bdc1c1b 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java @@ -1,13 +1,6 @@ package ssu.eatssu.domain.partnership.entity; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; +import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java index d0af2505..a39fcc88 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java @@ -4,7 +4,8 @@ public enum RestaurantType { RESTAURANT("음식점"), CAFE("카페"); - private final String type;; + private final String type; + ; RestaurantType(String type) { this.type = type; diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java index 8aa7495f..041de913 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java @@ -1,13 +1,15 @@ package ssu.eatssu.domain.partnership.persistence; -import java.util.List; -import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipLike; import ssu.eatssu.domain.user.entity.User; +import java.util.List; +import java.util.Optional; + public interface PartnershipLikeRepository extends JpaRepository { Optional findByUserAndPartnership(User user, Partnership partnership); + List findAllByUser(User user); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java index 84a59853..120c7a24 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java @@ -1,6 +1,5 @@ package ssu.eatssu.domain.partnership.persistence; -import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -8,13 +7,15 @@ import ssu.eatssu.domain.user.department.entity.College; import ssu.eatssu.domain.user.department.entity.Department; +import java.util.List; + public interface PartnershipRepository extends JpaRepository { @Query("SELECT DISTINCT p FROM Partnership p " + - "LEFT JOIN p.partnershipColleges pc " + - "LEFT JOIN pc.college c " + - "LEFT JOIN p.partnershipDepartments pd " + - "LEFT JOIN pd.department d " + - "WHERE (c = :college OR d = :department OR (c IS NOT NULL AND c.name = '총학'))") + "LEFT JOIN p.partnershipColleges pc " + + "LEFT JOIN pc.college c " + + "LEFT JOIN p.partnershipDepartments pd " + + "LEFT JOIN pd.department d " + + "WHERE (c = :college OR d = :department OR (c IS NOT NULL AND c.name = '총학'))") List findRelevantPartnerships(@Param("college") College college, - @Param("department") Department department); + @Param("department") Department department); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java index 213c2326..699c989e 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java +++ b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java @@ -6,15 +6,9 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.CreatePartnershipRequest; import ssu.eatssu.domain.partnership.dto.PartnershipDetailResponse; @@ -22,6 +16,8 @@ import ssu.eatssu.domain.partnership.service.PartnershipService; import ssu.eatssu.global.handler.response.BaseResponse; +import java.util.List; + @RestController @RequestMapping("/partnerships") @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java index f17ed226..e39bca62 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java @@ -4,23 +4,23 @@ import java.util.Map; public class RatingCountMap { - + private Map ratingCountMap; - + public RatingCountMap() { this.ratingCountMap = new HashMap<>(); this.init(); - + } - - private void init(){ + + private void init() { this.ratingCountMap.put(1, 0); this.ratingCountMap.put(2, 0); this.ratingCountMap.put(3, 0); this.ratingCountMap.put(4, 0); this.ratingCountMap.put(5, 0); } - + public void setRatingCount(Integer rating, Integer count) { this.ratingCountMap.put(rating, count); } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java b/src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java index ac33b9eb..611e0074 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java @@ -26,7 +26,7 @@ public static void resetAll() { public static ReviewRating fromValue(int value) { for (ReviewRating RATING : ReviewRating.values()) { if (RATING.value == value) { - return RATING; + return RATING; } } throw new IllegalArgumentException("Invalid ratings value: " + value); @@ -34,11 +34,11 @@ public static ReviewRating fromValue(int value) { public static ReviewRatingCount toResponse() { return new ReviewRatingCount( - RATING_ONE.getCount(), - RATING_TWO.getCount(), - RATING_THREE.getCount(), - RATING_FOUR.getCount(), - RATING_FIVE.getCount() + RATING_ONE.getCount(), + RATING_TWO.getCount(), + RATING_THREE.getCount(), + RATING_FOUR.getCount(), + RATING_FIVE.getCount() ); } diff --git a/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java b/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java index 56fad27d..a83988f2 100644 --- a/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java +++ b/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java @@ -1,9 +1,10 @@ package ssu.eatssu.domain.report.entity; import com.fasterxml.jackson.annotation.JsonCreator; -import java.util.Arrays; import lombok.Getter; +import java.util.Arrays; + @Getter public enum ReportStatus { PENDING("대기 중"), @@ -21,8 +22,8 @@ public enum ReportStatus { @JsonCreator public static ReportStatus from(final String description) { return Arrays.stream(ReportStatus.values()) - .filter(v -> v.getDescription().equals(description)) - .findAny() - .orElseThrow(IllegalArgumentException::new); + .filter(v -> v.getDescription().equals(description)) + .findAny() + .orElseThrow(IllegalArgumentException::new); } } diff --git a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java index 0bb97dab..1808736f 100644 --- a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java +++ b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java @@ -10,13 +10,12 @@ import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.domain.report.dto.ReportCreateRequest; import ssu.eatssu.domain.report.dto.ReportTypeList; -import ssu.eatssu.domain.review.entity.Report; import ssu.eatssu.domain.report.service.ReportService; +import ssu.eatssu.domain.review.entity.Report; import ssu.eatssu.domain.slack.entity.SlackChannel; import ssu.eatssu.domain.slack.entity.SlackMessageFormat; -import ssu.eatssu.domain.report.dto.ReportCreateRequest; - import ssu.eatssu.domain.slack.service.SlackService; import ssu.eatssu.global.handler.response.BaseResponse; @@ -42,14 +41,14 @@ public BaseResponse getReportType() { @Operation(summary = "리뷰 신고하기", description = "리뷰를 신고하는 API 입니다.") @PostMapping("") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 신고 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "리뷰 신고 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) public BaseResponse reportReview(@RequestBody ReportCreateRequest createReportRequest, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { + @AuthenticationPrincipal CustomUserDetails customUserDetails) { Report report = reportService.reportReview(customUserDetails, createReportRequest); slackService.sendSlackMessage(SlackMessageFormat.sendReport(report), - SlackChannel.REPORT_CHANNEL); + SlackChannel.REPORT_CHANNEL); return BaseResponse.success(); } diff --git a/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java b/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java index 1fd89e20..58d0a066 100644 --- a/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java +++ b/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java @@ -3,5 +3,5 @@ import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.review.entity.Report; -public interface ReportRepository extends JpaRepository{ +public interface ReportRepository extends JpaRepository { } diff --git a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java index ace8599d..90bded6d 100644 --- a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java +++ b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java @@ -1,23 +1,23 @@ package ssu.eatssu.domain.report.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; - import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.domain.report.dto.ReportCreateRequest; import ssu.eatssu.domain.report.dto.ReportTypeList; -import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.review.entity.Report; -import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.report.entity.ReportStatus; import ssu.eatssu.domain.report.repository.ReportRepository; +import ssu.eatssu.domain.review.entity.Report; +import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.repository.ReviewRepository; +import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; -import ssu.eatssu.domain.report.dto.ReportCreateRequest; import ssu.eatssu.global.handler.response.BaseException; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; + @RequiredArgsConstructor @Service @@ -30,10 +30,10 @@ public class ReportService { public Report reportReview(CustomUserDetails userDetails, ReportCreateRequest request) { User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Review review = reviewRepository.findById(request.reviewId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); Report report = Report.create(user, review, request, ReportStatus.PENDING); return reportRepository.save(report); diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index 6a0e6167..af46a5f0 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -20,6 +20,11 @@ public enum Restaurant { private String restaurantName; private Integer restaurantPrice; + Restaurant(String restaurantName, Integer price) { + this.restaurantName = restaurantName; + this.restaurantPrice = price; + } + @JsonCreator public static Restaurant from(String restaurantName) { return Arrays.stream(Restaurant.values()) @@ -27,9 +32,4 @@ public static Restaurant from(String restaurantName) { .findAny() .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); } - - Restaurant(String restaurantName, Integer price) { - this.restaurantName = restaurantName; - this.restaurantPrice = price; - } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java index 5a39dd5b..abf2c706 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java @@ -1,8 +1,6 @@ package ssu.eatssu.domain.review.dto; import io.swagger.v3.oas.annotations.media.Schema; -import java.util.List; -import java.util.stream.Collectors; import lombok.AllArgsConstructor; import lombok.Getter; import ssu.eatssu.domain.menu.entity.Meal; @@ -10,6 +8,9 @@ import ssu.eatssu.domain.review.entity.ReviewImage; import ssu.eatssu.domain.user.entity.User; +import java.util.List; +import java.util.stream.Collectors; + @Schema(title = "리뷰 작성") @Getter @AllArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java index 90bf50bc..e3e87d3b 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java @@ -1,10 +1,6 @@ package ssu.eatssu.domain.review.dto; import io.swagger.v3.oas.annotations.media.Schema; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -12,6 +8,11 @@ import ssu.eatssu.domain.review.entity.ReviewMenuLike; import ssu.eatssu.domain.user.util.UserAliasUtil; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + @AllArgsConstructor @Builder @Schema(title = "리뷰 상세") diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java index 8014816f..df38b001 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java @@ -4,7 +4,6 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; - import ssu.eatssu.domain.menu.entity.Menu; @Schema(title = "메뉴 리뷰 정보(평점 등등)") @@ -32,15 +31,15 @@ public class MenuReviewResponse implements ReviewInformationResponse { private ReviewRatingCount reviewRatingCount; public static MenuReviewResponse of(Menu menu, - RatingAverages ratingAverages, - ReviewRatingCount reviewRatingCount) { + RatingAverages ratingAverages, + ReviewRatingCount reviewRatingCount) { return MenuReviewResponse.builder() - .menuName(menu.getName()) - .totalReviewCount(menu.getTotalReviewCount()) - .mainRating(ratingAverages.mainRating()) - .amountRating(ratingAverages.amountRating()) - .tasteRating(ratingAverages.tasteRating()) - .reviewRatingCount(reviewRatingCount) - .build(); + .menuName(menu.getName()) + .totalReviewCount(menu.getTotalReviewCount()) + .mainRating(ratingAverages.mainRating()) + .amountRating(ratingAverages.amountRating()) + .tasteRating(ratingAverages.tasteRating()) + .reviewRatingCount(reviewRatingCount) + .build(); } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java b/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java index 25283c1e..357155ad 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java @@ -2,14 +2,17 @@ import ssu.eatssu.domain.rating.entity.Ratings; -public record RatingsDto (Ratings ratings){ + +public record RatingsDto(Ratings ratings) { public Integer getMainRating() { return ratings.getMainRating(); } + public Integer getTasteRating() { return ratings.getTasteRating(); } + public Integer getAmountRating() { return ratings.getAmountRating(); } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java index 507f7358..b6fead60 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java @@ -45,11 +45,11 @@ public ReviewCreateRequest(int mainRating, int amountRating, int tasteRating, St public Review toEntity(User user, Menu menu) { Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); return Review.builder() - .user(user) - .content(this.content) - .ratings(ratings) - .menu(menu) - .build(); + .user(user) + .content(this.content) + .ratings(ratings) + .menu(menu) + .build(); } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java index 219cd9ff..c6f3e4ff 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java @@ -54,35 +54,35 @@ public static ReviewDetail from(Review review, Long userId) { review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); ReviewDetailBuilder builder = ReviewDetail.builder() - .reviewId(review.getId()) - .mainRating(review.getRatings().getMainRating()) - .amountRating(review.getRatings().getAmountRating()) - .tasteRating(review.getRatings().getTasteRating()) - .writedAt(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .imageUrls(imageUrls) - .menu(review.getMenu().getName()); + .reviewId(review.getId()) + .mainRating(review.getRatings().getMainRating()) + .amountRating(review.getRatings().getAmountRating()) + .tasteRating(review.getRatings().getTasteRating()) + .writedAt(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imageUrls(imageUrls) + .menu(review.getMenu().getName()); if (review.getUser() == null) { return builder - .writerId(null) - .writerNickname("알 수 없음") - .isWriter(false) - .build(); + .writerId(null) + .writerNickname("알 수 없음") + .isWriter(false) + .build(); } if (review.getUser().getId().equals(userId)) { return builder - .writerId(review.getUser().getId()) - .writerNickname(review.getUser().getNickname()) - .isWriter(true) - .build(); + .writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(true) + .build(); } return builder - .writerId(review.getUser().getId()) - .writerNickname(review.getUser().getNickname()) - .isWriter(false) - .build(); + .writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(false) + .build(); } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java index 46ac274d..09ebfb14 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java @@ -1,10 +1,11 @@ package ssu.eatssu.domain.review.dto; +import ssu.eatssu.domain.review.entity.Review; + import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import ssu.eatssu.domain.review.entity.Review; //COMMENT: 더 좋은 매개변수 명이 있을 것 같은데 제 머리로는 이게 한계입니다... 멋진 변수명으로 바꿔주세요 public record ReviewRatingCount(long oneStarCount, long twoStarCount, long threeStarCount, long fourStarCount, diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java index 6ce837d5..fd2b6565 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java @@ -6,18 +6,18 @@ @Schema(title = "리뷰 수정(글)") public record ReviewUpdateRequest( - @Schema(description = "평점-메인", example = "4") - Integer mainRating, + @Schema(description = "평점-메인", example = "4") + Integer mainRating, - @Schema(description = "평점-양", example = "4") - Integer amountRating, + @Schema(description = "평점-양", example = "4") + Integer amountRating, - @Schema(description = "평점-맛", example = "4") - Integer tasteRating, + @Schema(description = "평점-맛", example = "4") + Integer tasteRating, - @Max(150) - @Schema(description = "한줄평", example = "맛있어용") - String content + @Max(150) + @Schema(description = "한줄평", example = "맛있어용") + String content ) { } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java index e1e79bb9..dce5e9ad 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java @@ -2,10 +2,11 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; -import java.util.List; import lombok.AllArgsConstructor; import lombok.Getter; +import java.util.List; + @Schema(title = "리뷰 수정(글)") @Getter @AllArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Report.java b/src/main/java/ssu/eatssu/domain/review/entity/Report.java index 33cb68bb..6af16f01 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Report.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Report.java @@ -3,10 +3,10 @@ import jakarta.persistence.*; import lombok.*; import ssu.eatssu.domain.report.dto.ReportCreateRequest; +import ssu.eatssu.domain.report.entity.ReportStatus; import ssu.eatssu.domain.report.entity.ReportType; import ssu.eatssu.domain.user.entity.BaseTimeEntity; import ssu.eatssu.domain.user.entity.User; -import ssu.eatssu.domain.report.entity.ReportStatus; @Builder @Entity @@ -37,13 +37,13 @@ public class Report extends BaseTimeEntity { private ReportStatus status; public static Report create(User user, Review review, ReportCreateRequest request, - ReportStatus status) { + ReportStatus status) { return Report.builder() - .user(user) - .review(review) - .reportType(request.reportType()) - .content(request.content()) - .status(status) - .build(); + .user(user) + .review(review) + .reportType(request.reportType()) + .content(request.content()) + .status(status) + .build(); } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index 06213bf9..27cf5370 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -1,8 +1,6 @@ package ssu.eatssu.domain.review.entity; import jakarta.persistence.*; -import java.util.Map; -import java.util.stream.Collectors; import lombok.*; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -12,6 +10,8 @@ import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @Entity diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java index 0c7cc3e2..7b236b7e 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java @@ -15,7 +15,7 @@ public class ReviewImage { @Column(name = "review_image_id") private Long id; - @ManyToOne(fetch=FetchType.LAZY) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "review_id") private Review review; diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java index 4d6006fb..620dbc0b 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java @@ -1,13 +1,6 @@ package ssu.eatssu.domain.review.entity; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; +import jakarta.persistence.*; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java index 794f7d19..400ca1fd 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java @@ -1,18 +1,7 @@ package ssu.eatssu.domain.review.entity; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; +import jakarta.persistence.*; +import lombok.*; import ssu.eatssu.domain.menu.entity.Menu; @Entity @@ -37,10 +26,6 @@ public class ReviewMenuLike { @Column(nullable = false) private Boolean isLike; // true : 좋아요, false : 싫어요 - public void updateLike(Boolean like) { - isLike = like; - } - public static ReviewMenuLike create(Review review, Menu menu, Boolean isLike) { return ReviewMenuLike.builder() .review(review) @@ -49,6 +34,10 @@ public static ReviewMenuLike create(Review review, Menu menu, Boolean isLike) { .build(); } + public void updateLike(Boolean like) { + isLike = like; + } + public void resetMenuLikeStatus() { menu.cancelLike(this.isLike); } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java index e5db862b..c8ba98ad 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java @@ -3,13 +3,14 @@ import jakarta.persistence.CascadeType; import jakarta.persistence.Embeddable; import jakarta.persistence.OneToMany; -import java.util.ArrayList; -import java.util.List; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import ssu.eatssu.domain.rating.entity.ReviewRating; +import java.util.ArrayList; +import java.util.List; + @Getter @NoArgsConstructor(access = AccessLevel.PUBLIC) @Embeddable @@ -39,7 +40,7 @@ public int getTotalMainRating() { public int getTotalAmountRating() { return this.reviews.stream().mapToInt(review -> review.getRatings().getAmountRating()) - .sum(); + .sum(); } public int getTotalTasteRating() { diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java index 276869ae..54450583 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java @@ -13,15 +13,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; @@ -108,9 +100,9 @@ public BaseResponse> getReviews( }) @PatchMapping("/{reviewId}") public BaseResponse updateReview(@Parameter(description = "reviewId") - @PathVariable("reviewId") Long reviewId, - @RequestBody UpdateMealReviewRequest request, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { + @PathVariable("reviewId") Long reviewId, + @RequestBody UpdateMealReviewRequest request, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { mealReviewService.updateReview(customUserDetails, reviewId, request); return BaseResponse.success(); } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java index 1c669c7a..c70d0bf0 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java @@ -1,11 +1,12 @@ package ssu.eatssu.domain.review.repository; -import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewLike; import ssu.eatssu.domain.user.entity.User; +import java.util.Optional; + public interface ReviewLikeRepository extends JpaRepository { Optional findByReviewAndUser(Review review, User user); } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java index 3c835fc2..7b592f36 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java @@ -1,10 +1,11 @@ package ssu.eatssu.domain.review.repository; -import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewMenuLike; +import java.util.List; + public interface ReviewMenuLikeRepository extends JpaRepository { List findByReview(Review review); } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java index ede57af5..1f37af70 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java @@ -27,6 +27,6 @@ public interface ReviewRepository extends JpaRepository, ReviewRep @Query("SELECT r FROM Review r WHERE r.meal.id IN :mealIds AND (:lastReviewId IS NULL OR r.id < :lastReviewId) ") Page findReviewsByMealIds(@Param("mealIds") List mealIds, - @Param("lastReviewId") Long lastReviewId, - Pageable pageable); + @Param("lastReviewId") Long lastReviewId, + Pageable pageable); } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java index 027beb82..b1bb44db 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java @@ -2,9 +2,9 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; -import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; public interface ReviewRepositoryCustom { diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java index eefb2307..89568357 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java @@ -8,14 +8,14 @@ import org.springframework.data.domain.Slice; import org.springframework.data.domain.SliceImpl; import org.springframework.stereotype.Repository; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.review.entity.QReview; import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.user.entity.User; import java.util.ArrayList; import java.util.List; -import ssu.eatssu.domain.menu.entity.Meal; -import ssu.eatssu.domain.menu.entity.Menu; -import ssu.eatssu.domain.user.entity.User; @Repository @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java index 9e019fd0..29babc59 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java @@ -1,15 +1,5 @@ package ssu.eatssu.domain.review.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MEAL; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; - -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -23,12 +13,7 @@ import ssu.eatssu.domain.menu.persistence.MealRepository; import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; -import ssu.eatssu.domain.review.dto.MealReviewResponse; -import ssu.eatssu.domain.review.dto.MenuLikeRequest; -import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; -import ssu.eatssu.domain.review.dto.ReviewRatingCount; -import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; +import ssu.eatssu.domain.review.dto.*; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewLike; import ssu.eatssu.domain.review.repository.ReviewLikeRepository; @@ -39,6 +24,13 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; + @RequiredArgsConstructor @Service public class MealReviewService { @@ -109,7 +101,7 @@ public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { * 특정 식단 리뷰 리스트 조회 */ public SliceResponse findReviews(Long mealId, Long lastReviewId, Pageable pageable, - CustomUserDetails userDetails) { + CustomUserDetails userDetails) { if (!mealRepository.existsById(mealId)) { throw new BaseException(NOT_FOUND_MEAL); } @@ -155,8 +147,8 @@ public void updateReview(CustomUserDetails userDetails, Long reviewId, UpdateMea Map menuLikes = request.getMenuLikes().stream() .collect(Collectors.toMap(menuLike -> menuRepository.findById(menuLike.getMenuId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)), - MenuLikeRequest::getIsLike)); + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)), + MenuLikeRequest::getIsLike)); review.update(request.getContent(), request.getRating(), menuLikes); reviewRepository.save(review); @@ -185,7 +177,7 @@ public void deleteReview(CustomUserDetails userDetails, Long reviewId) { * 내 리뷰 리스트 조회 */ public SliceResponse findMyReviews(CustomUserDetails userDetails, Long lastReviewId, - Pageable pageable) { + Pageable pageable) { User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java index e5e04583..89cec564 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java @@ -12,7 +12,7 @@ public enum SlackChannel { @Getter private String krName; - SlackChannel(String krName){ + SlackChannel(String krName) { this.krName = krName; } } diff --git a/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java b/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java index d919146c..fd82109a 100644 --- a/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java +++ b/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java @@ -1,11 +1,11 @@ package ssu.eatssu.domain.slice.dto; import io.swagger.v3.oas.annotations.media.Schema; -import java.util.Collections; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import java.util.Collections; import java.util.List; @AllArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java index 318468e9..88ccedbb 100644 --- a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java +++ b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java @@ -1,10 +1,5 @@ package ssu.eatssu.domain.slice.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; - -import java.util.List; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; @@ -16,14 +11,20 @@ import ssu.eatssu.domain.menu.persistence.MealRepository; import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.review.dto.ReviewDetail; -import ssu.eatssu.domain.user.dto.MyReviewDetail; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.slice.dto.SliceResponse; +import ssu.eatssu.domain.user.dto.MyReviewDetail; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import java.util.List; +import java.util.stream.Collectors; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; + @Service @RequiredArgsConstructor public class SliceService { @@ -34,38 +35,38 @@ public class SliceService { private final MealRepository mealRepository; public SliceResponse findMyReviews( - CustomUserDetails userDetails, - Pageable pageable, - Long lastReviewId) { + CustomUserDetails userDetails, + Pageable pageable, + Long lastReviewId) { User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, - pageable); + pageable); return convertToMyReviewDetail(sliceReviews); } public SliceResponse findReviews(MenuType menuType, - Long menuId, - Long mealId, - Pageable pageable, - Long lastReviewId, - CustomUserDetails userDetails) { + Long menuId, + Long mealId, + Pageable pageable, + Long lastReviewId, + CustomUserDetails userDetails) { Slice sliceReviews = null; if (menuType == MenuType.FIXED) { Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); sliceReviews = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, - pageable); + pageable); } if (menuType == MenuType.VARIABLE) { Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); sliceReviews = reviewRepository.findAllByMealOrderByIdDesc(meal, lastReviewId, - pageable); + pageable); } Long userId = (userDetails != null) ? userDetails.getId() : null; @@ -73,28 +74,28 @@ public SliceResponse findReviews(MenuType menuType, } private SliceResponse convertToReviewDetail(Slice sliceReviews, - Long userId) { + Long userId) { List reviewDetails = sliceReviews.getContent().stream() - .map(review -> ReviewDetail.from(review, userId)) - .collect(Collectors.toList()); + .map(review -> ReviewDetail.from(review, userId)) + .collect(Collectors.toList()); return SliceResponse.builder() - .numberOfElements(sliceReviews.getNumberOfElements()) - .hasNext(sliceReviews.hasNext()) - .dataList(reviewDetails) - .build(); + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(reviewDetails) + .build(); } private SliceResponse convertToMyReviewDetail(Slice sliceReviews) { List myReviewDetails = sliceReviews.getContent().stream() - .map(MyReviewDetail::from) - .collect(Collectors.toList()); + .map(MyReviewDetail::from) + .collect(Collectors.toList()); return SliceResponse.builder() - .numberOfElements(sliceReviews.getNumberOfElements()) - .hasNext(sliceReviews.hasNext()) - .dataList(myReviewDetails) - .build(); + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(myReviewDetails) + .build(); } } diff --git a/src/main/java/ssu/eatssu/domain/user/department/entity/College.java b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java index 7a9256fb..38fa20d3 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/entity/College.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java @@ -1,19 +1,14 @@ package ssu.eatssu.domain.user.department.entity; -import jakarta.persistence.CascadeType; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; -import java.util.ArrayList; -import java.util.List; +import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import ssu.eatssu.domain.partnership.entity.PartnershipCollege; +import java.util.ArrayList; +import java.util.List; + @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) diff --git a/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java index b46d0aa7..4d75d71a 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java @@ -1,22 +1,14 @@ package ssu.eatssu.domain.user.department.entity; -import jakarta.persistence.CascadeType; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; -import java.util.ArrayList; -import java.util.List; +import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import ssu.eatssu.domain.partnership.entity.PartnershipDepartment; +import java.util.ArrayList; +import java.util.List; + @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) diff --git a/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java b/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java index aea49353..4e7c6d89 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java @@ -1,9 +1,10 @@ package ssu.eatssu.domain.user.department.persistence; -import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.user.department.entity.College; +import java.util.Optional; + public interface CollegeRepository extends JpaRepository { Optional findByName(String name); } diff --git a/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java b/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java index 702d6dc1..942e4063 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java @@ -1,9 +1,10 @@ package ssu.eatssu.domain.user.department.persistence; -import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.user.department.entity.Department; +import java.util.Optional; + public interface DepartmentRepository extends JpaRepository { Optional findByName(String name); } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index e3624180..c3c4a559 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -1,14 +1,15 @@ package ssu.eatssu.domain.user.dto; import io.swagger.v3.oas.annotations.media.Schema; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import ssu.eatssu.domain.review.entity.Review; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + @AllArgsConstructor @Builder @Schema(title = "리뷰 상세 - 내 리뷰 리스트 조회 용") @@ -31,7 +32,7 @@ public class MyMealReviewResponse { public static MyMealReviewResponse from(Review review) { List imgUrlList = new ArrayList<>(); - review.getReviewImages().forEach(i->imgUrlList.add(i.getImageUrl())); + review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); return MyMealReviewResponse.builder() .reviewId(review.getId()) diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java index 6db4e328..ae63ec76 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java @@ -40,10 +40,10 @@ public class MyReviewDetail { @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") private List imgUrlList; - public static MyReviewDetail from(Review review){ + public static MyReviewDetail from(Review review) { List imgUrlList = new ArrayList<>(); - review.getReviewImages().forEach(i->imgUrlList.add(i.getImageUrl())); + review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); return MyReviewDetail.builder() .reviewId(review.getId()) diff --git a/src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java b/src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java index 22743246..10fcaef0 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java @@ -5,6 +5,6 @@ @Schema(title = "닉네임 수정") public record NicknameUpdateRequest( - @NotBlank(message = "닉네임을 입력해주세요.") @Schema(description = "닉네임", example = "jumukzzang") String nickname) { + @NotBlank(message = "닉네임을 입력해주세요.") @Schema(description = "닉네임", example = "jumukzzang") String nickname) { } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index 890f39be..b5ae638d 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -2,20 +2,20 @@ import jakarta.persistence.*; -import java.util.ArrayList; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import org.jetbrains.annotations.NotNull; import ssu.eatssu.domain.auth.entity.OAuthProvider; -import ssu.eatssu.domain.user.department.entity.Department; import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.partnership.entity.PartnershipLike; -import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.Report; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.entity.ReviewLike; +import ssu.eatssu.domain.user.department.entity.Department; +import java.util.ArrayList; import java.util.List; -import ssu.eatssu.domain.review.entity.ReviewLike; @Entity @Getter @@ -84,8 +84,8 @@ private User(@NotNull String email, String nickname, @NotNull Role role, @NotNul * Oauth 회원가입 */ public static User create(@NotNull String email, @NotNull String nickname, @NotNull OAuthProvider provider, - String providerId, - String credentials) { + String providerId, + String credentials) { return new User(email, nickname, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials); } diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 5719584e..8fb02d9a 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -9,7 +9,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.Pageable; @@ -21,17 +20,14 @@ import ssu.eatssu.domain.partnership.dto.PartnershipResponse; import ssu.eatssu.domain.partnership.service.PartnershipService; import ssu.eatssu.domain.review.service.MealReviewService; -import ssu.eatssu.domain.user.dto.DepartmentResponse; -import ssu.eatssu.domain.user.dto.MyMealReviewResponse; -import ssu.eatssu.domain.user.dto.MyReviewDetail; -import ssu.eatssu.domain.user.dto.MyPageResponse; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.domain.slice.service.SliceService; -import ssu.eatssu.domain.user.dto.NicknameUpdateRequest; -import ssu.eatssu.domain.user.dto.UpdateDepartmentRequest; +import ssu.eatssu.domain.user.dto.*; import ssu.eatssu.domain.user.service.UserService; import ssu.eatssu.global.handler.response.BaseResponse; +import java.util.List; + @RestController @RequiredArgsConstructor @RequestMapping("/users") @@ -44,48 +40,48 @@ public class UserController { private final PartnershipService partnershipService; @Operation(summary = "이메일 중복 체크", description = """ - 이메일 중복 체크 API 입니다.

- 중복되지 않은 이메일이면 true 를 반환합니다 - """) + 이메일 중복 체크 API 입니다.

+ 중복되지 않은 이메일이면 true 를 반환합니다 + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "중복되지 않은 이메일") + @ApiResponse(responseCode = "200", description = "중복되지 않은 이메일") }) @PostMapping("/validate/email/{email}") //todo: 중복인 경우 error throw, 중복 아니면 ApiReposne return public BaseResponse validateDuplicatedEmail( - @Parameter(description = "이메일") @PathVariable String email) { + @Parameter(description = "이메일") @PathVariable String email) { return BaseResponse.success(userService.validateDuplicatedEmail(email)); } @Operation(summary = "닉네임 중복 체크", description = """ - 닉네임 중복 체크 API 입니다.

- 중복되지 않은 닉네임이면 true 를 반환합니다 - """) + 닉네임 중복 체크 API 입니다.

+ 중복되지 않은 닉네임이면 true 를 반환합니다 + """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임") + @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임") }) @GetMapping("/validate/nickname") public BaseResponse validateDuplicatedNickname(@Parameter(description = "닉네임") - @RequestParam(value = "nickname") String nickname) { + @RequestParam(value = "nickname") String nickname) { return BaseResponse.success(userService.validateDuplicatedNickname(nickname)); } @Operation(summary = "닉네임 수정", description = "닉네임 수정 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "닉네임 수정 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "닉네임 수정 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PatchMapping("/nickname") public BaseResponse updateNickname( - @Valid @RequestBody NicknameUpdateRequest updateNicknameRequest, - @AuthenticationPrincipal CustomUserDetails userDetails) { + @Valid @RequestBody NicknameUpdateRequest updateNicknameRequest, + @AuthenticationPrincipal CustomUserDetails userDetails) { userService.updateNickname(userDetails, updateNicknameRequest); return BaseResponse.success(); } @Operation(summary = "유저 탈퇴", description = "유저 탈퇴 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @DeleteMapping("") public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails userDetails) { @@ -94,17 +90,17 @@ public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("/reviews") public BaseResponse> getMyReviewList( - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { SliceResponse myReviews = sliceService.findMyReviews(customUserDetails, - pageable, - lastReviewId); + pageable, + lastReviewId); return BaseResponse.success(myReviews); } @@ -126,12 +122,12 @@ public BaseResponse> getMyReviews( @Operation(summary = "마이페이지 정보 조회", description = "마이페이지 정보를 조회하는 API 입니다.") @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("/mypage") public BaseResponse getMyPage( - @AuthenticationPrincipal CustomUserDetails customUserDetails) { + @AuthenticationPrincipal CustomUserDetails customUserDetails) { return BaseResponse.success(userService.findMyPage(customUserDetails)); } @@ -174,9 +170,9 @@ public BaseResponse> getUserDepartmentPartnerships(@Au } @Operation(summary = "학과 기입 여부 체크", description = """ - 학과 기입 여부 체크 API 입니다.

- 학과를 기입했으면 true, 아니면 false 를 반환합니다 - """) + 학과 기입 여부 체크 API 입니다.

+ 학과를 기입했으면 true, 아니면 false 를 반환합니다 + """) @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "학과 기입함") }) diff --git a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java index ec57cbf6..ea4f9cf9 100644 --- a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java @@ -7,7 +7,9 @@ public interface UserRepository extends JpaRepository { boolean existsByEmail(String email); + boolean existsByNickname(String nickname); + Optional findByEmail(String email); Optional findByProviderId(String providerId); diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index 8d2745c3..c38b72e3 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -1,11 +1,6 @@ package ssu.eatssu.domain.user.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.MISSING_USER_DEPARTMENT; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_DEPARTMENT; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; - import jakarta.transaction.Transactional; -import java.util.UUID; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.crypto.password.PasswordEncoder; @@ -13,17 +8,21 @@ import org.springframework.stereotype.Service; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.department.entity.Department; import ssu.eatssu.domain.user.department.persistence.DepartmentRepository; import ssu.eatssu.domain.user.dto.DepartmentResponse; import ssu.eatssu.domain.user.dto.MyPageResponse; import ssu.eatssu.domain.user.dto.NicknameUpdateRequest; import ssu.eatssu.domain.user.dto.UpdateDepartmentRequest; -import ssu.eatssu.domain.user.repository.UserRepository; -import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import java.util.UUID; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; + @Slf4j @Service @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java b/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java index bdbee84d..5d7f5e4d 100644 --- a/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java +++ b/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java @@ -1,9 +1,10 @@ package ssu.eatssu.domain.user.util; -import java.util.List; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; +import java.util.List; + public class UserAliasUtil { public static String getUserAlias(User user, List reviews) { if (reviews == null || reviews.isEmpty()) { diff --git a/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java b/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java index d6a7c45f..71ef0602 100644 --- a/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java +++ b/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java @@ -30,23 +30,23 @@ public class SwaggerConfig { @Bean public OpenAPI openAPI() { Info info = new Info() - .version(API_VERSION) - .title(API_NAME) - .description(API_DESCRIPTION); + .version(API_VERSION) + .title(API_NAME) + .description(API_DESCRIPTION); List servers = new ArrayList<>(); servers.add(new Server().url(SERVER_URL).description(SERVER_DESCRIPTION)); SecurityScheme securityScheme = new SecurityScheme() - .type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT") - .in(SecurityScheme.In.HEADER).name("Authorization"); + .type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT") + .in(SecurityScheme.In.HEADER).name("Authorization"); SecurityRequirement securityRequirement = new SecurityRequirement().addList("bearerAuth"); return new OpenAPI() - .components(new Components().addSecuritySchemes("bearerAuth", securityScheme)) - .security(Arrays.asList(securityRequirement)) - .servers(servers) - .info(info); + .components(new Components().addSecuritySchemes("bearerAuth", securityScheme)) + .security(Arrays.asList(securityRequirement)) + .servers(servers) + .info(info); } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java index ee8bf9c7..55f6bdaf 100644 --- a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java @@ -2,9 +2,13 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.TypeMismatchException; -import org.springframework.http.*; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; +import org.springframework.http.ResponseEntity; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.http.converter.HttpMessageNotWritableException; +import org.springframework.lang.NonNull; import org.springframework.web.HttpMediaTypeNotAcceptableException; import org.springframework.web.HttpMediaTypeNotSupportedException; import org.springframework.web.HttpRequestMethodNotSupportedException; @@ -22,7 +26,6 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.global.handler.response.BaseResponseStatus; -import org.springframework.lang.NonNull; /** * 전역 Controller 예외처리 @@ -46,11 +49,11 @@ public ResponseEntity> handleBaseException(BaseException e) { @Override protected ResponseEntity handleHttpRequestMethodNotSupported( @NonNull HttpRequestMethodNotSupportedException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, @NonNull WebRequest request) { return ResponseEntity.status(HttpStatus.METHOD_NOT_ALLOWED).body(BaseResponse.fail( - BaseResponseStatus.METHOD_NOT_ALLOWED)); + BaseResponseStatus.METHOD_NOT_ALLOWED)); } /** @@ -59,11 +62,11 @@ protected ResponseEntity handleHttpRequestMethodNotSupported( @Override protected ResponseEntity handleHttpMediaTypeNotSupported( @NonNull HttpMediaTypeNotSupportedException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, @NonNull WebRequest request) { return ResponseEntity.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE) - .body(BaseResponse.fail(BaseResponseStatus.UNSUPPORTED_MEDIA_TYPE)); + .body(BaseResponse.fail(BaseResponseStatus.UNSUPPORTED_MEDIA_TYPE)); } /** @@ -72,11 +75,11 @@ protected ResponseEntity handleHttpMediaTypeNotSupported( @Override protected ResponseEntity handleHttpMediaTypeNotAcceptable( @NonNull HttpMediaTypeNotAcceptableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, @NonNull WebRequest request) { return ResponseEntity.status(HttpStatus.NOT_ACCEPTABLE) - .body(BaseResponse.fail(BaseResponseStatus.NOT_ACCEPTABLE)); + .body(BaseResponse.fail(BaseResponseStatus.NOT_ACCEPTABLE)); } /** @@ -84,12 +87,12 @@ protected ResponseEntity handleHttpMediaTypeNotAcceptable( */ @Override protected ResponseEntity handleMissingPathVariable( - @NonNull MissingPathVariableException ex, + @NonNull MissingPathVariableException ex, @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, + @NonNull HttpStatusCode status, @NonNull WebRequest request) { return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISSING_PATH_VARIABLE)); + .body(BaseResponse.fail(BaseResponseStatus.MISSING_PATH_VARIABLE)); } /*** @@ -98,11 +101,11 @@ protected ResponseEntity handleMissingPathVariable( @Override protected ResponseEntity handleMissingServletRequestParameter( @NonNull MissingServletRequestParameterException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, @NonNull WebRequest request) { return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PARAM)); + .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PARAM)); } /** @@ -110,12 +113,12 @@ protected ResponseEntity handleMissingServletRequestParameter( */ @Override protected ResponseEntity handleMissingServletRequestPart( - @NonNull MissingServletRequestPartException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, + @NonNull MissingServletRequestPartException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, @NonNull WebRequest request) { return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PART)); + .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PART)); } /** @@ -124,24 +127,24 @@ protected ResponseEntity handleMissingServletRequestPart( @Override protected ResponseEntity handleServletRequestBindingException( @NonNull ServletRequestBindingException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, @NonNull WebRequest request) { return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.REQ_BINDING_FAIL)); + .body(BaseResponse.fail(BaseResponseStatus.REQ_BINDING_FAIL)); } /** - * request @Valid 유효성 체크를 통과하지 못한 경우 + * request @Valid 유효성 체크를 통과하지 못한 경우 */ @Override protected ResponseEntity handleMethodArgumentNotValid( @NonNull MethodArgumentNotValidException ex, - @NonNull HttpHeaders headers, + @NonNull HttpHeaders headers, @NonNull HttpStatusCode status, @NonNull WebRequest request) { return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.FAILED_VALIDATION)); + .body(BaseResponse.fail(BaseResponseStatus.FAILED_VALIDATION)); } /** @@ -151,12 +154,12 @@ protected ResponseEntity handleMethodArgumentNotValid( */ @Override protected ResponseEntity handleNoHandlerFoundException( - @NonNull NoHandlerFoundException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, + @NonNull NoHandlerFoundException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, @NonNull WebRequest request) { return ResponseEntity.status(HttpStatus.NOT_FOUND) - .body(BaseResponse.fail(BaseResponseStatus.NOT_FOUND)); + .body(BaseResponse.fail(BaseResponseStatus.NOT_FOUND)); } /** @@ -164,12 +167,12 @@ protected ResponseEntity handleNoHandlerFoundException( */ @Override protected ResponseEntity handleAsyncRequestTimeoutException( - @NonNull AsyncRequestTimeoutException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, + @NonNull AsyncRequestTimeoutException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, @NonNull WebRequest request) { return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE) - .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_TIME_OUT)); + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_TIME_OUT)); } /** @@ -177,12 +180,12 @@ protected ResponseEntity handleAsyncRequestTimeoutException( */ @Override protected ResponseEntity handleTypeMismatch( - @NonNull TypeMismatchException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, + @NonNull TypeMismatchException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, @NonNull WebRequest request) { return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISMATCH_PARAM_TYPE)); + .body(BaseResponse.fail(BaseResponseStatus.MISMATCH_PARAM_TYPE)); } /** @@ -191,11 +194,11 @@ protected ResponseEntity handleTypeMismatch( @Override protected ResponseEntity handleHttpMessageNotReadable( @NonNull HttpMessageNotReadableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, @NonNull WebRequest request) { return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.BAD_REQUEST)); + .body(BaseResponse.fail(BaseResponseStatus.BAD_REQUEST)); } /** @@ -204,11 +207,11 @@ protected ResponseEntity handleHttpMessageNotReadable( @Override protected ResponseEntity handleHttpMessageNotWritable( @NonNull HttpMessageNotWritableException ex, - @NonNull HttpHeaders headers, + @NonNull HttpHeaders headers, @NonNull HttpStatusCode status, @NonNull WebRequest request) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); } } diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index 016af180..f4aedd06 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -21,10 +21,10 @@ public enum BaseResponseStatus { VALIDATION_ERROR(false, HttpStatus.BAD_REQUEST, 40001, "입력값을 확인해주세요."), MISSING_PATH_VARIABLE(false, HttpStatus.BAD_REQUEST, 40002, "경로 변수가 누락되었습니다."), MISSING_REQUEST_PARAM(false, HttpStatus.BAD_REQUEST, 40003, "쿼리 파라미터가 누락되었습니다."), - MISSING_REQUEST_PART(false, HttpStatus.BAD_REQUEST,40004, "multipart/form-data 파일이 누락되었습니다."), - REQ_BINDING_FAIL(false, HttpStatus.BAD_REQUEST,40005, "잘못된 request 입니다."), - MISMATCH_PARAM_TYPE(false, HttpStatus.BAD_REQUEST,40006, "잘못된 파라미터 타입입니다."), - FAILED_VALIDATION(false, HttpStatus.BAD_REQUEST,40007,"입력값이 누락되었거나, 부적절한 입력 값이 있습니다."), + MISSING_REQUEST_PART(false, HttpStatus.BAD_REQUEST, 40004, "multipart/form-data 파일이 누락되었습니다."), + REQ_BINDING_FAIL(false, HttpStatus.BAD_REQUEST, 40005, "잘못된 request 입니다."), + MISMATCH_PARAM_TYPE(false, HttpStatus.BAD_REQUEST, 40006, "잘못된 파라미터 타입입니다."), + FAILED_VALIDATION(false, HttpStatus.BAD_REQUEST, 40007, "입력값이 누락되었거나, 부적절한 입력 값이 있습니다."), INVALID_DATE(false, HttpStatus.BAD_REQUEST, 40008, "잘못된 날짜형식입니다."), NOT_SUPPORT_RESTAURANT(false, HttpStatus.BAD_REQUEST, 40009, "해당 식당은 지원하지 않습니다."), INVALID_IDENTITY_TOKEN(false, HttpStatus.BAD_REQUEST, 40010, "잘못된 identityToken 입니다."), @@ -36,7 +36,7 @@ public enum BaseResponseStatus { * 401 UNAUTHORIZED 권한없음(인증 실패) */ UNAUTHORIZED(false, HttpStatus.UNAUTHORIZED, 401, "인증에 실패했습니다."), - INVALID_TOKEN(false, HttpStatus.UNAUTHORIZED, 40101, "유효하지 않은 토큰 입니다." ), + INVALID_TOKEN(false, HttpStatus.UNAUTHORIZED, 40101, "유효하지 않은 토큰 입니다."), /** * 403 FORBIDDEN 권한없음(인가 실패) @@ -62,7 +62,7 @@ public enum BaseResponseStatus { /** * 405 METHOD_NOT_ALLOWED 지원하지 않은 method 호출 */ - METHOD_NOT_ALLOWED(false, HttpStatus.METHOD_NOT_ALLOWED,405,"해당 method는 지원하지 않습니다."), + METHOD_NOT_ALLOWED(false, HttpStatus.METHOD_NOT_ALLOWED, 405, "해당 method는 지원하지 않습니다."), /** * 406 NOT_ACCEPTABLE 인식할 수 없는 content type diff --git a/src/main/java/ssu/eatssu/global/util/S3Uploader.java b/src/main/java/ssu/eatssu/global/util/S3Uploader.java index 8691c517..5bbe59d5 100644 --- a/src/main/java/ssu/eatssu/global/util/S3Uploader.java +++ b/src/main/java/ssu/eatssu/global/util/S3Uploader.java @@ -29,7 +29,7 @@ public class S3Uploader { public String upload(MultipartFile multipartFile, String dirName) throws IOException { File uploadFile = convert(multipartFile) - .orElseThrow(() -> new IllegalArgumentException("MultipartFile -> File로 전환이 실패했습니다.")); + .orElseThrow(() -> new IllegalArgumentException("MultipartFile -> File로 전환이 실패했습니다.")); return upload(uploadFile, dirName); } @@ -42,7 +42,7 @@ private String upload(File uploadFile, String dirName) { private String putS3(File uploadFile, String fileName) { amazonS3Client.putObject(new PutObjectRequest(bucket, fileName, uploadFile).withCannedAcl( - CannedAccessControlList.PublicRead)); + CannedAccessControlList.PublicRead)); return amazonS3Client.getUrl(bucket, fileName).toString(); } @@ -56,11 +56,11 @@ private void removeNewFile(File targetFile) { private Optional convert(MultipartFile file) throws IOException { String formatedNow = LocalDateTime.now() - .format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + .format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); File convertFile = new File(formatedNow + file.getOriginalFilename()); if (convertFile.createNewFile()) { try (FileOutputStream fos = new FileOutputStream(convertFile)) { - fos.write(file.getBytes()); + fos.write(file.getBytes()); } return Optional.of(convertFile); } diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css index e2c2921c..6940e3fa 100644 --- a/src/main/resources/static/css/style.css +++ b/src/main/resources/static/css/style.css @@ -22,6 +22,7 @@ html, body { font-style: var(--ios-ios-rate-font-style); } + .onboarding-page .logo { -webkit-text-stroke: 1px #df5757; white-space: nowrap; @@ -68,8 +69,10 @@ html, body { white-space: nowrap; text-align: center; } + .onboarding-page .overlap-group { } + .onboarding-page .rectangle { position: relative; width: 20em; @@ -121,4 +124,6 @@ input { text-align: center; } -input:focus { outline: none; } \ No newline at end of file +input:focus { + outline: none; +} \ No newline at end of file From d1f7728712ad69862a8a2194e963e5c92b13c631 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Sat, 1 Mar 2025 12:01:06 +0900 Subject: [PATCH 184/399] =?UTF-8?q?refactor:=20=EB=B6=8E=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EC=84=B8=EB=AF=B8=EC=BD=9C=EB=A1=A0=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/partnership/entity/RestaurantType.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java index a39fcc88..d849580c 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java @@ -5,7 +5,6 @@ public enum RestaurantType { CAFE("카페"); private final String type; - ; RestaurantType(String type) { this.type = type; From 983d03775345489d667957602569c19ea0abd5b7 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Tue, 4 Mar 2025 20:18:00 +0900 Subject: [PATCH 185/399] =?UTF-8?q?feat:=20Dockerfile=20=EC=84=A4=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 5 ++++ .gitignore | 3 +++ Dockerfile | 25 ++++++++++++++++++++ gradle/wrapper/gradle-wrapper.jar | Bin 60756 -> 43705 bytes gradlew | 37 +++++++++++++++++++----------- gradlew.bat | 23 +++++++++++-------- 6 files changed, 70 insertions(+), 23 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile mode change 100644 => 100755 gradlew diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..8c2ff6b5 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +.git +.gitignore +*.md +build/ +src/test/ \ No newline at end of file diff --git a/.gitignore b/.gitignore index e97e8f6b..47789491 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,6 @@ out/ ### Generated files ### /src/main/generated/ + +### Docker Tar files ### +/eat-ssu.tar diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..aeec73ff --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +# 1단계: 빌드 단계 (Gradle Wrapper를 사용하여 애플리케이션 빌드) +FROM gradle:7.5.1-jdk17 AS builder +WORKDIR /home/gradle/project + +# 소스 코드 전체를 복사 (gradlew, build.gradle, settings.gradle, src/ 등) +COPY --chown=gradle:gradle . . + +# Gradle Wrapper 실행 권한 부여 (실행 권한이 없을 경우를 대비) +RUN chmod +x gradlew + +# Gradle을 사용하여 프로젝트 빌드 (JAR 파일은 build/libs 폴더에 생성됨) +RUN ./gradlew clean build --no-daemon + +# 2단계: 실행 단계 (빌드 결과물 실행을 위한 환경) +FROM openjdk:17-jdk-slim +WORKDIR /app + +# 빌드 단계에서 생성된 JAR 파일 복사 (파일명이 프로젝트에 따라 달라질 수 있으므로 와일드카드 사용) +COPY --from=builder /home/gradle/project/build/libs/*.jar app.jar + +# 컨테이너에서 사용할 포트 (필요 시 변경) +EXPOSE 9000 + +# 애플리케이션 실행 +ENTRYPOINT ["java", "-jar", "app.jar"] \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 249e5832f090a2944b7473328c07c9755baa3196..9bbc975c742b298b441bfb90dbc124400a3751b9 100644 GIT binary patch literal 43705 zcma&Obx`DOvL%eWOXJW;V64viP??$)@wHcsJ68)>bJS6*&iHnskXE8MjvIPVl|FrmV}Npeql07fCw6`pw`0s zGauF(<*@v{3t!qoUU*=j)6;|-(yg@jvDx&fV^trtZt27?4Tkn729qrItVh@PMwG5$ z+oXHSPM??iHZ!cVP~gYact-CwV`}~Q+R}PPNRy+T-geK+>fHrijpllon_F4N{@b-} z1M0=a!VbVmJM8Xk@NRv)m&aRYN}FSJ{LS;}2ArQ5baSjfy40l@T5)1r-^0fAU6f_} zzScst%$Nd-^ElV~H0TetQhMc%S{}Q4lssln=|;LG?Ulo}*mhg8YvBAUY7YFdXs~vv zv~{duzVw%C#GxkBwX=TYp1Dh*Uaum2?RmsvPaLlzO^fIJ`L?&OV?Y&kKj~^kWC`Ly zfL-}J^4a0Ojuz9O{jUbIS;^JatJ5+YNNHe}6nG9Yd6P-lJiK2ms)A^xq^H2fKrTF) zp!6=`Ece~57>^9(RA4OB9;f1FAhV%zVss%#rDq$9ZW3N2cXC7dMz;|UcRFecBm`DA z1pCO!#6zKp#@mx{2>Qcme8y$Qg_gnA%(`Vtg3ccwgb~D(&@y8#Jg8nNYW*-P{_M#E zZ|wCsQoO1(iIKd-2B9xzI}?l#Q@G5d$m1Lfh0q;iS5FDQ&9_2X-H)VDKA*fa{b(sV zL--krNCXibi1+*C2;4qVjb0KWUVGjjRT{A}Q*!cFmj0tRip2ra>WYJ>ZK4C|V~RYs z6;~+*)5F^x^aQqk9tjh)L;DOLlD8j+0<>kHc8MN|68PxQV`tJFbgxSfq-}b(_h`luA0&;Vk<@51i0 z_cu6{_*=vlvYbKjDawLw+t^H?OV00_73Cn3goU5?})UYFuoSX6Xqw;TKcrsc|r# z$sMWYl@cs#SVopO$hpHZ)cdU-+Ui%z&Sa#lMI~zWW@vE%QDh@bTe0&V9nL>4Et9`N zGT8(X{l@A~loDx}BDz`m6@tLv@$mTlVJ;4MGuj!;9Y=%;;_kj#o8n5tX%@M)2I@}u z_{I!^7N1BxW9`g&Z+K#lZ@7_dXdsqp{W9_`)zgZ=sD~%WS5s$`7z#XR!Lfy(4se(m zR@a3twgMs19!-c4jh`PfpJOSU;vShBKD|I0@rmv_x|+ogqslnLLOepJpPMOxhRb*i zGHkwf#?ylQ@k9QJL?!}MY4i7joSzMcEhrDKJH&?2v{-tgCqJe+Y0njl7HYff z{&~M;JUXVR$qM1FPucIEY(IBAuCHC@^~QG6O!dAjzQBxDOR~lJEr4KS9R*idQ^p{D zS#%NQADGbAH~6wAt}(1=Uff-1O#ITe)31zCL$e9~{w)gx)g>?zFE{Bc9nJT6xR!i8 z)l)~9&~zSZTHk{?iQL^MQo$wLi}`B*qnvUy+Y*jEraZMnEhuj`Fu+>b5xD1_Tp z)8|wedv42#3AZUL7x&G@p@&zcUvPkvg=YJS6?1B7ZEXr4b>M+9Gli$gK-Sgh{O@>q7TUg+H zNJj`6q#O@>4HpPJEHvNij`sYW&u%#=215HKNg;C!0#hH1vlO5+dFq9& zS)8{5_%hz?#D#wn&nm@aB?1_|@kpA@{%jYcs{K%$a4W{k@F zPyTav?jb;F(|GaZhm6&M#g|`ckO+|mCtAU)5_(hn&Ogd z9Ku}orOMu@K^Ac>eRh3+0-y^F`j^noa*OkS3p^tLV`TY$F$cPXZJ48!xz1d7%vfA( zUx2+sDPqHfiD-_wJDb38K^LtpN2B0w=$A10z%F9f_P2aDX63w7zDG5CekVQJGy18I zB!tI`6rZr7TK10L(8bpiaQ>S@b7r_u@lh^vakd0e6USWw7W%d_Ob%M!a`K>#I3r-w zo2^+9Y)Sb?P9)x0iA#^ns+Kp{JFF|$09jb6ZS2}_<-=$?^#IUo5;g`4ICZknr!_aJ zd73%QP^e-$%Xjt|28xM}ftD|V@76V_qvNu#?Mt*A-OV{E4_zC4Ymo|(cb+w^`Wv== z>)c%_U0w`d$^`lZQp@midD89ta_qTJW~5lRrIVwjRG_9aRiQGug%f3p@;*%Y@J5uQ|#dJ+P{Omc`d2VR)DXM*=ukjVqIpkb<9gn9{*+&#p)Ek zN=4zwNWHF~=GqcLkd!q0p(S2_K=Q`$whZ}r@ec_cb9hhg9a z6CE=1n8Q;hC?;ujo0numJBSYY6)GTq^=kB~`-qE*h%*V6-ip=c4+Yqs*7C@@b4YAi zuLjsmD!5M7r7d5ZPe>4$;iv|zq=9=;B$lI|xuAJwi~j~^Wuv!Qj2iEPWjh9Z&#+G>lZQpZ@(xfBrhc{rlLwOC;optJZDj4Xfu3$u6rt_=YY0~lxoy~fq=*L_&RmD7dZWBUmY&12S;(Ui^y zBpHR0?Gk|`U&CooNm_(kkO~pK+cC%uVh^cnNn)MZjF@l{_bvn4`Jc}8QwC5_)k$zs zM2qW1Zda%bIgY^3NcfL)9ug`05r5c%8ck)J6{fluBQhVE>h+IA&Kb}~$55m-^c1S3 zJMXGlOk+01qTQUFlh5Jc3xq|7McY$nCs$5=`8Y;|il#Ypb{O9}GJZD8!kYh{TKqs@ z-mQn1K4q$yGeyMcryHQgD6Ra<6^5V(>6_qg`3uxbl|T&cJVA*M_+OC#>w(xL`RoPQ zf1ZCI3G%;o-x>RzO!mc}K!XX{1rih0$~9XeczHgHdPfL}4IPi~5EV#ZcT9 zdgkB3+NPbybS-d;{8%bZW^U+x@Ak+uw;a5JrZH!WbNvl!b~r4*vs#he^bqz`W93PkZna2oYO9dBrKh2QCWt{dGOw)%Su%1bIjtp4dKjZ^ zWfhb$M0MQiDa4)9rkip9DaH0_tv=XxNm>6MKeWv>`KNk@QVkp$Lhq_~>M6S$oliq2 zU6i7bK;TY)m>-}X7hDTie>cc$J|`*}t=MAMfWIALRh2=O{L57{#fA_9LMnrV(HrN6 zG0K_P5^#$eKt{J|#l~U0WN_3)p^LLY(XEqes0OvI?3)GTNY&S13X+9`6PLVFRf8K) z9x@c|2T72+-KOm|kZ@j4EDDec>03FdgQlJ!&FbUQQH+nU^=U3Jyrgu97&#-W4C*;_ z(WacjhBDp@&Yon<9(BWPb;Q?Kc0gR5ZH~aRNkPAWbDY!FiYVSu!~Ss^9067|JCrZk z-{Rn2KEBR|Wti_iy) zXnh2wiU5Yz2L!W{{_#LwNWXeNPHkF=jjXmHC@n*oiz zIoM~Wvo^T@@t!QQW?Ujql-GBOlnB|HjN@x~K8z)c(X}%%5Zcux09vC8=@tvgY>czq z3D(U&FiETaN9aP}FDP3ZSIXIffq>M3{~eTB{uauL07oYiM=~K(XA{SN!rJLyXeC+Y zOdeebgHOc2aCIgC=8>-Q>zfuXV*=a&gp{l#E@K|{qft@YtO>xaF>O7sZz%8);e86? z+jJlFB{0fu6%8ew^_<+v>>%6eB8|t*_v7gb{x=vLLQYJKo;p7^o9!9A1)fZZ8i#ZU z<|E?bZakjkEV8xGi?n+{Xh3EgFKdM^;4D;5fHmc04PI>6oU>>WuLy6jgpPhf8$K4M zjJo*MbN0rZbZ!5DmoC^@hbqXiP^1l7I5;Wtp2i9Jkh+KtDJoXP0O8qmN;Sp(+%upX zAxXs*qlr(ck+-QG_mMx?hQNXVV~LT{$Q$ShX+&x?Q7v z@8t|UDylH6@RZ?WsMVd3B0z5zf50BP6U<&X_}+y3uJ0c5OD}+J&2T8}A%2Hu#Nt_4 zoOoTI$A!hQ<2pk5wfZDv+7Z{yo+Etqry=$!*pvYyS+kA4xnJ~3b~TBmA8Qd){w_bE zqDaLIjnU8m$wG#&T!}{e0qmHHipA{$j`%KN{&#_Kmjd&#X-hQN+ju$5Ms$iHj4r?) z&5m8tI}L$ih&95AjQ9EDfPKSmMj-@j?Q+h~C3<|Lg2zVtfKz=ft{YaQ1i6Om&EMll zzov%MsjSg=u^%EfnO+W}@)O6u0LwoX709h3Cxdc2Rwgjd%LLTChQvHZ+y<1q6kbJXj3_pq1&MBE{8 zd;aFotyW>4WHB{JSD8Z9M@jBitC1RF;!B8;Rf-B4nOiVbGlh9w51(8WjL&e{_iXN( zAvuMDIm_>L?rJPxc>S`bqC|W$njA0MKWa?V$u6mN@PLKYqak!bR!b%c^ze(M`ec(x zv500337YCT4gO3+9>oVIJLv$pkf`01S(DUM+4u!HQob|IFHJHm#>eb#eB1X5;bMc| z>QA4Zv}$S?fWg~31?Lr(C>MKhZg>gplRm`2WZ--iw%&&YlneQYY|PXl;_4*>vkp;I z$VYTZq|B*(3(y17#@ud@o)XUZPYN*rStQg5U1Sm2gM}7hf_G<>*T%6ebK*tF(kbJc zNPH4*xMnJNgw!ff{YXrhL&V$6`ylY={qT_xg9znQWw9>PlG~IbhnpsG_94Kk_(V-o&v7#F znra%uD-}KOX2dkak**hJnZZQyp#ERyyV^lNe!Qrg=VHiyr7*%j#PMvZMuYNE8o;JM zGrnDWmGGy)(UX{rLzJ*QEBd(VwMBXnJ@>*F8eOFy|FK*Vi0tYDw;#E zu#6eS;%Nm2KY+7dHGT3m{TM7sl=z8|V0e!DzEkY-RG8vTWDdSQFE|?+&FYA146@|y zV(JP>LWL;TSL6rao@W5fWqM1-xr$gRci#RQV2DX-x4@`w{uEUgoH4G|`J%H!N?*Qn zy~rjzuf(E7E!A9R2bSF|{{U(zO+;e29K_dGmC^p7MCP!=Bzq@}&AdF5=rtCwka zTT1A?5o}i*sXCsRXBt)`?nOL$zxuP3i*rm3Gmbmr6}9HCLvL*45d|(zP;q&(v%}S5yBmRVdYQQ24zh z6qL2<2>StU$_Ft29IyF!6=!@;tW=o8vNzVy*hh}XhZhUbxa&;9~woye<_YmkUZ)S?PW{7t; zmr%({tBlRLx=ffLd60`e{PQR3NUniWN2W^~7Sy~MPJ>A#!6PLnlw7O0(`=PgA}JLZ ztqhiNcKvobCcBel2 z-N82?4-()eGOisnWcQ9Wp23|ybG?*g!2j#>m3~0__IX1o%dG4b;VF@^B+mRgKx|ij zWr5G4jiRy}5n*(qu!W`y54Y*t8g`$YrjSunUmOsqykYB4-D(*(A~?QpuFWh;)A;5= zPl|=x+-w&H9B7EZGjUMqXT}MkcSfF}bHeRFLttu!vHD{Aq)3HVhvtZY^&-lxYb2%` zDXk7>V#WzPfJs6u{?ZhXpsMdm3kZscOc<^P&e&684Rc1-d=+=VOB)NR;{?0NjTl~D z1MXak$#X4{VNJyD$b;U~Q@;zlGoPc@ny!u7Pe;N2l4;i8Q=8>R3H{>HU(z z%hV2?rSinAg6&wuv1DmXok`5@a3@H0BrqsF~L$pRYHNEXXuRIWom0l zR9hrZpn1LoYc+G@q@VsFyMDNX;>_Vf%4>6$Y@j;KSK#g)TZRmjJxB!_NmUMTY(cAV zmewn7H{z`M3^Z& z2O$pWlDuZHAQJ{xjA}B;fuojAj8WxhO}_9>qd0|p0nBXS6IIRMX|8Qa!YDD{9NYYK z%JZrk2!Ss(Ra@NRW<7U#%8SZdWMFDU@;q<}%F{|6n#Y|?FaBgV$7!@|=NSVoxlJI4G-G(rn}bh|?mKkaBF$-Yr zA;t0r?^5Nz;u6gwxURapQ0$(-su(S+24Ffmx-aP(@8d>GhMtC5x*iEXIKthE*mk$` zOj!Uri|EAb4>03C1xaC#(q_I<;t}U7;1JqISVHz3tO{) zD(Yu@=>I9FDmDtUiWt81;BeaU{_=es^#QI7>uYl@e$$lGeZ~Q(f$?^3>$<<{n`Bn$ zn8bamZlL@6r^RZHV_c5WV7m2(G6X|OI!+04eAnNA5=0v1Z3lxml2#p~Zo57ri;4>;#16sSXXEK#QlH>=b$inEH0`G#<_ zvp;{+iY)BgX$R!`HmB{S&1TrS=V;*5SB$7*&%4rf_2wQS2ed2E%Wtz@y$4ecq4w<) z-?1vz_&u>s?BMrCQG6t9;t&gvYz;@K@$k!Zi=`tgpw*v-#U1Pxy%S9%52`uf$XMv~ zU}7FR5L4F<#9i%$P=t29nX9VBVv)-y7S$ZW;gmMVBvT$BT8d}B#XV^@;wXErJ-W2A zA=JftQRL>vNO(!n4mcd3O27bHYZD!a0kI)6b4hzzL9)l-OqWn)a~{VP;=Uo|D~?AY z#8grAAASNOkFMbRDdlqVUfB;GIS-B-_YXNlT_8~a|LvRMVXf!<^uy;)d$^OR(u)!) zHHH=FqJF-*BXif9uP~`SXlt0pYx|W&7jQnCbjy|8b-i>NWb@!6bx;1L&$v&+!%9BZ z0nN-l`&}xvv|wwxmC-ZmoFT_B#BzgQZxtm|4N+|;+(YW&Jtj^g!)iqPG++Z%x0LmqnF875%Ry&2QcCamx!T@FgE@H zN39P6e#I5y6Yl&K4eUP{^biV`u9{&CiCG#U6xgGRQr)zew;Z%x+ z-gC>y%gvx|dM=OrO`N@P+h2klPtbYvjS!mNnk4yE0+I&YrSRi?F^plh}hIp_+OKd#o7ID;b;%*c0ES z!J))9D&YufGIvNVwT|qsGWiZAwFODugFQ$VsNS%gMi8OJ#i${a4!E3<-4Jj<9SdSY z&xe|D0V1c`dZv+$8>(}RE|zL{E3 z-$5Anhp#7}oO(xm#}tF+W=KE*3(xxKxhBt-uuJP}`_K#0A< zE%rhMg?=b$ot^i@BhE3&)bNBpt1V*O`g?8hhcsV-n#=|9wGCOYt8`^#T&H7{U`yt2 z{l9Xl5CVsE=`)w4A^%PbIR6uG_5Ww9k`=q<@t9Bu662;o{8PTjDBzzbY#tL;$wrpjONqZ{^Ds4oanFm~uyPm#y1Ll3(H57YDWk9TlC zq;kebC!e=`FU&q2ojmz~GeLxaJHfs0#F%c(i+~gg$#$XOHIi@1mA72g2pFEdZSvp}m0zgQb5u2?tSRp#oo!bp`FP}< zaK4iuMpH+Jg{bb7n9N6eR*NZfgL7QiLxI zk6{uKr>xxJ42sR%bJ%m8QgrL|fzo9@?9eQiMW8O`j3teoO_R8cXPe_XiLnlYkE3U4 zN!^F)Z4ZWcA8gekEPLtFqX-Q~)te`LZnJK_pgdKs)Dp50 zdUq)JjlJeELskKg^6KY!sIou-HUnSFRsqG^lsHuRs`Z{f(Ti9eyd3cwu*Kxp?Ws7l z3cN>hGPXTnQK@qBgqz(n*qdJ2wbafELi?b90fK~+#XIkFGU4+HihnWq;{{)1J zv*Txl@GlnIMOjzjA1z%g?GsB2(6Zb-8fooT*8b0KF2CdsIw}~Hir$d3TdVHRx1m3c z4C3#h@1Xi@{t4zge-#B6jo*ChO%s-R%+9%-E|y<*4;L>$766RiygaLR?X%izyqMXA zb|N=Z-0PSFeH;W6aQ3(5VZWVC>5Ibgi&cj*c%_3=o#VyUJv* zM&bjyFOzlaFq;ZW(q?|yyi|_zS%oIuH^T*MZ6NNXBj;&yM3eQ7!CqXY?`7+*+GN47 zNR#%*ZH<^x{(0@hS8l{seisY~IE*)BD+R6^OJX}<2HRzo^fC$n>#yTOAZbk4%=Bei=JEe=o$jm`or0YDw*G?d> z=i$eEL7^}_?UI^9$;1Tn9b>$KOM@NAnvWrcru)r`?LodV%lz55O3y(%FqN;cKgj7t zlJ7BmLTQ*NDX#uelGbCY>k+&H*iSK?x-{w;f5G%%!^e4QT9z<_0vHbXW^MLR} zeC*jezrU|{*_F`I0mi)9=sUj^G03i@MjXx@ePv@(Udt2CCXVOJhRh4yp~fpn>ssHZ z?k(C>2uOMWKW5FVsBo#Nk!oqYbL`?#i~#!{3w^qmCto05uS|hKkT+iPrC-}hU_nbL zO622#mJupB21nChpime}&M1+whF2XM?prT-Vv)|EjWYK(yGYwJLRRMCkx;nMSpu?0 zNwa*{0n+Yg6=SR3-S&;vq=-lRqN`s9~#)OOaIcy3GZ&~l4g@2h| zThAN#=dh{3UN7Xil;nb8@%)wx5t!l z0RSe_yJQ+_y#qEYy$B)m2yDlul^|m9V2Ia$1CKi6Q19~GTbzqk*{y4;ew=_B4V8zw zScDH&QedBl&M*-S+bH}@IZUSkUfleyM45G>CnYY{hx8J9q}ME?Iv%XK`#DJRNmAYt zk2uY?A*uyBA=nlYjkcNPMGi*552=*Q>%l?gDK_XYh*Rya_c)ve{=ps`QYE0n!n!)_$TrGi_}J|>1v}(VE7I~aP-wns#?>Y zu+O7`5kq32zM4mAQpJ50vJsUDT_^s&^k-llQMy9!@wRnxw@~kXV6{;z_wLu3i=F3m z&eVsJmuauY)8(<=pNUM5!!fQ4uA6hBkJoElL1asWNkYE#qaP?a+biwWw~vB48PRS7 zY;DSHvgbIB$)!uJU)xA!yLE*kP0owzYo`v@wfdux#~f!dv#uNc_$SF@Qq9#3q5R zfuQnPPN_(z;#X#nRHTV>TWL_Q%}5N-a=PhkQ^GL+$=QYfoDr2JO-zo#j;mCsZVUQ) zJ96e^OqdLW6b-T@CW@eQg)EgIS9*k`xr$1yDa1NWqQ|gF^2pn#dP}3NjfRYx$pTrb zwGrf8=bQAjXx*8?du*?rlH2x~^pXjiEmj^XwQo{`NMonBN=Q@Y21!H)D( zA~%|VhiTjaRQ%|#Q9d*K4j~JDXOa4wmHb0L)hn*;Eq#*GI}@#ux4}bt+olS(M4$>c z=v8x74V_5~xH$sP+LZCTrMxi)VC%(Dg!2)KvW|Wwj@pwmH6%8zd*x0rUUe$e(Z%AW z@Q{4LL9#(A-9QaY2*+q8Yq2P`pbk3!V3mJkh3uH~uN)+p?67d(r|Vo0CebgR#u}i? zBxa^w%U|7QytN%L9bKaeYhwdg7(z=AoMeP0)M3XZA)NnyqL%D_x-(jXp&tp*`%Qsx z6}=lGr;^m1<{;e=QQZ!FNxvLcvJVGPkJ63at5%*`W?46!6|5FHYV0qhizSMT>Zoe8 zsJ48kb2@=*txGRe;?~KhZgr-ZZ&c0rNV7eK+h$I-UvQ=552@psVrvj#Ys@EU4p8`3 zsNqJu-o=#@9N!Pq`}<=|((u)>^r0k^*%r<{YTMm+mOPL>EoSREuQc-e2~C#ZQ&Xve zZ}OUzmE4{N-7cqhJiUoO_V#(nHX11fdfVZJT>|6CJGX5RQ+Ng$Nq9xs-C86-)~`>p zW--X53J`O~vS{WWjsAuGq{K#8f#2iz` zzSSNIf6;?5sXrHig%X(}0q^Y=eYwvh{TWK-fT>($8Ex>!vo_oGFw#ncr{vmERi^m7lRi%8Imph})ZopLoIWt*eFWSPuBK zu>;Pu2B#+e_W|IZ0_Q9E9(s@0>C*1ft`V{*UWz^K<0Ispxi@4umgGXW!j%7n+NC~* zBDhZ~k6sS44(G}*zg||X#9Weto;u*Ty;fP!+v*7be%cYG|yEOBomch#m8Np!Sw`L)q+T` zmrTMf2^}7j=RPwgpO9@eXfb{Q>GW#{X=+xt`AwTl!=TgYm)aS2x5*`FSUaaP_I{Xi zA#irF%G33Bw>t?^1YqX%czv|JF0+@Pzi%!KJ?z!u$A`Catug*tYPO`_Zho5iip0@! z;`rR0-|Ao!YUO3yaujlSQ+j-@*{m9dHLtve!sY1Xq_T2L3&=8N;n!!Eb8P0Z^p4PL zQDdZ?An2uzbIakOpC|d@=xEA}v-srucnX3Ym{~I#Ghl~JZU(a~Ppo9Gy1oZH&Wh%y zI=KH_s!Lm%lAY&`_KGm*Ht)j*C{-t}Nn71drvS!o|I|g>ZKjE3&Mq0TCs6}W;p>%M zQ(e!h*U~b;rsZ1OPigud>ej=&hRzs@b>>sq6@Yjhnw?M26YLnDH_Wt#*7S$-BtL08 zVyIKBm$}^vp?ILpIJetMkW1VtIc&7P3z0M|{y5gA!Yi5x4}UNz5C0Wdh02!h zNS>923}vrkzl07CX`hi)nj-B?#n?BJ2Vk0zOGsF<~{Fo7OMCN_85daxhk*pO}x_8;-h>}pcw26V6CqR-=x2vRL?GB#y%tYqi;J}kvxaz}*iFO6YO0ha6!fHU9#UI2Nv z_(`F#QU1B+P;E!t#Lb)^KaQYYSewj4L!_w$RH%@IL-M($?DV@lGj%3ZgVdHe^q>n(x zyd5PDpGbvR-&p*eU9$#e5#g3-W_Z@loCSz}f~{94>k6VRG`e5lI=SE0AJ7Z_+=nnE zTuHEW)W|a8{fJS>2TaX zuRoa=LCP~kP)kx4L+OqTjtJOtXiF=y;*eUFgCn^Y@`gtyp?n14PvWF=zhNGGsM{R- z^DsGxtoDtx+g^hZi@E2Y(msb-hm{dWiHdoQvdX88EdM>^DS#f}&kCGpPFDu*KjEpv$FZtLpeT>@)mf|z#ZWEsueeW~hF78Hu zfY9a+Gp?<)s{Poh_qdcSATV2oZJo$OH~K@QzE2kCADZ@xX(; z)0i=kcAi%nvlsYagvUp(z0>3`39iKG9WBDu3z)h38p|hLGdD+Khk394PF3qkX!02H z#rNE`T~P9vwNQ_pNe0toMCRCBHuJUmNUl)KFn6Gu2je+p>{<9^oZ4Gfb!)rLZ3CR3 z-o&b;Bh>51JOt=)$-9+Z!P}c@cKev_4F1ZZGs$I(A{*PoK!6j@ZJrAt zv2LxN#p1z2_0Ox|Q8PVblp9N${kXkpsNVa^tNWhof)8x8&VxywcJz#7&P&d8vvxn` zt75mu>yV=Dl#SuiV!^1BPh5R)`}k@Nr2+s8VGp?%Le>+fa{3&(XYi~{k{ z-u4#CgYIdhp~GxLC+_wT%I*)tm4=w;ErgmAt<5i6c~)7JD2olIaK8by{u-!tZWT#RQddptXRfEZxmfpt|@bs<*uh?Y_< zD>W09Iy4iM@@80&!e^~gj!N`3lZwosC!!ydvJtc0nH==K)v#ta_I}4Tar|;TLb|+) zSF(;=?$Z0?ZFdG6>Qz)6oPM}y1&zx_Mf`A&chb znSERvt9%wdPDBIU(07X+CY74u`J{@SSgesGy~)!Mqr#yV6$=w-dO;C`JDmv=YciTH zvcrN1kVvq|(3O)NNdth>X?ftc`W2X|FGnWV%s})+uV*bw>aoJ#0|$pIqK6K0Lw!@- z3pkPbzd`ljS=H2Bt0NYe)u+%kU%DWwWa>^vKo=lzDZHr>ruL5Ky&#q7davj-_$C6J z>V8D-XJ}0cL$8}Xud{T_{19#W5y}D9HT~$&YY-@=Th219U+#nT{tu=d|B)3K`pL53 zf7`I*|L@^dPEIDJkI3_oA9vsH7n7O}JaR{G~8 zfi$?kmKvu20(l`dV7=0S43VwVKvtF!7njv1Q{Ju#ysj=|dASq&iTE8ZTbd-iiu|2& zmll%Ee1|M?n9pf~?_tdQ<7%JA53!ulo1b^h#s|Su2S4r{TH7BRB3iIOiX5|vc^;5( zKfE1+ah18YA9o1EPT(AhBtve5(%GMbspXV)|1wf5VdvzeYt8GVGt0e*3|ELBhwRaO zE|yMhl;Bm?8Ju3-;DNnxM3Roelg`^!S%e({t)jvYtJCKPqN`LmMg^V&S z$9OIFLF$%Py~{l?#ReyMzpWixvm(n(Y^Am*#>atEZ8#YD&?>NUU=zLxOdSh0m6mL? z_twklB0SjM!3+7U^>-vV=KyQZI-6<(EZiwmNBzGy;Sjc#hQk%D;bay$v#zczt%mFCHL*817X4R;E$~N5(N$1Tv{VZh7d4mhu?HgkE>O+^-C*R@ zR0ima8PsEV*WFvz`NaB+lhX3&LUZcWWJJrG7ZjQrOWD%_jxv=)`cbCk zMgelcftZ%1-p9u!I-Zf_LLz{hcn5NRbxkWby@sj2XmYfAV?iw^0?hM<$&ZDctdC`; zsL|C-7d;w$z2Gt0@hsltNlytoPnK&$>ksr(=>!7}Vk#;)Hp)LuA7(2(Hh(y3LcxRY zim!`~j6`~B+sRBv4 z<#B{@38kH;sLB4eH2+8IPWklhd25r5j2VR}YK$lpZ%7eVF5CBr#~=kUp`i zlb+>Z%i%BJH}5dmfg1>h7U5Q(-F{1d=aHDbMv9TugohX5lq#szPAvPE|HaokMQIi_ zTcTNsO53(oX=hg2w!XA&+qP}nwr$(C)pgG8emS@Mf7m0&*kiA!wPLS`88c=aD$niJ zp?3j%NI^uy|5*MzF`k4hFbsyQZ@wu!*IY+U&&9PwumdmyfL(S0#!2RFfmtzD3m9V7 zsNOw9RQofl-XBfKBF^~~{oUVouka#r3EqRf=SnleD=r1Hm@~`y8U7R)w16fgHvK-6?-TFth)f3WlklbZh+}0 zx*}7oDF4U^1tX4^$qd%987I}g;+o0*$Gsd=J>~Uae~XY6UtbdF)J8TzJXoSrqHVC) zJ@pMgE#;zmuz?N2MIC+{&)tx=7A%$yq-{GAzyz zLzZLf=%2Jqy8wGHD;>^x57VG)sDZxU+EMfe0L{@1DtxrFOp)=zKY1i%HUf~Dro#8} zUw_Mj10K7iDsX}+fThqhb@&GI7PwONx!5z;`yLmB_92z0sBd#HiqTzDvAsTdx+%W{ z2YL#U=9r!@3pNXMp_nvximh+@HV3psUaVa-lOBekVuMf1RUd26~P*|MLouQrb}XM-bEw(UgQxMI6M&l3Nha z{MBcV=tl(b_4}oFdAo}WX$~$Mj-z70FowdoB{TN|h2BdYs?$imcj{IQpEf9q z)rzpttc0?iwopSmEoB&V!1aoZqEWEeO-MKMx(4iK7&Fhc(94c zdy}SOnSCOHX+A8q@i>gB@mQ~Anv|yiUsW!bO9hb&5JqTfDit9X6xDEz*mQEiNu$ay zwqkTV%WLat|Ar+xCOfYs0UQNM`sdsnn*zJr>5T=qOU4#Z(d90!IL76DaHIZeWKyE1 zqwN%9+~lPf2d7)vN2*Q?En?DEPcM+GQwvA<#;X3v=fqsxmjYtLJpc3)A8~*g(KqFx zZEnqqruFDnEagXUM>TC7ngwKMjc2Gx%#Ll#=N4qkOuK|;>4%=0Xl7k`E69@QJ-*Vq zk9p5!+Ek#bjuPa<@Xv7ku4uiWo|_wy)6tIr`aO!)h>m5zaMS-@{HGIXJ0UilA7*I} z?|NZ!Tp8@o-lnyde*H+@8IHME8VTQOGh96&XX3E+}OB zA>VLAGW+urF&J{H{9Gj3&u+Gyn?JAVW84_XBeGs1;mm?2SQm9^!3UE@(_FiMwgkJI zZ*caE={wMm`7>9R?z3Ewg!{PdFDrbzCmz=RF<@(yQJ_A6?PCd_MdUf5vv6G#9Mf)i#G z($OxDT~8RNZ>1R-vw|nN699a}MQN4gJE_9gA-0%>a?Q<9;f3ymgoi$OI!=aE6Elw z2I`l!qe-1J$T$X&x9Zz#;3!P$I);jdOgYY1nqny-k=4|Q4F!mkqACSN`blRji>z1` zc8M57`~1lgL+Ha%@V9_G($HFBXH%k;Swyr>EsQvg%6rNi){Tr&+NAMga2;@85531V z_h+h{jdB&-l+%aY{$oy2hQfx`d{&?#psJ78iXrhrO)McOFt-o80(W^LKM{Zw93O}m z;}G!51qE?hi=Gk2VRUL2kYOBRuAzktql%_KYF4>944&lJKfbr+uo@)hklCHkC=i)E zE*%WbWr@9zoNjumq|kT<9Hm*%&ahcQ)|TCjp@uymEU!&mqqgS;d|v)QlBsE0Jw|+^ zFi9xty2hOk?rlGYT3)Q7i4k65@$RJ-d<38o<`}3KsOR}t8sAShiVWevR8z^Si4>dS z)$&ILfZ9?H#H&lumngpj7`|rKQQ`|tmMmFR+y-9PP`;-425w+#PRKKnx7o-Rw8;}*Ctyw zKh~1oJ5+0hNZ79!1fb(t7IqD8*O1I_hM;o*V~vd_LKqu7c_thyLalEF8Y3oAV=ODv z$F_m(Z>ucO(@?+g_vZ`S9+=~Msu6W-V5I-V6h7->50nQ@+TELlpl{SIfYYNvS6T6D z`9cq=at#zEZUmTfTiM3*vUamr!OB~g$#?9$&QiwDMbSaEmciWf3O2E8?oE0ApScg38hb&iN%K+kvRt#d))-tr^ zD+%!d`i!OOE3in0Q_HzNXE!JcZ<0;cu6P_@;_TIyMZ@Wv!J z)HSXAYKE%-oBk`Ye@W3ShYu-bfCAZ}1|J16hFnLy z?Bmg2_kLhlZ*?`5R8(1%Y?{O?xT)IMv{-)VWa9#1pKH|oVRm4!lLmls=u}Lxs44@g^Zwa0Z_h>Rk<(_mHN47=Id4oba zQ-=qXGz^cNX(b*=NT0<^23+hpS&#OXzzVO@$Z2)D`@oS=#(s+eQ@+FSQcpXD@9npp zlxNC&q-PFU6|!;RiM`?o&Sj&)<4xG3#ozRyQxcW4=EE;E)wcZ&zUG*5elg;{9!j}I z9slay#_bb<)N!IKO16`n3^@w=Y%duKA-{8q``*!w9SW|SRbxcNl50{k&CsV@b`5Xg zWGZ1lX)zs_M65Yt&lO%mG0^IFxzE_CL_6$rDFc&#xX5EXEKbV8E2FOAt>Ka@e0aHQ zMBf>J$FLrCGL@$VgPKSbRkkqo>sOXmU!Yx+Dp7E3SRfT`v~!mjU3qj-*!!YjgI*^) z+*05x78FVnVwSGKr^A|FW*0B|HYgc{c;e3Ld}z4rMI7hVBKaiJRL_e$rxDW^8!nGLdJ<7ex9dFoyj|EkODflJ#Xl`j&bTO%=$v)c+gJsLK_%H3}A_} z6%rfG?a7+k7Bl(HW;wQ7BwY=YFMSR3J43?!;#~E&)-RV_L!|S%XEPYl&#`s!LcF>l zn&K8eemu&CJp2hOHJKaYU#hxEutr+O161ze&=j3w12)UKS%+LAwbjqR8sDoZHnD=m0(p62!zg zxt!Sj65S?6WPmm zL&U9c`6G}T`irf=NcOiZ!V)qhnvMNOPjVkyO2^CGJ+dKTnNAPa?!AxZEpO7yL_LkB zWpolpaDfSaO-&Uv=dj7`03^BT3_HJOAjn~X;wz-}03kNs@D^()_{*BD|0mII!J>5p z1h06PTyM#3BWzAz1FPewjtrQfvecWhkRR=^gKeFDe$rmaYAo!np6iuio3>$w?az$E zwGH|zy@OgvuXok}C)o1_&N6B3P7ZX&-yimXc1hAbXr!K&vclCL%hjVF$yHpK6i_Wa z*CMg1RAH1(EuuA01@lA$sMfe*s@9- z$jNWqM;a%d3?(>Hzp*MiOUM*?8eJ$=(0fYFis!YA;0m8s^Q=M0Hx4ai3eLn%CBm14 zOb8lfI!^UAu_RkuHmKA-8gx8Z;##oCpZV{{NlNSe<i;9!MfIN!&;JI-{|n{(A19|s z9oiGesENcLf@NN^9R0uIrgg(46r%kjR{0SbnjBqPq()wDJ@LC2{kUu_j$VR=l`#RdaRe zxx;b7bu+@IntWaV$si1_nrQpo*IWGLBhhMS13qH zTy4NpK<-3aVc;M)5v(8JeksSAGQJ%6(PXGnQ-g^GQPh|xCop?zVXlFz>42%rbP@jg z)n)% zM9anq5(R=uo4tq~W7wES$g|Ko z1iNIw@-{x@xKxSXAuTx@SEcw(%E49+JJCpT(y=d+n9PO0Gv1SmHkYbcxPgDHF}4iY zkXU4rkqkwVBz<{mcv~A0K|{zpX}aJcty9s(u-$je2&=1u(e#Q~UA{gA!f;0EAaDzdQ=}x7g(9gWrWYe~ zV98=VkHbI!5Rr;+SM;*#tOgYNlfr7;nLU~MD^jSdSpn@gYOa$TQPv+e8DyJ&>aInB zDk>JmjH=}<4H4N4z&QeFx>1VPY8GU&^1c&71T*@2#dINft%ibtY(bAm%<2YwPL?J0Mt{ z7l7BR718o5=v|jB!<7PDBafdL>?cCdVmKC;)MCOobo5edt%RTWiReAMaIU5X9h`@El0sR&Z z7Ed+FiyA+QAyWn zf7=%(8XpcS*C4^-L24TBUu%0;@s!Nzy{e95qjgkzElf0#ou`sYng<}wG1M|L? zKl6ITA1X9mt6o@S(#R3B{uwJI8O$&<3{+A?T~t>Kapx6#QJDol6%?i-{b1aRu?&9B z*W@$T*o&IQ&5Kc*4LK_)MK-f&Ys^OJ9FfE?0SDbAPd(RB)Oju#S(LK)?EVandS1qb#KR;OP|86J?;TqI%E8`vszd&-kS%&~;1Als=NaLzRNnj4q=+ zu5H#z)BDKHo1EJTC?Cd_oq0qEqNAF8PwU7fK!-WwVEp4~4g z3SEmE3-$ddli))xY9KN$lxEIfyLzup@utHn=Q{OCoz9?>u%L^JjClW$M8OB`txg4r6Q-6UlVx3tR%%Z!VMb6#|BKRL`I))#g zij8#9gk|p&Iwv+4s+=XRDW7VQrI(+9>DikEq!_6vIX8$>poDjSYIPcju%=qluSS&j zI-~+ztl1f71O-B+s7Hf>AZ#}DNSf`7C7*)%(Xzf|ps6Dr7IOGSR417xsU=Rxb z1pgk9vv${17h7mZ{)*R{mc%R=!i}8EFV9pl8V=nXCZruBff`$cqN3tpB&RK^$yH!A8RL zJ5KltH$&5%xC7pLZD}6wjD2-uq3&XL8CM$@V9jqalF{mvZ)c4Vn?xXbvkB(q%xbSdjoXJXanVN@I;8I`)XlBX@6BjuQKD28Jrg05} z^ImmK-Ux*QMn_A|1ionE#AurP8Vi?x)7jG?v#YyVe_9^up@6^t_Zy^T1yKW*t* z&Z0+0Eo(==98ig=^`he&G^K$I!F~1l~gq}%o5#pR6?T+ zLmZu&_ekx%^nys<^tC@)s$kD`^r8)1^tUazRkWEYPw0P)=%cqnyeFo3nW zyV$^0DXPKn5^QiOtOi4MIX^#3wBPJjenU#2OIAgCHPKXv$OY=e;yf7+_vI7KcjKq% z?RVzC24ekYp2lEhIE^J$l&wNX0<}1Poir8PjM`m#zwk-AL0w6WvltT}*JN8WFmtP_ z6#rK7$6S!nS!}PSFTG6AF7giGJw5%A%14ECde3x95(%>&W3zUF!8x5%*h-zk8b@Bz zh`7@ixoCVCZ&$$*YUJpur90Yg0X-P82>c~NMzDy7@Ed|6(#`;{)%t7#Yb>*DBiXC3 zUFq(UDFjrgOsc%0KJ_L;WQKF0q!MINpQzSsqwv?#Wg+-NO; z84#4nk$+3C{2f#}TrRhin=Erdfs77TqBSvmxm0P?01Tn@V(}gI_ltHRzQKPyvQ2=M zX#i1-a(>FPaESNx+wZ6J{^m_q3i})1n~JG80c<%-Ky!ZdTs8cn{qWY%x%X^27-Or_ z`KjiUE$OG9K4lWS16+?aak__C*)XA{ z6HmS*8#t_3dl}4;7ZZgn4|Tyy1lOEM1~6Qgl(|BgfQF{Mfjktch zB5kc~4NeehRYO%)3Z!FFHhUVVcV@uEX$eft5Qn&V3g;}hScW_d)K_h5i)vxjKCxcf zL>XlZ^*pQNuX*RJQn)b6;blT3<7@Ap)55)aK3n-H08GIx65W zO9B%gE%`!fyT`)hKjm-&=on)l&!i-QH+mXQ&lbXg0d|F{Ac#U;6b$pqQcpqWSgAPo zmr$gOoE*0r#7J=cu1$5YZE%uylM!i3L{;GW{ae9uy)+EaV>GqW6QJ)*B2)-W`|kLL z)EeeBtpgm;79U_1;Ni5!c^0RbG8yZ0W98JiG~TC8rjFRjGc6Zi8BtoC);q1@8h7UV zFa&LRzYsq%6d!o5-yrqyjXi>jg&c8bu}{Bz9F2D(B%nnuVAz74zmBGv)PAdFXS2(A z=Z?uupM2f-ar0!A)C6l2o8a|+uT*~huH)!h3i!&$ zr>76mt|lwexD(W_+5R{e@2SwR15lGxsnEy|gbS-s5?U}l*kcfQlfnQKo5=LZXizrL zM=0ty+$#f_qGGri-*t@LfGS?%7&LigUIU#JXvwEdJZvIgPCWFBTPT`@Re5z%%tRDO zkMlJCoqf2A=hkU7Ih=IxmPF~fEL90)u76nfFRQwe{m7b&Ww$pnk~$4Lx#s9|($Cvt ze|p{Xozhb^g1MNh-PqS_dLY|Fex4|rhM#lmzq&mhebD$5P>M$eqLoV|z=VQY{)7&sR#tW zl(S1i!!Rrg7kv+V@EL51PGpm511he%MbX2-Jl+DtyYA(0gZyZQjPZP@`SAH{n&25@ zd)emg(p2T3$A!Nmzo|%=z%AhLX)W4hsZNFhmd4<1l6?b3&Fg)G(Zh%J{Cf8Q;?_++ zgO7O<(-)H|Es@QqUgcXNJEfC-BCB~#dhi6ADVZtL!)Mx|u7>ukD052z!QZ5UC-+rd zYXWNRpCmdM{&?M9OMa;OiN{Y#0+F>lBQ=W@M;OXq;-7v3niC$pM8p!agNmq7F04;| z@s-_98JJB&s`Pr6o$KZ=8}qO*7m6SMp7kVmmh$jfnG{r@O(auI7Z^jj!x}NTLS9>k zdo}&Qc2m4Ws3)5qFw#<$h=g%+QUKiYog33bE)e4*H~6tfd42q+|FT5+vmr6Y$6HGC zV!!q>B`1Ho|6E|D<2tYE;4`8WRfm2#AVBBn%_W)mi(~x@g;uyQV3_)~!#A6kmFy0p zY~#!R1%h5E{5;rehP%-#kjMLt*{g((o@0-9*8lKVu+t~CtnOxuaMgo2ssI6@kX09{ zkn~q8Gx<6T)l}7tWYS#q0&~x|-3ho@l}qIr79qOJQcm&Kfr7H54=BQto0)vd1A_*V z)8b2{xa5O^u95~TS=HcJF5b9gMV%&M6uaj<>E zPNM~qGjJ~xbg%QTy#(hPtfc46^nN=Y_GmPYY_hTL{q`W3NedZyRL^kgU@Q$_KMAjEzz*eip`3u6AhPDcWXzR=Io5EtZRPme>#K9 z4lN&87i%YYjoCKN_z9YK+{fJu{yrriba#oGM|2l$ir017UH86Eoig3x+;bz32R*;n zt)Eyg#PhQbbGr^naCv0?H<=@+Poz)Xw*3Gn00qdSL|zGiyYKOA0CP%qk=rBAlt~hr zEvd3Z4nfW%g|c`_sfK$z8fWsXTQm@@eI-FpLGrW<^PIjYw)XC-xFk+M<6>MfG;WJr zuN}7b;p^`uc0j(73^=XJcw;|D4B(`)Flm|qEbB?>qBBv2V?`mWA?Q3yRdLkK7b}y& z+!3!JBI{+&`~;%Pj#n&&y+<;IQzw5SvqlbC+V=kLZLAHOQb zS{{8E&JXy1p|B&$K!T*GKtSV^{|Uk;`oE*F;?@q1dX|>|KWb@|Dy*lbGV0Gx;gpA$ z*N16`v*gQ?6Skw(f^|SL;;^ox6jf2AQ$Zl?gvEV&H|-ep*hIS@0TmGu1X1ZmEPY&f zKCrV{UgRAiNU*=+Uw%gjIQhTAC@67m)6(_D+N>)(^gK74F%M2NUpWpho}aq|Kxh$3 zz#DWOmQV4Lg&}`XTU41Z|P~5;wN2c?2L{a=)Xi~!m#*=22c~&AW zgG#yc!_p##fI&E{xQD9l#^x|9`wSyCMxXe<3^kDIkS0N>=oAz7b`@M>aT?e$IGZR; zS;I{gnr4cS^u$#>D(sjkh^T6_$s=*o%vNLC5+6J=HA$&0v6(Y1lm|RDn&v|^CTV{= zjVrg_S}WZ|k=zzp>DX08AtfT@LhW&}!rv^);ds7|mKc5^zge_Li>FTNFoA8dbk@K$ zuuzmDQRL1leikp%m}2_`A7*7=1p2!HBlj0KjPC|WT?5{_aa%}rQ+9MqcfXI0NtjvXz1U)|H>0{6^JpHspI4MfXjV%1Tc1O!tdvd{!IpO+@ z!nh()i-J3`AXow^MP!oVLVhVW&!CDaQxlD9b|Zsc%IzsZ@d~OfMvTFXoEQg9Nj|_L zI+^=(GK9!FGck+y8!KF!nzw8ZCX>?kQr=p@7EL_^;2Mlu1e7@ixfZQ#pqpyCJ```(m;la2NpJNoLQR};i4E;hd+|QBL@GdQy(Cc zTSgZ)4O~hXj86x<7&ho5ePzDrVD`XL7{7PjjNM1|6d5>*1hFPY!E(XDMA+AS;_%E~ z(dOs)vy29&I`5_yEw0x{8Adg%wvmoW&Q;x?5`HJFB@KtmS+o0ZFkE@f)v>YYh-z&m z#>ze?@JK4oE7kFRFD%MPC@x$^p{aW}*CH9Y_(oJ~St#(2)4e-b34D>VG6giMGFA83 zpZTHM2I*c8HE}5G;?Y7RXMA2k{Y?RxHb2 zZFQv?!*Kr_q;jt3`{?B5Wf}_a7`roT&m1BN9{;5Vqo6JPh*gnN(gj}#=A$-F(SRJj zUih_ce0f%K19VLXi5(VBGOFbc(YF zLvvOJl+W<}>_6_4O?LhD>MRGlrk;~J{S#Q;Q9F^;Cu@>EgZAH=-5fp02(VND(v#7n zK-`CfxEdonk!!65?3Ry(s$=|CvNV}u$5YpUf?9kZl8h@M!AMR7RG<9#=`_@qF@})d ztJDH>=F!5I+h!4#^DN6C$pd6^)_;0Bz7|#^edb9_qFg&eI}x{Roovml5^Yf5;=ehZ zGqz-x{I`J$ejkmGTFipKrUbv-+1S_Yga=)I2ZsO16_ye@!%&Op^6;#*Bm;=I^#F;? z27Sz-pXm4x-ykSW*3`)y4$89wy6dNOP$(@VYuPfb97XPDTY2FE{Z+{6=}LLA23mAc zskjZJ05>b)I7^SfVc)LnKW(&*(kP*jBnj>jtph`ZD@&30362cnQpZW8juUWcDnghc zy|tN1T6m?R7E8iyrL%)53`ymXX~_;#r${G`4Q(&7=m7b#jN%wdLlS0lb~r9RMdSuU zJ{~>>zGA5N`^QmrzaqDJ(=9y*?@HZyE!yLFONJO!8q5Up#2v>fR6CkquE$PEcvw5q zC8FZX!15JgSn{Gqft&>A9r0e#be^C<%)psE*nyW^e>tsc8s4Q}OIm})rOhuc{3o)g1r>Q^w5mas) zDlZQyjQefhl0PmH%cK05*&v{-M1QCiK=rAP%c#pdCq_StgDW}mmw$S&K6ASE=`u4+ z5wcmtrP27nAlQCc4qazffZoFV7*l2=Va}SVJD6CgRY^=5Ul=VYLGqR7H^LHA;H^1g}ekn=4K8SPRCT+pel*@jUXnLz+AIePjz@mUsslCN2 z({jl?BWf&DS+FlE5Xwp%5zXC7{!C=k9oQLP5B;sLQxd`pg+B@qPRqZ6FU(k~QkQu{ zF~5P=kLhs+D}8qqa|CQo2=cv$wkqAzBRmz_HL9(HRBj&73T@+B{(zZahlkkJ>EQmQ zenp59dy+L;sSWYde!z_W+I~-+2Xnm;c;wI_wH=RTgxpMlCW@;Us*0}L74J#E z8XbDWJGpBscw?W$&ZxZNxUq(*DKDwNzW7_}AIw$HF6Ix|;AJ3t6lN=v(c9=?n9;Y0 zK9A0uW4Ib9|Mp-itnzS#5in=Ny+XhGO8#(1_H4%Z6yEBciBiHfn*h;^r9gWb^$UB4 zJtN8^++GfT`1!WfQt#3sXGi-p<~gIVdMM<#ZZ0e_kdPG%Q5s20NNt3Jj^t$(?5cJ$ zGZ#FT(Lt>-0fP4b5V3az4_byF12k%}Spc$WsRydi&H|9H5u1RbfPC#lq=z#a9W(r1 z!*}KST!Yhsem0tO#r!z`znSL-=NnP~f(pw-sE+Z$e7i7t9nBP^5ts1~WFmW+j+<@7 zIh@^zKO{1%Lpx^$w8-S+T_59v;%N;EZtJzcfN%&@(Ux5 z@YzX^MwbbXESD*d(&qT7-eOHD6iaH-^N>p2sVdq&(`C$;?#mgBANIc5$r| z^A$r)@c{Z}N%sbfo?T`tTHz9-YpiMW?6>kr&W9t$Cuk{q^g1<$I~L zo++o2!!$;|U93cI#p4hyc!_Mv2QKXxv419}Ej#w#%N+YIBDdnn8;35!f2QZkUG?8O zpP47Wf9rnoI^^!9!dy~XsZ&!DU4bVTAi3Fc<9$_krGR&3TI=Az9uMgYU5dd~ksx+} zP+bs9y+NgEL>c@l>H1R%@>5SWg2k&@QZL(qNUI4XwDl6(=!Q^U%o984{|0e|mR$p+ z9BcwttR#7?As?@Q{+j?K6H7R71PuiA^Dl$=f47nUKL|koCwutc_P<-m{|Al3C~o7w z=4S=}s5LcJFT1zjS)+10X_r$74`K78pz!nGGH%JV%w75!YSIt#hT7}}K>+@{{a+Im z5p#6%^X*txY?}|T17xWW*sa^?G2QHt#@tlcw0GIcy;|NR2vaCBDvn=`h)1il7E5Rx z%)mA4$`$OZx)NF5vXZnaJ1)*cA6ryx6Ll~t!LzhxvcTedxT;>JS&e=?-&DXUPaQ2~ zH*69ezE`hgV{K-|0z|m~ld}=X^-Ob={wpex&}*+Rz{gx)G}gn!C_VN{UN=>^EV=Xc zr$-HO09cW&p4^M}V3yBjTP_xrVcc8iU_^Y-JD~(bgw*@GXGB1gYKz5DWO+O`>})|N zWrC)MR93yA)3{&27-M)TJB6Ml3~?zZg#mYsF=#OSTaw&K z@hBftpt+2l@)YK@|3DvTjl(8wZtpLp9Ik!6G$CSL_idZ$Ti?R)4toe8bb)l|)lNb}?K;O2K9vyn1QG zd=v#y-Ld49UVkmfRU>Egc+(Y$^-;6vW;3Lcu*6~etz}0|@+b|+!UCal)DEYGLbHWJ zll5Wi^$Y<6@S%^y%hdjRh6&{!z1Py|lZ|q&Wub3l41uN2zEF8E&5H5?PL*&V}?*a}Lp% zCYi{ghjpRNT^^B+_U59No50Ghih5qn(W5`RkrsDWr{~A1dgtv{sRkH4RU2^A{jb&0 zxVRnrm|u<;$iI;M6A>$POP)TWGU-gSjAERk*EGmVT(aw$!XUSe~7Ql-oRA54^4V(JWS6Q1mG?!vZ zx+pE!FEtvqr|Xrcb3oR`%LHFLmU_&{=p%mGy6MRe2Yz_5WJ8p@IgU2 zdVvvhhQtiQkChK%*&PsiPCBL9oDOoJX8!$S(V>R}+1M}wzK*U*A{KJ`r=lM;mPrKU zQDqqN(W*u-5-?$(SIk<6A0E}34y&@-IVC%S!a1F4kz<3bIKjlyD)ooO_7ftl%S_(6w`!vX&1PZ!K`@D@L6JR)6zO@Dl!YF{RY}d3HZ7?Q5E>w=$ ze)H_)48Ds*Ov4?zoGb2fe3}{!5Ooc|KCIni1o)(Gj+CO?`*7jsV`hIv@8J(22o4Q? zu?Bvi)zDG(me?7XKeL|iF9ZRgZdT*}Ffsl62Cu;{Gv9j6dO zPt*H2GqC)-C`V`ceuu=tM{7!2yTEj=*5+T~5DYiZ)Hy)*PARYI6R2lZXoOj;v8M4W z*O-NX(7_~Q&A3>Oaw&1lBH_H%SwmISX-i3)HfHvBOeVwTT{LUM3}ZuZmg<(>)KE;d zbs2!0v6>J;1nQ0UJkUxnkE@Ibi~Q}M=-=Rk;hcOnxO$luOKEVxZc|!XECgex(2`}T z3Y;Q_6rL)e+SrOZhQj5_e}Lv>w7n*Pep$yWZNQl>ubBgb_NIWWDn3kNpn+MPQXV;8 zV|_Ba5jsQ(w&Ey^IM|@|y!AqcJ#3m0#Q6_qvgCG~eoF#mnGmbO(;DP+bW%_aOs1R_ z@9p#7X2UA^--#Nwx_Hvk2l1`eO{P*#j@q2UELtH|Uh6hxR`h_847wIJo0=5CQQ`6it|%a-I$^&a@we1rc&*;QIu5Ck^?) zx*5eSd*mG#=6Hi(5!;5uUi&{HfnT1S8X-)?gE5CZ6KWoqM5|CyrULmuFBKOU8SOp* z{IB1$OCcq`S-k*xs;4fmhKsIGZ;GYAY*%(@875NxhMq|j*m4CNLI(Vho|N|F);!E0cS5y^$H^Izje?z}oTgyr`9x9G&rlJZw&uqIoBMtz zzhU0(9;w02?m#0!)cFi*r+8YvooQ;(s2lLVvyLqAE%Xqe!vtWbIs!l1Bpp(FIht-Z zPn#CN-2C|J*GhA2fuHqYQ2mJiXlGTzD}mkr2;ia8Wp}h^;OS7+N^Mw|en!1${vN6 z-x{8N*4UekA~`IV2&K-GzhAqau|}d*pEQ$1MH$cFi03OG^1NetZ_jW^STaEzr&Xho zB452St%v3ez2#TFm~`gZh$vi=in+y2d!z<{OZ~Kty-5bQ;0O=k_ESi8Nx9{*T`LJy6jqR>&|+>OZ;+=0hA04 zE25t^sE9HG)3^KKR_A5WDkqispweP9!I-@dCO&N!JrD@i{WBHnfQ z95o8;d$`AFnca3;N-0iX-CmbbAp5yQ!GoH;h7Cn?m{ammZJI8igP{U73lFnl2&gCs zqJ4(Vo~^j`{zOAzScL5B_Sm?Mjtek1d(A6X5ObcZi$;aOYy|g$}BY z$GEP3#i60Ju_&3SHzryH!gUFwC9-295u??cf+aYRQ1$+!rc#42YNattd6mZEFI@?C zqFM>6+zxEunIHDZ>{Z15u##>N(28Dw!>G(k*dB{NHvip@aP}f`@=Q;!o;zRMWo{Cx zo?kyzh8n7#f1g0&g>Cd>O-2g?uPwy8sy8hZbHSsXPmU;@l=HL=zm7mN(=@*|D$i+u zs~TllkCTvD$f&-#b9B?}#Lg*-ibK13R_a$RyoN3m5`10tdhAq{+VW)K#Bht-ra1*J z+n$N%V>u0rVtx`aKJDwXXrxaD7nS<>$=c82v7@KVx^S@vT;h=SZE37K>iahpx3;VDzEr9GY=2(%uaqM;^76eSP0QLzo4sI z>p_Eei*T$K;|qK`sq;?Hesp}(@VvX2Q4sAMYAJ}b&d$htDMC{FG-$o4k9ApECi1$a zXdamjiOGKHBh(4M<3(2x6n-CrmZMCknkQxdSS!qlis#I}btfX;J`JU3RlvtLdrymP zG0ZzrsGXVFiq+Wk1=BFay&9ZiCE#(`h~CL+c-Hs@iGTU@YxM%vlg;)`Tf~IknA^02 zXkN#Txo6aR{j$wP5T#|UH#5AP2{rSY8p?jKFv zG3kn3y`FaV!*Jq%m39_TQEhD>M@l*bhEPGe1{ft3q#K5AknT=F2_=T^l#ou5ln@D# z5Tzs(kRG@qNDa~HLNvfv7Z0g=bSlb?`QAx|Gfoni|iHJ%K0cy z;~Nsaa+{8HP_qrb{nj+xzkdYhSI@W4N_1`z(eSGIkbDP)!Ko|M%}Rqp(~KI2hl~eE zvJ!j4m6iwMgKy>fkCLC)`M$z9EV}B+sq1}}kVf$(ig0pWTY?rHz1Sm=4srTGNb^JG z=2$9wz-C@aZZZ2!HY#HNejqZRmE=pN(D$Kui$NpfhU`!y_s{@MIxiJdHb1|{6xb`> zE74_@QtgtG{4=3P1$^vn&m}7Aw8!1DnT$2thO#~44wl(N#ao8S0@t@m+Z!KD2CfK; z)n5DAPKV_etmH1aLDK$?`;sL91iVt$D z*SG}=-LIAg(*+JON!-5ivqOMQ1S!OQUgHglDsKik&Mwg;vva523`JwQH6SRz9eTY# zTIi23145~kc3r1mSWC_RzD%hs$S#!pkI9!BU80jJCJcwo*FZolQG$q`8C1d9pP@ND zG^&-ZraIvhg_FDVSfKGwkcI=avIan%2sK4coUs~Nr8jC*&!G0#?}_^s3r-c}-uAqi zM-Lw>Y}I``T;IS%Y|qH;s{F*ZefM!4{I5awr!K+T@uPd*Vu*iPWI}>(-D{zxsN>LG z=@747a_Rb2>q?y8xYf?dq2HM5tFO8Y5e4N;Y=xy8yAhI zsm>oy%R5;7)7T3V_b2%`aH^tNlsQpFxIFW#iV#8?{6{^cGr{A0@1bA)|K z>MMTuZD(pd2t|7vmHtywGXb%%=)S<`OG~}U+jm#xd%H8 z$v8-C%F?ah3$;hn?{G3(LT!SgvCVi$vwsZssAQvUwT`Q%qSw!LSd!(I!64w1=%Sc1Mck)q1@pZ@)=SY zoX}d+L3-RA|c?G3_BQNm&( z!i$AZ7cI(z7q|e9VM##6T3Xorj1JG(9os$;(I$y%mBy(#8{|3l4|x*oBAQL^XhZ0g zy1FR1teRrpKq{uLAibTLx#n({qwjlkOvR{OdSAeT5ah4-sNN)n4Clg1T9lzF)&yj; zyal1%+s4n1IG;^VPWJ;#olpk8Z42Gj-tjFeQ&PlxB)`oCNoUYKj4U$AeG8rYiD{pK zndDf&2;2;)D|KvOZP+e7fcPU9k4M2sfhr@vC~Ly0?S-4dz)ZGAYpCsAhChgbxLd4g zhTrbIPkO5SEp_kD>Ha0m12h5n3s;mE8kn515&nzSf+^D= zyE{JnJ;43l&BH55CL<=W%CF;6iUI)V5C*6!`**KqvzR2=Fj*3Y4`HYwx}TYD445(K z-QtXwtL?m*(F=LVH*H4oM>dXHBW=38q_dZ-_Vr&qpEPxd9Fs95P5W~@Z|Rt+WZP6l zPSQ}~Dh4V?Pp1g&Hk*Px?lm16C@X6M29Vrk%Rw@E||E-v~$ zb_E~{z<}#8i`Mx9mkqtd#Z1lZ-E_J8I+2oumc#x1)jdvh{W76NKm6x-RYpM~v!P8$ zw3e|YVf|}Hse9~oC@N7^j}Fi$hNpyaYnu1}bdXsD=^oI*%WKvbme|BI}$G3>smu#6y)ls|j? zF7Bhu9Z)j)C;3cZb+I>0stSK^WLOYV^U{pUYkgv>?+Nt^5j*CUB=eGw-CvU&40>y~ zGoHLXxY^7k5Xgv62{iQy|5jJQuq0|LU`}lE@flQ2Z*Zn*VWcQjm4FTb>LSVox^S4q zLn`LfS@mrjKCmg$nb^af?d?0&$aX6#2u(JyzIJvuJ*lwPrh|0~aEnSACCTezSdG%h zmSQg`17j@$Iq)r1&?+eR@1nlX|H`<}_!?BQSF&N+QQnvEAqZe+mIFui!0V49R?|9*$ zv!K1A01{8xq;L()Tv*Qk0-$Oj6+vCT*TUD{HvxO@3JjxBwM!4g3ydy&eaJw4CoQBF zJtULJ!YxgNR7_Ls%LmogyI7uIs=!B&?=MYY^yX+v;j@D_xGeZg>eZk0C;4e|HRNSi z6KlD9>q=3v-$4Zik&^ZDhNm1X)+7LCH1k!s+T3tn zUn@={1U&NJLq@K?~w|(=Y<4W{ucX}FdRr6pLw(l2$iK)At%t3gYBMlJz#(K0Nqm;=KAML!&MMSNz=%k=j*zh77r34Rs37iCY` z=_kva_41bdrj(b=4Wc5MO0~q^z#pIWJ>)vDSgIQF=3JVJe1iDy%h)8oNy{s_r&;m` zL{DYKSB_5xRb9xKNOS{qAY3qv5sSXVrrf%~*q5HO|CQ&lbKMePa$M5D{vlJcoGrCZ zD?fKbZN$6rWwz)w7`9h4DAmh1ij2}EO|bO#A9L0_RW6l*$sPPUJrUbhLC75L9%W5iO$Iw5~Yut-qBeu~hF|xD7-eQ%l z412vpq_;t%^F*pYDk%Q35c-erK|6Ve=FxQbAv~ikZ4c9$Y4;ee#ciOD9{yRqf55Qk zumv}#+JciT|Gj$uFOxBUze)=?l{B}qaC0_7m`t82<$K53!4Xvi9Tr)ADp3Off?O8o zVDG0Yx|tfn@r((m?Nxrh(b0DGjg)$;DfO&$6uY;4&F!4jnxkhP}Y3x zS?WFFt>=HWzqlQhffVfvM$Ta8Sg*r3j!Eo&rUOW7SCL2~lG7<+XZ;+{&8h5g8ElI+P>>yR2U%S93NN!Xhm|C682t6ysH-=o1=Bd*N*VlnG%l+KZFtjG`UkL;%65qn0UYQ`h zh0{9jDQx(`aBe7J0Aj3Z)4}`A|4OMM0a;?{j}qkYwi)~O8$9D}ITiMH2buiU>ixYp zhL${nwj6X($*OwmpVG`y5b6v45tX*J8?og}Qju6eJ9H}`X87iEd%BUo7<`2q(HJx+ zMR}d-J4oAf{V1W^a2~`M-YAdZ81dd4o6NPO{cmZaAS@RS4ir#Sr zfFZO-VIL|VN<%nEXr2` z$0FK2L#8O_f1w~c@G70JrB@N}r(gJ!Vmkk6{r68w!o$qO?HrFcjeU0_3F5;*!E2%( zTx>4?gP8w z1B?3UVZmz^%d_dIps>>0{cB~mp3{9UoPR6uQFecVq&} zY{ebB?AlPAD_}(ll{fK99;Wh1cgRbnw)maD^F>*J!R}eHM*W0VYN1TADWMy9H=$00 z5bHY${oDgwX7(W9LZw?}{!8(_{JB~Xkje6{0x4fgC4kUmpfJ+LT1DYD*TWu4#h{Y7 zFLronmc=hS=W=j1ar3r1JNjQoWo2hMWsqW*e?TF%#&{GpsaLp}iN~$)ar+7Ti}E&X z-nq~+Gkp(`qF0F_4A22>VZn-x>I$?PDZSeG8h_ifoWf^DxIb5%T7UytYo3}F|4#RC zUHpg$=)qVqD~=m(!~?XwocuxU1u}9qhhM7d^eqmJPi_e-!IO`*{u7A zbu*?L$Mbj-X9n3G2>+Kc#l`@d8}Xb9{l*IN{#M*d;s+3Pdr8FO$EBELR=8{ zd?LJbSv9fI`{OqTH)5{b?WulgMb)psp+W|@cSp=jtl-&5C}9lw@*0H+gEW(}mAWNz zf{~U;;N}|wdSaphgqnH{FWUy!{y3^=AC*c?RJ5Eb<^ zCgH_v7^axIUVmHSFL^zlj2R$zow$|y#7>%#U7d#Vp_ezcp3lefMyd5ES=q$>4pWyA zp_Zso^^NP~lu2=S6nD(3Z5u=Uy&B&F1i$J*3;3KhEkD_lgscHGR*;T;U!9vgQa(hI}oh9IzEf_PU_8F+i77t-~gDX z490Sb)LyVZmf18N6w{+37$aO<2!Av0 ztLaPOv^J<2@p{WnMiDudoghX_`luFZt_4eNU}*~cF5i%eEcNLs;D>QVIwr8mH;=dc z09`}JV;aaF;13@&iS(w>Jc=k~|d_1hcpM(l|O zu>!@}me%isTT$xT#hNUvh(ATd0wT4fbv=6htcHNEZIw9%E6wlYmwfu2{j0kh1y=$;Yf!|NldgB9ul zB{dbE&LfRnr8ITm@;-68wo#VV?8lG3ed&9k1}QBS3}WGV9%26?A1rBkkDR9Z3o+g+ z)eQg8BY3y(Dh5&z?VLLNdDV`C=muUvCPpGg!oYxIgOI3^%4>5d7jTh~ni!Fg2;fhx z(*c%H6Je84kmQh;5tC3*l~7khLxK-e|Cz?FLh!yYe7g|*LwqU?2wv^_ZyKT$fYVkGJo@AK0$+ml?}zJeB~deT2WL1vz}dxB z)y??t!}%M@)u$_IyW~)6u1SttJ!awd6N5lx|xBrmyrBh>tb&D*=C+Z3nPfq$1%WgY0bY*?PZ#Hk|=xn zGM#0*w4CaB^y0G(J4q=;5NeM@m-P}#mv7QZNF)M!dK^w{mk_!n0`+Y3PQutu-%NBt zzgPXug?JLEbUL{e_dk;Vd896&yPe(hliVK!lj%5+@BKdcrEZ2Nc_*i@ve*2lB>u~{ zFozd2FM|_0+nAGR4TLNHanQn_Oeb!JrUcvzJ?7p9TTNB}ocO3j$7ij!li8#k6 z@2tSd1>K03K9A#_-MIq)S;T#oE^;>U$)&}okIvDf3lm?kI{d80$>~xKUoS!%q1Pi?WpsUUt(tI ztjNjY*y&Rm9(S(DC2GuPHBJs@5M{RGm`c1z<6nwyN^)rMo-AS{M2$oM9|y%fM|}G~ DHx0+F literal 60756 zcmb5WV{~QRw(p$^Dz@00IL3?^hro$gg*4VI_WAaTyVM5Foj~O|-84 z$;06hMwt*rV;^8iB z1~&0XWpYJmG?Ts^K9PC62H*`G}xom%S%yq|xvG~FIfP=9*f zZoDRJBm*Y0aId=qJ?7dyb)6)JGWGwe)MHeNSzhi)Ko6J<-m@v=a%NsP537lHe0R* z`If4$aaBA#S=w!2z&m>{lpTy^Lm^mg*3?M&7HFv}7K6x*cukLIGX;bQG|QWdn{%_6 zHnwBKr84#B7Z+AnBXa16a?or^R?+>$4`}{*a_>IhbjvyTtWkHw)|ay)ahWUd-qq$~ zMbh6roVsj;_qnC-R{G+Cy6bApVOinSU-;(DxUEl!i2)1EeQ9`hrfqj(nKI7?Z>Xur zoJz-a`PxkYit1HEbv|jy%~DO^13J-ut986EEG=66S}D3!L}Efp;Bez~7tNq{QsUMm zh9~(HYg1pA*=37C0}n4g&bFbQ+?-h-W}onYeE{q;cIy%eZK9wZjSwGvT+&Cgv z?~{9p(;bY_1+k|wkt_|N!@J~aoY@|U_RGoWX<;p{Nu*D*&_phw`8jYkMNpRTWx1H* z>J-Mi_!`M468#5Aix$$u1M@rJEIOc?k^QBc?T(#=n&*5eS#u*Y)?L8Ha$9wRWdH^3D4|Ps)Y?m0q~SiKiSfEkJ!=^`lJ(%W3o|CZ zSrZL-Xxc{OrmsQD&s~zPfNJOpSZUl%V8tdG%ei}lQkM+z@-4etFPR>GOH9+Y_F<3=~SXln9Kb-o~f>2a6Xz@AS3cn^;c_>lUwlK(n>z?A>NbC z`Ud8^aQy>wy=$)w;JZzA)_*Y$Z5hU=KAG&htLw1Uh00yE!|Nu{EZkch zY9O6x7Y??>!7pUNME*d!=R#s)ghr|R#41l!c?~=3CS8&zr6*aA7n9*)*PWBV2w+&I zpW1-9fr3j{VTcls1>ua}F*bbju_Xq%^v;-W~paSqlf zolj*dt`BBjHI)H9{zrkBo=B%>8}4jeBO~kWqO!~Thi!I1H(in=n^fS%nuL=X2+s!p}HfTU#NBGiwEBF^^tKU zbhhv+0dE-sbK$>J#t-J!B$TMgN@Wh5wTtK2BG}4BGfsZOoRUS#G8Cxv|6EI*n&Xxq zt{&OxCC+BNqz$9b0WM7_PyBJEVObHFh%%`~!@MNZlo*oXDCwDcFwT~Rls!aApL<)^ zbBftGKKBRhB!{?fX@l2_y~%ygNFfF(XJzHh#?`WlSL{1lKT*gJM zs>bd^H9NCxqxn(IOky5k-wALFowQr(gw%|`0991u#9jXQh?4l|l>pd6a&rx|v=fPJ z1mutj{YzpJ_gsClbWFk(G}bSlFi-6@mwoQh-XeD*j@~huW4(8ub%^I|azA)h2t#yG z7e_V_<4jlM3D(I+qX}yEtqj)cpzN*oCdYHa!nm%0t^wHm)EmFP*|FMw!tb@&`G-u~ zK)=Sf6z+BiTAI}}i{*_Ac$ffr*Wrv$F7_0gJkjx;@)XjYSh`RjAgrCck`x!zP>Ifu z&%he4P|S)H*(9oB4uvH67^0}I-_ye_!w)u3v2+EY>eD3#8QR24<;7?*hj8k~rS)~7 zSXs5ww)T(0eHSp$hEIBnW|Iun<_i`}VE0Nc$|-R}wlSIs5pV{g_Dar(Zz<4X3`W?K z6&CAIl4U(Qk-tTcK{|zYF6QG5ArrEB!;5s?tW7 zrE3hcFY&k)+)e{+YOJ0X2uDE_hd2{|m_dC}kgEKqiE9Q^A-+>2UonB+L@v3$9?AYw zVQv?X*pK;X4Ovc6Ev5Gbg{{Eu*7{N3#0@9oMI~}KnObQE#Y{&3mM4`w%wN+xrKYgD zB-ay0Q}m{QI;iY`s1Z^NqIkjrTlf`B)B#MajZ#9u41oRBC1oM1vq0i|F59> z#StM@bHt|#`2)cpl_rWB($DNJ3Lap}QM-+A$3pe}NyP(@+i1>o^fe-oxX#Bt`mcQc zb?pD4W%#ep|3%CHAYnr*^M6Czg>~L4?l16H1OozM{P*en298b+`i4$|w$|4AHbzqB zHpYUsHZET$Z0ztC;U+0*+amF!@PI%^oUIZy{`L{%O^i{Xk}X0&nl)n~tVEpcAJSJ} zverw15zP1P-O8h9nd!&hj$zuwjg?DoxYIw{jWM zW5_pj+wFy8Tsa9g<7Qa21WaV&;ejoYflRKcz?#fSH_)@*QVlN2l4(QNk| z4aPnv&mrS&0|6NHq05XQw$J^RR9T{3SOcMKCXIR1iSf+xJ0E_Wv?jEc*I#ZPzyJN2 zUG0UOXHl+PikM*&g$U@g+KbG-RY>uaIl&DEtw_Q=FYq?etc!;hEC_}UX{eyh%dw2V zTTSlap&5>PY{6I#(6`j-9`D&I#|YPP8a;(sOzgeKDWsLa!i-$frD>zr-oid!Hf&yS z!i^cr&7tN}OOGmX2)`8k?Tn!!4=tz~3hCTq_9CdiV!NIblUDxHh(FJ$zs)B2(t5@u z-`^RA1ShrLCkg0)OhfoM;4Z{&oZmAec$qV@ zGQ(7(!CBk<5;Ar%DLJ0p0!ResC#U<+3i<|vib1?{5gCebG7$F7URKZXuX-2WgF>YJ^i zMhHDBsh9PDU8dlZ$yJKtc6JA#y!y$57%sE>4Nt+wF1lfNIWyA`=hF=9Gj%sRwi@vd z%2eVV3y&dvAgyuJ=eNJR+*080dbO_t@BFJO<@&#yqTK&+xc|FRR;p;KVk@J3$S{p` zGaMj6isho#%m)?pOG^G0mzOAw0z?!AEMsv=0T>WWcE>??WS=fII$t$(^PDPMU(P>o z_*0s^W#|x)%tx8jIgZY~A2yG;US0m2ZOQt6yJqW@XNY_>_R7(Nxb8Ged6BdYW6{prd!|zuX$@Q2o6Ona8zzYC1u!+2!Y$Jc9a;wy+pXt}o6~Bu1oF1c zp7Y|SBTNi@=I(K%A60PMjM#sfH$y*c{xUgeSpi#HB`?|`!Tb&-qJ3;vxS!TIzuTZs-&%#bAkAyw9m4PJgvey zM5?up*b}eDEY+#@tKec)-c(#QF0P?MRlD1+7%Yk*jW;)`f;0a-ZJ6CQA?E%>i2Dt7T9?s|9ZF|KP4;CNWvaVKZ+Qeut;Jith_y{v*Ny6Co6!8MZx;Wgo z=qAi%&S;8J{iyD&>3CLCQdTX*$+Rx1AwA*D_J^0>suTgBMBb=*hefV+Ars#mmr+YsI3#!F@Xc1t4F-gB@6aoyT+5O(qMz*zG<9Qq*f0w^V!03rpr*-WLH}; zfM{xSPJeu6D(%8HU%0GEa%waFHE$G?FH^kMS-&I3)ycx|iv{T6Wx}9$$D&6{%1N_8 z_CLw)_9+O4&u94##vI9b-HHm_95m)fa??q07`DniVjAy`t7;)4NpeyAY(aAk(+T_O z1om+b5K2g_B&b2DCTK<>SE$Ode1DopAi)xaJjU>**AJK3hZrnhEQ9E`2=|HHe<^tv z63e(bn#fMWuz>4erc47}!J>U58%<&N<6AOAewyzNTqi7hJc|X{782&cM zHZYclNbBwU6673=!ClmxMfkC$(CykGR@10F!zN1Se83LR&a~$Ht&>~43OX22mt7tcZUpa;9@q}KDX3O&Ugp6< zLZLfIMO5;pTee1vNyVC$FGxzK2f>0Z-6hM82zKg44nWo|n}$Zk6&;5ry3`(JFEX$q zK&KivAe${e^5ZGc3a9hOt|!UOE&OocpVryE$Y4sPcs4rJ>>Kbi2_subQ9($2VN(3o zb~tEzMsHaBmBtaHAyES+d3A(qURgiskSSwUc9CfJ@99&MKp2sooSYZu+-0t0+L*!I zYagjOlPgx|lep9tiU%ts&McF6b0VE57%E0Ho%2oi?=Ks+5%aj#au^OBwNwhec zta6QAeQI^V!dF1C)>RHAmB`HnxyqWx?td@4sd15zPd*Fc9hpDXP23kbBenBxGeD$k z;%0VBQEJ-C)&dTAw_yW@k0u?IUk*NrkJ)(XEeI z9Y>6Vel>#s_v@=@0<{4A{pl=9cQ&Iah0iD0H`q)7NeCIRz8zx;! z^OO;1+IqoQNak&pV`qKW+K0^Hqp!~gSohcyS)?^P`JNZXw@gc6{A3OLZ?@1Uc^I2v z+X!^R*HCm3{7JPq{8*Tn>5;B|X7n4QQ0Bs79uTU%nbqOJh`nX(BVj!#f;#J+WZxx4 z_yM&1Y`2XzhfqkIMO7tB3raJKQS+H5F%o83bM+hxbQ zeeJm=Dvix$2j|b4?mDacb67v-1^lTp${z=jc1=j~QD>7c*@+1?py>%Kj%Ejp7Y-!? z8iYRUlGVrQPandAaxFfks53@2EC#0)%mrnmGRn&>=$H$S8q|kE_iWko4`^vCS2aWg z#!`RHUGyOt*k?bBYu3*j3u0gB#v(3tsije zgIuNNWNtrOkx@Pzs;A9un+2LX!zw+p3_NX^Sh09HZAf>m8l@O*rXy_82aWT$Q>iyy zqO7Of)D=wcSn!0+467&!Hl))eff=$aneB?R!YykdKW@k^_uR!+Q1tR)+IJb`-6=jj zymzA>Sv4>Z&g&WWu#|~GcP7qP&m*w-S$)7Xr;(duqCTe7p8H3k5>Y-n8438+%^9~K z3r^LIT_K{i7DgEJjIocw_6d0!<;wKT`X;&vv+&msmhAAnIe!OTdybPctzcEzBy88_ zWO{6i4YT%e4^WQZB)KHCvA(0tS zHu_Bg+6Ko%a9~$EjRB90`P(2~6uI@SFibxct{H#o&y40MdiXblu@VFXbhz>Nko;7R z70Ntmm-FePqhb%9gL+7U8@(ch|JfH5Fm)5${8|`Lef>LttM_iww6LW2X61ldBmG0z zax3y)njFe>j*T{i0s8D4=L>X^j0)({R5lMGVS#7(2C9@AxL&C-lZQx~czI7Iv+{%1 z2hEG>RzX4S8x3v#9sgGAnPzptM)g&LB}@%E>fy0vGSa(&q0ch|=ncKjNrK z`jA~jObJhrJ^ri|-)J^HUyeZXz~XkBp$VhcTEcTdc#a2EUOGVX?@mYx#Vy*!qO$Jv zQ4rgOJ~M*o-_Wptam=~krnmG*p^j!JAqoQ%+YsDFW7Cc9M%YPiBOrVcD^RY>m9Pd< zu}#9M?K{+;UIO!D9qOpq9yxUquQRmQNMo0pT`@$pVt=rMvyX)ph(-CCJLvUJy71DI zBk7oc7)-%ngdj~s@76Yse3L^gV0 z2==qfp&Q~L(+%RHP0n}+xH#k(hPRx(!AdBM$JCfJ5*C=K3ts>P?@@SZ_+{U2qFZb>4kZ{Go37{# zSQc+-dq*a-Vy4?taS&{Ht|MLRiS)Sn14JOONyXqPNnpq&2y~)6wEG0oNy>qvod$FF z`9o&?&6uZjhZ4_*5qWVrEfu(>_n2Xi2{@Gz9MZ8!YmjYvIMasE9yVQL10NBrTCczq zcTY1q^PF2l!Eraguf{+PtHV3=2A?Cu&NN&a8V(y;q(^_mFc6)%Yfn&X&~Pq zU1?qCj^LF(EQB1F`8NxNjyV%fde}dEa(Hx=r7$~ts2dzDwyi6ByBAIx$NllB4%K=O z$AHz1<2bTUb>(MCVPpK(E9wlLElo(aSd(Os)^Raum`d(g9Vd_+Bf&V;l=@mM=cC>) z)9b0enb)u_7V!!E_bl>u5nf&Rl|2r=2F3rHMdb7y9E}}F82^$Rf+P8%dKnOeKh1vs zhH^P*4Ydr^$)$h@4KVzxrHyy#cKmWEa9P5DJ|- zG;!Qi35Tp7XNj60=$!S6U#!(${6hyh7d4q=pF{`0t|N^|L^d8pD{O9@tF~W;#Je*P z&ah%W!KOIN;SyAEhAeTafJ4uEL`(RtnovM+cb(O#>xQnk?dzAjG^~4$dFn^<@-Na3 z395;wBnS{t*H;Jef2eE!2}u5Ns{AHj>WYZDgQJt8v%x?9{MXqJsGP|l%OiZqQ1aB! z%E=*Ig`(!tHh>}4_z5IMpg{49UvD*Pp9!pxt_gdAW%sIf3k6CTycOT1McPl=_#0?8 zVjz8Hj*Vy9c5-krd-{BQ{6Xy|P$6LJvMuX$* zA+@I_66_ET5l2&gk9n4$1M3LN8(yEViRx&mtd#LD}AqEs?RW=xKC(OCWH;~>(X6h!uDxXIPH06xh z*`F4cVlbDP`A)-fzf>MuScYsmq&1LUMGaQ3bRm6i7OsJ|%uhTDT zlvZA1M}nz*SalJWNT|`dBm1$xlaA>CCiQ zK`xD-RuEn>-`Z?M{1%@wewf#8?F|(@1e0+T4>nmlSRrNK5f)BJ2H*$q(H>zGD0>eL zQ!tl_Wk)k*e6v^m*{~A;@6+JGeWU-q9>?+L_#UNT%G?4&BnOgvm9@o7l?ov~XL+et zbGT)|G7)KAeqb=wHSPk+J1bdg7N3$vp(ekjI1D9V$G5Cj!=R2w=3*4!z*J-r-cyeb zd(i2KmX!|Lhey!snRw z?#$Gu%S^SQEKt&kep)up#j&9}e+3=JJBS(s>MH+|=R(`8xK{mmndWo_r`-w1#SeRD&YtAJ#GiVI*TkQZ}&aq<+bU2+coU3!jCI6E+Ad_xFW*ghnZ$q zAoF*i&3n1j#?B8x;kjSJD${1jdRB;)R*)Ao!9bd|C7{;iqDo|T&>KSh6*hCD!rwv= zyK#F@2+cv3=|S1Kef(E6Niv8kyLVLX&e=U;{0x{$tDfShqkjUME>f8d(5nzSkY6@! z^-0>DM)wa&%m#UF1F?zR`8Y3X#tA!*7Q$P3lZJ%*KNlrk_uaPkxw~ zxZ1qlE;Zo;nb@!SMazSjM>;34ROOoygo%SF);LL>rRonWwR>bmSd1XD^~sGSu$Gg# zFZ`|yKU0%!v07dz^v(tY%;So(e`o{ZYTX`hm;@b0%8|H>VW`*cr8R%3n|ehw2`(9B+V72`>SY}9^8oh$En80mZK9T4abVG*to;E z1_S6bgDOW?!Oy1LwYy=w3q~KKdbNtyH#d24PFjX)KYMY93{3-mPP-H>@M-_>N~DDu zENh~reh?JBAK=TFN-SfDfT^=+{w4ea2KNWXq2Y<;?(gf(FgVp8Zp-oEjKzB%2Iqj;48GmY3h=bcdYJ}~&4tS`Q1sb=^emaW$IC$|R+r-8V- zf0$gGE(CS_n4s>oicVk)MfvVg#I>iDvf~Ov8bk}sSxluG!6#^Z_zhB&U^`eIi1@j( z^CK$z^stBHtaDDHxn+R;3u+>Lil^}fj?7eaGB z&5nl^STqcaBxI@v>%zG|j))G(rVa4aY=B@^2{TFkW~YP!8!9TG#(-nOf^^X-%m9{Z zCC?iC`G-^RcBSCuk=Z`(FaUUe?hf3{0C>>$?Vs z`2Uud9M+T&KB6o4o9kvdi^Q=Bw!asPdxbe#W-Oaa#_NP(qpyF@bVxv5D5))srkU#m zj_KA+#7sqDn*Ipf!F5Byco4HOSd!Ui$l94|IbW%Ny(s1>f4|Mv^#NfB31N~kya9!k zWCGL-$0ZQztBate^fd>R!hXY_N9ZjYp3V~4_V z#eB)Kjr8yW=+oG)BuNdZG?jaZlw+l_ma8aET(s+-x+=F-t#Qoiuu1i`^x8Sj>b^U} zs^z<()YMFP7CmjUC@M=&lA5W7t&cxTlzJAts*%PBDAPuqcV5o7HEnqjif_7xGt)F% zGx2b4w{@!tE)$p=l3&?Bf#`+!-RLOleeRk3 z7#pF|w@6_sBmn1nECqdunmG^}pr5(ZJQVvAt$6p3H(16~;vO>?sTE`Y+mq5YP&PBo zvq!7#W$Gewy`;%6o^!Dtjz~x)T}Bdk*BS#=EY=ODD&B=V6TD2z^hj1m5^d6s)D*wk zu$z~D7QuZ2b?5`p)E8e2_L38v3WE{V`bVk;6fl#o2`) z99JsWhh?$oVRn@$S#)uK&8DL8>An0&S<%V8hnGD7Z^;Y(%6;^9!7kDQ5bjR_V+~wp zfx4m3z6CWmmZ<8gDGUyg3>t8wgJ5NkkiEm^(sedCicP^&3D%}6LtIUq>mXCAt{9eF zNXL$kGcoUTf_Lhm`t;hD-SE)m=iBnxRU(NyL}f6~1uH)`K!hmYZjLI%H}AmEF5RZt z06$wn63GHnApHXZZJ}s^s)j9(BM6e*7IBK6Bq(!)d~zR#rbxK9NVIlgquoMq z=eGZ9NR!SEqP6=9UQg#@!rtbbSBUM#ynF);zKX+|!Zm}*{H z+j=d?aZ2!?@EL7C~%B?6ouCKLnO$uWn;Y6Xz zX8dSwj732u(o*U3F$F=7xwxm>E-B+SVZH;O-4XPuPkLSt_?S0)lb7EEg)Mglk0#eS z9@jl(OnH4juMxY+*r03VDfPx_IM!Lmc(5hOI;`?d37f>jPP$?9jQQIQU@i4vuG6MagEoJrQ=RD7xt@8E;c zeGV*+Pt+t$@pt!|McETOE$9k=_C!70uhwRS9X#b%ZK z%q(TIUXSS^F0`4Cx?Rk07C6wI4!UVPeI~-fxY6`YH$kABdOuiRtl73MqG|~AzZ@iL&^s?24iS;RK_pdlWkhcF z@Wv-Om(Aealfg)D^adlXh9Nvf~Uf@y;g3Y)i(YP zEXDnb1V}1pJT5ZWyw=1i+0fni9yINurD=EqH^ciOwLUGi)C%Da)tyt=zq2P7pV5-G zR7!oq28-Fgn5pW|nlu^b!S1Z#r7!Wtr{5J5PQ>pd+2P7RSD?>(U7-|Y z7ZQ5lhYIl_IF<9?T9^IPK<(Hp;l5bl5tF9>X-zG14_7PfsA>6<$~A338iYRT{a@r_ zuXBaT=`T5x3=s&3=RYx6NgG>No4?5KFBVjE(swfcivcIpPQFx5l+O;fiGsOrl5teR z_Cm+;PW}O0Dwe_(4Z@XZ)O0W-v2X><&L*<~*q3dg;bQW3g7)a#3KiQP>+qj|qo*Hk z?57>f2?f@`=Fj^nkDKeRkN2d$Z@2eNKpHo}ksj-$`QKb6n?*$^*%Fb3_Kbf1(*W9K>{L$mud2WHJ=j0^=g30Xhg8$#g^?36`p1fm;;1@0Lrx+8t`?vN0ZorM zSW?rhjCE8$C|@p^sXdx z|NOHHg+fL;HIlqyLp~SSdIF`TnSHehNCU9t89yr@)FY<~hu+X`tjg(aSVae$wDG*C zq$nY(Y494R)hD!i1|IIyP*&PD_c2FPgeY)&mX1qujB1VHPG9`yFQpLFVQ0>EKS@Bp zAfP5`C(sWGLI?AC{XEjLKR4FVNw(4+9b?kba95ukgR1H?w<8F7)G+6&(zUhIE5Ef% z=fFkL3QKA~M@h{nzjRq!Y_t!%U66#L8!(2-GgFxkD1=JRRqk=n%G(yHKn%^&$dW>; zSjAcjETMz1%205se$iH_)ZCpfg_LwvnsZQAUCS#^FExp8O4CrJb6>JquNV@qPq~3A zZ<6dOU#6|8+fcgiA#~MDmcpIEaUO02L5#T$HV0$EMD94HT_eXLZ2Zi&(! z&5E>%&|FZ`)CN10tM%tLSPD*~r#--K(H-CZqIOb99_;m|D5wdgJ<1iOJz@h2Zkq?} z%8_KXb&hf=2Wza(Wgc;3v3TN*;HTU*q2?#z&tLn_U0Nt!y>Oo>+2T)He6%XuP;fgn z-G!#h$Y2`9>Jtf}hbVrm6D70|ERzLAU>3zoWhJmjWfgM^))T+2u$~5>HF9jQDkrXR z=IzX36)V75PrFjkQ%TO+iqKGCQ-DDXbaE;C#}!-CoWQx&v*vHfyI>$HNRbpvm<`O( zlx9NBWD6_e&J%Ous4yp~s6)Ghni!I6)0W;9(9$y1wWu`$gs<$9Mcf$L*piP zPR0Av*2%ul`W;?-1_-5Zy0~}?`e@Y5A&0H!^ApyVTT}BiOm4GeFo$_oPlDEyeGBbh z1h3q&Dx~GmUS|3@4V36&$2uO8!Yp&^pD7J5&TN{?xphf*-js1fP?B|`>p_K>lh{ij zP(?H%e}AIP?_i^f&Li=FDSQ`2_NWxL+BB=nQr=$ zHojMlXNGauvvwPU>ZLq!`bX-5F4jBJ&So{kE5+ms9UEYD{66!|k~3vsP+mE}x!>%P za98bAU0!h0&ka4EoiDvBM#CP#dRNdXJcb*(%=<(g+M@<)DZ!@v1V>;54En?igcHR2 zhubQMq}VSOK)onqHfczM7YA@s=9*ow;k;8)&?J3@0JiGcP! zP#00KZ1t)GyZeRJ=f0^gc+58lc4Qh*S7RqPIC6GugG1gXe$LIQMRCo8cHf^qXgAa2 z`}t>u2Cq1CbSEpLr~E=c7~=Qkc9-vLE%(v9N*&HF`(d~(0`iukl5aQ9u4rUvc8%m) zr2GwZN4!s;{SB87lJB;veebPmqE}tSpT>+`t?<457Q9iV$th%i__Z1kOMAswFldD6 ztbOvO337S5o#ZZgN2G99_AVqPv!?Gmt3pzgD+Hp3QPQ`9qJ(g=kjvD+fUSS3upJn! zqoG7acIKEFRX~S}3|{EWT$kdz#zrDlJU(rPkxjws_iyLKU8+v|*oS_W*-guAb&Pj1 z35Z`3z<&Jb@2Mwz=KXucNYdY#SNO$tcVFr9KdKm|%^e-TXzs6M`PBper%ajkrIyUe zp$vVxVs9*>Vp4_1NC~Zg)WOCPmOxI1V34QlG4!aSFOH{QqSVq1^1)- z0P!Z?tT&E-ll(pwf0?=F=yOzik=@nh1Clxr9}Vij89z)ePDSCYAqw?lVI?v?+&*zH z)p$CScFI8rrwId~`}9YWPFu0cW1Sf@vRELs&cbntRU6QfPK-SO*mqu|u~}8AJ!Q$z znzu}50O=YbjwKCuSVBs6&CZR#0FTu)3{}qJJYX(>QPr4$RqWiwX3NT~;>cLn*_&1H zaKpIW)JVJ>b{uo2oq>oQt3y=zJjb%fU@wLqM{SyaC6x2snMx-}ivfU<1- znu1Lh;i$3Tf$Kh5Uk))G!D1UhE8pvx&nO~w^fG)BC&L!_hQk%^p`Kp@F{cz>80W&T ziOK=Sq3fdRu*V0=S53rcIfWFazI}Twj63CG(jOB;$*b`*#B9uEnBM`hDk*EwSRdwP8?5T?xGUKs=5N83XsR*)a4|ijz|c{4tIU+4j^A5C<#5 z*$c_d=5ml~%pGxw#?*q9N7aRwPux5EyqHVkdJO=5J>84!X6P>DS8PTTz>7C#FO?k#edkntG+fJk8ZMn?pmJSO@`x-QHq;7^h6GEXLXo1TCNhH z8ZDH{*NLAjo3WM`xeb=X{((uv3H(8&r8fJJg_uSs_%hOH%JDD?hu*2NvWGYD+j)&` zz#_1%O1wF^o5ryt?O0n;`lHbzp0wQ?rcbW(F1+h7_EZZ9{>rePvLAPVZ_R|n@;b$;UchU=0j<6k8G9QuQf@76oiE*4 zXOLQ&n3$NR#p4<5NJMVC*S);5x2)eRbaAM%VxWu9ohlT;pGEk7;002enCbQ>2r-us z3#bpXP9g|mE`65VrN`+3mC)M(eMj~~eOf)do<@l+fMiTR)XO}422*1SL{wyY(%oMpBgJagtiDf zz>O6(m;};>Hi=t8o{DVC@YigqS(Qh+ix3Rwa9aliH}a}IlOCW1@?%h_bRbq-W{KHF z%Vo?-j@{Xi@=~Lz5uZP27==UGE15|g^0gzD|3x)SCEXrx`*MP^FDLl%pOi~~Il;dc z^hrwp9sYeT7iZ)-ajKy@{a`kr0-5*_!XfBpXwEcFGJ;%kV$0Nx;apKrur zJN2J~CAv{Zjj%FolyurtW8RaFmpn&zKJWL>(0;;+q(%(Hx!GMW4AcfP0YJ*Vz!F4g z!ZhMyj$BdXL@MlF%KeInmPCt~9&A!;cRw)W!Hi@0DY(GD_f?jeV{=s=cJ6e}JktJw zQORnxxj3mBxfrH=x{`_^Z1ddDh}L#V7i}$njUFRVwOX?qOTKjfPMBO4y(WiU<)epb zvB9L=%jW#*SL|Nd_G?E*_h1^M-$PG6Pc_&QqF0O-FIOpa4)PAEPsyvB)GKasmBoEt z?_Q2~QCYGH+hW31x-B=@5_AN870vY#KB~3a*&{I=f);3Kv7q4Q7s)0)gVYx2#Iz9g(F2;=+Iy4 z6KI^8GJ6D@%tpS^8boU}zpi=+(5GfIR)35PzrbuXeL1Y1N%JK7PG|^2k3qIqHfX;G zQ}~JZ-UWx|60P5?d1e;AHx!_;#PG%d=^X(AR%i`l0jSpYOpXoKFW~7ip7|xvN;2^? zsYC9fanpO7rO=V7+KXqVc;Q5z%Bj})xHVrgoR04sA2 zl~DAwv=!(()DvH*=lyhIlU^hBkA0$e*7&fJpB0|oB7)rqGK#5##2T`@_I^|O2x4GO z;xh6ROcV<9>?e0)MI(y++$-ksV;G;Xe`lh76T#Htuia+(UrIXrf9?

L(tZ$0BqX1>24?V$S+&kLZ`AodQ4_)P#Q3*4xg8}lMV-FLwC*cN$< zt65Rf%7z41u^i=P*qO8>JqXPrinQFapR7qHAtp~&RZ85$>ob|Js;GS^y;S{XnGiBc zGa4IGvDl?x%gY`vNhv8wgZnP#UYI-w*^4YCZnxkF85@ldepk$&$#3EAhrJY0U)lR{F6sM3SONV^+$;Zx8BD&Eku3K zKNLZyBni3)pGzU0;n(X@1fX8wYGKYMpLmCu{N5-}epPDxClPFK#A@02WM3!myN%bkF z|GJ4GZ}3sL{3{qXemy+#Uk{4>Kf8v11;f8I&c76+B&AQ8udd<8gU7+BeWC`akUU~U zgXoxie>MS@rBoyY8O8Tc&8id!w+_ooxcr!1?#rc$-|SBBtH6S?)1e#P#S?jFZ8u-Bs&k`yLqW|{j+%c#A4AQ>+tj$Y z^CZajspu$F%73E68Lw5q7IVREED9r1Ijsg#@DzH>wKseye>hjsk^{n0g?3+gs@7`i zHx+-!sjLx^fS;fY!ERBU+Q zVJ!e0hJH%P)z!y%1^ZyG0>PN@5W~SV%f>}c?$H8r;Sy-ui>aruVTY=bHe}$e zi&Q4&XK!qT7-XjCrDaufT@>ieQ&4G(SShUob0Q>Gznep9fR783jGuUynAqc6$pYX; z7*O@@JW>O6lKIk0G00xsm|=*UVTQBB`u1f=6wGAj%nHK_;Aqmfa!eAykDmi-@u%6~ z;*c!pS1@V8r@IX9j&rW&d*}wpNs96O2Ute>%yt{yv>k!6zfT6pru{F1M3P z2WN1JDYqoTB#(`kE{H676QOoX`cnqHl1Yaru)>8Ky~VU{)r#{&s86Vz5X)v15ULHA zAZDb{99+s~qI6;-dQ5DBjHJP@GYTwn;Dv&9kE<0R!d z8tf1oq$kO`_sV(NHOSbMwr=To4r^X$`sBW4$gWUov|WY?xccQJN}1DOL|GEaD_!@& z15p?Pj+>7d`@LvNIu9*^hPN)pwcv|akvYYq)ks%`G>!+!pW{-iXPZsRp8 z35LR;DhseQKWYSD`%gO&k$Dj6_6q#vjWA}rZcWtQr=Xn*)kJ9kacA=esi*I<)1>w^ zO_+E>QvjP)qiSZg9M|GNeLtO2D7xT6vsj`88sd!94j^AqxFLi}@w9!Y*?nwWARE0P znuI_7A-saQ+%?MFA$gttMV-NAR^#tjl_e{R$N8t2NbOlX373>e7Ox=l=;y#;M7asp zRCz*CLnrm$esvSb5{T<$6CjY zmZ(i{Rs_<#pWW>(HPaaYj`%YqBra=Ey3R21O7vUbzOkJJO?V`4-D*u4$Me0Bx$K(lYo`JO}gnC zx`V}a7m-hLU9Xvb@K2ymioF)vj12<*^oAqRuG_4u%(ah?+go%$kOpfb`T96P+L$4> zQ#S+sA%VbH&mD1k5Ak7^^dZoC>`1L%i>ZXmooA!%GI)b+$D&ziKrb)a=-ds9xk#~& z7)3iem6I|r5+ZrTRe_W861x8JpD`DDIYZNm{$baw+$)X^Jtjnl0xlBgdnNY}x%5za zkQ8E6T<^$sKBPtL4(1zi_Rd(tVth*3Xs!ulflX+70?gb&jRTnI8l+*Aj9{|d%qLZ+ z>~V9Z;)`8-lds*Zgs~z1?Fg?Po7|FDl(Ce<*c^2=lFQ~ahwh6rqSjtM5+$GT>3WZW zj;u~w9xwAhOc<kF}~`CJ68 z?(S5vNJa;kriPlim33{N5`C{9?NWhzsna_~^|K2k4xz1`xcui*LXL-1#Y}Hi9`Oo!zQ>x-kgAX4LrPz63uZ+?uG*84@PKq-KgQlMNRwz=6Yes) zY}>YN+qP}nwr$(CZQFjUOI=-6J$2^XGvC~EZ+vrqWaOXB$k?%Suf5k=4>AveC1aJ! ziaW4IS%F$_Babi)kA8Y&u4F7E%99OPtm=vzw$$ zEz#9rvn`Iot_z-r3MtV>k)YvErZ<^Oa${`2>MYYODSr6?QZu+be-~MBjwPGdMvGd!b!elsdi4% z`37W*8+OGulab8YM?`KjJ8e+jM(tqLKSS@=jimq3)Ea2EB%88L8CaM+aG7;27b?5` z4zuUWBr)f)k2o&xg{iZ$IQkJ+SK>lpq4GEacu~eOW4yNFLU!Kgc{w4&D$4ecm0f}~ zTTzquRW@`f0}|IILl`!1P+;69g^upiPA6F{)U8)muWHzexRenBU$E^9X-uIY2%&1w z_=#5*(nmxJ9zF%styBwivi)?#KMG96-H@hD-H_&EZiRNsfk7mjBq{L%!E;Sqn!mVX*}kXhwH6eh;b42eD!*~upVG@ z#smUqz$ICm!Y8wY53gJeS|Iuard0=;k5i5Z_hSIs6tr)R4n*r*rE`>38Pw&lkv{_r!jNN=;#?WbMj|l>cU(9trCq; z%nN~r^y7!kH^GPOf3R}?dDhO=v^3BeP5hF|%4GNQYBSwz;x({21i4OQY->1G=KFyu z&6d`f2tT9Yl_Z8YACZaJ#v#-(gcyeqXMhYGXb=t>)M@fFa8tHp2x;ODX=Ap@a5I=U z0G80^$N0G4=U(>W%mrrThl0DjyQ-_I>+1Tdd_AuB3qpYAqY54upwa3}owa|x5iQ^1 zEf|iTZxKNGRpI>34EwkIQ2zHDEZ=(J@lRaOH>F|2Z%V_t56Km$PUYu^xA5#5Uj4I4RGqHD56xT%H{+P8Ag>e_3pN$4m8n>i%OyJFPNWaEnJ4McUZPa1QmOh?t8~n& z&RulPCors8wUaqMHECG=IhB(-tU2XvHP6#NrLVyKG%Ee*mQ5Ps%wW?mcnriTVRc4J`2YVM>$ixSF2Xi+Wn(RUZnV?mJ?GRdw%lhZ+t&3s7g!~g{%m&i<6 z5{ib-<==DYG93I(yhyv4jp*y3#*WNuDUf6`vTM%c&hiayf(%=x@4$kJ!W4MtYcE#1 zHM?3xw63;L%x3drtd?jot!8u3qeqctceX3m;tWetK+>~q7Be$h>n6riK(5@ujLgRS zvOym)k+VAtyV^mF)$29Y`nw&ijdg~jYpkx%*^ z8dz`C*g=I?;clyi5|!27e2AuSa$&%UyR(J3W!A=ZgHF9OuKA34I-1U~pyD!KuRkjA zbkN!?MfQOeN>DUPBxoy5IX}@vw`EEB->q!)8fRl_mqUVuRu|C@KD-;yl=yKc=ZT0% zB$fMwcC|HE*0f8+PVlWHi>M`zfsA(NQFET?LrM^pPcw`cK+Mo0%8*x8@65=CS_^$cG{GZQ#xv($7J z??R$P)nPLodI;P!IC3eEYEHh7TV@opr#*)6A-;EU2XuogHvC;;k1aI8asq7ovoP!* z?x%UoPrZjj<&&aWpsbr>J$Er-7!E(BmOyEv!-mbGQGeJm-U2J>74>o5x`1l;)+P&~ z>}f^=Rx(ZQ2bm+YE0u=ZYrAV@apyt=v1wb?R@`i_g64YyAwcOUl=C!i>=Lzb$`tjv zOO-P#A+)t-JbbotGMT}arNhJmmGl-lyUpMn=2UacVZxmiG!s!6H39@~&uVokS zG=5qWhfW-WOI9g4!R$n7!|ViL!|v3G?GN6HR0Pt_L5*>D#FEj5wM1DScz4Jv@Sxnl zB@MPPmdI{(2D?;*wd>3#tjAirmUnQoZrVv`xM3hARuJksF(Q)wd4P$88fGYOT1p6U z`AHSN!`St}}UMBT9o7i|G`r$ zrB=s$qV3d6$W9@?L!pl0lf%)xs%1ko^=QY$ty-57=55PvP(^6E7cc zGJ*>m2=;fOj?F~yBf@K@9qwX0hA803Xw+b0m}+#a(>RyR8}*Y<4b+kpp|OS+!whP( zH`v{%s>jsQI9rd$*vm)EkwOm#W_-rLTHcZRek)>AtF+~<(did)*oR1|&~1|e36d-d zgtm5cv1O0oqgWC%Et@P4Vhm}Ndl(Y#C^MD03g#PH-TFy+7!Osv1z^UWS9@%JhswEq~6kSr2DITo59+; ze=ZC}i2Q?CJ~Iyu?vn|=9iKV>4j8KbxhE4&!@SQ^dVa-gK@YfS9xT(0kpW*EDjYUkoj! zE49{7H&E}k%5(>sM4uGY)Q*&3>{aitqdNnRJkbOmD5Mp5rv-hxzOn80QsG=HJ_atI-EaP69cacR)Uvh{G5dTpYG7d zbtmRMq@Sexey)||UpnZ?;g_KMZq4IDCy5}@u!5&B^-=6yyY{}e4Hh3ee!ZWtL*s?G zxG(A!<9o!CL+q?u_utltPMk+hn?N2@?}xU0KlYg?Jco{Yf@|mSGC<(Zj^yHCvhmyx z?OxOYoxbptDK()tsJ42VzXdINAMWL$0Gcw?G(g8TMB)Khw_|v9`_ql#pRd2i*?CZl z7k1b!jQB=9-V@h%;Cnl7EKi;Y^&NhU0mWEcj8B|3L30Ku#-9389Q+(Yet0r$F=+3p z6AKOMAIi|OHyzlHZtOm73}|ntKtFaXF2Fy|M!gOh^L4^62kGUoWS1i{9gsds_GWBc zLw|TaLP64z3z9?=R2|T6Xh2W4_F*$cq>MtXMOy&=IPIJ`;!Tw?PqvI2b*U1)25^<2 zU_ZPoxg_V0tngA0J+mm?3;OYw{i2Zb4x}NedZug!>EoN3DC{1i)Z{Z4m*(y{ov2%- zk(w>+scOO}MN!exSc`TN)!B=NUX`zThWO~M*ohqq;J2hx9h9}|s#?@eR!=F{QTrq~ zTcY|>azkCe$|Q0XFUdpFT=lTcyW##i;-e{}ORB4D?t@SfqGo_cS z->?^rh$<&n9DL!CF+h?LMZRi)qju!meugvxX*&jfD!^1XB3?E?HnwHP8$;uX{Rvp# zh|)hM>XDv$ZGg=$1{+_bA~u-vXqlw6NH=nkpyWE0u}LQjF-3NhATL@9rRxMnpO%f7 z)EhZf{PF|mKIMFxnC?*78(}{Y)}iztV12}_OXffJ;ta!fcFIVjdchyHxH=t%ci`Xd zX2AUB?%?poD6Zv*&BA!6c5S#|xn~DK01#XvjT!w!;&`lDXSJT4_j$}!qSPrb37vc{ z9^NfC%QvPu@vlxaZ;mIbn-VHA6miwi8qJ~V;pTZkKqqOii<1Cs}0i?uUIss;hM4dKq^1O35y?Yp=l4i zf{M!@QHH~rJ&X~8uATV><23zZUbs-J^3}$IvV_ANLS08>k`Td7aU_S1sLsfi*C-m1 z-e#S%UGs4E!;CeBT@9}aaI)qR-6NU@kvS#0r`g&UWg?fC7|b^_HyCE!8}nyh^~o@< zpm7PDFs9yxp+byMS(JWm$NeL?DNrMCNE!I^ko-*csB+dsf4GAq{=6sfyf4wb>?v1v zmb`F*bN1KUx-`ra1+TJ37bXNP%`-Fd`vVQFTwWpX@;s(%nDQa#oWhgk#mYlY*!d>( zE&!|ySF!mIyfING+#%RDY3IBH_fW$}6~1%!G`suHub1kP@&DoAd5~7J55;5_noPI6eLf{t;@9Kf<{aO0`1WNKd?<)C-|?C?)3s z>wEq@8=I$Wc~Mt$o;g++5qR+(6wt9GI~pyrDJ%c?gPZe)owvy^J2S=+M^ z&WhIE`g;;J^xQLVeCtf7b%Dg#Z2gq9hp_%g)-%_`y*zb; zn9`f`mUPN-Ts&fFo(aNTsXPA|J!TJ{0hZp0^;MYHLOcD=r_~~^ymS8KLCSeU3;^QzJNqS z5{5rEAv#l(X?bvwxpU;2%pQftF`YFgrD1jt2^~Mt^~G>T*}A$yZc@(k9orlCGv&|1 zWWvVgiJsCAtamuAYT~nzs?TQFt<1LSEx!@e0~@yd6$b5!Zm(FpBl;(Cn>2vF?k zOm#TTjFwd2D-CyA!mqR^?#Uwm{NBemP>(pHmM}9;;8`c&+_o3#E5m)JzfwN?(f-a4 zyd%xZc^oQx3XT?vcCqCX&Qrk~nu;fxs@JUoyVoi5fqpi&bUhQ2y!Ok2pzsFR(M(|U zw3E+kH_zmTRQ9dUMZWRE%Zakiwc+lgv7Z%|YO9YxAy`y28`Aw;WU6HXBgU7fl@dnt z-fFBV)}H-gqP!1;V@Je$WcbYre|dRdp{xt!7sL3Eoa%IA`5CAA%;Wq8PktwPdULo! z8!sB}Qt8#jH9Sh}QiUtEPZ6H0b*7qEKGJ%ITZ|vH)5Q^2m<7o3#Z>AKc%z7_u`rXA zqrCy{-{8;9>dfllLu$^M5L z-hXs))h*qz%~ActwkIA(qOVBZl2v4lwbM>9l70Y`+T*elINFqt#>OaVWoja8RMsep z6Or3f=oBnA3vDbn*+HNZP?8LsH2MY)x%c13@(XfuGR}R?Nu<|07{$+Lc3$Uv^I!MQ z>6qWgd-=aG2Y^24g4{Bw9ueOR)(9h`scImD=86dD+MnSN4$6 z^U*o_mE-6Rk~Dp!ANp#5RE9n*LG(Vg`1)g6!(XtDzsov$Dvz|Gv1WU68J$CkshQhS zCrc|cdkW~UK}5NeaWj^F4MSgFM+@fJd{|LLM)}_O<{rj z+?*Lm?owq?IzC%U%9EBga~h-cJbIu=#C}XuWN>OLrc%M@Gu~kFEYUi4EC6l#PR2JS zQUkGKrrS#6H7}2l0F@S11DP`@pih0WRkRJl#F;u{c&ZC{^$Z+_*lB)r)-bPgRFE;* zl)@hK4`tEP=P=il02x7-C7p%l=B`vkYjw?YhdJU9!P!jcmY$OtC^12w?vy3<<=tlY zUwHJ_0lgWN9vf>1%WACBD{UT)1qHQSE2%z|JHvP{#INr13jM}oYv_5#xsnv9`)UAO zuwgyV4YZ;O)eSc3(mka6=aRohi!HH@I#xq7kng?Acdg7S4vDJb6cI5fw?2z%3yR+| zU5v@Hm}vy;${cBp&@D=HQ9j7NcFaOYL zj-wV=eYF{|XTkFNM2uz&T8uH~;)^Zo!=KP)EVyH6s9l1~4m}N%XzPpduPg|h-&lL` zAXspR0YMOKd2yO)eMFFJ4?sQ&!`dF&!|niH*!^*Ml##o0M(0*uK9&yzekFi$+mP9s z>W9d%Jb)PtVi&-Ha!o~Iyh@KRuKpQ@)I~L*d`{O8!kRObjO7=n+Gp36fe!66neh+7 zW*l^0tTKjLLzr`x4`_8&on?mjW-PzheTNox8Hg7Nt@*SbE-%kP2hWYmHu#Fn@Q^J(SsPUz*|EgOoZ6byg3ew88UGdZ>9B2Tq=jF72ZaR=4u%1A6Vm{O#?@dD!(#tmR;eP(Fu z{$0O%=Vmua7=Gjr8nY%>ul?w=FJ76O2js&17W_iq2*tb!i{pt#`qZB#im9Rl>?t?0c zicIC}et_4d+CpVPx)i4~$u6N-QX3H77ez z?ZdvXifFk|*F8~L(W$OWM~r`pSk5}#F?j_5u$Obu9lDWIknO^AGu+Blk7!9Sb;NjS zncZA?qtASdNtzQ>z7N871IsPAk^CC?iIL}+{K|F@BuG2>qQ;_RUYV#>hHO(HUPpk@ z(bn~4|F_jiZi}Sad;_7`#4}EmD<1EiIxa48QjUuR?rC}^HRocq`OQPM@aHVKP9E#q zy%6bmHygCpIddPjE}q_DPC`VH_2m;Eey&ZH)E6xGeStOK7H)#+9y!%-Hm|QF6w#A( zIC0Yw%9j$s-#odxG~C*^MZ?M<+&WJ+@?B_QPUyTg9DJGtQN#NIC&-XddRsf3n^AL6 zT@P|H;PvN;ZpL0iv$bRb7|J{0o!Hq+S>_NrH4@coZtBJu#g8#CbR7|#?6uxi8d+$g z87apN>EciJZ`%Zv2**_uiET9Vk{pny&My;+WfGDw4EVL#B!Wiw&M|A8f1A@ z(yFQS6jfbH{b8Z-S7D2?Ixl`j0{+ZnpT=;KzVMLW{B$`N?Gw^Fl0H6lT61%T2AU**!sX0u?|I(yoy&Xveg7XBL&+>n6jd1##6d>TxE*Vj=8lWiG$4=u{1UbAa5QD>5_ z;Te^42v7K6Mmu4IWT6Rnm>oxrl~b<~^e3vbj-GCdHLIB_>59}Ya+~OF68NiH=?}2o zP(X7EN=quQn&)fK>M&kqF|<_*H`}c zk=+x)GU>{Af#vx&s?`UKUsz})g^Pc&?Ka@t5$n$bqf6{r1>#mWx6Ep>9|A}VmWRnowVo`OyCr^fHsf# zQjQ3Ttp7y#iQY8l`zEUW)(@gGQdt(~rkxlkefskT(t%@i8=|p1Y9Dc5bc+z#n$s13 zGJk|V0+&Ekh(F};PJzQKKo+FG@KV8a<$gmNSD;7rd_nRdc%?9)p!|B-@P~kxQG}~B zi|{0}@}zKC(rlFUYp*dO1RuvPC^DQOkX4<+EwvBAC{IZQdYxoq1Za!MW7%p7gGr=j zzWnAq%)^O2$eItftC#TTSArUyL$U54-O7e|)4_7%Q^2tZ^0-d&3J1}qCzR4dWX!)4 zzIEKjgnYgMus^>6uw4Jm8ga6>GBtMjpNRJ6CP~W=37~||gMo_p@GA@#-3)+cVYnU> zE5=Y4kzl+EbEh%dhQokB{gqNDqx%5*qBusWV%!iprn$S!;oN_6E3?0+umADVs4ako z?P+t?m?};gev9JXQ#Q&KBpzkHPde_CGu-y z<{}RRAx=xlv#mVi+Ibrgx~ujW$h{?zPfhz)Kp7kmYS&_|97b&H&1;J-mzrBWAvY} zh8-I8hl_RK2+nnf&}!W0P+>5?#?7>npshe<1~&l_xqKd0_>dl_^RMRq@-Myz&|TKZBj1=Q()) zF{dBjv5)h=&Z)Aevx}+i|7=R9rG^Di!sa)sZCl&ctX4&LScQ-kMncgO(9o6W6)yd< z@Rk!vkja*X_N3H=BavGoR0@u0<}m-7|2v!0+2h~S2Q&a=lTH91OJsvms2MT~ zY=c@LO5i`mLpBd(vh|)I&^A3TQLtr>w=zoyzTd=^f@TPu&+*2MtqE$Avf>l>}V|3-8Fp2hzo3y<)hr_|NO(&oSD z!vEjTWBxbKTiShVl-U{n*B3#)3a8$`{~Pk}J@elZ=>Pqp|MQ}jrGv7KrNcjW%TN_< zZz8kG{#}XoeWf7qY?D)L)8?Q-b@Na&>i=)(@uNo zr;cH98T3$Iau8Hn*@vXi{A@YehxDE2zX~o+RY`)6-X{8~hMpc#C`|8y> zU8Mnv5A0dNCf{Ims*|l-^ z(MRp{qoGohB34|ggDI*p!Aw|MFyJ|v+<+E3brfrI)|+l3W~CQLPbnF@G0)P~Ly!1TJLp}xh8uW`Q+RB-v`MRYZ9Gam3cM%{ zb4Cb*f)0deR~wtNb*8w-LlIF>kc7DAv>T0D(a3@l`k4TFnrO+g9XH7;nYOHxjc4lq zMmaW6qpgAgy)MckYMhl?>sq;-1E)-1llUneeA!ya9KM$)DaNGu57Z5aE>=VST$#vb zFo=uRHr$0M{-ha>h(D_boS4zId;3B|Tpqo|?B?Z@I?G(?&Iei+-{9L_A9=h=Qfn-U z1wIUnQe9!z%_j$F_{rf&`ZFSott09gY~qrf@g3O=Y>vzAnXCyL!@(BqWa)Zqt!#_k zfZHuwS52|&&)aK;CHq9V-t9qt0au{$#6c*R#e5n3rje0hic7c7m{kW$p(_`wB=Gw7 z4k`1Hi;Mc@yA7dp@r~?@rfw)TkjAW++|pkfOG}0N|2guek}j8Zen(!+@7?qt_7ndX zB=BG6WJ31#F3#Vk3=aQr8T)3`{=p9nBHlKzE0I@v`{vJ}h8pd6vby&VgFhzH|q;=aonunAXL6G2y(X^CtAhWr*jI zGjpY@raZDQkg*aMq}Ni6cRF z{oWv}5`nhSAv>usX}m^GHt`f(t8@zHc?K|y5Zi=4G*UG1Sza{$Dpj%X8 zzEXaKT5N6F5j4J|w#qlZP!zS7BT)9b+!ZSJdToqJts1c!)fwih4d31vfb{}W)EgcA zH2pZ^8_k$9+WD2n`6q5XbOy8>3pcYH9 z07eUB+p}YD@AH!}p!iKv><2QF-Y^&xx^PAc1F13A{nUeCDg&{hnix#FiO!fe(^&%Qcux!h znu*S!s$&nnkeotYsDthh1dq(iQrE|#f_=xVgfiiL&-5eAcC-> z5L0l|DVEM$#ulf{bj+Y~7iD)j<~O8CYM8GW)dQGq)!mck)FqoL^X zwNdZb3->hFrbHFm?hLvut-*uK?zXn3q1z|UX{RZ;-WiLoOjnle!xs+W0-8D)kjU#R z+S|A^HkRg$Ij%N4v~k`jyHffKaC~=wg=9)V5h=|kLQ@;^W!o2^K+xG&2n`XCd>OY5Ydi= zgHH=lgy++erK8&+YeTl7VNyVm9-GfONlSlVb3)V9NW5tT!cJ8d7X)!b-$fb!s76{t z@d=Vg-5K_sqHA@Zx-L_}wVnc@L@GL9_K~Zl(h5@AR#FAiKad8~KeWCo@mgXIQ#~u{ zgYFwNz}2b6Vu@CP0XoqJ+dm8px(5W5-Jpis97F`+KM)TuP*X8H@zwiVKDKGVp59pI zifNHZr|B+PG|7|Y<*tqap0CvG7tbR1R>jn70t1X`XJixiMVcHf%Ez*=xm1(CrTSDt z0cle!+{8*Ja&EOZ4@$qhBuKQ$U95Q%rc7tg$VRhk?3=pE&n+T3upZg^ZJc9~c2es% zh7>+|mrmA-p&v}|OtxqmHIBgUxL~^0+cpfkSK2mhh+4b=^F1Xgd2)}U*Yp+H?ls#z zrLxWg_hm}AfK2XYWr!rzW4g;+^^&bW%LmbtRai9f3PjU${r@n`JThy-cphbcwn)rq9{A$Ht`lmYKxOacy z6v2R(?gHhD5@&kB-Eg?4!hAoD7~(h>(R!s1c1Hx#s9vGPePUR|of32bS`J5U5w{F) z>0<^ktO2UHg<0{oxkdOQ;}coZDQph8p6ruj*_?uqURCMTac;>T#v+l1Tc~%^k-Vd@ zkc5y35jVNc49vZpZx;gG$h{%yslDI%Lqga1&&;mN{Ush1c7p>7e-(zp}6E7f-XmJb4nhk zb8zS+{IVbL$QVF8pf8}~kQ|dHJAEATmmnrb_wLG}-yHe>W|A&Y|;muy-d^t^<&)g5SJfaTH@P1%euONny=mxo+C z4N&w#biWY41r8k~468tvuYVh&XN&d#%QtIf9;iVXfWY)#j=l`&B~lqDT@28+Y!0E+MkfC}}H*#(WKKdJJq=O$vNYCb(ZG@p{fJgu;h z21oHQ(14?LeT>n5)s;uD@5&ohU!@wX8w*lB6i@GEH0pM>YTG+RAIWZD;4#F1&F%Jp zXZUml2sH0!lYJT?&sA!qwez6cXzJEd(1ZC~kT5kZSp7(@=H2$Azb_*W&6aA|9iwCL zdX7Q=42;@dspHDwYE?miGX#L^3xD&%BI&fN9^;`v4OjQXPBaBmOF1;#C)8XA(WFlH zycro;DS2?(G&6wkr6rqC>rqDv3nfGw3hmN_9Al>TgvmGsL8_hXx09};l9Ow@)F5@y z#VH5WigLDwZE4nh^7&@g{1FV^UZ%_LJ-s<{HN*2R$OPg@R~Z`c-ET*2}XB@9xvAjrK&hS=f|R8Gr9 zr|0TGOsI7RD+4+2{ZiwdVD@2zmg~g@^D--YL;6UYGSM8i$NbQr4!c7T9rg!8;TM0E zT#@?&S=t>GQm)*ua|?TLT2ktj#`|R<_*FAkOu2Pz$wEc%-=Y9V*$&dg+wIei3b*O8 z2|m$!jJG!J!ZGbbIa!(Af~oSyZV+~M1qGvelMzPNE_%5?c2>;MeeG2^N?JDKjFYCy z7SbPWH-$cWF9~fX%9~v99L!G(wi!PFp>rB!9xj7=Cv|F+7CsGNwY0Q_J%FID%C^CBZQfJ9K(HK%k31j~e#&?hQ zNuD6gRkVckU)v+53-fc} z7ZCzYN-5RG4H7;>>Hg?LU9&5_aua?A0)0dpew1#MMlu)LHe(M;OHjHIUl7|%%)YPo z0cBk;AOY00%Fe6heoN*$(b<)Cd#^8Iu;-2v@>cE-OB$icUF9EEoaC&q8z9}jMTT2I z8`9;jT%z0;dy4!8U;GW{i`)3!c6&oWY`J3669C!tM<5nQFFrFRglU8f)5Op$GtR-3 zn!+SPCw|04sv?%YZ(a7#L?vsdr7ss@WKAw&A*}-1S|9~cL%uA+E~>N6QklFE>8W|% zyX-qAUGTY1hQ-+um`2|&ji0cY*(qN!zp{YpDO-r>jPk*yuVSay<)cUt`t@&FPF_&$ zcHwu1(SQ`I-l8~vYyUxm@D1UEdFJ$f5Sw^HPH7b!9 zzYT3gKMF((N(v0#4f_jPfVZ=ApN^jQJe-X$`A?X+vWjLn_%31KXE*}5_}d8 zw_B1+a#6T1?>M{ronLbHIlEsMf93muJ7AH5h%;i99<~JX^;EAgEB1uHralD*!aJ@F zV2ruuFe9i2Q1C?^^kmVy921eb=tLDD43@-AgL^rQ3IO9%+vi_&R2^dpr}x{bCVPej z7G0-0o64uyWNtr*loIvslyo0%)KSDDKjfThe0hcqs)(C-MH1>bNGBDRTW~scy_{w} zp^aq8Qb!h9Lwielq%C1b8=?Z=&U)ST&PHbS)8Xzjh2DF?d{iAv)Eh)wsUnf>UtXN( zL7=$%YrZ#|^c{MYmhn!zV#t*(jdmYdCpwqpZ{v&L8KIuKn`@IIZfp!uo}c;7J57N` zAxyZ-uA4=Gzl~Ovycz%MW9ZL7N+nRo&1cfNn9(1H5eM;V_4Z_qVann7F>5f>%{rf= zPBZFaV@_Sobl?Fy&KXyzFDV*FIdhS5`Uc~S^Gjo)aiTHgn#<0C=9o-a-}@}xDor;D zZyZ|fvf;+=3MZd>SR1F^F`RJEZo+|MdyJYQAEauKu%WDol~ayrGU3zzbHKsnHKZ*z zFiwUkL@DZ>!*x05ql&EBq@_Vqv83&?@~q5?lVmffQZ+V-=qL+!u4Xs2Z2zdCQ3U7B&QR9_Iggy} z(om{Y9eU;IPe`+p1ifLx-XWh?wI)xU9ik+m#g&pGdB5Bi<`PR*?92lE0+TkRuXI)z z5LP!N2+tTc%cB6B1F-!fj#}>S!vnpgVU~3!*U1ej^)vjUH4s-bd^%B=ItQqDCGbrEzNQi(dJ`J}-U=2{7-d zK8k^Rlq2N#0G?9&1?HSle2vlkj^KWSBYTwx`2?9TU_DX#J+f+qLiZCqY1TXHFxXZqYMuD@RU$TgcnCC{_(vwZ-*uX)~go#%PK z@}2Km_5aQ~(<3cXeJN6|F8X_1@L%@xTzs}$_*E|a^_URF_qcF;Pfhoe?FTFwvjm1o z8onf@OY@jC2tVcMaZS;|T!Ks(wOgPpRzRnFS-^RZ4E!9dsnj9sFt609a|jJbb1Dt@ z<=Gal2jDEupxUSwWu6zp<<&RnAA;d&4gKVG0iu6g(DsST(4)z6R)zDpfaQ}v{5ARt zyhwvMtF%b-YazR5XLz+oh=mn;y-Mf2a8>7?2v8qX;19y?b>Z5laGHvzH;Nu9S`B8} zI)qN$GbXIQ1VL3lnof^6TS~rvPVg4V?Dl2Bb*K2z4E{5vy<(@@K_cN@U>R!>aUIRnb zL*)=787*cs#zb31zBC49x$`=fkQbMAef)L2$dR{)6BAz!t5U_B#1zZG`^neKSS22oJ#5B=gl%U=WeqL9REF2g zZnfCb0?quf?Ztj$VXvDSWoK`0L=Zxem2q}!XWLoT-kYMOx)!7fcgT35uC~0pySEme z`{wGWTkGr7>+Kb^n;W?BZH6ZP(9tQX%-7zF>vc2}LuWDI(9kh1G#7B99r4x6;_-V+k&c{nPUrR zAXJGRiMe~aup{0qzmLNjS_BC4cB#sXjckx{%_c&^xy{M61xEb>KW_AG5VFXUOjAG4 z^>Qlm9A#1N{4snY=(AmWzatb!ngqiqPbBZ7>Uhb3)dTkSGcL#&SH>iMO-IJBPua`u zo)LWZ>=NZLr758j{%(|uQuZ)pXq_4c!!>s|aDM9#`~1bzK3J1^^D#<2bNCccH7~-X}Ggi!pIIF>uFx%aPARGQsnC8ZQc8lrQ5o~smqOg>Ti^GNme94*w z)JZy{_{#$jxGQ&`M z!OMvZMHR>8*^>eS%o*6hJwn!l8VOOjZQJvh)@tnHVW&*GYPuxqXw}%M!(f-SQf`=L z5;=5w2;%82VMH6Xi&-K3W)o&K^+vJCepWZ-rW%+Dc6X3(){z$@4zjYxQ|}8UIojeC zYZpQ1dU{fy=oTr<4VX?$q)LP}IUmpiez^O&N3E_qPpchGTi5ZM6-2ScWlQq%V&R2Euz zO|Q0Hx>lY1Q1cW5xHv5!0OGU~PVEqSuy#fD72d#O`N!C;o=m+YioGu-wH2k6!t<~K zSr`E=W9)!g==~x9VV~-8{4ZN9{~-A9zJpRe%NGg$+MDuI-dH|b@BD)~>pPCGUNNzY zMDg||0@XGQgw`YCt5C&A{_+J}mvV9Wg{6V%2n#YSRN{AP#PY?1FF1#|vO_%e+#`|2*~wGAJaeRX6=IzFNeWhz6gJc8+(03Ph4y6ELAm=AkN7TOgMUEw*N{= z_)EIDQx5q22oUR+_b*tazu9+pX|n1c*IB-}{DqIj z-?E|ks{o3AGRNb;+iKcHkZvYJvFsW&83RAPs1Oh@IWy%l#5x2oUP6ZCtv+b|q>jsf zZ_9XO;V!>n`UxH1LvH8)L4?8raIvasEhkpQoJ`%!5rBs!0Tu(s_D{`4opB;57)pkX z4$A^8CsD3U5*!|bHIEqsn~{q+Ddj$ME@Gq4JXtgVz&7l{Ok!@?EA{B3P~NAqb9)4? zkQo30A^EbHfQ@87G5&EQTd`frrwL)&Yw?%-W@uy^Gn23%j?Y!Iea2xw<-f;esq zf%w5WN@E1}zyXtYv}}`U^B>W`>XPmdLj%4{P298|SisrE;7HvXX;A}Ffi8B#3Lr;1 zHt6zVb`8{#+e$*k?w8|O{Uh|&AG}|DG1PFo1i?Y*cQm$ZwtGcVgMwtBUDa{~L1KT-{jET4w60>{KZ27vXrHJ;fW{6| z=|Y4!&UX020wU1>1iRgB@Q#m~1^Z^9CG1LqDhYBrnx%IEdIty z!46iOoKlKs)c}newDG)rWUikD%j`)p z_w9Ph&e40=(2eBy;T!}*1p1f1SAUDP9iWy^u^Ubdj21Kn{46;GR+hwLO=4D11@c~V zI8x&(D({K~Df2E)Nx_yQvYfh4;MbMJ@Z}=Dt3_>iim~QZ*hZIlEs0mEb z_54+&*?wMD`2#vsQRN3KvoT>hWofI_Vf(^C1ff-Ike@h@saEf7g}<9T`W;HAne-Nd z>RR+&SP35w)xKn8^U$7))PsM!jKwYZ*RzEcG-OlTrX3}9a{q%#Un5E5W{{hp>w~;` zGky+3(vJvQyGwBo`tCpmo0mo((?nM8vf9aXrrY1Ve}~TuVkB(zeds^jEfI}xGBCM2 zL1|#tycSaWCurP+0MiActG3LCas@_@tao@(R1ANlwB$4K53egNE_;!&(%@Qo$>h`^1S_!hN6 z)vZtG$8fN!|BXBJ=SI>e(LAU(y(i*PHvgQ2llulxS8>qsimv7yL}0q_E5WiAz7)(f zC(ahFvG8&HN9+6^jGyLHM~$)7auppeWh_^zKk&C_MQ~8;N??OlyH~azgz5fe^>~7F zl3HnPN3z-kN)I$4@`CLCMQx3sG~V8hPS^}XDXZrQA>}mQPw%7&!sd(Pp^P=tgp-s^ zjl}1-KRPNWXgV_K^HkP__SR`S-|OF0bR-N5>I%ODj&1JUeAQ3$9i;B~$S6}*^tK?= z**%aCiH7y?xdY?{LgVP}S0HOh%0%LI$wRx;$T|~Y8R)Vdwa}kGWv8?SJVm^>r6+%I z#lj1aR94{@MP;t-scEYQWc#xFA30^}?|BeX*W#9OL;Q9#WqaaM546j5j29((^_8Nu z4uq}ESLr~r*O7E7$D{!k9W>`!SLoyA53i9QwRB{!pHe8um|aDE`Cg0O*{jmor)^t)3`>V>SWN-2VJcFmj^1?~tT=JrP`fVh*t zXHarp=8HEcR#vFe+1a%XXuK+)oFs`GDD}#Z+TJ}Ri`FvKO@ek2ayn}yaOi%(8p%2$ zpEu)v0Jym@f}U|-;}CbR=9{#<^z28PzkkTNvyKvJDZe+^VS2bES3N@Jq!-*}{oQlz z@8bgC_KnDnT4}d#&Cpr!%Yb?E!brx0!eVOw~;lLwUoz#Np%d$o%9scc3&zPm`%G((Le|6o1 zM(VhOw)!f84zG^)tZ1?Egv)d8cdNi+T${=5kV+j;Wf%2{3g@FHp^Gf*qO0q!u$=m9 zCaY`4mRqJ;FTH5`a$affE5dJrk~k`HTP_7nGTY@B9o9vvnbytaID;^b=Tzp7Q#DmD zC(XEN)Ktn39z5|G!wsVNnHi) z%^q94!lL|hF`IijA^9NR0F$@h7k5R^ljOW(;Td9grRN0Mb)l_l7##{2nPQ@?;VjXv zaLZG}yuf$r$<79rVPpXg?6iiieX|r#&`p#Con2i%S8*8F}(E) zI5E6c3tG*<;m~6>!&H!GJ6zEuhH7mkAzovdhLy;)q z{H2*8I^Pb}xC4s^6Y}6bJvMu=8>g&I)7!N!5QG$xseeU#CC?ZM-TbjsHwHgDGrsD= z{%f;@Sod+Ch66Ko2WF~;Ty)v>&x^aovCbCbD7>qF*!?BXmOV3(s|nxsb*Lx_2lpB7 zokUnzrk;P=T-&kUHO}td+Zdj!3n&NR?K~cRU zAXU!DCp?51{J4w^`cV#ye}(`SQhGQkkMu}O3M*BWt4UsC^jCFUy;wTINYmhD$AT;4 z?Xd{HaJjP`raZ39qAm;%beDbrLpbRf(mkKbANan7XsL>_pE2oo^$TgdidjRP!5-`% zv0d!|iKN$c0(T|L0C~XD0aS8t{*&#LnhE;1Kb<9&=c2B+9JeLvJr*AyyRh%@jHej=AetOMSlz^=!kxX>>B{2B1uIrQyfd8KjJ+DBy!h)~*(!|&L4^Q_07SQ~E zcemVP`{9CwFvPFu7pyVGCLhH?LhEVb2{7U+Z_>o25#+3<|8%1T^5dh}*4(kfJGry} zm%r#hU+__Z;;*4fMrX=Bkc@7|v^*B;HAl0((IBPPii%X9+u3DDF6%bI&6?Eu$8&aWVqHIM7mK6?Uvq$1|(-T|)IV<>e?!(rY zqkmO1MRaLeTR=)io(0GVtQT@s6rN%C6;nS3@eu;P#ry4q;^O@1ZKCJyp_Jo)Ty^QW z+vweTx_DLm{P-XSBj~Sl<%_b^$=}odJ!S2wAcxenmzFGX1t&Qp8Vxz2VT`uQsQYtdn&_0xVivIcxZ_hnrRtwq4cZSj1c-SG9 z7vHBCA=fd0O1<4*=lu$6pn~_pVKyL@ztw1swbZi0B?spLo56ZKu5;7ZeUml1Ws1?u zqMf1p{5myAzeX$lAi{jIUqo1g4!zWLMm9cfWcnw`k6*BR^?$2(&yW?>w;G$EmTA@a z6?y#K$C~ZT8+v{87n5Dm&H6Pb_EQ@V0IWmG9cG=O;(;5aMWWrIPzz4Q`mhK;qQp~a z+BbQrEQ+w{SeiuG-~Po5f=^EvlouB@_|4xQXH@A~KgpFHrwu%dwuCR)=B&C(y6J4J zvoGk9;lLs9%iA-IJGU#RgnZZR+@{5lYl8(e1h6&>Vc_mvg0d@);X zji4T|n#lB!>pfL|8tQYkw?U2bD`W{na&;*|znjmalA&f;*U++_aBYerq;&C8Kw7mI z7tsG*?7*5j&dU)Lje;^{D_h`%(dK|pB*A*1(Jj)w^mZ9HB|vGLkF1GEFhu&rH=r=8 zMxO42e{Si6$m+Zj`_mXb&w5Q(i|Yxyg?juUrY}78uo@~3v84|8dfgbPd0iQJRdMj< zncCNGdMEcsxu#o#B5+XD{tsg*;j-eF8`mp~K8O1J!Z0+>0=7O=4M}E?)H)ENE;P*F z$Ox?ril_^p0g7xhDUf(q652l|562VFlC8^r8?lQv;TMvn+*8I}&+hIQYh2 z1}uQQaag&!-+DZ@|C+C$bN6W;S-Z@)d1|en+XGvjbOxCa-qAF*LA=6s(Jg+g;82f$ z(Vb)8I)AH@cdjGFAR5Rqd0wiNCu!xtqWbcTx&5kslzTb^7A78~Xzw1($UV6S^VWiP zFd{Rimd-0CZC_Bu(WxBFW7+k{cOW7DxBBkJdJ;VsJ4Z@lERQr%3eVv&$%)b%<~ zCl^Y4NgO}js@u{|o~KTgH}>!* z_iDNqX2(As7T0xivMH|3SC1ivm8Q}6Ffcd7owUKN5lHAtzMM4<0v+ykUT!QiowO;`@%JGv+K$bBx@*S7C8GJVqQ_K>12}M`f_Ys=S zKFh}HM9#6Izb$Y{wYzItTy+l5U2oL%boCJn?R3?jP@n$zSIwlmyGq30Cw4QBO|14` zW5c);AN*J3&eMFAk$SR~2k|&+&Bc$e>s%c{`?d~85S-UWjA>DS5+;UKZ}5oVa5O(N zqqc@>)nee)+4MUjH?FGv%hm2{IlIF-QX}ym-7ok4Z9{V+ZHVZQl$A*x!(q%<2~iVv znUa+BX35&lCb#9VE-~Y^W_f;Xhl%vgjwdjzMy$FsSIj&ok}L+X`4>J=9BkN&nu^E*gbhj3(+D>C4E z@Fwq_=N)^bKFSHTzZk?-gNU$@l}r}dwGyh_fNi=9b|n}J>&;G!lzilbWF4B}BBq4f zYIOl?b)PSh#XTPp4IS5ZR_2C!E)Z`zH0OW%4;&~z7UAyA-X|sh9@~>cQW^COA9hV4 zXcA6qUo9P{bW1_2`eo6%hgbN%(G-F1xTvq!sc?4wN6Q4`e9Hku zFwvlAcRY?6h^Fj$R8zCNEDq8`=uZB8D-xn)tA<^bFFy}4$vA}Xq0jAsv1&5!h!yRA zU()KLJya5MQ`q&LKdH#fwq&(bNFS{sKlEh_{N%{XCGO+po#(+WCLmKW6&5iOHny>g z3*VFN?mx!16V5{zyuMWDVP8U*|BGT$(%IO|)?EF|OI*sq&RovH!N%=>i_c?K*A>>k zyg1+~++zY4Q)J;VWN0axhoIKx;l&G$gvj(#go^pZskEVj8^}is3Jw26LzYYVos0HX zRPvmK$dVxM8(Tc?pHFe0Z3uq){{#OK3i-ra#@+;*=ui8)y6hsRv z4Fxx1c1+fr!VI{L3DFMwXKrfl#Q8hfP@ajgEau&QMCxd{g#!T^;ATXW)nUg&$-n25 zruy3V!!;{?OTobo|0GAxe`Acn3GV@W=&n;~&9 zQM>NWW~R@OYORkJAo+eq1!4vzmf9K%plR4(tB@TR&FSbDoRgJ8qVcH#;7lQub*nq&?Z>7WM=oeEVjkaG zT#f)=o!M2DO5hLR+op>t0CixJCIeXH*+z{-XS|%jx)y(j&}Wo|3!l7{o)HU3m7LYyhv*xF&tq z%IN7N;D4raue&&hm0xM=`qv`+TK@;_xAcGKuK(2|75~ar2Yw)geNLSmVxV@x89bQu zpViVKKnlkwjS&&c|-X6`~xdnh}Ps)Hs z4VbUL^{XNLf7_|Oi>tA%?SG5zax}esF*FH3d(JH^Gvr7Rp*n=t7frH!U;!y1gJB^i zY_M$KL_}mW&XKaDEi9K-wZR|q*L32&m+2n_8lq$xRznJ7p8}V>w+d@?uB!eS3#u<} zIaqi!b!w}a2;_BfUUhGMy#4dPx>)_>yZ`ai?Rk`}d0>~ce-PfY-b?Csd(28yX22L% zI7XI>OjIHYTk_@Xk;Gu^F52^Gn6E1&+?4MxDS2G_#PQ&yXPXP^<-p|2nLTb@AAQEY zI*UQ9Pmm{Kat}wuazpjSyXCdnrD&|C1c5DIb1TnzF}f4KIV6D)CJ!?&l&{T)e4U%3HTSYqsQ zo@zWB1o}ceQSV)<4G<)jM|@@YpL+XHuWsr5AYh^Q{K=wSV99D~4RRU52FufmMBMmd z_H}L#qe(}|I9ZyPRD6kT>Ivj&2Y?qVZq<4bG_co_DP`sE*_Xw8D;+7QR$Uq(rr+u> z8bHUWbV19i#)@@G4bCco@Xb<8u~wVDz9S`#k@ciJtlu@uP1U0X?yov8v9U3VOig2t zL9?n$P3=1U_Emi$#slR>N5wH-=J&T=EdUHA}_Z zZIl3nvMP*AZS9{cDqFanrA~S5BqxtNm9tlu;^`)3X&V4tMAkJ4gEIPl= zoV!Gyx0N{3DpD@)pv^iS*dl2FwANu;1;%EDl}JQ7MbxLMAp>)UwNwe{=V}O-5C*>F zu?Ny+F64jZn<+fKjF01}8h5H_3pey|;%bI;SFg$w8;IC<8l|3#Lz2;mNNik6sVTG3 z+Su^rIE#40C4a-587$U~%KedEEw1%r6wdvoMwpmlXH$xPnNQN#f%Z7|p)nC>WsuO= z4zyqapLS<8(UJ~Qi9d|dQijb_xhA2)v>la)<1md5s^R1N&PiuA$^k|A<+2C?OiHbj z>Bn$~t)>Y(Zb`8hW7q9xQ=s>Rv81V+UiuZJc<23HplI88isqRCId89fb`Kt|CxVIg znWcwprwXnotO>3s&Oypkte^9yJjlUVVxSe%_xlzmje|mYOVPH^vjA=?6xd0vaj0Oz zwJ4OJNiFdnHJX3rw&inskjryukl`*fRQ#SMod5J|KroJRsVXa5_$q7whSQ{gOi*s0 z1LeCy|JBWRsDPn7jCb4s(p|JZiZ8+*ExC@Vj)MF|*Vp{B(ziccSn`G1Br9bV(v!C2 z6#?eqpJBc9o@lJ#^p-`-=`4i&wFe>2)nlPK1p9yPFzJCzBQbpkcR>={YtamIw)3nt z(QEF;+)4`>8^_LU)_Q3 zC5_7lgi_6y>U%m)m@}Ku4C}=l^J=<<7c;99ec3p{aR+v=diuJR7uZi%aQv$oP?dn?@6Yu_+*^>T0ptf(oobdL;6)N-I!TO`zg^Xbv3#L0I~sn@WGk-^SmPh5>W+LB<+1PU}AKa?FCWF|qMNELOgdxR{ zbqE7@jVe+FklzdcD$!(A$&}}H*HQFTJ+AOrJYnhh}Yvta(B zQ_bW4Rr;R~&6PAKwgLWXS{Bnln(vUI+~g#kl{r+_zbngT`Y3`^Qf=!PxN4IYX#iW4 zucW7@LLJA9Zh3(rj~&SyN_pjO8H&)|(v%!BnMWySBJV=eSkB3YSTCyIeJ{i;(oc%_hk{$_l;v>nWSB)oVeg+blh=HB5JSlG_r7@P z3q;aFoZjD_qS@zygYqCn=;Zxjo!?NK!%J$ z52lOP`8G3feEj+HTp@Tnn9X~nG=;tS+z}u{mQX_J0kxtr)O30YD%oo)L@wy`jpQYM z@M>Me=95k1p*FW~rHiV1CIfVc{K8r|#Kt(ApkXKsDG$_>76UGNhHExFCw#Ky9*B-z zNq2ga*xax!HMf_|Vp-86r{;~YgQKqu7%szk8$hpvi_2I`OVbG1doP(`gn}=W<8%Gn z%81#&WjkH4GV;4u43EtSW>K_Ta3Zj!XF?;SO3V#q=<=>Tc^@?A`i;&`-cYj|;^ zEo#Jl5zSr~_V-4}y8pnufXLa80vZY4z2ko7fj>DR)#z=wWuS1$$W!L?(y}YC+yQ|G z@L&`2upy3f>~*IquAjkVNU>}c10(fq#HdbK$~Q3l6|=@-eBbo>B9(6xV`*)sae58*f zym~RRVx;xoCG3`JV`xo z!lFw)=t2Hy)e!IFs?0~7osWk(d%^wxq&>_XD4+U#y&-VF%4z?XH^i4w`TxpF{`XhZ z%G}iEzf!T(l>g;W9<~K+)$g!{UvhW{E0Lis(S^%I8OF&%kr!gJ&fMOpM=&=Aj@wuL zBX?*6i51Qb$uhkwkFYkaD_UDE+)rh1c;(&Y=B$3)J&iJfQSx!1NGgPtK!$c9OtJuu zX(pV$bfuJpRR|K(dp@^j}i&HeJOh@|7lWo8^$*o~Xqo z5Sb+!EtJ&e@6F+h&+_1ETbg7LfP5GZjvIUIN3ibCOldAv z)>YdO|NH$x7AC8dr=<2ekiY1%fN*r~e5h6Yaw<{XIErujKV~tiyrvV_DV0AzEknC- zR^xKM3i<1UkvqBj3C{wDvytOd+YtDSGu!gEMg+!&|8BQrT*|p)(dwQLEy+ zMtMzij3zo40)CA!BKZF~yWg?#lWhqD3@qR)gh~D{uZaJO;{OWV8XZ_)J@r3=)T|kt zUS1pXr6-`!Z}w2QR7nP%d?ecf90;K_7C3d!UZ`N(TZoWNN^Q~RjVhQG{Y<%E1PpV^4 z-m-K+$A~-+VDABs^Q@U*)YvhY4Znn2^w>732H?NRK(5QSS$V@D7yz2BVX4)f5A04~$WbxGOam22>t&uD)JB8-~yiQW6ik;FGblY_I>SvB_z2?PS z*Qm&qbKI{H1V@YGWzpx`!v)WeLT02};JJo*#f$a*FH?IIad-^(;9XC#YTWN6;Z6+S zm4O1KH=#V@FJw7Pha0!9Vb%ZIM$)a`VRMoiN&C|$YA3~ZC*8ayZRY^fyuP6$n%2IU z$#XceYZeqLTXw(m$_z|33I$B4k~NZO>pP6)H_}R{E$i%USGy{l{-jOE;%CloYPEU+ zRFxOn4;7lIOh!7abb23YKD+_-?O z0FP9otcAh+oSj;=f#$&*ExUHpd&e#bSF%#8*&ItcL2H$Sa)?pt0Xtf+t)z$_u^wZi z44oE}r4kIZGy3!Mc8q$B&6JqtnHZ>Znn!Zh@6rgIu|yU+zG8q`q9%B18|T|oN3zMq z`l&D;U!OL~%>vo&q0>Y==~zLiCZk4v%s_7!9DxQ~id1LLE93gf*gg&2$|hB#j8;?3 z5v4S;oM6rT{Y;I+#FdmNw z){d%tNM<<#GN%n9ox7B=3#;u7unZ~tLB_vRZ52a&2=IM)2VkXm=L+Iqq~uk#Dug|x z>S84e+A7EiOY5lj*!q?6HDkNh~0g;0Jy(al!ZHHDtur9T$y-~)94HelX1NHjXWIM7UAe}$?jiz z9?P4`I0JM=G5K{3_%2jPLC^_Mlw?-kYYgb7`qGa3@dn|^1fRMwiyM@Ch z;CB&o7&&?c5e>h`IM;Wnha0QKnEp=$hA8TJgR-07N~U5(>9vJzeoFsSRBkDq=x(YgEMpb=l4TDD`2 zwVJpWGTA_u7}?ecW7s6%rUs&NXD3+n;jB86`X?8(l3MBo6)PdakI6V6a}22{)8ilT zM~T*mU}__xSy|6XSrJ^%lDAR3Lft%+yxC|ZUvSO_nqMX!_ul3;R#*{~4DA=h$bP)%8Yv9X zyp><|e8=_ttI}ZAwOd#dlnSjck#6%273{E$kJuCGu=I@O)&6ID{nWF5@gLb16sj|&Sb~+du4e4O_%_o`Ix4NRrAsyr1_}MuP94s>de8cH-OUkVPk3+K z&jW)It9QiU-ti~AuJkL`XMca8Oh4$SyJ=`-5WU<{cIh+XVH#e4d&zive_UHC!pN>W z3TB;Mn5i)9Qn)#6@lo4QpI3jFYc0~+jS)4AFz8fVC;lD^+idw^S~Qhq>Tg(!3$yLD zzktzoFrU@6s4wwCMz}edpF5i5Q1IMmEJQHzp(LAt)pgN3&O!&d?3W@6U4)I^2V{;- z6A(?zd93hS*uQmnh4T)nHnE{wVhh(=MMD(h(P4+^p83Om6t<*cUW>l(qJzr%5vp@K zN27ka(L{JX=1~e2^)F^i=TYj&;<7jyUUR2Bek^A8+3Up*&Xwc{)1nRR5CT8vG>ExV zHnF3UqXJOAno_?bnhCX-&kwI~Ti8t4`n0%Up>!U`ZvK^w2+0Cs-b9%w%4`$+To|k= zKtgc&l}P`*8IS>8DOe?EB84^kx4BQp3<7P{Pq}&p%xF_81pg!l2|u=&I{AuUgmF5n zJQCTLv}%}xbFGYtKfbba{CBo)lWW%Z>i(_NvLhoQZ*5-@2l&x>e+I~0Nld3UI9tdL zRzu8}i;X!h8LHVvN?C+|M81e>Jr38%&*9LYQec9Ax>?NN+9(_>XSRv&6hlCYB`>Qm z1&ygi{Y()OU4@D_jd_-7vDILR{>o|7-k)Sjdxkjgvi{@S>6GqiF|o`*Otr;P)kLHN zZkpts;0zw_6;?f(@4S1FN=m!4^mv~W+lJA`&7RH%2$)49z0A+8@0BCHtj|yH--AEL z0tW6G%X-+J+5a{5*WKaM0QDznf;V?L5&uQw+yegDNDP`hA;0XPYc6e0;Xv6|i|^F2WB)Z$LR|HR4 zTQsRAby9(^Z@yATyOgcfQw7cKyr^3Tz7lc7+JEwwzA7)|2x+PtEb>nD(tpxJQm)Kn zW9K_*r!L%~N*vS8<5T=iv|o!zTe9k_2jC_j*7ik^M_ zaf%k{WX{-;0*`t`G!&`eW;gChVXnJ-Rn)To8vW-?>>a%QU1v`ZC=U)f8iA@%JG0mZ zDqH;~mgBnrCP~1II<=V9;EBL)J+xzCoiRBaeH&J6rL!{4zIY8tZka?_FBeQeNO3q6 zyG_alW54Ba&wQf{&F1v-r1R6ID)PTsqjIBc+5MHkcW5Fnvi~{-FjKe)t1bl}Y;z@< z=!%zvpRua>>t_x}^}z0<7MI!H2v6|XAyR9!t50q-A)xk0nflgF4*OQlCGK==4S|wc zRMsSscNhRzHMBU8TdcHN!q^I}x0iXJ%uehac|Zs_B$p@CnF)HeXPpB_Za}F{<@6-4 zl%kml@}kHQ(ypD8FsPJ2=14xXJE|b20RUIgs!2|R3>LUMGF6X*B_I|$`Qg=;zm7C z{mEDy9dTmPbued7mlO@phdmAmJ7p@GR1bjCkMw6*G7#4+`k>fk1czdJUB!e@Q(~6# zwo%@p@V5RL0ABU2LH7Asq^quDUho@H>eTZH9f*no9fY0T zD_-9px3e}A!>>kv5wk91%C9R1J_Nh!*&Kk$J3KNxC}c_@zlgpJZ+5L)Nw|^p=2ue}CJtm;uj*Iqr)K})kA$xtNUEvX;4!Px*^&9T_`IN{D z{6~QY=Nau6EzpvufB^hflc#XIsSq0Y9(nf$d~6ZwK}fal92)fr%T3=q{0mP-EyP_G z)UR5h@IX}3Qll2b0oCAcBF>b*@Etu*aTLPU<%C>KoOrk=x?pN!#f_Og-w+;xbFgjQ zXp`et%lDBBh~OcFnMKMUoox0YwBNy`N0q~bSPh@+enQ=4RUw1) zpovN`QoV>vZ#5LvC;cl|6jPr}O5tu!Ipoyib8iXqy}TeJ;4+_7r<1kV0v5?Kv>fYp zg>9L`;XwXa&W7-jf|9~uP2iyF5`5AJ`Q~p4eBU$MCC00`rcSF>`&0fbd^_eqR+}mK z4n*PMMa&FOcc)vTUR zlDUAn-mh`ahi_`f`=39JYTNVjsTa_Y3b1GOIi)6dY)D}xeshB0T8Eov5%UhWd1)u}kjEQ|LDo{tqKKrYIfVz~@dp!! zMOnah@vp)%_-jDTUG09l+;{CkDCH|Q{NqX*uHa1YxFShy*1+;J`gywKaz|2Q{lG8x zP?KBur`}r`!WLKXY_K;C8$EWG>jY3UIh{+BLv0=2)KH%P}6xE2kg)%(-uA6lC?u8}{K(#P*c zE9C8t*u%j2r_{;Rpe1A{9nNXU;b_N0vNgyK!EZVut~}+R2rcbsHilqsOviYh-pYX= zHw@53nlmwYI5W5KP>&`dBZe0Jn?nAdC^HY1wlR6$u^PbpB#AS&5L6zqrXN&7*N2Q` z+Rae1EwS)H=aVSIkr8Ek^1jy2iS2o7mqm~Mr&g5=jjt7VxwglQ^`h#Mx+x2v|9ZAwE$i_9918MjJxTMr?n!bZ6n$}y11u8I9COTU`Z$Fi z!AeAQLMw^gp_{+0QTEJrhL424pVDp%wpku~XRlD3iv{vQ!lAf!_jyqd_h}+Tr1XG| z`*FT*NbPqvHCUsYAkFnM`@l4u_QH&bszpUK#M~XLJt{%?00GXY?u_{gj3Hvs!=N(I z(=AuWPijyoU!r?aFTsa8pLB&cx}$*%;K$e*XqF{~*rA-qn)h^!(-;e}O#B$|S~c+U zN4vyOK0vmtx$5K!?g*+J@G1NmlEI=pyZXZ69tAv=@`t%ag_Hk{LP~OH9iE)I= zaJ69b4kuCkV0V zo(M0#>phpQ_)@j;h%m{-a*LGi(72TP)ws2w*@4|C-3+;=5DmC4s7Lp95%n%@Ko zfdr3-a7m*dys9iIci$A=4NPJ`HfJ;hujLgU)ZRuJI`n;Pw|yksu!#LQnJ#dJysgNb z@@qwR^wrk(jbq4H?d!lNyy72~Dnn87KxsgQ!)|*m(DRM+eC$wh7KnS-mho3|KE)7h zK3k;qZ;K1Lj6uEXLYUYi)1FN}F@-xJ z@@3Hb84sl|j{4$3J}aTY@cbX@pzB_qM~APljrjju6P0tY{C@ zpUCOz_NFmALMv1*blCcwUD3?U6tYs+N%cmJ98D%3)%)Xu^uvzF zS5O!sc#X6?EwsYkvPo6A%O8&y8sCCQH<%f2togVwW&{M;PR!a(ZT_A+jVAbf{@5kL zB@Z(hb$3U{T_}SKA_CoQVU-;j>2J=L#lZ~aQCFg-d<9rzs$_gO&d5N6eFSc z1ml8)P*FSi+k@!^M9nDWR5e@ATD8oxtDu=36Iv2!;dZzidIS(PCtEuXAtlBb1;H%Z zwnC^Ek*D)EX4#Q>R$$WA2sxC_t(!!6Tr?C#@{3}n{<^o;9id1RA&-Pig1e-2B1XpG zliNjgmd3c&%A}s>qf{_j#!Z`fu0xIwm4L0)OF=u(OEmp;bLCIaZX$&J_^Z%4Sq4GZ zPn6sV_#+6pJmDN_lx@1;Zw6Md_p0w9h6mHtzpuIEwNn>OnuRSC2=>fP^Hqgc)xu^4 z<3!s`cORHJh#?!nKI`Et7{3C27+EuH)Gw1f)aoP|B3y?fuVfvpYYmmukx0ya-)TQX zR{ggy5cNf4X|g)nl#jC9p>7|09_S7>1D2GTRBUTW zAkQ=JMRogZqG#v;^=11O6@rPPwvJkr{bW-Qg8`q8GoD#K`&Y+S#%&B>SGRL>;ZunM@49!}Uy zN|bBCJ%sO;@3wl0>0gbl3L@1^O60ONObz8ZI7nder>(udj-jt`;yj^nTQ$L9`OU9W zX4alF#$|GiR47%x@s&LV>2Sz2R6?;2R~5k6V>)nz!o_*1Y!$p>BC5&?hJg_MiE6UBy>RkVZj`9UWbRkN-Hk!S`=BS3t3uyX6)7SF#)71*}`~Ogz z1rap5H6~dhBJ83;q-Y<5V35C2&F^JI-it(=5D#v!fAi9p#UwV~2tZQI+W(Dv?1t9? zfh*xpxxO{-(VGB>!Q&0%^YW_F!@aZS#ucP|YaD#>wd1Fv&Z*SR&mc;asi}1G) z_H>`!akh-Zxq9#io(7%;a$)w+{QH)Y$?UK1Dt^4)up!Szcxnu}kn$0afcfJL#IL+S z5gF_Y30j;{lNrG6m~$Ay?)*V9fZuU@3=kd40=LhazjFrau>(Y>SJNtOz>8x_X-BlA zIpl{i>OarVGj1v(4?^1`R}aQB&WCRQzS~;7R{tDZG=HhgrW@B`W|#cdyj%YBky)P= zpxuOZkW>S6%q7U{VsB#G(^FMsH5QuGXhb(sY+!-R8Bmv6Sx3WzSW<1MPPN1!&PurYky(@`bP9tz z52}LH9Q?+FF5jR6-;|+GVdRA!qtd;}*-h&iIw3Tq3qF9sDIb1FFxGbo&fbG5n8$3F zyY&PWL{ys^dTO}oZ#@sIX^BKW*bon=;te9j5k+T%wJ zNJtoN1~YVj4~YRrlZl)b&kJqp+Z`DqT!la$x&&IxgOQw#yZd-nBP3!7FijBXD|IsU8Zl^ zc6?MKpJQ+7ka|tZQLfchD$PD|;K(9FiLE|eUZX#EZxhG!S-63C$jWX1Yd!6-Yxi-u zjULIr|0-Q%D9jz}IF~S%>0(jOqZ(Ln<$9PxiySr&2Oic7vb<8q=46)Ln%Z|<*z5&> z3f~Zw@m;vR(bESB<=Jqkxn(=#hQw42l(7)h`vMQQTttz9XW6^|^8EK7qhju4r_c*b zJIi`)MB$w@9epwdIfnEBR+?~);yd6C(LeMC& zn&&N*?-g&BBJcV;8&UoZi4Lmxcj16ojlxR~zMrf=O_^i1wGb9X-0@6_rpjPYemIin zmJb+;lHe;Yp=8G)Q(L1bzH*}I>}uAqhj4;g)PlvD9_e_ScR{Ipq|$8NvAvLD8MYr}xl=bU~)f%B3E>r3Bu9_t|ThF3C5~BdOve zEbk^r&r#PT&?^V1cb{72yEWH}TXEE}w>t!cY~rA+hNOTK8FAtIEoszp!qqptS&;r$ zaYV-NX96-h$6aR@1xz6_E0^N49mU)-v#bwtGJm)ibygzJ8!7|WIrcb`$XH~^!a#s& z{Db-0IOTFq#9!^j!n_F}#Z_nX{YzBK8XLPVmc&X`fT7!@$U-@2KM9soGbmOSAmqV z{nr$L^MBo_u^Joyf0E^=eo{Rt0{{e$IFA(#*kP@SQd6lWT2-#>` zP1)7_@IO!9lk>Zt?#CU?cuhiLF&)+XEM9B)cS(gvQT!X3`wL*{fArTS;Ak`J<84du zALKPz4}3nlG8Fo^MH0L|oK2-4xIY!~Oux~1sw!+It)&D3p;+N8AgqKI`ld6v71wy8I!eP0o~=RVcFQR2Gr(eP_JbSytoQ$Yt}l*4r@A8Me94y z8cTDWhqlq^qoAhbOzGBXv^Wa4vUz$(7B!mX`T=x_ueKRRDfg&Uc-e1+z4x$jyW_Pm zp?U;-R#xt^Z8Ev~`m`iL4*c#65Nn)q#=Y0l1AuD&+{|8-Gsij3LUZXpM0Bx0u7WWm zH|%yE@-#XEph2}-$-thl+S;__ciBxSSzHveP%~v}5I%u!z_l_KoW{KRx2=eB33umE zIYFtu^5=wGU`Jab8#}cnYry@9p5UE#U|VVvx_4l49JQ;jQdp(uw=$^A$EA$LM%vmE zvdEOaIcp5qX8wX{mYf0;#51~imYYPn4=k&#DsKTxo{_Mg*;S495?OBY?#gv=edYC* z^O@-sd-qa+U24xvcbL0@C7_6o!$`)sVr-jSJE4XQUQ$?L7}2(}Eixqv;L8AdJAVqc zq}RPgpnDb@E_;?6K58r3h4-!4rT4Ab#rLHLX?eMOfluJk=3i1@Gt1i#iA=O`M0@x! z(HtJP9BMHXEzuD93m|B&woj0g6T?f#^)>J>|I4C5?Gam>n9!8CT%~aT;=oco5d6U8 zMXl(=W;$ND_8+DD*?|5bJ!;8ebESXMUKBAf7YBwNVJibGaJ*(2G`F%wx)grqVPjudiaq^Kl&g$8A2 zWMxMr@_$c}d+;_B`#kUX-t|4VKH&_f^^EP0&=DPLW)H)UzBG%%Tra*5 z%$kyZe3I&S#gfie^z5)!twG={3Cuh)FdeA!Kj<-9** zvT*5%Tb`|QbE!iW-XcOuy39>D3oe6x{>&<#E$o8Ac|j)wq#kQzz|ATd=Z0K!p2$QE zPu?jL8Lb^y3_CQE{*}sTDe!2!dtlFjq&YLY@2#4>XS`}v#PLrpvc4*@q^O{mmnr5D zmyJq~t?8>FWU5vZdE(%4cuZuao0GNjp3~Dt*SLaxI#g_u>hu@k&9Ho*#CZP~lFJHj z(e!SYlLigyc?&5-YxlE{uuk$9b&l6d`uIlpg_z15dPo*iU&|Khx2*A5Fp;8iK_bdP z?T6|^7@lcx2j0T@x>X7|kuuBSB7<^zeY~R~4McconTxA2flHC0_jFxmSTv-~?zVT| zG_|yDqa9lkF*B6_{j=T>=M8r<0s;@z#h)3BQ4NLl@`Xr__o7;~M&dL3J8fP&zLfDfy z);ckcTev{@OUlZ`bCo(-3? z1u1xD`PKgSg?RqeVVsF<1SLF;XYA@Bsa&cY!I48ZJn1V<3d!?s=St?TLo zC0cNr`qD*M#s6f~X>SCNVkva^9A2ZP>CoJ9bvgXe_c}WdX-)pHM5m7O zrHt#g$F0AO+nGA;7dSJ?)|Mo~cf{z2L)Rz!`fpi73Zv)H=a5K)*$5sf_IZypi($P5 zsPwUc4~P-J1@^3C6-r9{V-u0Z&Sl7vNfmuMY4yy*cL>_)BmQF!8Om9Dej%cHxbIzA zhtV0d{=%cr?;bpBPjt@4w=#<>k5ee=TiWAXM2~tUGfm z$s&!Dm0R^V$}fOR*B^kGaipi~rx~A2cS0;t&khV1a4u38*XRUP~f za!rZMtay8bsLt6yFYl@>-y^31(*P!L^^s@mslZy(SMsv9bVoX`O#yBgEcjCmGpyc* zeH$Dw6vB5P*;jor+JOX@;6K#+xc)Z9B8M=x2a@Wx-{snPGpRmOC$zpsqW*JCh@M2Y z#K+M(>=#d^>Of9C`))h<=Bsy)6zaMJ&x-t%&+UcpLjV`jo4R2025 zXaG8EA!0lQa)|dx-@{O)qP6`$rhCkoQqZ`^SW8g-kOwrwsK8 z3ms*AIcyj}-1x&A&vSq{r=QMyp3CHdWH35!sad#!Sm>^|-|afB+Q;|Iq@LFgqIp#Z zD1%H+3I?6RGnk&IFo|u+E0dCxXz4yI^1i!QTu7uvIEH>i3rR{srcST`LIRwdV1P;W z+%AN1NIf@xxvVLiSX`8ILA8MzNqE&7>%jMzGt9wm78bo9<;h*W84i29^w!>V>{N+S zd`5Zmz^G;f=icvoOZfK5#1ctx*~UwD=ab4DGQXehQ!XYnak*dee%YN$_ZPL%KZuz$ zD;$PpT;HM^$KwtQm@7uvT`i6>Hae1CoRVM2)NL<2-k2PiX=eAx+-6j#JI?M}(tuBW zkF%jjLR)O`gI2fcPBxF^HeI|DWwQWHVR!;;{BXXHskxh8F@BMDn`oEi-NHt;CLymW z=KSv5)3dyzec0T5B*`g-MQ<;gz=nIWKUi9ko<|4I(-E0k$QncH>E4l z**1w&#={&zv4Tvhgz#c29`m|;lU-jmaXFMC11 z*dlXDMEOG>VoLMc>!rApwOu2prKSi*!w%`yzGmS+k(zm*CsLK*wv{S_0WX^8A-rKy zbk^Gf_92^7iB_uUF)EE+ET4d|X|>d&mdN?x@vxKAQk`O+r4Qdu>XGy(a(19g;=jU} zFX{O*_NG>!$@jh!U369Lnc+D~qch3uT+_Amyi}*k#LAAwh}k8IPK5a-WZ81ufD>l> z$4cF}GSz>ce`3FAic}6W4Z7m9KGO?(eWqi@L|5Hq0@L|&2flN1PVl}XgQ2q*_n2s3 zt5KtowNkTYB5b;SVuoXA@i5irXO)A&%7?V`1@HGCB&)Wgk+l|^XXChq;u(nyPB}b3 zY>m5jkxpZgi)zfbgv&ec4Zqdvm+D<?Im*mXweS9H+V>)zF#Zp3)bhl$PbISY{5=_z!8&*Jv~NYtI-g!>fDs zmvL5O^U%!^VaKA9gvKw|5?-jk>~%CVGvctKmP$kpnpfN{D8@X*Aazi$txfa%vd-|E z>kYmV66W!lNekJPom29LdZ%(I+ZLZYTXzTg*to~m?7vp%{V<~>H+2}PQ?PPAq`36R z<%wR8v6UkS>Wt#hzGk#44W<%9S=nBfB);6clKwnxY}T*w21Qc3_?IJ@4gYzC7s;WP zVQNI(M=S=JT#xsZy7G`cR(BP9*je0bfeN8JN5~zY(DDs0t{LpHOIbN);?T-69Pf3R zSNe*&p2%AwXHL>__g+xd4Hlc_vu<25H?(`nafS%)3UPP7_4;gk-9ckt8SJRTv5v0M z_Hww`qPudL?ajIR&X*;$y-`<)6dxx1U~5eGS13CB!lX;3w7n&lDDiArbAhSycd}+b zya_3p@A`$kQy;|NJZ~s44Hqo7Hwt}X86NK=(ey>lgWTtGL6k@Gy;PbO!M%1~Wcn2k zUFP|*5d>t-X*RU8g%>|(wwj*~#l4z^Aatf^DWd1Wj#Q*AY0D^V@sC`M zjJc6qXu0I7Y*2;;gGu!plAFzG=J;1%eIOdn zQA>J&e05UN*7I5@yRhK|lbBSfJ+5Uq;!&HV@xfPZrgD}kE*1DSq^=%{o%|LChhl#0 zlMb<^a6ixzpd{kNZr|3jTGeEzuo}-eLT-)Q$#b{!vKx8Tg}swCni>{#%vDY$Ww$84 zew3c9BBovqb}_&BRo#^!G(1Eg((BScRZ}C)Oz?y`T5wOrv);)b^4XR8 zhJo7+<^7)qB>I;46!GySzdneZ>n_E1oWZY;kf94#)s)kWjuJN1c+wbVoNQcmnv}{> zN0pF+Sl3E}UQ$}slSZeLJrwT>Sr}#V(dVaezCQl2|4LN`7L7v&siYR|r7M(*JYfR$ zst3=YaDw$FSc{g}KHO&QiKxuhEzF{f%RJLKe3p*7=oo`WNP)M(9X1zIQPP0XHhY3c znrP{$4#Ol$A0s|4S7Gx2L23dv*Gv2o;h((XVn+9+$qvm}s%zi6nI-_s6?mG! zj{DV;qesJb&owKeEK?=J>UcAlYckA7Sl+I&IN=yasrZOkejir*kE@SN`fk<8Fgx*$ zy&fE6?}G)d_N`){P~U@1jRVA|2*69)KSe_}!~?+`Yb{Y=O~_+@!j<&oVQQMnhoIRU zA0CyF1OFfkK44n*JD~!2!SCPM;PRSk%1XL=0&rz00wxPs&-_eapJy#$h!eqY%nS0{ z!aGg58JIJPF3_ci%n)QSVpa2H`vIe$RD43;#IRfDV&Ibit z+?>HW4{2wOfC6Fw)}4x}i1maDxcE1qi@BS*qcxD2gE@h3#4cgU*D-&3z7D|tVZWt= z-Cy2+*Cm@P4GN_TPUtaVyVesbVDazF@)j8VJ4>XZv!f%}&eO1SvIgr}4`A*3#vat< z_MoByL(qW6L7SFZ#|Gc1fFN)L2PxY+{B8tJp+pxRyz*87)vXR}*=&ahXjBlQKguuf zX6x<<6fQulE^C*KH8~W%ptpaC0l?b=_{~*U4?5Vt;dgM4t_{&UZ1C2j?b>b+5}{IF_CUyvz-@QZPMlJ)r_tS$9kH%RPv#2_nMb zRLj5;chJ72*U`Z@Dqt4$@_+k$%|8m(HqLG!qT4P^DdfvGf&){gKnGCX#H0!;W=AGP zbA&Z`-__a)VTS}kKFjWGk z%|>yE?t*EJ!qeQ%dPk$;xIQ+P0;()PCBDgjJm6Buj{f^awNoVx+9<|lg3%-$G(*f) zll6oOkN|yamn1uyl2*N-lnqRI1cvs_JxLTeahEK=THV$Sz*gQhKNb*p0fNoda#-&F zB-qJgW^g}!TtM|0bS2QZekW7_tKu%GcJ!4?lObt0z_$mZ4rbQ0o=^curCs3bJK6sq z9fu-aW-l#>z~ca(B;4yv;2RZ?tGYAU)^)Kz{L|4oPj zdOf_?de|#yS)p2v8-N||+XL=O*%3+y)oI(HbM)Ds?q8~HPzIP(vs*G`iddbWq}! z(2!VjP&{Z1w+%eUq^ /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +133,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,11 +200,15 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/gradlew.bat b/gradlew.bat index f127cfd4..9d21a218 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -26,6 +28,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -42,11 +45,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -56,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail From 54e0cdb5a61207ad93b4dc98bd2f172295a8308b Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Fri, 14 Mar 2025 15:40:20 +0900 Subject: [PATCH 186/399] =?UTF-8?q?refactor:=20naver-intelij-formatter=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/README.md | 2 + .../java/ssu/eatssu/EatSsuApplication.java | 6 +- .../controller/AuthenticationController.java | 14 +- .../controller/ManageCategoryController.java | 18 +- .../controller/ManageFixMenuController.java | 77 ++-- .../controller/ManageInquiryController.java | 42 +- .../controller/ManageMealController.java | 61 +-- .../controller/ManageReportController.java | 30 +- .../controller/ManageReviewController.java | 16 +- .../eatssu/domain/admin/dto/InquiryLine.java | 6 +- .../eatssu/domain/admin/dto/MealSection.java | 20 +- .../eatssu/domain/admin/dto/MenuBoard.java | 12 +- .../eatssu/domain/admin/dto/MenuBoards.java | 12 +- .../eatssu/domain/admin/dto/MenuSection.java | 14 +- .../eatssu/domain/admin/dto/PageWrapper.java | 11 +- .../domain/admin/dto/RegisterMealRequest.java | 6 +- .../eatssu/domain/admin/dto/ReportLine.java | 8 +- .../domain/admin/dto/SectionInBoard.java | 2 +- .../AdminAuthConfigurationProperties.java | 3 +- .../infrastructure/AdminConfiguration.java | 9 +- .../admin/listener/ReportEventListener.java | 12 +- .../persistence/LoadCategoryRepository.java | 22 +- .../persistence/LoadFixMenuRepository.java | 113 +++--- .../persistence/LoadInquiryRepository.java | 73 ++-- .../admin/persistence/LoadMealRepository.java | 197 +++++----- .../persistence/LoadReportRepository.java | 68 ++-- .../persistence/ManageCategoryRepository.java | 1 + .../persistence/ManageInquiryRepository.java | 1 + .../persistence/ManageMealMenuRepository.java | 1 + .../persistence/ManageMealRepository.java | 1 + .../persistence/ManageMenuRepository.java | 3 +- .../persistence/ManageReportRepository.java | 1 + .../persistence/ManageReviewRepository.java | 1 + .../persistence/MenuRatingRepository.java | 39 +- .../admin/service/AuthenticationService.java | 42 +- .../admin/service/ManageCategoryService.java | 29 +- .../admin/service/ManageFixMenuService.java | 160 ++++---- .../admin/service/ManageInquiryService.java | 33 +- .../admin/service/ManageMealService.java | 209 +++++----- .../admin/service/ManageReportService.java | 28 +- .../admin/service/ManageReviewService.java | 16 +- .../ssu/eatssu/domain/auth/dto/AppleKeys.java | 32 +- .../domain/auth/dto/AppleLoginRequest.java | 4 +- .../domain/auth/dto/KakaoLoginRequest.java | 12 +- .../auth/entity/AppleAuthenticator.java | 2 +- .../domain/auth/entity/OAuthProvider.java | 2 +- .../auth/entity/SystemAppleAuthenticator.java | 205 +++++----- .../auth/infrastructure/OAuthConfig.java | 16 +- .../auth/infrastructure/SecurityConfig.java | 104 ++--- .../auth/infrastructure/SecurityUtil.java | 39 +- .../auth/presentation/OAuthController.java | 72 ++-- .../auth/security/CustomUserDetails.java | 83 ++-- .../security/CustomUserDetailsService.java | 16 +- .../security/JwtAuthenticationFilter.java | 61 +-- .../auth/security/JwtTokenProvider.java | 275 ++++++------- .../security/UserAuthenticationProvider.java | 20 +- .../auth/security/UserPrincipalDto.java | 20 +- .../domain/auth/service/OAuthService.java | 154 ++++---- .../inquiry/dto/CreateInquiryRequest.java | 8 +- .../inquiry/dto/InquiryDetailResponse.java | 29 +- .../eatssu/domain/inquiry/entity/Inquiry.java | 46 +-- .../domain/inquiry/entity/InquiryStatus.java | 2 +- .../presentation/InquiryController.java | 32 +- .../inquiry/repository/InquiryRepository.java | 1 + .../inquiry/service/InquiryService.java | 19 +- .../ssu/eatssu/domain/menu/entity/Meal.java | 66 ++-- .../eatssu/domain/menu/entity/MealMenu.java | 20 +- .../ssu/eatssu/domain/menu/entity/Menu.java | 204 +++++----- .../domain/menu/entity/MenuCategory.java | 14 +- .../menu/entity/constants/MenuType.java | 38 +- .../menu/entity/constants/TimePart.java | 29 +- .../LoadMenusInMealRepository.java | 30 +- .../menu/persistence/MealMenuRepository.java | 13 +- .../menu/persistence/MealRepository.java | 5 +- .../persistence/MenuCategoryRepository.java | 3 +- .../menu/persistence/MenuRepository.java | 9 +- .../QuerydslMealRatingCalculator.java | 96 ++--- .../QuerydslMealRatingCounter.java | 75 ++-- .../QuerydslMenuRatingCalculator.java | 83 ++-- .../QuerydslMenuRatingCounter.java | 53 +-- .../dto/request/CreateMealRequest.java | 4 +- .../request/MealCreateWithPriceRequest.java | 8 +- .../dto/response/BriefMenuResponse.java | 16 +- .../response/CategoryWithMenusResponse.java | 22 +- .../dto/response/MealDetailResponse.java | 50 +-- .../dto/response/MenuResponse.java | 22 +- .../dto/response/MenuRestaurantResponse.java | 26 +- .../dto/response/MenusInMealResponse.java | 18 +- .../presentation/rest/MealController.java | 201 +++++----- .../presentation/rest/MenuController.java | 38 +- .../menu/service/MealRatingService.java | 11 +- .../domain/menu/service/MealService.java | 239 +++++------ .../menu/service/MenuRatingService.java | 11 +- .../domain/menu/service/MenuService.java | 119 +++--- .../QuerydslMenuRatingCountProvider.java | 49 +-- .../dto/CreatePartnershipRequest.java | 64 +-- .../dto/PartnershipDetailResponse.java | 72 ++-- .../partnership/dto/PartnershipResponse.java | 64 +-- .../partnership/entity/Partnership.java | 63 +-- .../entity/PartnershipCollege.java | 28 +- .../entity/PartnershipDepartment.java | 28 +- .../partnership/entity/PartnershipLike.java | 28 +- .../partnership/entity/PartnershipType.java | 16 +- .../partnership/entity/RestaurantType.java | 12 +- .../PartnershipLikeRepository.java | 5 +- .../persistence/PartnershipRepository.java | 17 +- .../presentation/PartnershipController.java | 100 ++--- .../service/PartnershipService.java | 189 ++++----- .../JpaLoadCollectionRatingCalculator.java | 240 ++++++------ .../entity/JpaProjectionRatingCalculator.java | 146 +++---- .../rating/entity/RatingCalculator.java | 62 +-- .../domain/rating/entity/RatingCountMap.java | 54 +-- .../eatssu/domain/rating/entity/Ratings.java | 28 +- .../domain/rating/entity/ReviewRating.java | 100 ++--- .../report/dto/ReportCreateRequest.java | 12 +- .../report/dto/ReportTypeInformation.java | 16 +- .../domain/report/dto/ReportTypeList.java | 18 +- .../domain/report/entity/ReportStatus.java | 33 +- .../domain/report/entity/ReportType.java | 29 +- .../report/presentation/ReportController.java | 54 +-- .../report/repository/ReportRepository.java | 1 + .../domain/report/service/ReportService.java | 31 +- .../domain/restaurant/entity/Restaurant.java | 44 +-- .../restaurant/entity/RestaurantType.java | 28 +- .../review/dto/CreateMealReviewRequest.java | 44 +-- .../domain/review/dto/MealReviewResponse.java | 162 ++++---- .../review/dto/MealReviewsResponse.java | 46 +-- .../domain/review/dto/MenuLikeRequest.java | 8 +- .../domain/review/dto/MenuReviewResponse.java | 60 +-- .../domain/review/dto/RatingAverages.java | 6 +- .../eatssu/domain/review/dto/RatingsDto.java | 19 +- .../review/dto/RestaurantReviewResponse.java | 20 +- .../review/dto/ReviewCreateRequest.java | 68 ++-- .../domain/review/dto/ReviewDetail.java | 138 +++---- .../domain/review/dto/ReviewRatingCount.java | 30 +- .../review/dto/ReviewUpdateRequest.java | 18 +- .../domain/review/dto/SavedReviewImage.java | 4 +- .../review/dto/UpdateMealReviewRequest.java | 12 +- .../review/dto/UploadReviewRequest.java | 74 ++-- .../eatssu/domain/review/entity/Report.java | 62 +-- .../eatssu/domain/review/entity/Review.java | 218 +++++------ .../domain/review/entity/ReviewImage.java | 24 +- .../domain/review/entity/ReviewLike.java | 26 +- .../domain/review/entity/ReviewMenuLike.java | 62 +-- .../eatssu/domain/review/entity/Reviews.java | 84 ++-- .../presentation/MealReviewController.java | 202 +++++----- .../review/presentation/ReviewController.java | 311 +++++++-------- .../repository/ReviewImageRepository.java | 1 + .../repository/ReviewLikeRepository.java | 3 +- .../repository/ReviewMenuLikeRepository.java | 3 +- .../review/repository/ReviewRepository.java | 23 +- .../repository/ReviewRepositoryCustom.java | 22 +- .../repository/ReviewRepositoryImpl.java | 203 +++++----- .../review/service/MealReviewService.java | 370 +++++++++--------- .../review/service/ReviewRatingService.java | 104 ++--- .../domain/review/service/ReviewService.java | 255 ++++++------ .../domain/slack/entity/SlackChannel.java | 18 +- .../slack/entity/SlackMessageFormat.java | 99 ++--- .../domain/slack/service/SlackService.java | 35 +- .../domain/slice/dto/SliceResponse.java | 18 +- .../domain/slice/service/SliceService.java | 138 +++---- .../user/department/entity/College.java | 20 +- .../user/department/entity/Department.java | 22 +- .../persistence/CollegeRepository.java | 3 +- .../persistence/DepartmentRepository.java | 3 +- .../domain/user/dto/DepartmentResponse.java | 2 +- .../domain/user/dto/MyMealReviewResponse.java | 42 +- .../domain/user/dto/MyPageResponse.java | 8 +- .../domain/user/dto/MyReviewDetail.java | 60 +-- .../user/dto/NicknameUpdateRequest.java | 2 +- .../ssu/eatssu/domain/user/dto/Tokens.java | 18 +- .../user/dto/UpdateDepartmentRequest.java | 4 +- .../domain/user/entity/BaseTimeEntity.java | 13 +- .../ssu/eatssu/domain/user/entity/Role.java | 25 +- .../ssu/eatssu/domain/user/entity/User.java | 177 ++++----- .../eatssu/domain/user/entity/UserStatus.java | 2 +- .../user/presentation/UserController.java | 323 +++++++-------- .../user/repository/UserRepository.java | 9 +- .../domain/user/service/UserService.java | 158 ++++---- .../domain/user/util/UserAliasUtil.java | 48 +-- .../eatssu/global/config/QueryDslConfig.java | 14 +- .../ssu/eatssu/global/config/S3Config.java | 31 +- .../eatssu/global/config/SwaggerConfig.java | 64 +-- .../handler/GlobalExceptionHandler.java | 360 ++++++++--------- .../handler/JwtAccessDeniedHandler.java | 28 +- .../handler/JwtAuthenticationEntryPoint.java | 29 +- .../handler/response/BaseException.java | 2 +- .../global/handler/response/BaseResponse.java | 86 ++-- .../handler/response/BaseResponseStatus.java | 192 ++++----- .../ssu/eatssu/global/util/S3Uploader.java | 78 ++-- .../ssu/eatssu/EatSsuApplicationTests.java | 6 +- .../TestAppleAuthenticator.java | 8 +- .../domain/auth/service/OauthServiceTest.java | 112 +++--- .../domain/menu/service/MealServiceTest.java | 130 +++--- .../domain/menu/service/MenuServiceTest.java | 57 +-- .../report/service/ReportServiceTest.java | 109 +++--- .../review/service/ReviewServiceTest.java | 172 ++++---- .../domain/user/service/UserServiceTest.java | 139 +++---- 198 files changed, 5779 insertions(+), 5594 deletions(-) diff --git a/.github/README.md b/.github/README.md index 27b3172d..cebbaef5 100644 --- a/.github/README.md +++ b/.github/README.md @@ -3,6 +3,7 @@ # EAT-SSU: 숭실대 학식 리뷰 앱 **EAT-SSU는 숭실대학교 학생들의 즐겁고 편리한 학식 이용을 꿈꾸는 프로젝트입니다.** + - `학생식당`, `도담식당`, `푸드코트`, `스낵코너`, `기숙사 식당`의 모든 메뉴를 비교할 수 있어요. - 학식에 대한 리뷰를 통해 숭실대 학우들과 정보를 공유할 수 있어요. - 식당의 운영시간과 위치를 확인할 수 있어요! @@ -11,6 +12,7 @@ ## 다운로드 2023.11.27~ 서비스 중 + - [App Store](https://apps.apple.com/kr/app/eat-ssu-%EC%88%AD%EC%8B%A4%EB%8C%80-%ED%95%99%EC%8B%9D-%EB%A6%AC%EB%B7%B0-%EC%95%B1/id6472618331) - [Play Store](https://play.google.com/store/apps/details?id=com.eatssu.android) diff --git a/src/main/java/ssu/eatssu/EatSsuApplication.java b/src/main/java/ssu/eatssu/EatSsuApplication.java index aa937ee8..36cb653b 100644 --- a/src/main/java/ssu/eatssu/EatSsuApplication.java +++ b/src/main/java/ssu/eatssu/EatSsuApplication.java @@ -8,8 +8,8 @@ @SpringBootApplication public class EatSsuApplication { - public static void main(String[] args) { - SpringApplication.run(EatSsuApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(EatSsuApplication.class, args); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java b/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java index 8291506c..dcdb35fe 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java @@ -2,11 +2,13 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; + import ssu.eatssu.domain.admin.dto.LoginRequest; import ssu.eatssu.domain.admin.service.AuthenticationService; import ssu.eatssu.domain.user.dto.Tokens; @@ -18,12 +20,12 @@ @RequiredArgsConstructor public class AuthenticationController { - private final AuthenticationService authenticationService; + private final AuthenticationService authenticationService; - @ResponseBody - @PostMapping("/login") - public BaseResponse login(@RequestBody LoginRequest request) { - return BaseResponse.success(authenticationService.login(request)); - } + @ResponseBody + @PostMapping("/login") + public BaseResponse login(@RequestBody LoginRequest request) { + return BaseResponse.success(authenticationService.login(request)); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java index 3dbc566d..7edd71f4 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java @@ -1,8 +1,10 @@ package ssu.eatssu.domain.admin.controller; import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; + import ssu.eatssu.domain.admin.dto.RegisterCategoryRequest; import ssu.eatssu.domain.admin.service.ManageCategoryService; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -13,13 +15,13 @@ @RequiredArgsConstructor public class ManageCategoryController { - private final ManageCategoryService manageCategoryService; + private final ManageCategoryService manageCategoryService; - @ResponseBody - @PostMapping("/") - public BaseResponse register(@RequestParam Restaurant restaurant, - @RequestBody RegisterCategoryRequest request) { - manageCategoryService.register(restaurant, request); - return BaseResponse.success(); - } + @ResponseBody + @PostMapping("/") + public BaseResponse register(@RequestParam Restaurant restaurant, + @RequestBody RegisterCategoryRequest request) { + manageCategoryService.register(restaurant, request); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java index ed4bfcd7..28774954 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java @@ -1,8 +1,10 @@ package ssu.eatssu.domain.admin.controller; import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; + import ssu.eatssu.domain.admin.dto.MenuBoards; import ssu.eatssu.domain.admin.dto.RegisterFixMenuRequest; import ssu.eatssu.domain.admin.dto.UpdateFixMenuRequest; @@ -15,43 +17,42 @@ @RequiredArgsConstructor public class ManageFixMenuController { - private final ManageFixMenuService manageFixMenuService; - - @ResponseBody - @GetMapping("") - public BaseResponse fixMenuPage() { - MenuBoards menuBoards = manageFixMenuService.getMenuBoards(); - return BaseResponse.success(menuBoards); - } - - @ResponseBody - @PostMapping("") - public BaseResponse register(@RequestParam Restaurant restaurant, - @RequestBody RegisterFixMenuRequest request) { - manageFixMenuService.register(restaurant, request); - return BaseResponse.success(); - } - - - @ResponseBody - @PatchMapping("/{menuId}") - public BaseResponse update(@PathVariable Long menuId, - @RequestBody UpdateFixMenuRequest request) { - manageFixMenuService.updateMenu(menuId, request); - return BaseResponse.success(); - } - - @ResponseBody - @DeleteMapping("/{menuId}") - public BaseResponse delete(@PathVariable Long menuId) { - manageFixMenuService.delete(menuId); - return BaseResponse.success(); - } - - @ResponseBody - @PatchMapping("/{menuId}/discontinued-status") - public BaseResponse toggleDiscontinuedStatus(@PathVariable Long menuId) { - return BaseResponse.success(manageFixMenuService.changeDiscontinuedStatus(menuId)); - } + private final ManageFixMenuService manageFixMenuService; + + @ResponseBody + @GetMapping("") + public BaseResponse fixMenuPage() { + MenuBoards menuBoards = manageFixMenuService.getMenuBoards(); + return BaseResponse.success(menuBoards); + } + + @ResponseBody + @PostMapping("") + public BaseResponse register(@RequestParam Restaurant restaurant, + @RequestBody RegisterFixMenuRequest request) { + manageFixMenuService.register(restaurant, request); + return BaseResponse.success(); + } + + @ResponseBody + @PatchMapping("/{menuId}") + public BaseResponse update(@PathVariable Long menuId, + @RequestBody UpdateFixMenuRequest request) { + manageFixMenuService.updateMenu(menuId, request); + return BaseResponse.success(); + } + + @ResponseBody + @DeleteMapping("/{menuId}") + public BaseResponse delete(@PathVariable Long menuId) { + manageFixMenuService.delete(menuId); + return BaseResponse.success(); + } + + @ResponseBody + @PatchMapping("/{menuId}/discontinued-status") + public BaseResponse toggleDiscontinuedStatus(@PathVariable Long menuId) { + return BaseResponse.success(manageFixMenuService.changeDiscontinuedStatus(menuId)); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java index 7ba11aa6..8392508f 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java @@ -1,11 +1,13 @@ package ssu.eatssu.domain.admin.controller; import lombok.RequiredArgsConstructor; + import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; + import ssu.eatssu.domain.admin.dto.InquiryLine; import ssu.eatssu.domain.admin.dto.PageWrapper; import ssu.eatssu.domain.admin.dto.UpdateStatusRequest; @@ -16,27 +18,27 @@ @RequestMapping("/admin/inquiries") @RequiredArgsConstructor public class ManageInquiryController { - private final ManageInquiryService manageInquiryService; + private final ManageInquiryService manageInquiryService; - @ResponseBody - @GetMapping("") - public BaseResponse> inquiryPage(@PageableDefault(size = 20) Pageable pageable, - Model model) { - PageWrapper inquiryLinePage = manageInquiryService.getInquiryBoard(pageable); - return BaseResponse.success(inquiryLinePage); - } + @ResponseBody + @GetMapping("") + public BaseResponse> inquiryPage(@PageableDefault(size = 20) Pageable pageable, + Model model) { + PageWrapper inquiryLinePage = manageInquiryService.getInquiryBoard(pageable); + return BaseResponse.success(inquiryLinePage); + } - @ResponseBody - @PatchMapping("{inquiryId}/status") - public BaseResponse updateStatus(@PathVariable Long inquiryId, @RequestBody UpdateStatusRequest request) { - manageInquiryService.updateStatus(inquiryId, request); - return BaseResponse.success(); - } + @ResponseBody + @PatchMapping("{inquiryId}/status") + public BaseResponse updateStatus(@PathVariable Long inquiryId, @RequestBody UpdateStatusRequest request) { + manageInquiryService.updateStatus(inquiryId, request); + return BaseResponse.success(); + } - @ResponseBody - @DeleteMapping("{inquiryId}") - public BaseResponse delete(@PathVariable Long inquiryId) { - manageInquiryService.delete(inquiryId); - return BaseResponse.success(); - } + @ResponseBody + @DeleteMapping("{inquiryId}") + public BaseResponse delete(@PathVariable Long inquiryId) { + manageInquiryService.delete(inquiryId); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java index a3f0b083..14b79e01 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java @@ -1,10 +1,12 @@ package ssu.eatssu.domain.admin.controller; import lombok.RequiredArgsConstructor; + import org.springframework.format.annotation.DateTimeFormat; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; + import ssu.eatssu.domain.admin.dto.MealInfo; import ssu.eatssu.domain.admin.dto.MenuBoards; import ssu.eatssu.domain.admin.dto.RegisterMealRequest; @@ -20,35 +22,34 @@ @RequiredArgsConstructor public class ManageMealController { - private final ManageMealService manageMealService; - - @ResponseBody - @GetMapping("") - public BaseResponse mealPage(@RequestParam @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @RequestParam TimePart timePart, - Model model) { - MenuBoards menuBoards = manageMealService.getMenuBoards(date, timePart); - return BaseResponse.success(menuBoards); - } - - @ResponseBody - @PostMapping("") - public BaseResponse register(@RequestParam Restaurant restaurant, - @RequestParam @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @RequestParam TimePart timePart, - @RequestBody RegisterMealRequest request, - Model model) { - MealInfo mealInfo = new MealInfo(restaurant, date, timePart); - manageMealService.register(mealInfo, request); - return BaseResponse.success(); - } - - @ResponseBody - @DeleteMapping("/{mealId}") - public BaseResponse delete(@PathVariable Long mealId) { - manageMealService.delete(mealId); - return BaseResponse.success(); - } - + private final ManageMealService manageMealService; + + @ResponseBody + @GetMapping("") + public BaseResponse mealPage(@RequestParam @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @RequestParam TimePart timePart, + Model model) { + MenuBoards menuBoards = manageMealService.getMenuBoards(date, timePart); + return BaseResponse.success(menuBoards); + } + + @ResponseBody + @PostMapping("") + public BaseResponse register(@RequestParam Restaurant restaurant, + @RequestParam @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @RequestParam TimePart timePart, + @RequestBody RegisterMealRequest request, + Model model) { + MealInfo mealInfo = new MealInfo(restaurant, date, timePart); + manageMealService.register(mealInfo, request); + return BaseResponse.success(); + } + + @ResponseBody + @DeleteMapping("/{mealId}") + public BaseResponse delete(@PathVariable Long mealId) { + manageMealService.delete(mealId); + return BaseResponse.success(); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java index 012e45a0..497925f1 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java @@ -1,11 +1,13 @@ package ssu.eatssu.domain.admin.controller; import lombok.RequiredArgsConstructor; + import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; + import ssu.eatssu.domain.admin.dto.PageWrapper; import ssu.eatssu.domain.admin.dto.ReportLine; import ssu.eatssu.domain.admin.service.ManageReportService; @@ -15,21 +17,21 @@ @RequestMapping("/admin/reports") @RequiredArgsConstructor public class ManageReportController { - private final ManageReportService manageReportService; + private final ManageReportService manageReportService; - @ResponseBody - @GetMapping("") - public BaseResponse> reportPage(@PageableDefault(size = 20) Pageable pageable, - Model model) { - PageWrapper reportLinePage = manageReportService.getReportBoard(pageable); - return BaseResponse.success(reportLinePage); - } + @ResponseBody + @GetMapping("") + public BaseResponse> reportPage(@PageableDefault(size = 20) Pageable pageable, + Model model) { + PageWrapper reportLinePage = manageReportService.getReportBoard(pageable); + return BaseResponse.success(reportLinePage); + } - @ResponseBody - @DeleteMapping("/{reportId}") - public BaseResponse delete(@PathVariable Long reportId) { - manageReportService.delete(reportId); - return BaseResponse.success(); - } + @ResponseBody + @DeleteMapping("/{reportId}") + public BaseResponse delete(@PathVariable Long reportId) { + manageReportService.delete(reportId); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java index b0aa1c05..6571bd7b 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java @@ -1,11 +1,13 @@ package ssu.eatssu.domain.admin.controller; import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; + import ssu.eatssu.domain.admin.service.ManageReviewService; import ssu.eatssu.global.handler.response.BaseResponse; @@ -13,12 +15,12 @@ @RequestMapping("/admin/reviews") @RequiredArgsConstructor public class ManageReviewController { - private final ManageReviewService manageReviewService; + private final ManageReviewService manageReviewService; - @ResponseBody - @DeleteMapping("/{reviewId}") - public BaseResponse delete(@PathVariable Long reviewId) { - manageReviewService.delete(reviewId); - return BaseResponse.success(); - } + @ResponseBody + @DeleteMapping("/{reviewId}") + public BaseResponse delete(@PathVariable Long reviewId) { + manageReviewService.delete(reviewId); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java b/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java index 34158f29..7f46580a 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java @@ -6,7 +6,7 @@ import java.time.LocalDateTime; public record InquiryLine(Long inquiryId, LocalDateTime date, String email, String content, InquiryStatus status) { - public InquiryLine(Inquiry inquiry) { - this(inquiry.getId(), inquiry.getCreatedDate(), inquiry.getEmail(), inquiry.getContent(), inquiry.getStatus()); - } + public InquiryLine(Inquiry inquiry) { + this(inquiry.getId(), inquiry.getCreatedDate(), inquiry.getEmail(), inquiry.getContent(), inquiry.getStatus()); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MealSection.java b/src/main/java/ssu/eatssu/domain/admin/dto/MealSection.java index b0095afd..44647533 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MealSection.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MealSection.java @@ -5,16 +5,16 @@ public record MealSection(Long mealId, String title, List menuLines) implements SectionInBoard { - public MealSection(Long mealId, String title) { - this(mealId, title, new ArrayList<>()); - } + public MealSection(Long mealId, String title) { + this(mealId, title, new ArrayList<>()); + } - public MealSection(Long mealId) { - this(mealId, null, new ArrayList<>()); - } + public MealSection(Long mealId) { + this(mealId, null, new ArrayList<>()); + } - @Override - public void addMenuLine(MenuLine menuLine) { - menuLines.add(menuLine); - } + @Override + public void addMenuLine(MenuLine menuLine) { + menuLines.add(menuLine); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java index af033a63..2d25bc3d 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java @@ -4,11 +4,11 @@ import java.util.List; public record MenuBoard(String restaurantName, List sections) { - public MenuBoard(String restaurantName) { - this(restaurantName, new ArrayList<>()); - } + public MenuBoard(String restaurantName) { + this(restaurantName, new ArrayList<>()); + } - public void addSection(SectionInBoard section) { - sections.add(section); - } + public void addSection(SectionInBoard section) { + sections.add(section); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java index 8a65cecc..b4f95f19 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java @@ -4,11 +4,11 @@ import java.util.List; public record MenuBoards(List menuBoards) { - public MenuBoards() { - this(new ArrayList<>()); - } + public MenuBoards() { + this(new ArrayList<>()); + } - public void add(MenuBoard menuBoard) { - menuBoards.add(menuBoard); - } + public void add(MenuBoard menuBoard) { + menuBoards.add(menuBoard); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java index 48aeaad0..8b0845a6 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java @@ -6,12 +6,12 @@ import java.util.List; public record MenuSection(Long categoryId, String categoryName, List menuLines) implements SectionInBoard { - public MenuSection(MenuCategory category) { - this(category.getId(), category.getName(), new ArrayList<>()); - } + public MenuSection(MenuCategory category) { + this(category.getId(), category.getName(), new ArrayList<>()); + } - @Override - public void addMenuLine(MenuLine menuLine) { - menuLines.add(menuLine); - } + @Override + public void addMenuLine(MenuLine menuLine) { + menuLines.add(menuLine); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java b/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java index 4f17e0eb..c7c14e46 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java @@ -5,9 +5,10 @@ import java.util.List; public record PageWrapper(List content, int totalPages, long totalElements, int number, int size, - int numberOfElements, - boolean isFirst, boolean isLast) { - public PageWrapper(Page page) { - this(page.getContent(), page.getTotalPages(), page.getTotalElements(), page.getNumber(), page.getSize(), page.getNumberOfElements(), page.isFirst(), page.isLast()); - } + int numberOfElements, + boolean isFirst, boolean isLast) { + public PageWrapper(Page page) { + this(page.getContent(), page.getTotalPages(), page.getTotalElements(), page.getNumber(), page.getSize(), + page.getNumberOfElements(), page.isFirst(), page.isLast()); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMealRequest.java b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMealRequest.java index efd33a83..4147cc02 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMealRequest.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMealRequest.java @@ -3,7 +3,7 @@ import java.util.List; public record RegisterMealRequest(List menuNames) { - public RegisterMealRequest { - menuNames.sort(String::compareTo); - } + public RegisterMealRequest { + menuNames.sort(String::compareTo); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java b/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java index cb7ae4f8..43160c6c 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java @@ -6,8 +6,8 @@ import java.time.LocalDateTime; public record ReportLine(Long reportId, LocalDateTime date, String type, Long reviewId, String reviewText) { - public ReportLine(Report report, Review review) { - this(report.getId(), report.getCreatedDate(), report.getReportType().getDescription(), - review.getId(), review.getContent()); - } + public ReportLine(Report report, Review review) { + this(report.getId(), report.getCreatedDate(), report.getReportType().getDescription(), + review.getId(), review.getContent()); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/SectionInBoard.java b/src/main/java/ssu/eatssu/domain/admin/dto/SectionInBoard.java index 54eb1600..aa3f566c 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/SectionInBoard.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/SectionInBoard.java @@ -1,5 +1,5 @@ package ssu.eatssu.domain.admin.dto; public interface SectionInBoard { - void addMenuLine(MenuLine menuLine); + void addMenuLine(MenuLine menuLine); } diff --git a/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java b/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java index 29cca058..ee2b821f 100644 --- a/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java +++ b/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java @@ -1,10 +1,11 @@ package ssu.eatssu.domain.admin.infrastructure; import lombok.Data; + import org.springframework.boot.context.properties.ConfigurationProperties; @Data @ConfigurationProperties(prefix = "admin") public class AdminAuthConfigurationProperties { - private String loginId; + private String loginId; } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminConfiguration.java b/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminConfiguration.java index 01309549..0eb3ea08 100644 --- a/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminConfiguration.java +++ b/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminConfiguration.java @@ -3,14 +3,15 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; + import ssu.eatssu.domain.admin.controller.AdminAuth; @Configuration @EnableConfigurationProperties(AdminAuthConfigurationProperties.class) public class AdminConfiguration { - @Bean - public AdminAuth adminAuthConfigurationProperties(AdminAuthConfigurationProperties properties) { - return new AdminAuth(properties.getLoginId()); - } + @Bean + public AdminAuth adminAuthConfigurationProperties(AdminAuthConfigurationProperties properties) { + return new AdminAuth(properties.getLoginId()); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java b/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java index d357cdc9..d9780e36 100644 --- a/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java +++ b/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java @@ -1,8 +1,10 @@ package ssu.eatssu.domain.admin.listener; import lombok.RequiredArgsConstructor; + import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; + import ssu.eatssu.domain.admin.event.ReviewDeleteEvent; import ssu.eatssu.domain.admin.service.ManageReportService; @@ -10,10 +12,10 @@ @RequiredArgsConstructor public class ReportEventListener { - private final ManageReportService manageReportService; + private final ManageReportService manageReportService; - @EventListener - public void deleteReport(ReviewDeleteEvent event) { - manageReportService.deleteAllByReviewId(event.reviewId()); - } + @EventListener + public void deleteReport(ReviewDeleteEvent event) { + manageReportService.deleteAllByReviewId(event.reviewId()); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java index 748ed6fc..60225778 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java @@ -1,8 +1,11 @@ package ssu.eatssu.domain.admin.persistence; import com.querydsl.jpa.impl.JPAQueryFactory; + import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Repository; + import ssu.eatssu.domain.menu.entity.QMenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -10,15 +13,14 @@ @RequiredArgsConstructor public class LoadCategoryRepository { - private final JPAQueryFactory queryFactory; - private final QMenuCategory category = QMenuCategory.menuCategory; - + private final JPAQueryFactory queryFactory; + private final QMenuCategory category = QMenuCategory.menuCategory; - public boolean existsCategory(Restaurant restaurant, String name) { - return queryFactory.select(category.id) - .from(category) - .where(category.name.eq(name), - category.restaurant.eq(restaurant)) - .fetchFirst() != null; - } + public boolean existsCategory(Restaurant restaurant, String name) { + return queryFactory.select(category.id) + .from(category) + .where(category.name.eq(name), + category.restaurant.eq(restaurant)) + .fetchFirst() != null; + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java index bdb2c84b..13d56fe6 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java @@ -3,8 +3,11 @@ import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; + import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Repository; + import ssu.eatssu.domain.admin.dto.BriefMenu; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.menu.entity.QMenu; @@ -16,68 +19,68 @@ @Repository @RequiredArgsConstructor public class LoadFixMenuRepository { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - private final QMenuCategory category = QMenuCategory.menuCategory; + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QMenuCategory category = QMenuCategory.menuCategory; - public List findBriefMenusByCategoryId(Long categoryId) { - return queryFactory - .select(Projections.constructor(BriefMenu.class, - menu.id, - menu.name, - menu.price)) - .from(menu) - .join(menu.category, category) - .where( - menuCategoryIdEq(categoryId) - ) - .orderBy(menu.name.asc()) - .fetch(); - } + public List findBriefMenusByCategoryId(Long categoryId) { + return queryFactory + .select(Projections.constructor(BriefMenu.class, + menu.id, + menu.name, + menu.price)) + .from(menu) + .join(menu.category, category) + .where( + menuCategoryIdEq(categoryId) + ) + .orderBy(menu.name.asc()) + .fetch(); + } - public boolean existsMenu(String name, Restaurant restaurant) { - return queryFactory - .select(menu.id) - .from(menu) - .where( - menuNameEq(name), - restaurantNameEq(restaurant) - ) - .fetchFirst() != null; - } + public boolean existsMenu(String name, Restaurant restaurant) { + return queryFactory + .select(menu.id) + .from(menu) + .where( + menuNameEq(name), + restaurantNameEq(restaurant) + ) + .fetchFirst() != null; + } - public Restaurant getRestaurant(Long menuId) { - return queryFactory - .select(menu.restaurant) - .from(menu) - .where( - menu.id.eq(menuId) - ) - .fetchFirst(); - } + public Restaurant getRestaurant(Long menuId) { + return queryFactory + .select(menu.restaurant) + .from(menu) + .where( + menu.id.eq(menuId) + ) + .fetchFirst(); + } - public List findMenuCategoriesByRestaurant(Restaurant restaurant) { - return queryFactory - .selectFrom(category) - .where( - categoryRestaurantNameEq(restaurant) - ).fetch(); - } + public List findMenuCategoriesByRestaurant(Restaurant restaurant) { + return queryFactory + .selectFrom(category) + .where( + categoryRestaurantNameEq(restaurant) + ).fetch(); + } - private BooleanExpression menuNameEq(String menuName) { - return menu.name.eq(menuName); - } + private BooleanExpression menuNameEq(String menuName) { + return menu.name.eq(menuName); + } - private BooleanExpression restaurantNameEq(Restaurant restaurant) { - return menu.restaurant.eq(restaurant); - } + private BooleanExpression restaurantNameEq(Restaurant restaurant) { + return menu.restaurant.eq(restaurant); + } - private BooleanExpression categoryRestaurantNameEq(Restaurant restaurant) { - return category.restaurant.eq(restaurant); - } + private BooleanExpression categoryRestaurantNameEq(Restaurant restaurant) { + return category.restaurant.eq(restaurant); + } - private BooleanExpression menuCategoryIdEq(Long categoryId) { - return category.id.eq(categoryId); - } + private BooleanExpression menuCategoryIdEq(Long categoryId) { + return category.id.eq(categoryId); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java index 361ff218..9eb2ba3e 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java @@ -4,11 +4,14 @@ import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; + import lombok.RequiredArgsConstructor; + import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.support.PageableExecutionUtils; import org.springframework.stereotype.Repository; + import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.inquiry.entity.InquiryStatus; import ssu.eatssu.domain.inquiry.entity.QInquiry; @@ -18,39 +21,39 @@ @RequiredArgsConstructor @Repository public class LoadInquiryRepository { - private final JPAQueryFactory queryFactory; - - private final QInquiry inquiry = QInquiry.inquiry; - - public Page findAllInquiries(Pageable pageable) { - return PageableExecutionUtils.getPage(fetchInquiries(pageable), pageable, () -> countInquiries().fetchOne()); - } - - private JPAQuery countInquiries() { - return queryFactory - .select(inquiry.count()) - .from(inquiry); - } - - private List fetchInquiries(Pageable pageable) { - return queryFactory - .selectFrom(inquiry) - .orderBy(statusPath().asc(), inquiry.createdDate.desc()) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .fetch(); - } - - private NumberExpression statusPath() { - - /** - * Inquiry Status 에 따라 정렬 - * WAITING -> HOLD -> ANSWERED - */ - return new CaseBuilder() - .when(inquiry.status.eq(InquiryStatus.WAITING)).then(1) - .when(inquiry.status.eq(InquiryStatus.HOLD)).then(2) - .when(inquiry.status.eq(InquiryStatus.ANSWERED)).then(3) - .otherwise(4); - } + private final JPAQueryFactory queryFactory; + + private final QInquiry inquiry = QInquiry.inquiry; + + public Page findAllInquiries(Pageable pageable) { + return PageableExecutionUtils.getPage(fetchInquiries(pageable), pageable, () -> countInquiries().fetchOne()); + } + + private JPAQuery countInquiries() { + return queryFactory + .select(inquiry.count()) + .from(inquiry); + } + + private List fetchInquiries(Pageable pageable) { + return queryFactory + .selectFrom(inquiry) + .orderBy(statusPath().asc(), inquiry.createdDate.desc()) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .fetch(); + } + + private NumberExpression statusPath() { + + /** + * Inquiry Status 에 따라 정렬 + * WAITING -> HOLD -> ANSWERED + */ + return new CaseBuilder() + .when(inquiry.status.eq(InquiryStatus.WAITING)).then(1) + .when(inquiry.status.eq(InquiryStatus.HOLD)).then(2) + .when(inquiry.status.eq(InquiryStatus.ANSWERED)).then(3) + .otherwise(4); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java index 66f25d68..1ec3592e 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java @@ -3,8 +3,11 @@ import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; + import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Repository; + import ssu.eatssu.domain.admin.dto.BriefMenu; import ssu.eatssu.domain.admin.dto.MealInfo; import ssu.eatssu.domain.menu.entity.Menu; @@ -20,101 +23,101 @@ @Repository @RequiredArgsConstructor public class LoadMealRepository { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - private final QMeal meal = QMeal.meal; - private final QMealMenu mealMenu = QMealMenu.mealMenu; - - public List existsMeal(MealInfo query) { - return queryFactory.select(meal.id) - .from(meal) - .where( - mealRestaurantEq(query.restaurant()), - mealDateEq(query.date()), - mealTimePartEq(query.timePart()) - ) - .fetch(); - } - - public List findMenuNamesByMealId(Long mealId) { - return queryFactory - .select(menu.name) - .from(mealMenu) - .join(mealMenu.meal, meal) - .on(mealIdEq(mealId)) - .join(mealMenu.menu, menu) - .orderBy(menu.name.asc()) - .fetch(); - } - - public List getAllMealIdsByInfo(MealInfo query) { - return queryFactory.select(meal.id) - .from(meal) - .where( - mealRestaurantEq(query.restaurant()), - mealDateEq(query.date()), - mealTimePartEq(query.timePart()) - ) - .fetch(); - } - - public List findBriefMenusByMealId(Long mealId) { - return queryFactory - .select(Projections.constructor(BriefMenu.class, - menu.id, - menu.name, - menu.price)) - .from(mealMenu) - .join(mealMenu.meal, meal) - .on(mealIdEq(mealId)) - .join(mealMenu.menu, menu) - .orderBy(menu.name.asc()) - .fetch(); - } - - public Menu findMenu(String menuName, Restaurant restaurant) { - return queryFactory.selectFrom(menu) - .where( - menuNameEq(menuName), - menuRestaurantEq(restaurant) - ) - .fetchFirst(); - } - - public List getAllMenuIds(Long mealId) { - return queryFactory.select(mealMenu.menu.id) - .from(mealMenu) - .where(mealIdEq(mealId)) - .fetch(); - } - - private BooleanExpression mealIdEq(Long mealId) { - return meal.id.eq(mealId); - } - - private BooleanExpression mealTimePartEq(TimePart timePart) { - return meal.timePart.eq(timePart); - } - - private BooleanExpression mealDateEq(Date date) { - return meal.date.eq(date); - } - - private BooleanExpression mealRestaurantEq(Restaurant restaurant) { - return meal.restaurant.eq(restaurant); - } - - private BooleanExpression menuRestaurantEq(Restaurant restaurant) { - return menu.restaurant.eq(restaurant); - } - - private BooleanExpression menuNameEq(String menuName) { - return menu.name.eq(menuName); - } - - public int countMealMenuByMenuId(Long menuId) { - return (int) queryFactory.selectFrom(mealMenu) - .where(mealMenu.menu.id.eq(menuId)) - .fetchCount(); - } + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QMeal meal = QMeal.meal; + private final QMealMenu mealMenu = QMealMenu.mealMenu; + + public List existsMeal(MealInfo query) { + return queryFactory.select(meal.id) + .from(meal) + .where( + mealRestaurantEq(query.restaurant()), + mealDateEq(query.date()), + mealTimePartEq(query.timePart()) + ) + .fetch(); + } + + public List findMenuNamesByMealId(Long mealId) { + return queryFactory + .select(menu.name) + .from(mealMenu) + .join(mealMenu.meal, meal) + .on(mealIdEq(mealId)) + .join(mealMenu.menu, menu) + .orderBy(menu.name.asc()) + .fetch(); + } + + public List getAllMealIdsByInfo(MealInfo query) { + return queryFactory.select(meal.id) + .from(meal) + .where( + mealRestaurantEq(query.restaurant()), + mealDateEq(query.date()), + mealTimePartEq(query.timePart()) + ) + .fetch(); + } + + public List findBriefMenusByMealId(Long mealId) { + return queryFactory + .select(Projections.constructor(BriefMenu.class, + menu.id, + menu.name, + menu.price)) + .from(mealMenu) + .join(mealMenu.meal, meal) + .on(mealIdEq(mealId)) + .join(mealMenu.menu, menu) + .orderBy(menu.name.asc()) + .fetch(); + } + + public Menu findMenu(String menuName, Restaurant restaurant) { + return queryFactory.selectFrom(menu) + .where( + menuNameEq(menuName), + menuRestaurantEq(restaurant) + ) + .fetchFirst(); + } + + public List getAllMenuIds(Long mealId) { + return queryFactory.select(mealMenu.menu.id) + .from(mealMenu) + .where(mealIdEq(mealId)) + .fetch(); + } + + private BooleanExpression mealIdEq(Long mealId) { + return meal.id.eq(mealId); + } + + private BooleanExpression mealTimePartEq(TimePart timePart) { + return meal.timePart.eq(timePart); + } + + private BooleanExpression mealDateEq(Date date) { + return meal.date.eq(date); + } + + private BooleanExpression mealRestaurantEq(Restaurant restaurant) { + return meal.restaurant.eq(restaurant); + } + + private BooleanExpression menuRestaurantEq(Restaurant restaurant) { + return menu.restaurant.eq(restaurant); + } + + private BooleanExpression menuNameEq(String menuName) { + return menu.name.eq(menuName); + } + + public int countMealMenuByMenuId(Long menuId) { + return (int)queryFactory.selectFrom(mealMenu) + .where(mealMenu.menu.id.eq(menuId)) + .fetchCount(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java index c5b98250..8f775aea 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java @@ -3,11 +3,14 @@ import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; + import lombok.RequiredArgsConstructor; + import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.support.PageableExecutionUtils; import org.springframework.stereotype.Repository; + import ssu.eatssu.domain.admin.dto.ReportLine; import ssu.eatssu.domain.review.entity.QReport; import ssu.eatssu.domain.review.entity.QReview; @@ -17,37 +20,36 @@ @Repository @RequiredArgsConstructor public class LoadReportRepository { - private final JPAQueryFactory queryFactory; - private final QReport report = QReport.report; - private final QReview review = QReview.review; - - - public Page findAll(Pageable pageable) { - return PageableExecutionUtils.getPage(fetchReportLines(pageable), pageable, () -> countReports().fetchOne()); - } - - private JPAQuery countReports() { - return queryFactory - .select(report.count()) - .from(report); - } - - private List fetchReportLines(Pageable pageable) { - return queryFactory - .select(Projections.constructor(ReportLine.class, report, review)) - .from(report) - .join(report.review, review) - .orderBy(report.createdDate.desc()) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .fetch(); - } - - public List findAllByReviewId(Long reviewId) { - return queryFactory - .select(report.id) - .from(report) - .where(report.review.id.eq(reviewId)) - .fetch(); - } + private final JPAQueryFactory queryFactory; + private final QReport report = QReport.report; + private final QReview review = QReview.review; + + public Page findAll(Pageable pageable) { + return PageableExecutionUtils.getPage(fetchReportLines(pageable), pageable, () -> countReports().fetchOne()); + } + + private JPAQuery countReports() { + return queryFactory + .select(report.count()) + .from(report); + } + + private List fetchReportLines(Pageable pageable) { + return queryFactory + .select(Projections.constructor(ReportLine.class, report, review)) + .from(report) + .join(report.review, review) + .orderBy(report.createdDate.desc()) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .fetch(); + } + + public List findAllByReviewId(Long reviewId) { + return queryFactory + .select(report.id) + .from(report) + .where(report.review.id.eq(reviewId)) + .fetch(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageCategoryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageCategoryRepository.java index 21847438..c25686a9 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageCategoryRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageCategoryRepository.java @@ -2,6 +2,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; + import ssu.eatssu.domain.menu.entity.MenuCategory; @Repository diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageInquiryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageInquiryRepository.java index 590e2657..1a9adc10 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageInquiryRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageInquiryRepository.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.admin.persistence; import org.springframework.data.jpa.repository.JpaRepository; + import ssu.eatssu.domain.inquiry.entity.Inquiry; public interface ManageInquiryRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealMenuRepository.java index 4478ea9f..3b136e24 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealMenuRepository.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.admin.persistence; import org.springframework.data.jpa.repository.JpaRepository; + import ssu.eatssu.domain.menu.entity.MealMenu; public interface ManageMealMenuRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealRepository.java index 09dd9f84..831a89d2 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealRepository.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.admin.persistence; import org.springframework.data.jpa.repository.JpaRepository; + import ssu.eatssu.domain.menu.entity.Meal; public interface ManageMealRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java index 25be2987..0cfeac9e 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java @@ -2,11 +2,12 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; + import ssu.eatssu.domain.menu.entity.Menu; import java.util.Optional; @Repository public interface ManageMenuRepository extends JpaRepository { - Optional

findById(Long id); + Optional findById(Long id); } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReportRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReportRepository.java index 9acce379..f3dce349 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReportRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReportRepository.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.admin.persistence; import org.springframework.data.jpa.repository.JpaRepository; + import ssu.eatssu.domain.review.entity.Report; public interface ManageReportRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReviewRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReviewRepository.java index 598c4876..ad3b21f2 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReviewRepository.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.admin.persistence; import org.springframework.data.jpa.repository.JpaRepository; + import ssu.eatssu.domain.review.entity.Review; public interface ManageReviewRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java index 8dee0308..84c361cf 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java @@ -2,31 +2,34 @@ import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; + import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Repository; + import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; @Repository @RequiredArgsConstructor public class MenuRatingRepository { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - private final QReview review = QReview.review; - - public Double getMainRatingAverage(Long menuId) { - return queryFactory - .select(review.ratings.mainRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId) - ) - .fetchOne(); - } - - private BooleanExpression menuIdEq(Long menuId) { - return menu.id.eq(menuId); - } + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QReview review = QReview.review; + + public Double getMainRatingAverage(Long menuId) { + return queryFactory + .select(review.ratings.mainRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId) + ) + .fetchOne(); + } + + private BooleanExpression menuIdEq(Long menuId) { + return menu.id.eq(menuId); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java b/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java index a5372fdd..cae34329 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java @@ -1,8 +1,10 @@ package ssu.eatssu.domain.admin.service; import lombok.RequiredArgsConstructor; + import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; + import ssu.eatssu.domain.admin.controller.AdminAuth; import ssu.eatssu.domain.admin.dto.LoginRequest; import ssu.eatssu.domain.auth.security.JwtTokenProvider; @@ -13,24 +15,24 @@ @RequiredArgsConstructor @Service public class AuthenticationService { - private final JwtTokenProvider tokenProvider; - private final PasswordEncoder passwordEncoder; - private final UserRepository userRepository; - private final AdminAuth adminAuth; - - public Tokens login(LoginRequest request) { - return tokenProvider.generateTokens(request.loginId(), request.password()); - } - - private void join(String loginId, String password) { - String credentials = createCredentials(password); - - //회원가입 - User user = User.adminJoin(loginId, credentials); - userRepository.save(user); - } - - private String createCredentials(String password) { - return passwordEncoder.encode(password); - } + private final JwtTokenProvider tokenProvider; + private final PasswordEncoder passwordEncoder; + private final UserRepository userRepository; + private final AdminAuth adminAuth; + + public Tokens login(LoginRequest request) { + return tokenProvider.generateTokens(request.loginId(), request.password()); + } + + private void join(String loginId, String password) { + String credentials = createCredentials(password); + + //회원가입 + User user = User.adminJoin(loginId, credentials); + userRepository.save(user); + } + + private String createCredentials(String password) { + return passwordEncoder.encode(password); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java index 0fccb100..5f99ea8d 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java @@ -1,8 +1,10 @@ package ssu.eatssu.domain.admin.service; import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + import ssu.eatssu.domain.admin.dto.RegisterCategoryRequest; import ssu.eatssu.domain.admin.persistence.LoadCategoryRepository; import ssu.eatssu.domain.admin.persistence.ManageCategoryRepository; @@ -16,21 +18,20 @@ @RequiredArgsConstructor public class ManageCategoryService { - private final LoadCategoryRepository loadCategoryRepository; - private final ManageCategoryRepository manageCategoryRepository; - + private final LoadCategoryRepository loadCategoryRepository; + private final ManageCategoryRepository manageCategoryRepository; - public void register(Restaurant restaurant, RegisterCategoryRequest request) { - // 해당 식당에 이미 존재하는 카테고리인지 확인 - if (loadCategoryRepository.existsCategory(restaurant, request.name())) { - throw new BaseException(BaseResponseStatus.CONFLICT); - } + public void register(Restaurant restaurant, RegisterCategoryRequest request) { + // 해당 식당에 이미 존재하는 카테고리인지 확인 + if (loadCategoryRepository.existsCategory(restaurant, request.name())) { + throw new BaseException(BaseResponseStatus.CONFLICT); + } - MenuCategory category = MenuCategory.builder() - .restaurant(restaurant) - .name(request.name()) - .build(); + MenuCategory category = MenuCategory.builder() + .restaurant(restaurant) + .name(request.name()) + .build(); - manageCategoryRepository.save(category); - } + manageCategoryRepository.save(category); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java index c66628be..ad500ed3 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java @@ -1,8 +1,10 @@ package ssu.eatssu.domain.admin.service; import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + import ssu.eatssu.domain.admin.dto.*; import ssu.eatssu.domain.admin.persistence.LoadFixMenuRepository; import ssu.eatssu.domain.admin.persistence.ManageMenuRepository; @@ -21,109 +23,109 @@ @RequiredArgsConstructor public class ManageFixMenuService { - private final LoadFixMenuRepository loadMenuRepository; - private final ManageMenuRepository manageMenuRepository; - private final MenuRatingRepository menuRatingRepository; + private final LoadFixMenuRepository loadMenuRepository; + private final ManageMenuRepository manageMenuRepository; + private final MenuRatingRepository menuRatingRepository; - public MenuBoards getMenuBoards() { - MenuBoards menuBoards = new MenuBoards(); + public MenuBoards getMenuBoards() { + MenuBoards menuBoards = new MenuBoards(); - RestaurantType.FIXED.getRestaurants() - .forEach(restaurant -> menuBoards.add(getMenuBoard(restaurant))); + RestaurantType.FIXED.getRestaurants() + .forEach(restaurant -> menuBoards.add(getMenuBoard(restaurant))); - return menuBoards; - } + return menuBoards; + } - private MenuBoard getMenuBoard(Restaurant restaurant) { - MenuBoard menuBoard = new MenuBoard(restaurant.getRestaurantName()); + private MenuBoard getMenuBoard(Restaurant restaurant) { + MenuBoard menuBoard = new MenuBoard(restaurant.getRestaurantName()); - getMenuSections(restaurant).forEach(menuBoard::addSection); + getMenuSections(restaurant).forEach(menuBoard::addSection); - return menuBoard; - } + return menuBoard; + } - private List getMenuSections(Restaurant restaurant) { - List menuCategories = loadMenuRepository.findMenuCategoriesByRestaurant(restaurant); - return menuCategories.stream() - .map(this::getMenuSection) - .toList(); - } + private List getMenuSections(Restaurant restaurant) { + List menuCategories = loadMenuRepository.findMenuCategoriesByRestaurant(restaurant); + return menuCategories.stream() + .map(this::getMenuSection) + .toList(); + } - private MenuSection getMenuSection(MenuCategory category) { - MenuSection menuSection = new MenuSection(category); + private MenuSection getMenuSection(MenuCategory category) { + MenuSection menuSection = new MenuSection(category); - List briefMenus = loadMenuRepository.findBriefMenusByCategoryId(category.getId()); + List briefMenus = loadMenuRepository.findBriefMenusByCategoryId(category.getId()); - briefMenus.forEach(briefMenu -> - menuSection.addMenuLine(new MenuLine( - briefMenu.id(), - briefMenu.name(), - briefMenu.price(), - menuRatingRepository.getMainRatingAverage(briefMenu.id()) - )) - ); - return menuSection; - } + briefMenus.forEach(briefMenu -> + menuSection.addMenuLine(new MenuLine( + briefMenu.id(), + briefMenu.name(), + briefMenu.price(), + menuRatingRepository.getMainRatingAverage(briefMenu.id()) + )) + ); + return menuSection; + } - public void register(Restaurant restaurant, RegisterFixMenuRequest request) { + public void register(Restaurant restaurant, RegisterFixMenuRequest request) { - // 해당 식당에 이미 존재하는 메뉴인지 확인 - if (loadMenuRepository.existsMenu(request.name(), restaurant)) { - throw new BaseException(BaseResponseStatus.CONFLICT); - } + // 해당 식당에 이미 존재하는 메뉴인지 확인 + if (loadMenuRepository.existsMenu(request.name(), restaurant)) { + throw new BaseException(BaseResponseStatus.CONFLICT); + } - // 해당 식당의 메뉴 카테고리들 중에 요청받은 카테고리가 존재하는지 확인 - List menuCategories = loadMenuRepository.findMenuCategoriesByRestaurant(restaurant); - MenuCategory category = menuCategories.stream() - .filter(menuCategory -> menuCategory.getId().equals(request.categoryId())) - .findFirst() - .orElseThrow(() -> new BaseException(BaseResponseStatus.BAD_REQUEST)); + // 해당 식당의 메뉴 카테고리들 중에 요청받은 카테고리가 존재하는지 확인 + List menuCategories = loadMenuRepository.findMenuCategoriesByRestaurant(restaurant); + MenuCategory category = menuCategories.stream() + .filter(menuCategory -> menuCategory.getId().equals(request.categoryId())) + .findFirst() + .orElseThrow(() -> new BaseException(BaseResponseStatus.BAD_REQUEST)); - manageMenuRepository.save(Menu.createFixed(request.name(), restaurant, request.price(), category)); - } + manageMenuRepository.save(Menu.createFixed(request.name(), restaurant, request.price(), category)); + } - public void updateMenu(Long menuId, UpdateFixMenuRequest request) { - if (isFixedMenu(menuId)) { - throw new BaseException(BaseResponseStatus.NOT_SUPPORT_RESTAURANT); - } + public void updateMenu(Long menuId, UpdateFixMenuRequest request) { + if (isFixedMenu(menuId)) { + throw new BaseException(BaseResponseStatus.NOT_SUPPORT_RESTAURANT); + } - Menu menu = manageMenuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + Menu menu = manageMenuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); - // 식당에 같은 이름의 메뉴가 있는 지 확인 - Restaurant restaurant = loadMenuRepository.getRestaurant(menuId); - duplicateCheck(request.name(), restaurant); - menu.update(request.name(), request.price()); + // 식당에 같은 이름의 메뉴가 있는 지 확인 + Restaurant restaurant = loadMenuRepository.getRestaurant(menuId); + duplicateCheck(request.name(), restaurant); + menu.update(request.name(), request.price()); - manageMenuRepository.save(menu); - } + manageMenuRepository.save(menu); + } - private void duplicateCheck(String name, Restaurant restaurant) { - if (loadMenuRepository.existsMenu(name, restaurant)) { - throw new BaseException(BaseResponseStatus.CONFLICT); - } - } + private void duplicateCheck(String name, Restaurant restaurant) { + if (loadMenuRepository.existsMenu(name, restaurant)) { + throw new BaseException(BaseResponseStatus.CONFLICT); + } + } - private boolean isFixedMenu(Long menuId) { - Restaurant restaurant = loadMenuRepository.getRestaurant(menuId); - return RestaurantType.isVariableType(restaurant); - } + private boolean isFixedMenu(Long menuId) { + Restaurant restaurant = loadMenuRepository.getRestaurant(menuId); + return RestaurantType.isVariableType(restaurant); + } - public void delete(Long menuId) { - manageMenuRepository.deleteById(menuId); - } + public void delete(Long menuId) { + manageMenuRepository.deleteById(menuId); + } - public Boolean changeDiscontinuedStatus(Long menuId) { - if (isFixedMenu(menuId)) { - throw new BaseException(BaseResponseStatus.NOT_SUPPORT_RESTAURANT); - } + public Boolean changeDiscontinuedStatus(Long menuId) { + if (isFixedMenu(menuId)) { + throw new BaseException(BaseResponseStatus.NOT_SUPPORT_RESTAURANT); + } - Menu menu = manageMenuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + Menu menu = manageMenuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); - menu.changeDiscontinuedStatus(); + menu.changeDiscontinuedStatus(); - return menu.isDiscontinued(); - } + return menu.isDiscontinued(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java index 0f0f808c..fb9c3af4 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java @@ -1,9 +1,11 @@ package ssu.eatssu.domain.admin.service; import lombok.RequiredArgsConstructor; + import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; + import ssu.eatssu.domain.admin.dto.InquiryLine; import ssu.eatssu.domain.admin.dto.PageWrapper; import ssu.eatssu.domain.admin.dto.UpdateStatusRequest; @@ -17,22 +19,23 @@ @RequiredArgsConstructor public class ManageInquiryService { - private final LoadInquiryRepository loadInquiryRepository; - private final ManageInquiryRepository manageInquiryRepository; + private final LoadInquiryRepository loadInquiryRepository; + private final ManageInquiryRepository manageInquiryRepository; - public PageWrapper getInquiryBoard(Pageable pageable) { - Page inquiries = loadInquiryRepository.findAllInquiries(pageable); - return new PageWrapper<>(inquiries.map(InquiryLine::new)); - } + public PageWrapper getInquiryBoard(Pageable pageable) { + Page inquiries = loadInquiryRepository.findAllInquiries(pageable); + return new PageWrapper<>(inquiries.map(InquiryLine::new)); + } - public void updateStatus(Long inquiryId, UpdateStatusRequest request) { - Inquiry inquiry = manageInquiryRepository.findById(inquiryId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_USER_INQUIRY)); - inquiry.updateStatus(request.status()); - manageInquiryRepository.save(inquiry); - } + public void updateStatus(Long inquiryId, UpdateStatusRequest request) { + Inquiry inquiry = manageInquiryRepository.findById(inquiryId) + .orElseThrow(() -> new BaseException( + BaseResponseStatus.NOT_FOUND_USER_INQUIRY)); + inquiry.updateStatus(request.status()); + manageInquiryRepository.save(inquiry); + } - public void delete(Long inquiryId) { - manageInquiryRepository.deleteById(inquiryId); - } + public void delete(Long inquiryId) { + manageInquiryRepository.deleteById(inquiryId); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java index e746e415..0af8a0ca 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java @@ -1,7 +1,9 @@ package ssu.eatssu.domain.admin.service; import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Service; + import ssu.eatssu.domain.admin.dto.*; import ssu.eatssu.domain.admin.persistence.*; import ssu.eatssu.domain.menu.entity.Meal; @@ -19,107 +21,108 @@ @Service public class ManageMealService { - private final LoadMealRepository loadMealRepository; - private final MenuRatingRepository menuRatingRepository; - private final ManageMealRepository manageMealRepository; - private final ManageMealMenuRepository manageMealMenuRepository; - private final ManageMenuRepository manageMenuRepository; - - public MenuBoards getMenuBoards(Date date, TimePart timePart) { - MenuBoards menuBoards = new MenuBoards(); - - RestaurantType.VARIABLE.getRestaurants() - .forEach(restaurant -> menuBoards.add(getMealBoard(new MealInfo(restaurant, date, timePart)))); - - return menuBoards; - } - - private MenuBoard getMealBoard(MealInfo mealInfo) { - MenuBoard menuBoard = new MenuBoard(mealInfo.restaurant().getRestaurantName()); - - getMenuSections(mealInfo).forEach(menuBoard::addSection); - - return menuBoard; - } - - private List getMenuSections(MealInfo mealInfo) { - List mealIds = loadMealRepository.getAllMealIdsByInfo(mealInfo); - - return mealIds.stream().map(this::getMenuSection).toList(); - } - - private MealSection getMenuSection(Long mealId) { - MealSection mealSection = new MealSection(mealId); - - List briefMenus = loadMealRepository.findBriefMenusByMealId(mealId); - - briefMenus.forEach(briefMenu -> - mealSection.addMenuLine(new MenuLine( - briefMenu.id(), - briefMenu.name(), - briefMenu.price(), - menuRatingRepository.getMainRatingAverage(briefMenu.id()) - )) - ); - - return mealSection; - } - - public void register(MealInfo mealInfo, RegisterMealRequest request) { - // 중복 체크 - duplicateCheck(mealInfo, request); - - // 식단 등록 - Meal meal = new Meal(mealInfo.date(), mealInfo.timePart(), mealInfo.restaurant()); - manageMealRepository.save(meal); - - //식단에 메뉴 추가 - addMenusToMeal(meal, request.menuNames()); - - } - - private void addMenusToMeal(Meal meal, List menuNames) { - menuNames.forEach(menuName -> { - Menu menu = loadMealRepository.findMenu(menuName, meal.getRestaurant()); - if (menu == null) { - menu = Menu.createVariable(menuName, meal.getRestaurant()); - manageMenuRepository.save(menu); - } - manageMealMenuRepository.save(MealMenu.builder().meal(meal).menu(menu).build()); - }); - } - - private void duplicateCheck(MealInfo mealInfo, RegisterMealRequest request) { - List mealIds = loadMealRepository.existsMeal(mealInfo); - mealIds.forEach(mealId -> { - if (hasMenus(mealId, request.menuNames())) { - throw new BaseException(BaseResponseStatus.CONFLICT); - } - }); - } - - private boolean hasMenus(Long mealId, List menuNames) { - List menuNamesInMeal = loadMealRepository.findMenuNamesByMealId(mealId); - - /** - * menuNamesInMeal 과 menuNames 는 오름차순 정렬된 상태 - * @see LoadMealRepository#findMenuNamesByMealId(Long) - * @see RegisterMealRequest#RegisterMealRequest - */ - return menuNamesInMeal.equals(menuNames); - } - - public void delete(Long mealId) { - List menuIds = loadMealRepository.getAllMenuIds(mealId); - manageMealRepository.deleteById(mealId); - deleteUnusedMenus(menuIds); - } - - private void deleteUnusedMenus(List menuIds) { - menuIds.forEach(menuId -> { - if (loadMealRepository.countMealMenuByMenuId(menuId) == 0) { - manageMenuRepository.deleteById(menuId); - } - }); - } + private final LoadMealRepository loadMealRepository; + private final MenuRatingRepository menuRatingRepository; + private final ManageMealRepository manageMealRepository; + private final ManageMealMenuRepository manageMealMenuRepository; + private final ManageMenuRepository manageMenuRepository; + + public MenuBoards getMenuBoards(Date date, TimePart timePart) { + MenuBoards menuBoards = new MenuBoards(); + + RestaurantType.VARIABLE.getRestaurants() + .forEach(restaurant -> menuBoards.add( + getMealBoard(new MealInfo(restaurant, date, timePart)))); + + return menuBoards; + } + + private MenuBoard getMealBoard(MealInfo mealInfo) { + MenuBoard menuBoard = new MenuBoard(mealInfo.restaurant().getRestaurantName()); + + getMenuSections(mealInfo).forEach(menuBoard::addSection); + + return menuBoard; + } + + private List getMenuSections(MealInfo mealInfo) { + List mealIds = loadMealRepository.getAllMealIdsByInfo(mealInfo); + + return mealIds.stream().map(this::getMenuSection).toList(); + } + + private MealSection getMenuSection(Long mealId) { + MealSection mealSection = new MealSection(mealId); + + List briefMenus = loadMealRepository.findBriefMenusByMealId(mealId); + + briefMenus.forEach(briefMenu -> + mealSection.addMenuLine(new MenuLine( + briefMenu.id(), + briefMenu.name(), + briefMenu.price(), + menuRatingRepository.getMainRatingAverage(briefMenu.id()) + )) + ); + + return mealSection; + } + + public void register(MealInfo mealInfo, RegisterMealRequest request) { + // 중복 체크 + duplicateCheck(mealInfo, request); + + // 식단 등록 + Meal meal = new Meal(mealInfo.date(), mealInfo.timePart(), mealInfo.restaurant()); + manageMealRepository.save(meal); + + //식단에 메뉴 추가 + addMenusToMeal(meal, request.menuNames()); + + } + + private void addMenusToMeal(Meal meal, List menuNames) { + menuNames.forEach(menuName -> { + Menu menu = loadMealRepository.findMenu(menuName, meal.getRestaurant()); + if (menu == null) { + menu = Menu.createVariable(menuName, meal.getRestaurant()); + manageMenuRepository.save(menu); + } + manageMealMenuRepository.save(MealMenu.builder().meal(meal).menu(menu).build()); + }); + } + + private void duplicateCheck(MealInfo mealInfo, RegisterMealRequest request) { + List mealIds = loadMealRepository.existsMeal(mealInfo); + mealIds.forEach(mealId -> { + if (hasMenus(mealId, request.menuNames())) { + throw new BaseException(BaseResponseStatus.CONFLICT); + } + }); + } + + private boolean hasMenus(Long mealId, List menuNames) { + List menuNamesInMeal = loadMealRepository.findMenuNamesByMealId(mealId); + + /** + * menuNamesInMeal 과 menuNames 는 오름차순 정렬된 상태 + * @see LoadMealRepository#findMenuNamesByMealId(Long) + * @see RegisterMealRequest#RegisterMealRequest + */ + return menuNamesInMeal.equals(menuNames); + } + + public void delete(Long mealId) { + List menuIds = loadMealRepository.getAllMenuIds(mealId); + manageMealRepository.deleteById(mealId); + deleteUnusedMenus(menuIds); + } + + private void deleteUnusedMenus(List menuIds) { + menuIds.forEach(menuId -> { + if (loadMealRepository.countMealMenuByMenuId(menuId) == 0) { + manageMenuRepository.deleteById(menuId); + } + }); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java index dff28a17..8b248b65 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java @@ -1,9 +1,11 @@ package ssu.eatssu.domain.admin.service; import lombok.RequiredArgsConstructor; + import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; + import ssu.eatssu.domain.admin.dto.PageWrapper; import ssu.eatssu.domain.admin.dto.ReportLine; import ssu.eatssu.domain.admin.persistence.LoadReportRepository; @@ -15,20 +17,20 @@ @RequiredArgsConstructor public class ManageReportService { - private final LoadReportRepository loadReportRepository; - private final ManageReportRepository manageReportRepository; + private final LoadReportRepository loadReportRepository; + private final ManageReportRepository manageReportRepository; - public PageWrapper getReportBoard(Pageable pageable) { - Page reports = loadReportRepository.findAll(pageable); - return new PageWrapper<>(reports); - } + public PageWrapper getReportBoard(Pageable pageable) { + Page reports = loadReportRepository.findAll(pageable); + return new PageWrapper<>(reports); + } - public void delete(Long reportId) { - manageReportRepository.deleteById(reportId); - } + public void delete(Long reportId) { + manageReportRepository.deleteById(reportId); + } - public void deleteAllByReviewId(Long reviewId) { - List reportIds = loadReportRepository.findAllByReviewId(reviewId); - manageReportRepository.deleteAllByIdInBatch(reportIds); - } + public void deleteAllByReviewId(Long reviewId) { + List reportIds = loadReportRepository.findAllByReviewId(reviewId); + manageReportRepository.deleteAllByIdInBatch(reportIds); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java index fc3b92fb..58aab53a 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java @@ -2,8 +2,10 @@ import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; + import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; + import ssu.eatssu.domain.admin.event.ReviewDeleteEvent; import ssu.eatssu.domain.admin.persistence.ManageReviewRepository; @@ -11,13 +13,13 @@ @Transactional @RequiredArgsConstructor public class ManageReviewService { - private final ManageReviewRepository manageReviewRepository; - private final ApplicationEventPublisher publisher; + private final ManageReviewRepository manageReviewRepository; + private final ApplicationEventPublisher publisher; - public void delete(Long reviewId) { - // 리뷰 삭제하기 전에 해당 리뷰를 참조하는 신고들을 모두 삭제한다. - publisher.publishEvent(new ReviewDeleteEvent(reviewId)); + public void delete(Long reviewId) { + // 리뷰 삭제하기 전에 해당 리뷰를 참조하는 신고들을 모두 삭제한다. + publisher.publishEvent(new ReviewDeleteEvent(reviewId)); - manageReviewRepository.deleteById(reviewId); - } + manageReviewRepository.deleteById(reviewId); + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java b/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java index ac9387db..9060f2a9 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java @@ -9,23 +9,23 @@ @Getter @NoArgsConstructor public class AppleKeys { - private List keys; + private List keys; - public Optional findKeyBy(String kid, String alg) { - return this.keys.stream() - .filter(key -> key.getKid().equals(kid) && key.getAlg().equals(alg)) - .findFirst(); - } + public Optional findKeyBy(String kid, String alg) { + return this.keys.stream() + .filter(key -> key.getKid().equals(kid) && key.getAlg().equals(alg)) + .findFirst(); + } - @Getter - @NoArgsConstructor - public static class Key { - private String kty; - private String kid; - private String use; - private String alg; - private String n; - private String e; + @Getter + @NoArgsConstructor + public static class Key { + private String kty; + private String kid; + private String use; + private String alg; + private String n; + private String e; - } + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java b/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java index 2d5416ad..78beecd1 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java @@ -4,8 +4,8 @@ @Schema(title = "애플 로그인 및 회원가입") public record AppleLoginRequest( - @Schema(description = "identityToken", example = "eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi...") - String identityToken + @Schema(description = "identityToken", example = "eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi...") + String identityToken ) { } diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java b/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java index eacf8e65..211677b1 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java @@ -6,13 +6,13 @@ @Schema(title = "카카오 로그인 및 회원가입") public record KakaoLoginRequest( - @NotBlank(message = "이메일을 입력해주세요.") - @Email(message = "올바른 이메일 주소를 입력해주세요.") - @Schema(description = "이메일", example = "test@email.com") - String email, + @NotBlank(message = "이메일을 입력해주세요.") + @Email(message = "올바른 이메일 주소를 입력해주세요.") + @Schema(description = "이메일", example = "test@email.com") + String email, - @Schema(description = "providerId", example = "10378247832195") - String providerId + @Schema(description = "providerId", example = "10378247832195") + String providerId ) { } diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/AppleAuthenticator.java b/src/main/java/ssu/eatssu/domain/auth/entity/AppleAuthenticator.java index f150fb37..e56acb4f 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/AppleAuthenticator.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/AppleAuthenticator.java @@ -4,5 +4,5 @@ public interface AppleAuthenticator { - OAuthInfo getOAuthInfoByIdentityToken(String identityToken); + OAuthInfo getOAuthInfoByIdentityToken(String identityToken); } diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java b/src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java index 25a7c25d..641d1bb3 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java @@ -1,5 +1,5 @@ package ssu.eatssu.domain.auth.entity; public enum OAuthProvider { - EATSSU, KAKAO, APPLE; + EATSSU, KAKAO, APPLE; } diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java index 704db824..91ed7b4d 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java @@ -3,14 +3,17 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; + import io.jsonwebtoken.Claims; import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.Jwts; import lombok.RequiredArgsConstructor; + import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; + import ssu.eatssu.domain.auth.dto.AppleKeys; import ssu.eatssu.domain.auth.dto.OAuthInfo; import ssu.eatssu.global.handler.response.BaseException; @@ -31,105 +34,105 @@ @RequiredArgsConstructor public class SystemAppleAuthenticator implements AppleAuthenticator { - private final RestTemplate restTemplate; - - public OAuthInfo getOAuthInfoByIdentityToken(String identityToken) { - PublicKey publicKey = generatePublicKey(identityToken); - return getOAuthInfoByPublicKey(identityToken, publicKey); - } - - /** - * 애플 로그인 - PublicKey 를 통해 유저 정보(providerId, email) 조회 - */ - private OAuthInfo getOAuthInfoByPublicKey(String identityToken, PublicKey publicKey) { - // identityToken 에서 publicKey 서명을 통해 Claims 를 추출한다. - Claims claims = Jwts.parserBuilder() - .setSigningKey(publicKey) - .build() - .parseClaimsJws(identityToken) - .getBody(); - - //Claims 에서 email, providerId(사용자 식별값) 를 추출한다. - try { - String email = claims.get("email").toString(); - String providerId = claims.get("sub").toString(); - return new OAuthInfo(email, providerId); - } catch (ExpiredJwtException exception) { - throw new BaseException(INVALID_IDENTITY_TOKEN); - } - } - - private PublicKey generatePublicKey(String identityToken) { - //PublicKey 를 만들기 위한 재료가 되는 후보 Key 목록을 가져온다. - AppleKeys keys = getAppleKeys(); - - //후보 Key 에서 정답 Key 를 찾는다. - AppleKeys.Key matchedKey = selectMatchedKey(identityToken, keys); - - //정답 Key 를 통해 PublicKey 를 생성한다. - return generatePublicKeyWithApplePublicKey(matchedKey); - } - - /** - * 애플 로그인 - 헤더에서 뽑은 정보를 통해 후보 Key 에서 정답 Key 를 찾아서 반환한다. - */ - private AppleKeys.Key selectMatchedKey(String identityToken, AppleKeys candidateKeys) { - - //identity token 에서 header 를 뽑아서 decode 한다. - String header = identityToken.split("\\.")[0]; - String decodedHeader = new String(Base64.getDecoder().decode(header)); - - //decode 된 header 정보를 통해 정답키의 key id, algorithm 정보를 가져온다. - Map headerMap; - try { - headerMap = new ObjectMapper().readValue(decodedHeader, - new TypeReference>() { - }); - } catch (JsonProcessingException e) { - throw new BaseException(INVALID_IDENTITY_TOKEN); - } - - //후보키 중에서 정답키를 찾아서 반환한다. - return candidateKeys.findKeyBy(headerMap.get("kid"), headerMap.get("alg")) - .orElseThrow(() -> new BaseException(INVALID_IDENTITY_TOKEN)); - } - - /** - * 애플 로그인 - 정답 Key 를 통해 PublicKey 를 생성한다. - */ - private PublicKey generatePublicKeyWithApplePublicKey(AppleKeys.Key matchedKey) { - - //정답 키에서 PublicKey 의 재료가 될 n, e 값을 가져온다. - byte[] nBytes = Base64.getUrlDecoder().decode(matchedKey.getN()); - byte[] eBytes = Base64.getUrlDecoder().decode(matchedKey.getE()); - - BigInteger n = new BigInteger(1, nBytes); - BigInteger e = new BigInteger(1, eBytes); - - // n, e 값을 통해 PublicKeySpec 을 세팅한다. - RSAPublicKeySpec publicKeySpec = new RSAPublicKeySpec(n, e); - - //PublicKeySpec 을 통해 PublicKey 를 생성한다. - try { - KeyFactory keyFactory = KeyFactory.getInstance(matchedKey.getKty()); - return keyFactory.generatePublic(publicKeySpec); - } catch (NoSuchAlgorithmException | InvalidKeySpecException ex) { - throw new BaseException(INVALID_IDENTITY_TOKEN); - } - } - - /** - * 애플 로그인 - Apple api 호출을 통해 apple 후보 key 리스트를 받아온다. - */ - private AppleKeys getAppleKeys() { - URI uri = UriComponentsBuilder - .fromUriString("https://appleid.apple.com") - .path("/auth/keys") - .encode() - .build() - .toUri(); - - ResponseEntity response = restTemplate.getForEntity(uri, AppleKeys.class); - return response.getBody(); - } + private final RestTemplate restTemplate; + + public OAuthInfo getOAuthInfoByIdentityToken(String identityToken) { + PublicKey publicKey = generatePublicKey(identityToken); + return getOAuthInfoByPublicKey(identityToken, publicKey); + } + + /** + * 애플 로그인 - PublicKey 를 통해 유저 정보(providerId, email) 조회 + */ + private OAuthInfo getOAuthInfoByPublicKey(String identityToken, PublicKey publicKey) { + // identityToken 에서 publicKey 서명을 통해 Claims 를 추출한다. + Claims claims = Jwts.parserBuilder() + .setSigningKey(publicKey) + .build() + .parseClaimsJws(identityToken) + .getBody(); + + //Claims 에서 email, providerId(사용자 식별값) 를 추출한다. + try { + String email = claims.get("email").toString(); + String providerId = claims.get("sub").toString(); + return new OAuthInfo(email, providerId); + } catch (ExpiredJwtException exception) { + throw new BaseException(INVALID_IDENTITY_TOKEN); + } + } + + private PublicKey generatePublicKey(String identityToken) { + //PublicKey 를 만들기 위한 재료가 되는 후보 Key 목록을 가져온다. + AppleKeys keys = getAppleKeys(); + + //후보 Key 에서 정답 Key 를 찾는다. + AppleKeys.Key matchedKey = selectMatchedKey(identityToken, keys); + + //정답 Key 를 통해 PublicKey 를 생성한다. + return generatePublicKeyWithApplePublicKey(matchedKey); + } + + /** + * 애플 로그인 - 헤더에서 뽑은 정보를 통해 후보 Key 에서 정답 Key 를 찾아서 반환한다. + */ + private AppleKeys.Key selectMatchedKey(String identityToken, AppleKeys candidateKeys) { + + //identity token 에서 header 를 뽑아서 decode 한다. + String header = identityToken.split("\\.")[0]; + String decodedHeader = new String(Base64.getDecoder().decode(header)); + + //decode 된 header 정보를 통해 정답키의 key id, algorithm 정보를 가져온다. + Map headerMap; + try { + headerMap = new ObjectMapper().readValue(decodedHeader, + new TypeReference>() { + }); + } catch (JsonProcessingException e) { + throw new BaseException(INVALID_IDENTITY_TOKEN); + } + + //후보키 중에서 정답키를 찾아서 반환한다. + return candidateKeys.findKeyBy(headerMap.get("kid"), headerMap.get("alg")) + .orElseThrow(() -> new BaseException(INVALID_IDENTITY_TOKEN)); + } + + /** + * 애플 로그인 - 정답 Key 를 통해 PublicKey 를 생성한다. + */ + private PublicKey generatePublicKeyWithApplePublicKey(AppleKeys.Key matchedKey) { + + //정답 키에서 PublicKey 의 재료가 될 n, e 값을 가져온다. + byte[] nBytes = Base64.getUrlDecoder().decode(matchedKey.getN()); + byte[] eBytes = Base64.getUrlDecoder().decode(matchedKey.getE()); + + BigInteger n = new BigInteger(1, nBytes); + BigInteger e = new BigInteger(1, eBytes); + + // n, e 값을 통해 PublicKeySpec 을 세팅한다. + RSAPublicKeySpec publicKeySpec = new RSAPublicKeySpec(n, e); + + //PublicKeySpec 을 통해 PublicKey 를 생성한다. + try { + KeyFactory keyFactory = KeyFactory.getInstance(matchedKey.getKty()); + return keyFactory.generatePublic(publicKeySpec); + } catch (NoSuchAlgorithmException | InvalidKeySpecException ex) { + throw new BaseException(INVALID_IDENTITY_TOKEN); + } + } + + /** + * 애플 로그인 - Apple api 호출을 통해 apple 후보 key 리스트를 받아온다. + */ + private AppleKeys getAppleKeys() { + URI uri = UriComponentsBuilder + .fromUriString("https://appleid.apple.com") + .path("/auth/keys") + .encode() + .build() + .toUri(); + + ResponseEntity response = restTemplate.getForEntity(uri, AppleKeys.class); + return response.getBody(); + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/OAuthConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/OAuthConfig.java index 7e70e0b6..56674dc6 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/OAuthConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/OAuthConfig.java @@ -10,12 +10,12 @@ @Configuration public class OAuthConfig { - @Bean - public RestTemplate restTemplate() { - HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); - CloseableHttpClient client = HttpClientBuilder.create().build(); - factory.setConnectTimeout(3000); //3s - factory.setHttpClient(client); - return new RestTemplate(factory); - } + @Bean + public RestTemplate restTemplate() { + HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); + CloseableHttpClient client = HttpClientBuilder.create().build(); + factory.setConnectTimeout(3000); //3s + factory.setHttpClient(client); + return new RestTemplate(factory); + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 91702a3a..2ce078cc 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.auth.infrastructure; import lombok.RequiredArgsConstructor; + import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -12,75 +13,74 @@ import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; + import ssu.eatssu.domain.auth.security.JwtAuthenticationFilter; import ssu.eatssu.domain.auth.security.JwtTokenProvider; import ssu.eatssu.global.handler.JwtAccessDeniedHandler; import ssu.eatssu.global.handler.JwtAuthenticationEntryPoint; - @EnableWebSecurity @Configuration @RequiredArgsConstructor public class SecurityConfig { - private static final String[] RESOURCE_LIST = { - "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**", "/admin/img/**", "/css/**", "/js/**", - "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" - }; - - private static final String[] AUTH_WHITELIST = { - "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", - "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics", "/v2/reviews", - "/partnerships/**" - }; + private static final String[] RESOURCE_LIST = { + "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**", "/admin/img/**", "/css/**", "/js/**", + "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" + }; - private static final String[] ADMIN_PAGE_LIST = { - "/admin/**" - }; + private static final String[] AUTH_WHITELIST = { + "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", + "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics", "/v2/reviews", + "/partnerships/**" + }; - private final JwtTokenProvider jwtTokenProvider; - private final JwtAccessDeniedHandler jwtAccessDeniedHandler; - private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; + private static final String[] ADMIN_PAGE_LIST = { + "/admin/**" + }; - @Bean - public PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(); - } + private final JwtTokenProvider jwtTokenProvider; + private final JwtAccessDeniedHandler jwtAccessDeniedHandler; + private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } - @Bean - protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - http - .csrf().disable() - .authorizeHttpRequests(authorize -> authorize - .shouldFilterAllDispatcherTypes(false) - .requestMatchers("/partnerships/*/like").authenticated() - .requestMatchers(AUTH_WHITELIST).permitAll() - .requestMatchers(RESOURCE_LIST).permitAll() - .requestMatchers(ADMIN_PAGE_LIST).hasRole("ADMIN") - .anyRequest().authenticated() - .and().addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), - UsernamePasswordAuthenticationFilter.class)) - .exceptionHandling() - .accessDeniedHandler(jwtAccessDeniedHandler) - .authenticationEntryPoint(jwtAuthenticationEntryPoint); + @Bean + protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http + .csrf().disable() + .authorizeHttpRequests(authorize -> authorize + .shouldFilterAllDispatcherTypes(false) + .requestMatchers("/partnerships/*/like").authenticated() + .requestMatchers(AUTH_WHITELIST).permitAll() + .requestMatchers(RESOURCE_LIST).permitAll() + .requestMatchers(ADMIN_PAGE_LIST).hasRole("ADMIN") + .anyRequest().authenticated() + .and().addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), + UsernamePasswordAuthenticationFilter.class)) + .exceptionHandling() + .accessDeniedHandler(jwtAccessDeniedHandler) + .authenticationEntryPoint(jwtAuthenticationEntryPoint); - http - .cors().configurationSource(corsConfigurationSource()); - return http.build(); - } + http + .cors().configurationSource(corsConfigurationSource()); + return http.build(); + } - @Bean - public CorsConfigurationSource corsConfigurationSource() { - CorsConfiguration configuration = new CorsConfiguration(); + @Bean + public CorsConfigurationSource corsConfigurationSource() { + CorsConfiguration configuration = new CorsConfiguration(); - configuration.addAllowedOriginPattern("*"); - configuration.addAllowedHeader("*"); - configuration.addAllowedMethod("*"); - configuration.setAllowCredentials(true); + configuration.addAllowedOriginPattern("*"); + configuration.addAllowedHeader("*"); + configuration.addAllowedMethod("*"); + configuration.setAllowCredentials(true); - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - source.registerCorsConfiguration("/**", configuration); - return source; - } + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", configuration); + return source; + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java index 62e3f845..31f6a34f 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java @@ -4,35 +4,36 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Component; + import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.auth.security.UserPrincipalDto; @Component public class SecurityUtil { - public static UserPrincipalDto getLoginUserPrincipal() { - Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - if (principal instanceof UserDetails) { - return toDto(principal); - } else { - return null; - } - } + public static UserPrincipalDto getLoginUserPrincipal() { + Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + if (principal instanceof UserDetails) { + return toDto(principal); + } else { + return null; + } + } - public static Authentication getLoginUser() { - return SecurityContextHolder.getContext().getAuthentication(); - } + public static Authentication getLoginUser() { + return SecurityContextHolder.getContext().getAuthentication(); + } - public static Long getLoginUserId() { - UserPrincipalDto loginUser = getLoginUserPrincipal(); - return loginUser != null ? loginUser.getId() : null; - } + public static Long getLoginUserId() { + UserPrincipalDto loginUser = getLoginUserPrincipal(); + return loginUser != null ? loginUser.getId() : null; + } - private static UserPrincipalDto toDto(Object principal) { - CustomUserDetails user = (CustomUserDetails) principal; + private static UserPrincipalDto toDto(Object principal) { + CustomUserDetails user = (CustomUserDetails)principal; - return UserPrincipalDto.from(user); + return UserPrincipalDto.from(user); - } + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java index 57970be0..8ec2f85d 100644 --- a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java @@ -9,10 +9,12 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; + import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.auth.service.OAuthService; @@ -28,43 +30,43 @@ @Tag(name = "Oauth", description = "Oauth API") public class OAuthController { - private final OAuthService oauthService; + private final OAuthService oauthService; - @Operation(summary = "카카오 회원가입, 로그인 [인증 토큰 필요 X]", description = """ - 카카오 회원가입, 로그인 API 입니다.

- 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "카카오 회원가입/로그인 성공") - }) - @PostMapping("/kakao") - public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest request) { - Tokens tokens = oauthService.kakaoLogin(request); - return BaseResponse.success(tokens); - } + @Operation(summary = "카카오 회원가입, 로그인 [인증 토큰 필요 X]", description = """ + 카카오 회원가입, 로그인 API 입니다.

+ 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "카카오 회원가입/로그인 성공") + }) + @PostMapping("/kakao") + public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest request) { + Tokens tokens = oauthService.kakaoLogin(request); + return BaseResponse.success(tokens); + } - @Operation(summary = "애플 회원가입, 로그인 [인증 토큰 필요 X]", description = """ - 애플 로그인, 회원가입 API 입니다.

- 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "애플 회원가입/로그인 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/apple") - public BaseResponse appleLogin(@Valid @RequestBody AppleLoginRequest request) { - Tokens tokens = oauthService.appleLogin(request); - return BaseResponse.success(tokens); - } + @Operation(summary = "애플 회원가입, 로그인 [인증 토큰 필요 X]", description = """ + 애플 로그인, 회원가입 API 입니다.

+ 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "애플 회원가입/로그인 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/apple") + public BaseResponse appleLogin(@Valid @RequestBody AppleLoginRequest request) { + Tokens tokens = oauthService.appleLogin(request); + return BaseResponse.success(tokens); + } - @Operation(summary = "토큰 재발급", description = "accessToken, refreshToken 재발급 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "토큰 재발급 성공") - }) - @PostMapping("/reissue/token") - public BaseResponse refreshToken() { - Tokens tokens = oauthService.refreshTokens(getLoginUser()); - return BaseResponse.success(tokens); - } + @Operation(summary = "토큰 재발급", description = "accessToken, refreshToken 재발급 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "토큰 재발급 성공") + }) + @PostMapping("/reissue/token") + public BaseResponse refreshToken() { + Tokens tokens = oauthService.refreshTokens(getLoginUser()); + return BaseResponse.success(tokens); + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java index 69d46322..838a9d72 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java @@ -2,9 +2,11 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; + import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; + import ssu.eatssu.domain.user.entity.User; import java.util.ArrayList; @@ -13,54 +15,53 @@ @RequiredArgsConstructor @Getter public class CustomUserDetails implements UserDetails { - private final Long id; - private final String email; - private final String credentials; - private final GrantedAuthority role; - - public CustomUserDetails(User user) { - this.id = user.getId(); - this.email = user.getEmail(); - this.credentials = user.getCredentials(); - this.role = user.getRole(); - } + private final Long id; + private final String email; + private final String credentials; + private final GrantedAuthority role; + public CustomUserDetails(User user) { + this.id = user.getId(); + this.email = user.getEmail(); + this.credentials = user.getCredentials(); + this.role = user.getRole(); + } - @Override - public Collection getAuthorities() { - ArrayList authorities = new ArrayList<>(); - authorities.add(new SimpleGrantedAuthority(role.getAuthority())); - return authorities; - } + @Override + public Collection getAuthorities() { + ArrayList authorities = new ArrayList<>(); + authorities.add(new SimpleGrantedAuthority(role.getAuthority())); + return authorities; + } - @Override - public String getPassword() { - return credentials; - } + @Override + public String getPassword() { + return credentials; + } - @Override - public String getUsername() { - return email; - } + @Override + public String getUsername() { + return email; + } - @Override - public boolean isAccountNonExpired() { - return true; - } + @Override + public boolean isAccountNonExpired() { + return true; + } - @Override - public boolean isAccountNonLocked() { - return true; - } + @Override + public boolean isAccountNonLocked() { + return true; + } - @Override - public boolean isCredentialsNonExpired() { - return true; - } + @Override + public boolean isCredentialsNonExpired() { + return true; + } - @Override - public boolean isEnabled() { - return true; - } + @Override + public boolean isEnabled() { + return true; + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java index 5158c602..627e252b 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java @@ -2,9 +2,11 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.stereotype.Component; + import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; @@ -15,13 +17,13 @@ @RequiredArgsConstructor public class CustomUserDetailsService implements UserDetailsService { - private final UserRepository userRepository; + private final UserRepository userRepository; - @Override - public UserDetails loadUserByUsername(String username) { - User user = userRepository.findByEmail(username) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_USER)); - return new CustomUserDetails(user); - } + @Override + public UserDetails loadUserByUsername(String username) { + User user = userRepository.findByEmail(username) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_USER)); + return new CustomUserDetails(user); + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java index 63bc2f92..af9efe42 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java @@ -7,6 +7,7 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.util.StringUtils; @@ -17,33 +18,35 @@ @Slf4j @RequiredArgsConstructor public class JwtAuthenticationFilter extends GenericFilterBean { - private static final String AUTHORIZATION_HEADER = "Authorization"; - private static final String BEARER_TYPE = "Bearer"; - - private final JwtTokenProvider jwtTokenProvider; - - @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { - - // 1. Request Header 에서 JWT 토큰 추출 - String token = resolveToken((HttpServletRequest) request); - - // 2. validateToken 으로 토큰 유효성 검사 - if (token != null && jwtTokenProvider.validateToken(token)) { - // 토큰이 유효할 경우 토큰에서 Authentication 객체를 가지고 와서 SecurityContext 에 저장 - Authentication authentication = jwtTokenProvider.getAuthentication(token); - SecurityContextHolder.getContext().setAuthentication(authentication); - } - - chain.doFilter(request, response); - } - - // Request Header 에서 토큰 정보 추출 - private String resolveToken(HttpServletRequest request) { - String bearerToken = request.getHeader(AUTHORIZATION_HEADER); - if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(BEARER_TYPE)) { - return bearerToken.substring(7); - } - return null; - } + private static final String AUTHORIZATION_HEADER = "Authorization"; + private static final String BEARER_TYPE = "Bearer"; + + private final JwtTokenProvider jwtTokenProvider; + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws + IOException, + ServletException { + + // 1. Request Header 에서 JWT 토큰 추출 + String token = resolveToken((HttpServletRequest)request); + + // 2. validateToken 으로 토큰 유효성 검사 + if (token != null && jwtTokenProvider.validateToken(token)) { + // 토큰이 유효할 경우 토큰에서 Authentication 객체를 가지고 와서 SecurityContext 에 저장 + Authentication authentication = jwtTokenProvider.getAuthentication(token); + SecurityContextHolder.getContext().setAuthentication(authentication); + } + + chain.doFilter(request, response); + } + + // Request Header 에서 토큰 정보 추출 + private String resolveToken(HttpServletRequest request) { + String bearerToken = request.getHeader(AUTHORIZATION_HEADER); + if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(BEARER_TYPE)) { + return bearerToken.substring(7); + } + return null; + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java index 9a507f0d..2b44fb02 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; + import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; @@ -9,6 +10,7 @@ import io.jsonwebtoken.security.Keys; import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -16,6 +18,7 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.stereotype.Component; + import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; @@ -30,141 +33,141 @@ @Component public class JwtTokenProvider { - private static final String AUTHORITIES_KEY = "auth"; - private final String secret; - private final long accessTokenValidityInMilliseconds; - private final long refreshTokenValidityInMilliseconds; - private final ObjectMapper objectMapper = new ObjectMapper(); - private final UserAuthenticationProvider authenticationProvider; - - private Key key; - - @Autowired - public JwtTokenProvider(@Value("${jwt.secret.key}") String secret, - @Value("${jwt.token-validity-in-seconds}") long accessTokenValidityInSeconds, - @Value("${jwt.refresh-token-validity-in-seconds}") long refreshTokenValidityInMilliseconds, UserAuthenticationProvider authenticationProvider - //RedisTemplate redisTemplate* - ) { - this.secret = secret; - this.accessTokenValidityInMilliseconds = accessTokenValidityInSeconds * 1000; - this.refreshTokenValidityInMilliseconds = refreshTokenValidityInMilliseconds * 1000; - this.authenticationProvider = authenticationProvider; - } - - @PostConstruct - public void setKey() { //jwt.secret을 이요하여 key생성 - byte[] keyBytes = Decoders.BASE64.decode(secret); - this.key = Keys.hmacShaKeyFor(keyBytes); - } - - //토큰 발급 - public Tokens generateTokens(String providerId, String password) { - - Authentication authentication = authenticationProvider.getAuthentication(providerId, password); - - // 권한 가져오기 - String authorities = authentication.getAuthorities().stream() - .map(GrantedAuthority::getAuthority) - .collect(Collectors.joining(",")); - - UserPrincipalDto userPrincipalDto = UserPrincipalDto.from((CustomUserDetails) authentication.getPrincipal()); - - Claims claims = createClaims(userPrincipalDto, authorities); - - return new Tokens(createAccessToken(claims), createRefreshToken(claims)); - } - - //토큰 발급 - public Tokens generateTokens(Authentication authentication) { - - // 권한 가져오기 - String authorities = authentication.getAuthorities().stream() - .map(GrantedAuthority::getAuthority) - .collect(Collectors.joining(",")); - - UserPrincipalDto userPrincipalDto = UserPrincipalDto.from((CustomUserDetails) authentication.getPrincipal()); - - Claims claims = createClaims(userPrincipalDto, authorities); - - return new Tokens(createAccessToken(claims), createRefreshToken(claims)); - } - - private Claims createClaims(UserPrincipalDto userPrincipalDto, String authorities) { - - String subject; - try { - subject = objectMapper.writeValueAsString(userPrincipalDto); - } catch (JsonProcessingException e) { - log.error("Cannot generate JWT Tokens because an error occurred during json parsing."); - log.error("errorTrackStace: {}", (Object) e.getStackTrace()); - throw new BaseException(BaseResponseStatus.INTERNAL_SERVER_ERROR); - } - - Claims claims = Jwts.claims() - .setSubject(subject); - claims.put(AUTHORITIES_KEY, authorities); - - return claims; - } - - //accessToken 생성 - private String createAccessToken(Claims claims) { - long now = new Date().getTime(); //밀리세컨드 - Date accessTokenValidity = new Date(now + this.accessTokenValidityInMilliseconds); - claims.setExpiration(accessTokenValidity); - - return Jwts.builder() - .setClaims(claims) - .signWith(key, SignatureAlgorithm.HS512) - .compact(); - } - - //refreshToken 생성 - private String createRefreshToken(Claims claims) { - long now = new Date().getTime(); //밀리세컨드 - Date refreshTokenValidity = new Date(now + this.refreshTokenValidityInMilliseconds); - claims.setExpiration(refreshTokenValidity); - - return Jwts.builder() - .setClaims(claims) - .signWith(key, SignatureAlgorithm.HS512) - .compact(); - } - - //token 에서 Authentication 추출 - public Authentication getAuthentication(String token) throws JsonProcessingException { - Claims claims = getClaims(token); - - List authorities = - Arrays.stream(claims.get(AUTHORITIES_KEY).toString().split(",")) - .map(SimpleGrantedAuthority::new) - .toList(); - - - UserPrincipalDto userPrincipalDto = objectMapper.readValue(claims.getSubject(), UserPrincipalDto.class); - - CustomUserDetails principal = new CustomUserDetails(userPrincipalDto.getId(), userPrincipalDto.getEmail(), "", - authorities.get(0)); - - return new UsernamePasswordAuthenticationToken(principal, token, authorities); - } - - private Claims getClaims(String token) { - return Jwts.parserBuilder() - .setSigningKey(key) - .build() - .parseClaimsJws(token) - .getBody(); - } - - //토큰 유효성 검증 - public boolean validateToken(String token) throws BaseException { - try { - Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token); - } catch (Exception e) { - return false; - } - return true; - } + private static final String AUTHORITIES_KEY = "auth"; + private final String secret; + private final long accessTokenValidityInMilliseconds; + private final long refreshTokenValidityInMilliseconds; + private final ObjectMapper objectMapper = new ObjectMapper(); + private final UserAuthenticationProvider authenticationProvider; + + private Key key; + + @Autowired + public JwtTokenProvider(@Value("${jwt.secret.key}") String secret, + @Value("${jwt.token-validity-in-seconds}") long accessTokenValidityInSeconds, + @Value("${jwt.refresh-token-validity-in-seconds}") long refreshTokenValidityInMilliseconds, + UserAuthenticationProvider authenticationProvider + //RedisTemplate redisTemplate* + ) { + this.secret = secret; + this.accessTokenValidityInMilliseconds = accessTokenValidityInSeconds * 1000; + this.refreshTokenValidityInMilliseconds = refreshTokenValidityInMilliseconds * 1000; + this.authenticationProvider = authenticationProvider; + } + + @PostConstruct + public void setKey() { //jwt.secret을 이요하여 key생성 + byte[] keyBytes = Decoders.BASE64.decode(secret); + this.key = Keys.hmacShaKeyFor(keyBytes); + } + + //토큰 발급 + public Tokens generateTokens(String providerId, String password) { + + Authentication authentication = authenticationProvider.getAuthentication(providerId, password); + + // 권한 가져오기 + String authorities = authentication.getAuthorities().stream() + .map(GrantedAuthority::getAuthority) + .collect(Collectors.joining(",")); + + UserPrincipalDto userPrincipalDto = UserPrincipalDto.from((CustomUserDetails)authentication.getPrincipal()); + + Claims claims = createClaims(userPrincipalDto, authorities); + + return new Tokens(createAccessToken(claims), createRefreshToken(claims)); + } + + //토큰 발급 + public Tokens generateTokens(Authentication authentication) { + + // 권한 가져오기 + String authorities = authentication.getAuthorities().stream() + .map(GrantedAuthority::getAuthority) + .collect(Collectors.joining(",")); + + UserPrincipalDto userPrincipalDto = UserPrincipalDto.from((CustomUserDetails)authentication.getPrincipal()); + + Claims claims = createClaims(userPrincipalDto, authorities); + + return new Tokens(createAccessToken(claims), createRefreshToken(claims)); + } + + private Claims createClaims(UserPrincipalDto userPrincipalDto, String authorities) { + + String subject; + try { + subject = objectMapper.writeValueAsString(userPrincipalDto); + } catch (JsonProcessingException e) { + log.error("Cannot generate JWT Tokens because an error occurred during json parsing."); + log.error("errorTrackStace: {}", (Object)e.getStackTrace()); + throw new BaseException(BaseResponseStatus.INTERNAL_SERVER_ERROR); + } + + Claims claims = Jwts.claims() + .setSubject(subject); + claims.put(AUTHORITIES_KEY, authorities); + + return claims; + } + + //accessToken 생성 + private String createAccessToken(Claims claims) { + long now = new Date().getTime(); //밀리세컨드 + Date accessTokenValidity = new Date(now + this.accessTokenValidityInMilliseconds); + claims.setExpiration(accessTokenValidity); + + return Jwts.builder() + .setClaims(claims) + .signWith(key, SignatureAlgorithm.HS512) + .compact(); + } + + //refreshToken 생성 + private String createRefreshToken(Claims claims) { + long now = new Date().getTime(); //밀리세컨드 + Date refreshTokenValidity = new Date(now + this.refreshTokenValidityInMilliseconds); + claims.setExpiration(refreshTokenValidity); + + return Jwts.builder() + .setClaims(claims) + .signWith(key, SignatureAlgorithm.HS512) + .compact(); + } + + //token 에서 Authentication 추출 + public Authentication getAuthentication(String token) throws JsonProcessingException { + Claims claims = getClaims(token); + + List authorities = + Arrays.stream(claims.get(AUTHORITIES_KEY).toString().split(",")) + .map(SimpleGrantedAuthority::new) + .toList(); + + UserPrincipalDto userPrincipalDto = objectMapper.readValue(claims.getSubject(), UserPrincipalDto.class); + + CustomUserDetails principal = new CustomUserDetails(userPrincipalDto.getId(), userPrincipalDto.getEmail(), "", + authorities.get(0)); + + return new UsernamePasswordAuthenticationToken(principal, token, authorities); + } + + private Claims getClaims(String token) { + return Jwts.parserBuilder() + .setSigningKey(key) + .build() + .parseClaimsJws(token) + .getBody(); + } + + //토큰 유효성 검증 + public boolean validateToken(String token) throws BaseException { + try { + Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token); + } catch (Exception e) { + return false; + } + return true; + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java b/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java index 81747a50..c5e9dd34 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java @@ -1,12 +1,12 @@ package ssu.eatssu.domain.auth.security; import lombok.RequiredArgsConstructor; + import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Component; - /** * 인증 정보를 바탕으로 Authentication 객체 생성 */ @@ -14,16 +14,16 @@ @Component public class UserAuthenticationProvider { - private final AuthenticationManagerBuilder authenticationManagerBuilder; + private final AuthenticationManagerBuilder authenticationManagerBuilder; - public Authentication getAuthentication(String providerId, String rawPassword) { + public Authentication getAuthentication(String providerId, String rawPassword) { - UsernamePasswordAuthenticationToken authenticationToken = - new UsernamePasswordAuthenticationToken(providerId, rawPassword); + UsernamePasswordAuthenticationToken authenticationToken = + new UsernamePasswordAuthenticationToken(providerId, rawPassword); - return authenticationManagerBuilder - .eraseCredentials(true) - .getObject() - .authenticate(authenticationToken); - } + return authenticationManagerBuilder + .eraseCredentials(true) + .getObject() + .authenticate(authenticationToken); + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java b/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java index 320a3016..95adeac5 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java @@ -10,15 +10,15 @@ @NoArgsConstructor @AllArgsConstructor public class UserPrincipalDto { - private Long id; - private String email; - private String role; + private Long id; + private String email; + private String role; - public static UserPrincipalDto from(CustomUserDetails userDetails) { - return UserPrincipalDto.builder() - .id(userDetails.getId()) - .email(userDetails.getEmail()) - .role(userDetails.getRole().getAuthority()) - .build(); - } + public static UserPrincipalDto from(CustomUserDetails userDetails) { + return UserPrincipalDto.builder() + .id(userDetails.getId()) + .email(userDetails.getEmail()) + .role(userDetails.getRole().getAuthority()) + .build(); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java index 23102bbf..bb8fb366 100644 --- a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java @@ -1,13 +1,14 @@ package ssu.eatssu.domain.auth.service; - import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.auth.dto.OAuthInfo; @@ -22,87 +23,86 @@ import static ssu.eatssu.domain.auth.entity.OAuthProvider.APPLE; import static ssu.eatssu.domain.auth.entity.OAuthProvider.KAKAO; - @Slf4j @Service @Transactional @RequiredArgsConstructor public class OAuthService { - private final UserService userService; - private final UserRepository userRepository; - private final AppleAuthenticator appleAuthenticator; - private final AuthenticationManagerBuilder authenticationManagerBuilder; - private final JwtTokenProvider jwtTokenProvider; - - public Tokens kakaoLogin(KakaoLoginRequest request) { - User user = userRepository.findByProviderId(request.providerId()) - .orElseGet( - () -> userService.join(request.email(), KAKAO, request.providerId())); - - return generateOauthJwtTokens(user.getEmail(), KAKAO, - request.providerId()); - } - - public Tokens appleLogin(AppleLoginRequest request) { - OAuthInfo oAuthInfo = appleAuthenticator.getOAuthInfoByIdentityToken( - request.identityToken()); - - User user = userRepository.findByProviderId(oAuthInfo.providerId()) - .orElseGet(() -> userService.join(oAuthInfo.email(), APPLE, - oAuthInfo.providerId())); - - //todo 이메일 갱신의 이유? - updateAppleUserEmail(user, oAuthInfo.email()); - - return generateOauthJwtTokens(user.getEmail(), APPLE, - oAuthInfo.providerId()); - } - - /** - * JWT 토큰 재발급 - */ - public Tokens refreshTokens(Authentication authentication) { - return jwtTokenProvider.generateTokens(authentication); - } - - private void updateAppleUserEmail(User user, String email) { - if (isHideEmail(user.getEmail()) && !isHideEmail(email)) { - user.updateEmail(email); - userRepository.save(user); - } - } - - private boolean isHideEmail(String email) { - if (email.length() > 25) { - return email.startsWith("@privaterelay.appleid.com", email.length() - 25); - } else { - return false; - } - } - - /** - * Oauth 회원 - email, providerId 를 통해 JwtToken 을 생성 - * todo: 같은 이메일로 카카오, 애플 등 여러 회원가입을 한 회원 처리 필요 - */ - private Tokens generateOauthJwtTokens(String email, OAuthProvider provider, String providerId) { - // email, credentials 를 기반으로 Authentication 객체 생성 - // 이때 authentication 은 인증 여부를 확인하는 authenticated 값이 false - UsernamePasswordAuthenticationToken authenticationToken = - new UsernamePasswordAuthenticationToken(email, - makeOauthCredentials(provider, providerId)); - - // 실제 검증 (사용자 비밀번호 체크) - // authenticate 메서드 실행 => CustomUserDetailsService 에서 만든 loadUserByUsername 메서드 실행 - Authentication authentication = authenticationManagerBuilder.getObject() - .authenticate(authenticationToken); - - // 인증 정보를 바탕으로 JWT 토큰 생성 - return jwtTokenProvider.generateTokens(authentication); - } - - private String makeOauthCredentials(OAuthProvider provider, String providerId) { - return provider + providerId; - } + private final UserService userService; + private final UserRepository userRepository; + private final AppleAuthenticator appleAuthenticator; + private final AuthenticationManagerBuilder authenticationManagerBuilder; + private final JwtTokenProvider jwtTokenProvider; + + public Tokens kakaoLogin(KakaoLoginRequest request) { + User user = userRepository.findByProviderId(request.providerId()) + .orElseGet( + () -> userService.join(request.email(), KAKAO, request.providerId())); + + return generateOauthJwtTokens(user.getEmail(), KAKAO, + request.providerId()); + } + + public Tokens appleLogin(AppleLoginRequest request) { + OAuthInfo oAuthInfo = appleAuthenticator.getOAuthInfoByIdentityToken( + request.identityToken()); + + User user = userRepository.findByProviderId(oAuthInfo.providerId()) + .orElseGet(() -> userService.join(oAuthInfo.email(), APPLE, + oAuthInfo.providerId())); + + //todo 이메일 갱신의 이유? + updateAppleUserEmail(user, oAuthInfo.email()); + + return generateOauthJwtTokens(user.getEmail(), APPLE, + oAuthInfo.providerId()); + } + + /** + * JWT 토큰 재발급 + */ + public Tokens refreshTokens(Authentication authentication) { + return jwtTokenProvider.generateTokens(authentication); + } + + private void updateAppleUserEmail(User user, String email) { + if (isHideEmail(user.getEmail()) && !isHideEmail(email)) { + user.updateEmail(email); + userRepository.save(user); + } + } + + private boolean isHideEmail(String email) { + if (email.length() > 25) { + return email.startsWith("@privaterelay.appleid.com", email.length() - 25); + } else { + return false; + } + } + + /** + * Oauth 회원 - email, providerId 를 통해 JwtToken 을 생성 + * todo: 같은 이메일로 카카오, 애플 등 여러 회원가입을 한 회원 처리 필요 + */ + private Tokens generateOauthJwtTokens(String email, OAuthProvider provider, String providerId) { + // email, credentials 를 기반으로 Authentication 객체 생성 + // 이때 authentication 은 인증 여부를 확인하는 authenticated 값이 false + UsernamePasswordAuthenticationToken authenticationToken = + new UsernamePasswordAuthenticationToken(email, + makeOauthCredentials(provider, providerId)); + + // 실제 검증 (사용자 비밀번호 체크) + // authenticate 메서드 실행 => CustomUserDetailsService 에서 만든 loadUserByUsername 메서드 실행 + Authentication authentication = authenticationManagerBuilder.getObject() + .authenticate(authenticationToken); + + // 인증 정보를 바탕으로 JWT 토큰 생성 + return jwtTokenProvider.generateTokens(authentication); + } + + private String makeOauthCredentials(OAuthProvider provider, String providerId) { + return provider + providerId; + } } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java b/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java index 318664e3..06ecc032 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java @@ -9,9 +9,9 @@ @Getter public class CreateInquiryRequest { - @Schema(description = "답장 받을 이메일", example = "sandy1017@gmail.com") - private String email; + @Schema(description = "답장 받을 이메일", example = "sandy1017@gmail.com") + private String email; - @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의 남깁니다") - private String content; + @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의 남깁니다") + private String content; } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/dto/InquiryDetailResponse.java b/src/main/java/ssu/eatssu/domain/inquiry/dto/InquiryDetailResponse.java index c07337f7..9c3b8fd4 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/dto/InquiryDetailResponse.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/dto/InquiryDetailResponse.java @@ -12,21 +12,24 @@ @Getter public class InquiryDetailResponse { - @Schema(description = "문의 작성자 Id", example = "123") - private Long writerId; + @Schema(description = "문의 작성자 Id", example = "123") + private Long writerId; - @Schema(description = "문의 작성자 닉네임", example = "먹짱맨") - private String writerNickName; + @Schema(description = "문의 작성자 닉네임", example = "먹짱맨") + private String writerNickName; - @Schema(description = "문의 작성자 이메일", example = "test@gmail.com") - private String writerEmail; + @Schema(description = "문의 작성자 이메일", example = "test@gmail.com") + private String writerEmail; - @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의드립니다") - private String content; + @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의드립니다") + private String content; - public static InquiryDetailResponse from(Inquiry userInquiry) { - return InquiryDetailResponse.builder().writerId(userInquiry.getUser().getId()) - .writerNickName(userInquiry.getUser().getNickname()) - .writerEmail(userInquiry.getUser().getEmail()).content(userInquiry.getContent()).build(); - } + public static InquiryDetailResponse from(Inquiry userInquiry) { + return InquiryDetailResponse.builder() + .writerId(userInquiry.getUser().getId()) + .writerNickName(userInquiry.getUser().getNickname()) + .writerEmail(userInquiry.getUser().getEmail()) + .content(userInquiry.getContent()) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java b/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java index 0752d25b..1c39c69d 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java @@ -12,34 +12,34 @@ @AllArgsConstructor public class Inquiry extends BaseTimeEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "user_inquiry_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_inquiry_id") + private Long id; - private String content; + private String content; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") - private User user; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; - private String email; + private String email; - @Enumerated(EnumType.STRING) - private InquiryStatus status; + @Enumerated(EnumType.STRING) + private InquiryStatus status; - public Inquiry(String content, User user, String email) { - this.content = content; - this.user = user; - this.email = email; - this.status = InquiryStatus.WAITING; - } + public Inquiry(String content, User user, String email) { + this.content = content; + this.user = user; + this.email = email; + this.status = InquiryStatus.WAITING; + } - public void updateStatus(InquiryStatus status) { - this.status = status; - } + public void updateStatus(InquiryStatus status) { + this.status = status; + } - public void clearUser() { - this.user = null; - } + public void clearUser() { + this.user = null; + } } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java b/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java index 34e04b1e..6b8b4bc9 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java @@ -1,5 +1,5 @@ package ssu.eatssu.domain.inquiry.entity; public enum InquiryStatus { - WAITING, ANSWERED, HOLD; + WAITING, ANSWERED, HOLD; } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java b/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java index b5e346b9..1f411571 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java @@ -7,11 +7,13 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; + import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; + import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.inquiry.dto.CreateInquiryRequest; import ssu.eatssu.domain.inquiry.entity.Inquiry; @@ -27,21 +29,21 @@ @Tag(name = "Inquiry", description = "문의 API") public class InquiryController { - private final SlackService slackService; - private final InquiryService inquiryService; + private final SlackService slackService; + private final InquiryService inquiryService; - @Operation(summary = "문의 작성", description = "문의를 작성하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "문의 작성 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/") - public BaseResponse writeInquiry(@RequestBody CreateInquiryRequest createInquiryRequest, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - Inquiry inquiry = inquiryService.createUserInquiry(customUserDetails, createInquiryRequest); - slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiry(inquiry) - , SlackChannel.USER_INQUIRY_CHANNEL); - return BaseResponse.success(); - } + @Operation(summary = "문의 작성", description = "문의를 작성하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "문의 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/") + public BaseResponse writeInquiry(@RequestBody CreateInquiryRequest createInquiryRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + Inquiry inquiry = inquiryService.createUserInquiry(customUserDetails, createInquiryRequest); + slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiry(inquiry) + , SlackChannel.USER_INQUIRY_CHANNEL); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java b/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java index 8dd6d21f..2e92023b 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.inquiry.repository; import org.springframework.data.jpa.repository.JpaRepository; + import ssu.eatssu.domain.inquiry.entity.Inquiry; public interface InquiryRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java index 1fa28cf1..27e9483a 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java @@ -1,8 +1,10 @@ package ssu.eatssu.domain.inquiry.service; import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.inquiry.dto.CreateInquiryRequest; import ssu.eatssu.domain.inquiry.entity.Inquiry; @@ -13,22 +15,21 @@ import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; - @RequiredArgsConstructor @Service @Transactional public class InquiryService { - private final UserRepository userRepository; - private final InquiryRepository inquiryRepository; + private final UserRepository userRepository; + private final InquiryRepository inquiryRepository; - public Inquiry createUserInquiry(CustomUserDetails userDetails, CreateInquiryRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + public Inquiry createUserInquiry(CustomUserDetails userDetails, CreateInquiryRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Inquiry inquiry = new Inquiry(request.getContent(), user, request.getEmail()); + Inquiry inquiry = new Inquiry(request.getContent(), user, request.getEmail()); - return inquiryRepository.save(inquiry); - } + return inquiryRepository.save(inquiry); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index 1fd7fc88..c56cd872 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -4,7 +4,9 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; + import org.springframework.format.annotation.DateTimeFormat; + import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -17,45 +19,45 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Meal { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "meal_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "meal_id") + private Long id; - @DateTimeFormat(pattern = "yyyyMMdd") - @Temporal(TemporalType.DATE) - private Date date; + @DateTimeFormat(pattern = "yyyyMMdd") + @Temporal(TemporalType.DATE) + private Date date; - @Enumerated(EnumType.STRING) - private Restaurant restaurant; + @Enumerated(EnumType.STRING) + private Restaurant restaurant; - @Enumerated(EnumType.STRING) - private TimePart timePart; + @Enumerated(EnumType.STRING) + private TimePart timePart; - private Integer price; + private Integer price; - @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL, fetch = FetchType.LAZY) - private List mealMenus = new ArrayList<>(); + @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private List mealMenus = new ArrayList<>(); - public Meal(Date date, TimePart timePart, Restaurant restaurant) { - this.date = date; - this.timePart = timePart; - this.restaurant = restaurant; - this.price = restaurant.getRestaurantPrice(); - } + public Meal(Date date, TimePart timePart, Restaurant restaurant) { + this.date = date; + this.timePart = timePart; + this.restaurant = restaurant; + this.price = restaurant.getRestaurantPrice(); + } - public Meal(Date date, TimePart timePart, Restaurant restaurant, Integer price) { - this.date = date; - this.timePart = timePart; - this.restaurant = restaurant; - this.price = price; - } + public Meal(Date date, TimePart timePart, Restaurant restaurant, Integer price) { + this.date = date; + this.timePart = timePart; + this.restaurant = restaurant; + this.price = price; + } - public List getMenuNames() { - return mealMenus.stream().map(mealMenu -> mealMenu.getMenu().getName()).toList(); - } + public List getMenuNames() { + return mealMenus.stream().map(mealMenu -> mealMenu.getMenu().getName()).toList(); + } - public void addMealMenu(MealMenu mealMenu) { - mealMenus.add(mealMenu); - } + public void addMealMenu(MealMenu mealMenu) { + mealMenus.add(mealMenu); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java b/src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java index 218d35e2..957bf31b 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java @@ -10,17 +10,17 @@ @Builder public class MealMenu { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "meal_menu_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "meal_menu_id") + private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "menu_id") - private Menu menu; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "menu_id") + private Menu menu; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "meal_id") - private Meal meal; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "meal_id") + private Meal meal; } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index 3aa0a36b..e880d85c 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -16,106 +16,106 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Menu { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "menu_id") - private Long id; - - private String name; - - private Integer price; - - @Enumerated(EnumType.STRING) - private Restaurant restaurant; - - // TODO : 삭제되어야 함 - @Embedded - private Reviews reviews = new Reviews(); - - @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) - private List mealMenus = new ArrayList<>(); - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "menu_category_id") - private MenuCategory category; - - private boolean isDiscontinued = false; - - @Column(name = "like_count") - private Integer likeCount = 0; - - @Column(name = "unlike_count") - private Integer unlikeCount = 0; - - private Menu(String name, Restaurant restaurant, Integer price, MenuCategory category) { - this.name = name; - this.restaurant = restaurant; - this.price = price; - this.category = category; - } - - public static Menu createVariable(String name, Restaurant restaurant) { - int price = 0; - return new Menu(name, restaurant, price, null); - } - - public static Menu createFixed(String name, Restaurant restaurant, Integer price, - MenuCategory category) { - return new Menu(name, restaurant, price, category); - } - - public void addReview(Review review) { - reviews.add(review); - } - - public int getTotalReviewCount() { - return reviews.size(); - } - - public void update(String name, Integer price) { - this.name = name; - this.price = price; - } - - public void changeDiscontinuedStatus() { - this.isDiscontinued = !this.isDiscontinued; - } - - public boolean isContinued() { - return !this.isDiscontinued; - } - - public void increaseLikeCount() { - likeCount++; - } - - public void increaseUnlikeCount() { - unlikeCount++; - } - - public void decreaseLikeCount() { - likeCount--; - } - - public void decreaseUnlikeCount() { - unlikeCount--; - } - - public void changeLikeStatus(Boolean isLike) { - if (isLike) { - decreaseUnlikeCount(); - increaseLikeCount(); - } else { - decreaseLikeCount(); - increaseUnlikeCount(); - } - } - - public void cancelLike(Boolean isLike) { - if (isLike) { - decreaseLikeCount(); - } else { - decreaseUnlikeCount(); - } - } + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "menu_id") + private Long id; + + private String name; + + private Integer price; + + @Enumerated(EnumType.STRING) + private Restaurant restaurant; + + // TODO : 삭제되어야 함 + @Embedded + private Reviews reviews = new Reviews(); + + @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) + private List mealMenus = new ArrayList<>(); + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "menu_category_id") + private MenuCategory category; + + private boolean isDiscontinued = false; + + @Column(name = "like_count") + private Integer likeCount = 0; + + @Column(name = "unlike_count") + private Integer unlikeCount = 0; + + private Menu(String name, Restaurant restaurant, Integer price, MenuCategory category) { + this.name = name; + this.restaurant = restaurant; + this.price = price; + this.category = category; + } + + public static Menu createVariable(String name, Restaurant restaurant) { + int price = 0; + return new Menu(name, restaurant, price, null); + } + + public static Menu createFixed(String name, Restaurant restaurant, Integer price, + MenuCategory category) { + return new Menu(name, restaurant, price, category); + } + + public void addReview(Review review) { + reviews.add(review); + } + + public int getTotalReviewCount() { + return reviews.size(); + } + + public void update(String name, Integer price) { + this.name = name; + this.price = price; + } + + public void changeDiscontinuedStatus() { + this.isDiscontinued = !this.isDiscontinued; + } + + public boolean isContinued() { + return !this.isDiscontinued; + } + + public void increaseLikeCount() { + likeCount++; + } + + public void increaseUnlikeCount() { + unlikeCount++; + } + + public void decreaseLikeCount() { + likeCount--; + } + + public void decreaseUnlikeCount() { + unlikeCount--; + } + + public void changeLikeStatus(Boolean isLike) { + if (isLike) { + decreaseUnlikeCount(); + increaseLikeCount(); + } else { + decreaseLikeCount(); + increaseUnlikeCount(); + } + } + + public void cancelLike(Boolean isLike) { + if (isLike) { + decreaseLikeCount(); + } else { + decreaseUnlikeCount(); + } + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java b/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java index b5bfb435..96f57f60 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java @@ -11,14 +11,14 @@ @Builder public class MenuCategory { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "menu_category_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "menu_category_id") + private Long id; - private String name; + private String name; - @Enumerated(EnumType.STRING) - private Restaurant restaurant; + @Enumerated(EnumType.STRING) + private Restaurant restaurant; } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java b/src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java index f3502feb..c80e25dd 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.menu.entity.constants; import com.fasterxml.jackson.annotation.JsonCreator; + import lombok.Getter; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -9,25 +10,24 @@ import static ssu.eatssu.domain.restaurant.entity.Restaurant.*; - @Getter public enum MenuType { - FIXED("고정 메뉴", Arrays.asList(FOOD_COURT, SNACK_CORNER)), - VARIABLE("변동 메뉴", Arrays.asList(DODAM, DORMITORY, HAKSIK)); - - private final String description; - private final List restaurants; - - MenuType(String description, List restaurants) { - this.description = description; - this.restaurants = restaurants; - } - - @JsonCreator - public static MenuType from(String description) { - return Arrays.stream(MenuType.values()) - .filter(d -> d.getDescription().equals(description)) - .findAny() - .orElseThrow(IllegalArgumentException::new); - } + FIXED("고정 메뉴", Arrays.asList(FOOD_COURT, SNACK_CORNER)), + VARIABLE("변동 메뉴", Arrays.asList(DODAM, DORMITORY, HAKSIK)); + + private final String description; + private final List restaurants; + + MenuType(String description, List restaurants) { + this.description = description; + this.restaurants = restaurants; + } + + @JsonCreator + public static MenuType from(String description) { + return Arrays.stream(MenuType.values()) + .filter(d -> d.getDescription().equals(description)) + .findAny() + .orElseThrow(IllegalArgumentException::new); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java b/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java index 31d78dd6..d1b426a2 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java @@ -1,27 +1,28 @@ package ssu.eatssu.domain.menu.entity.constants; import com.fasterxml.jackson.annotation.JsonCreator; + import lombok.Getter; import java.util.Arrays; @Getter public enum TimePart { - MORNING("조식"), - LUNCH("중식"), - DINNER("석식"); + MORNING("조식"), + LUNCH("중식"), + DINNER("석식"); - private final String description; + private final String description; - TimePart(String description) { - this.description = description; - } + TimePart(String description) { + this.description = description; + } - @JsonCreator - public static TimePart from(String description) { - return Arrays.stream(TimePart.values()) - .filter(d -> d.getDescription().equals(description)) - .findAny() - .orElseThrow(IllegalArgumentException::new); - } + @JsonCreator + public static TimePart from(String description) { + return Arrays.stream(TimePart.values()) + .filter(d -> d.getDescription().equals(description)) + .findAny() + .orElseThrow(IllegalArgumentException::new); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/LoadMenusInMealRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/LoadMenusInMealRepository.java index 3117e896..3b7f952d 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/LoadMenusInMealRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/LoadMenusInMealRepository.java @@ -1,8 +1,11 @@ package ssu.eatssu.domain.menu.persistence; import com.querydsl.jpa.impl.JPAQueryFactory; + import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Component; + import ssu.eatssu.domain.menu.entity.QMeal; import ssu.eatssu.domain.menu.entity.QMealMenu; import ssu.eatssu.domain.menu.entity.QMenu; @@ -13,21 +16,20 @@ @RequiredArgsConstructor public class LoadMenusInMealRepository { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - - private final QMeal meal = QMeal.meal; + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; - private final QMealMenu mealMenu = QMealMenu.mealMenu; + private final QMeal meal = QMeal.meal; + private final QMealMenu mealMenu = QMealMenu.mealMenu; - public List getMenuIds(Long mealId) { - return queryFactory - .select(menu.id) - .from(meal) - .join(mealMenu).on(meal.id.eq(mealMenu.meal.id)) - .join(menu).on(mealMenu.menu.id.eq(menu.id)) - .where(meal.id.eq(mealId)) - .fetch(); - } + public List getMenuIds(Long mealId) { + return queryFactory + .select(menu.id) + .from(meal) + .join(mealMenu).on(meal.id.eq(mealMenu.meal.id)) + .join(menu).on(mealMenu.menu.id.eq(menu.id)) + .where(meal.id.eq(mealId)) + .fetch(); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java index 4ddb5c3c..b3ac36c2 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java @@ -3,6 +3,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; + import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; @@ -10,12 +11,12 @@ import java.util.List; public interface MealMenuRepository extends JpaRepository { - @Query("SELECT mm.menu FROM MealMenu mm WHERE mm.meal IN :meals") - List findMenusByMeals(List meals); + @Query("SELECT mm.menu FROM MealMenu mm WHERE mm.meal IN :meals") + List findMenusByMeals(List meals); - @Query("SELECT mm.menu.id FROM MealMenu mm WHERE mm.meal.id = :mealId") - List findMenuIdsByMealId(@Param("mealId") Long mealId); + @Query("SELECT mm.menu.id FROM MealMenu mm WHERE mm.meal.id = :mealId") + List findMenuIdsByMealId(@Param("mealId") Long mealId); - @Query("SELECT DISTINCT mm.meal.id FROM MealMenu mm WHERE mm.menu.id IN :menuIds") - List findMealIdsByMenuIds(@Param("menuIds") List menuIds); + @Query("SELECT DISTINCT mm.meal.id FROM MealMenu mm WHERE mm.menu.id IN :menuIds") + List findMealIdsByMenuIds(@Param("menuIds") List menuIds); } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java index df59f5d7..e28ccc73 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.menu.persistence; import org.springframework.data.jpa.repository.JpaRepository; + import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -10,7 +11,7 @@ public interface MealRepository extends JpaRepository { - List findAllByDateAndTimePartAndRestaurant(Date date, TimePart timePart, Restaurant restaurant); + List findAllByDateAndTimePartAndRestaurant(Date date, TimePart timePart, Restaurant restaurant); - List findByRestaurant(Restaurant restaurant); + List findByRestaurant(Restaurant restaurant); } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java index ffc0fcdd..2581d891 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.menu.persistence; import org.springframework.data.jpa.repository.JpaRepository; + import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -8,5 +9,5 @@ public interface MenuCategoryRepository extends JpaRepository { - List findAllByRestaurant(Restaurant restaurant); + List findAllByRestaurant(Restaurant restaurant); } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java index e87ece59..8ea3b95b 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.menu.persistence; import org.springframework.data.jpa.repository.JpaRepository; + import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -9,11 +10,11 @@ import java.util.Optional; public interface MenuRepository extends JpaRepository { - boolean existsByNameAndRestaurant(String name, Restaurant restaurant); + boolean existsByNameAndRestaurant(String name, Restaurant restaurant); - Optional findByNameAndRestaurant(String name, Restaurant restaurant); + Optional findByNameAndRestaurant(String name, Restaurant restaurant); - List findAllByRestaurantAndCategory(Restaurant restaurant, MenuCategory category); + List findAllByRestaurantAndCategory(Restaurant restaurant, MenuCategory category); - List findAll(); + List findAll(); } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java index 27e4f8b8..73c0fb77 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java @@ -2,62 +2,64 @@ import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; + import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Repository; + import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; import java.util.List; - @Repository @RequiredArgsConstructor public class QuerydslMealRatingCalculator { - private final LoadMenusInMealRepository loadMenusInMealRepository; - - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - - private final QReview review = QReview.review; - - public Double getMainRatingAverage(Long mealId) { - List menuIds = loadMenusInMealRepository.getMenuIds(mealId); - return queryFactory - .select(review.ratings.mainRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdIn(menuIds) - ) - .fetchOne(); - } - - public Double getTasteRatingAverage(Long mealId) { - List menuIds = loadMenusInMealRepository.getMenuIds(mealId); - return queryFactory - .select(review.ratings.tasteRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdIn(menuIds) - ) - .fetchOne(); - } - - public Double getAmountRatingAverage(Long mealId) { - List menuIds = loadMenusInMealRepository.getMenuIds(mealId); - return queryFactory - .select(review.ratings.amountRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdIn(menuIds) - ) - .fetchOne(); - } - - private BooleanExpression menuIdIn(List menuIds) { - return menuIds != null && !menuIds.isEmpty() ? menu.id.in(menuIds) : null; - } + private final LoadMenusInMealRepository loadMenusInMealRepository; + + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + + private final QReview review = QReview.review; + + public Double getMainRatingAverage(Long mealId) { + List menuIds = loadMenusInMealRepository.getMenuIds(mealId); + return queryFactory + .select(review.ratings.mainRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdIn(menuIds) + ) + .fetchOne(); + } + + public Double getTasteRatingAverage(Long mealId) { + List menuIds = loadMenusInMealRepository.getMenuIds(mealId); + return queryFactory + .select(review.ratings.tasteRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdIn(menuIds) + ) + .fetchOne(); + } + + public Double getAmountRatingAverage(Long mealId) { + List menuIds = loadMenusInMealRepository.getMenuIds(mealId); + return queryFactory + .select(review.ratings.amountRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdIn(menuIds) + ) + .fetchOne(); + } + + private BooleanExpression menuIdIn(List menuIds) { + return menuIds != null && !menuIds.isEmpty() ? menu.id.in(menuIds) : null; + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java index 30cbaab4..7a1c6261 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java @@ -3,8 +3,11 @@ import com.querydsl.core.Tuple; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; + import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Repository; + import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; @@ -16,41 +19,41 @@ @RequiredArgsConstructor public class QuerydslMealRatingCounter { - private final LoadMenusInMealRepository loadMenusInMealRepository; - - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - - private final QReview review = QReview.review; - - public Map getRatingCountMap(Long mealId) { - List tuples = queryFactory.select(review.ratings.mainRating, review.count()) - .from(review) - .join(review.menu, menu) - .groupBy(review.ratings.mainRating) - .where(menuIdIn(loadMenusInMealRepository.getMenuIds(mealId))) - .fetch(); - - Map ratingCountMap = new HashMap<>(); - for (Tuple tuple : tuples) { - Integer rating = tuple.get(review.ratings.mainRating); - Long count = tuple.get(review.count()); - ratingCountMap.put(rating, count); - } - return ratingCountMap; - } - - public Long getTotalRatingCount(Long mealId) { - return queryFactory - .select(review.count()) - .from(review) - .join(review.menu, menu) - .where(menuIdIn(loadMenusInMealRepository.getMenuIds(mealId))) - .fetchOne(); - } - - private BooleanExpression menuIdIn(List menuIds) { - return menuIds != null && !menuIds.isEmpty() ? menu.id.in(menuIds) : null; - } + private final LoadMenusInMealRepository loadMenusInMealRepository; + + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + + private final QReview review = QReview.review; + + public Map getRatingCountMap(Long mealId) { + List tuples = queryFactory.select(review.ratings.mainRating, review.count()) + .from(review) + .join(review.menu, menu) + .groupBy(review.ratings.mainRating) + .where(menuIdIn(loadMenusInMealRepository.getMenuIds(mealId))) + .fetch(); + + Map ratingCountMap = new HashMap<>(); + for (Tuple tuple : tuples) { + Integer rating = tuple.get(review.ratings.mainRating); + Long count = tuple.get(review.count()); + ratingCountMap.put(rating, count); + } + return ratingCountMap; + } + + public Long getTotalRatingCount(Long mealId) { + return queryFactory + .select(review.count()) + .from(review) + .join(review.menu, menu) + .where(menuIdIn(loadMenusInMealRepository.getMenuIds(mealId))) + .fetchOne(); + } + + private BooleanExpression menuIdIn(List menuIds) { + return menuIds != null && !menuIds.isEmpty() ? menu.id.in(menuIds) : null; + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java index e60b5dca..6e9b5f2e 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java @@ -2,8 +2,11 @@ import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; + import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Repository; + import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; @@ -11,44 +14,44 @@ @RequiredArgsConstructor public class QuerydslMenuRatingCalculator { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - private final QReview review = QReview.review; - - public Double getMainRatingAverage(Long menuId) { - return queryFactory - .select(review.ratings.mainRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId) - ) - .fetchOne(); - } - - public Double getTasteRatingAverage(Long menuId) { - return queryFactory - .select(review.ratings.tasteRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId) - ) - .fetchOne(); - } - - public Double getAmountRatingAverage(Long menuId) { - return queryFactory - .select(review.ratings.amountRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId) - ) - .fetchOne(); - } - - private BooleanExpression menuIdEq(Long menuId) { - return menu.id.eq(menuId); - } + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QReview review = QReview.review; + + public Double getMainRatingAverage(Long menuId) { + return queryFactory + .select(review.ratings.mainRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId) + ) + .fetchOne(); + } + + public Double getTasteRatingAverage(Long menuId) { + return queryFactory + .select(review.ratings.tasteRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId) + ) + .fetchOne(); + } + + public Double getAmountRatingAverage(Long menuId) { + return queryFactory + .select(review.ratings.amountRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId) + ) + .fetchOne(); + } + + private BooleanExpression menuIdEq(Long menuId) { + return menu.id.eq(menuId); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java index dd00c486..cb518282 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java @@ -3,8 +3,11 @@ import com.querydsl.core.Tuple; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; + import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Repository; + import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; @@ -15,30 +18,30 @@ @Repository @RequiredArgsConstructor public class QuerydslMenuRatingCounter { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - private final QReview review = QReview.review; - - public Map getRatingCountMap(Long menuId) { - List tuples = queryFactory.select(review.ratings.mainRating, review.count()) - .from(review) - .join(review.menu, menu) - .groupBy(review.ratings.mainRating) - .where(menuIdEq(menuId)) - .fetch(); - - Map ratingCountMap = new HashMap<>(); - - for (Tuple tuple : tuples) { - Integer rating = tuple.get(review.ratings.mainRating); - Long count = tuple.get(review.count()); - ratingCountMap.put(rating, count); - } - return ratingCountMap; - } - - private BooleanExpression menuIdEq(Long menuId) { - return menu.id.eq(menuId); - } + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QReview review = QReview.review; + + public Map getRatingCountMap(Long menuId) { + List tuples = queryFactory.select(review.ratings.mainRating, review.count()) + .from(review) + .join(review.menu, menu) + .groupBy(review.ratings.mainRating) + .where(menuIdEq(menuId)) + .fetch(); + + Map ratingCountMap = new HashMap<>(); + + for (Tuple tuple : tuples) { + Integer rating = tuple.get(review.ratings.mainRating); + Long count = tuple.get(review.count()); + ratingCountMap.put(rating, count); + } + return ratingCountMap; + } + + private BooleanExpression menuIdEq(Long menuId) { + return menu.id.eq(menuId); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java index a865c887..bbe42642 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java @@ -6,8 +6,8 @@ @Schema(title = "식단 추가") public record CreateMealRequest( - @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") - List menuNames + @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") + List menuNames ) { } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java index 7035d835..4ef854cb 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java @@ -6,10 +6,10 @@ @Schema(title = "식단 추가(가격 입력 받는 버전)") public record MealCreateWithPriceRequest( - @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") - List menuNames, - @Schema(description = "식단 가격", example = "3000") - Integer price + @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") + List menuNames, + @Schema(description = "식단 가격", example = "3000") + Integer price ) { } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/BriefMenuResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/BriefMenuResponse.java index 5906c9ab..2f0dd1f6 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/BriefMenuResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/BriefMenuResponse.java @@ -10,14 +10,14 @@ @Schema(title = "메뉴 간단 설명") public class BriefMenuResponse { - @Schema(description = "메뉴 식별자", example = "2") - private Long menuId; + @Schema(description = "메뉴 식별자", example = "2") + private Long menuId; - @Schema(description = "메뉴 이름", example = "돈까스") - private String name; + @Schema(description = "메뉴 이름", example = "돈까스") + private String name; - public BriefMenuResponse(Menu menu) { - this.menuId = menu.getId(); - this.name = menu.getName(); - } + public BriefMenuResponse(Menu menu) { + this.menuId = menu.getId(); + this.name = menu.getName(); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java index c96c6e19..4c999891 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java @@ -9,18 +9,18 @@ @Schema(title = "카테고리 별 메뉴 목록 Response") public class CategoryWithMenusResponse { - @Schema(description = "카테고리명") - private final String category; + @Schema(description = "카테고리명") + private final String category; - @Schema(description = "카테고리의 메뉴 목록") - private final List menus; + @Schema(description = "카테고리의 메뉴 목록") + private final List menus; - public CategoryWithMenusResponse(String category, List menus) { - this.category = category; - this.menus = menus; - } + public CategoryWithMenusResponse(String category, List menus) { + this.category = category; + this.menus = menus; + } - public static CategoryWithMenusResponse of(String category, List menus) { - return new CategoryWithMenusResponse(category, menus); - } + public static CategoryWithMenusResponse of(String category, List menus) { + return new CategoryWithMenusResponse(category, menus); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java index ec3bb35f..1e7d2b2d 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java @@ -15,31 +15,31 @@ @Schema(title = "오늘의 식단 리스트 조회 Response") public class MealDetailResponse { - @Schema(description = "식단 식별자 mealId", example = "12") - private Long mealId; - - @Schema(description = "가격", example = "5000") - private Integer price; - - @Schema(description = "식단 평점(평점이 없으면 null)", example = "4.4") - private Double rating; - - @Schema(description = "식단 속 메뉴 정보 리스트") - private List briefMenus; - - public static MealDetailResponse from(Meal meal, Double mainRating) { - List briefMenus = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(BriefMenuResponse::new) - .toList(); - - return new MealDetailResponse( - meal.getId(), - meal.getPrice(), - mainRating, - briefMenus - ); - } + @Schema(description = "식단 식별자 mealId", example = "12") + private Long mealId; + + @Schema(description = "가격", example = "5000") + private Integer price; + + @Schema(description = "식단 평점(평점이 없으면 null)", example = "4.4") + private Double rating; + + @Schema(description = "식단 속 메뉴 정보 리스트") + private List briefMenus; + + public static MealDetailResponse from(Meal meal, Double mainRating) { + List briefMenus = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(BriefMenuResponse::new) + .toList(); + + return new MealDetailResponse( + meal.getId(), + meal.getPrice(), + mainRating, + briefMenus + ); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java index bd3f6e87..70e3d5de 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java @@ -12,19 +12,19 @@ @Schema(title = "고정 메뉴 정보") public class MenuResponse { - @Schema(description = "메뉴 식별자", example = "2") - private Long menuId; + @Schema(description = "메뉴 식별자", example = "2") + private Long menuId; - @Schema(description = "메뉴 이름", example = "돈까스") - private String name; + @Schema(description = "메뉴 이름", example = "돈까스") + private String name; - @Schema(description = "가격", example = "5000") - private Integer price; + @Schema(description = "가격", example = "5000") + private Integer price; - @Schema(description = "메뉴 평점 (평점이 없으면 null) ", example = "4.4") - private Double rating; + @Schema(description = "메뉴 평점 (평점이 없으면 null) ", example = "4.4") + private Double rating; - public static MenuResponse from(Menu menu, Double rating) { - return new MenuResponse(menu.getId(), menu.getName(), menu.getPrice(), rating); - } + public static MenuResponse from(Menu menu, Double rating) { + return new MenuResponse(menu.getId(), menu.getName(), menu.getPrice(), rating); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java index 8e61d251..e78fd75c 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java @@ -8,21 +8,21 @@ @Getter public class MenuRestaurantResponse { - private final List categoryMenuListCollection; + private final List categoryMenuListCollection; - private MenuRestaurantResponse(List categoryMenu) { - this.categoryMenuListCollection = categoryMenu; - } + private MenuRestaurantResponse(List categoryMenu) { + this.categoryMenuListCollection = categoryMenu; + } - public static MenuRestaurantResponse init() { - return new MenuRestaurantResponse(new ArrayList<>()); - } + public static MenuRestaurantResponse init() { + return new MenuRestaurantResponse(new ArrayList<>()); + } - public void add(CategoryWithMenusResponse categoryWithMenusResponse) { - this.categoryMenuListCollection.add(categoryWithMenusResponse); - } + public void add(CategoryWithMenusResponse categoryWithMenusResponse) { + this.categoryMenuListCollection.add(categoryWithMenusResponse); + } - public void addAll(List categoryWithMenusResponses) { - this.categoryMenuListCollection.addAll(categoryWithMenusResponses); - } + public void addAll(List categoryWithMenusResponses) { + this.categoryMenuListCollection.addAll(categoryWithMenusResponses); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java index 00d32895..0c097a5e 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java @@ -15,15 +15,15 @@ @Schema(title = "식단 속 메뉴 정보 리스트") public class MenusInMealResponse { - @Schema(description = "식단 속 메뉴 목록", example = "[]") - private List briefMenus; + @Schema(description = "식단 속 메뉴 목록", example = "[]") + private List briefMenus; - public static MenusInMealResponse from(Meal meal) { - List menusInformation = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(BriefMenuResponse::new) - .toList(); + public static MenusInMealResponse from(Meal meal) { + List menusInformation = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(BriefMenuResponse::new) + .toList(); - return new MenusInMealResponse(menusInformation); - } + return new MenusInMealResponse(menusInformation); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java index b64b6999..24d17c23 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java @@ -1,6 +1,5 @@ package ssu.eatssu.domain.menu.presentation.rest; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; @@ -9,8 +8,10 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; + import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; + import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.menu.presentation.dto.request.CreateMealRequest; import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateWithPriceRequest; @@ -33,103 +34,103 @@ @Tag(name = "Meal", description = "식단 API") public class MealController { - private final MealService mealService; - - @Operation(summary = "식단 추가 [인증 토큰 필요 X]", description = """ - 식단을 추가하는 API 입니다.

- 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

- 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 추가 성공"), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("") - public BaseResponse createMeal( - @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, - @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, - @RequestBody CreateMealRequest mealCreateRequest) { - if (RestaurantType.isFixedType(restaurant)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } - - mealService.createMeal(date, restaurant, timePart, mealCreateRequest); - return BaseResponse.success(); - } - - @Operation(summary = "식단 추가 [인증 토큰 필요 X]", description = """ - 식단을 추가하는 API 입니다.

- 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

- 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) - 가격을 외부에서 입력받습니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 추가 성공"), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/with-price") - public BaseResponse createMealWithPrice( - @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, - @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, - @RequestBody MealCreateWithPriceRequest request) { - if (RestaurantType.isFixedType(restaurant)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } - - mealService.createMealWithPrice(date, restaurant, timePart, request); - return BaseResponse.success(); - } - - @Operation(summary = "변동 메뉴 식단 리스트 조회 [인증 토큰 필요 X]", description = """ - 변동 메뉴 식단 리스트를 조회하는 API 입니다. - 변동 메뉴 식당 (학생 식당, 도담, 기숙사 식당) 의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회합니다. - 일반적으로 학생식당과 도담의 경우 식단 여러 개가 조회되고 기숙사식당은 한 개만 조회됩니다.) - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "지원 하지 않는 식당 (고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("") - public BaseResponse> getMealDetail( - @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당 이름") @RequestParam("restaurant") Restaurant restaurant, - @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { - - return BaseResponse.success( - mealService.getMealDetailsByDateAndRestaurantAndTimePart(date, restaurant, timePart)); - } - - @Operation(summary = "식단 삭제 [인증 토큰 필요 X]", description = "식단을 삭제하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 삭제 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("/{mealId}") - public BaseResponse deleteMeal( - @Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { - - mealService.deleteByMealId(mealId); - return BaseResponse.success(); - } - - @Operation(summary = "메뉴 정보 리스트 조회 [인증 토큰 필요 X]", description = """ - 메뉴 정보 리스트를 조회하는 API 입니다.

- 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/{mealId}/menus-info") - public BaseResponse getMenusInMeal(@Parameter(description = "mealId") - @PathVariable("mealId") Long mealId) { - return BaseResponse.success(mealService.getMenusInMealByMealId(mealId)); - } + private final MealService mealService; + + @Operation(summary = "식단 추가 [인증 토큰 필요 X]", description = """ + 식단을 추가하는 API 입니다.

+ 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

+ 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 추가 성공"), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("") + public BaseResponse createMeal( + @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, + @RequestBody CreateMealRequest mealCreateRequest) { + if (RestaurantType.isFixedType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } + + mealService.createMeal(date, restaurant, timePart, mealCreateRequest); + return BaseResponse.success(); + } + + @Operation(summary = "식단 추가 [인증 토큰 필요 X]", description = """ + 식단을 추가하는 API 입니다.

+ 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

+ 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) + 가격을 외부에서 입력받습니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 추가 성공"), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/with-price") + public BaseResponse createMealWithPrice( + @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, + @RequestBody MealCreateWithPriceRequest request) { + if (RestaurantType.isFixedType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } + + mealService.createMealWithPrice(date, restaurant, timePart, request); + return BaseResponse.success(); + } + + @Operation(summary = "변동 메뉴 식단 리스트 조회 [인증 토큰 필요 X]", description = """ + 변동 메뉴 식단 리스트를 조회하는 API 입니다. + 변동 메뉴 식당 (학생 식당, 도담, 기숙사 식당) 의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회합니다. + 일반적으로 학생식당과 도담의 경우 식단 여러 개가 조회되고 기숙사식당은 한 개만 조회됩니다.) + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "지원 하지 않는 식당 (고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("") + public BaseResponse> getMealDetail( + @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "식당 이름") @RequestParam("restaurant") Restaurant restaurant, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { + + return BaseResponse.success( + mealService.getMealDetailsByDateAndRestaurantAndTimePart(date, restaurant, timePart)); + } + + @Operation(summary = "식단 삭제 [인증 토큰 필요 X]", description = "식단을 삭제하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 삭제 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("/{mealId}") + public BaseResponse deleteMeal( + @Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { + + mealService.deleteByMealId(mealId); + return BaseResponse.success(); + } + + @Operation(summary = "메뉴 정보 리스트 조회 [인증 토큰 필요 X]", description = """ + 메뉴 정보 리스트를 조회하는 API 입니다.

+ 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/{mealId}/menus-info") + public BaseResponse getMenusInMeal(@Parameter(description = "mealId") + @PathVariable("mealId") Long mealId) { + return BaseResponse.success(mealService.getMenusInMealByMealId(mealId)); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java index 7c125034..35140874 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java @@ -7,10 +7,12 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; + import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; + import ssu.eatssu.domain.menu.presentation.dto.response.MenuRestaurantResponse; import ssu.eatssu.domain.menu.service.MenuService; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -22,24 +24,24 @@ @Tag(name = "Menu", description = "메뉴 API") public class MenuController { - private final MenuService menuService; + private final MenuService menuService; - @Operation(summary = "고정 메뉴 리스트 조회 [인증 토큰 필요 X]", - description = - """ - 고정 메뉴 리스트를 조회하는 API 입니다. - 메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 리스트를 조회합니다. - """ - ) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping - public BaseResponse getMenus( - @RequestParam("restaurant") Restaurant restaurant) { + @Operation(summary = "고정 메뉴 리스트 조회 [인증 토큰 필요 X]", + description = + """ + 고정 메뉴 리스트를 조회하는 API 입니다. + 메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 리스트를 조회합니다. + """ + ) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping + public BaseResponse getMenus( + @RequestParam("restaurant") Restaurant restaurant) { - return BaseResponse.success(menuService.getMenusByRestaurant(restaurant)); - } + return BaseResponse.success(menuService.getMenusByRestaurant(restaurant)); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java b/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java index c6634caf..2fe6f70e 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java @@ -1,18 +1,19 @@ package ssu.eatssu.domain.menu.service; import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Service; + import ssu.eatssu.domain.menu.persistence.QuerydslMealRatingCalculator; @Service @RequiredArgsConstructor public class MealRatingService { - private final QuerydslMealRatingCalculator mealRatingCalculator; - - public Double getMainRatingAverage(Long mealId) { - return mealRatingCalculator.getMainRatingAverage(mealId); - } + private final QuerydslMealRatingCalculator mealRatingCalculator; + public Double getMainRatingAverage(Long mealId) { + return mealRatingCalculator.getMainRatingAverage(mealId); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MealService.java b/src/main/java/ssu/eatssu/domain/menu/service/MealService.java index 49814b32..6e4c0de3 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MealService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MealService.java @@ -2,8 +2,10 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; @@ -31,122 +33,123 @@ @Transactional(readOnly = true) public class MealService { - private final MealRepository mealRepository; - private final MealMenuRepository mealMenuRepository; - private final MealRatingService mealRatingService; - private final MenuService menuService; - - public MenusInMealResponse getMenusInMealByMealId(Long mealId) { - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); - - return MenusInMealResponse.from(meal); - } - - public List getMealDetailsByDateAndRestaurantAndTimePart( - Date date, Restaurant restaurant, TimePart timePart) { - - validateMealRestaurant(restaurant); - - List meals = findMealsByDateAndTimePartAndRestaurant(date, timePart, restaurant); - - return meals.stream() - .map(meal -> MealDetailResponse.from(meal, - mealRatingService.getMainRatingAverage(meal.getId()))) - .toList(); - } - - private List findMealsByDateAndTimePartAndRestaurant(Date date, TimePart timePart, - Restaurant restaurant) { - return mealRepository.findAllByDateAndTimePartAndRestaurant(date, timePart, restaurant); - } - - private void validateMealRestaurant(Restaurant restaurant) { - if (RestaurantType.isFixedType(restaurant)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } - } - - @Transactional - public Long createMeal(Date date, Restaurant restaurant, TimePart timePart, - CreateMealRequest request) { - return createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), null); - } - - @Transactional - public Long createMealWithPrice(Date date, Restaurant restaurant, TimePart timePart, - MealCreateWithPriceRequest request) { - return createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), request.price()); - } - - private Long createMealWithOptionalPrice(Date date, Restaurant restaurant, TimePart timePart, List menuNames, Integer price) { - - Optional existingMealId = getExistingMealId(date, timePart, restaurant, menuNames); - if (existingMealId.isPresent()) { - return existingMealId.get(); // 이미 존재하는 식단의 ID를 반환 - } - - Meal meal = new Meal(date, timePart, restaurant, price); - Meal savedMeal = mealRepository.save(meal); - addMenusToMeal(meal, restaurant, menuNames); - - return savedMeal.getId(); - } - - private Optional getExistingMealId(Date date, TimePart timePart, Restaurant restaurant, - List menuNames) { - List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(date, timePart, restaurant); - - List sortedRequestMenuNames = menuNames.stream() - .sorted() - .toList(); - - return meals.stream() - .filter(meal -> { - List sortedMenuNames = meal.getMenuNames().stream() - .sorted() - .toList(); - return sortedMenuNames.equals(sortedRequestMenuNames); - }) - .findFirst() - .map(Meal::getId); - } - - private void addMenusToMeal(Meal meal, Restaurant restaurant, List menuNames) { - for (String menuName : menuNames) { - Menu menu = menuService.createOrGetMenu(menuName, restaurant); - createMealMenu(meal, menu); - } - } - - private void createMealMenu(Meal meal, Menu menu) { - MealMenu mealMenu = MealMenu.builder() - .menu(menu) - .meal(meal) - .build(); - - mealMenuRepository.save(mealMenu); - meal.addMealMenu(mealMenu); - } - - @Transactional - public void deleteByMealId(Long mealId) { - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); - - List menus = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .toList(); - - mealRepository.delete(meal); - mealRepository.flush(); - - deleteUnusedMenus(menus); - } - - private void deleteUnusedMenus(List menus) { - menus.stream() - .filter(menu -> menu.getMealMenus().isEmpty()) - .forEach(menuService::deleteMenu); - } + private final MealRepository mealRepository; + private final MealMenuRepository mealMenuRepository; + private final MealRatingService mealRatingService; + private final MenuService menuService; + + public MenusInMealResponse getMenusInMealByMealId(Long mealId) { + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + + return MenusInMealResponse.from(meal); + } + + public List getMealDetailsByDateAndRestaurantAndTimePart( + Date date, Restaurant restaurant, TimePart timePart) { + + validateMealRestaurant(restaurant); + + List meals = findMealsByDateAndTimePartAndRestaurant(date, timePart, restaurant); + + return meals.stream() + .map(meal -> MealDetailResponse.from(meal, + mealRatingService.getMainRatingAverage(meal.getId()))) + .toList(); + } + + private List findMealsByDateAndTimePartAndRestaurant(Date date, TimePart timePart, + Restaurant restaurant) { + return mealRepository.findAllByDateAndTimePartAndRestaurant(date, timePart, restaurant); + } + + private void validateMealRestaurant(Restaurant restaurant) { + if (RestaurantType.isFixedType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } + } + + @Transactional + public Long createMeal(Date date, Restaurant restaurant, TimePart timePart, + CreateMealRequest request) { + return createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), null); + } + + @Transactional + public Long createMealWithPrice(Date date, Restaurant restaurant, TimePart timePart, + MealCreateWithPriceRequest request) { + return createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), request.price()); + } + + private Long createMealWithOptionalPrice(Date date, Restaurant restaurant, TimePart timePart, + List menuNames, Integer price) { + + Optional existingMealId = getExistingMealId(date, timePart, restaurant, menuNames); + if (existingMealId.isPresent()) { + return existingMealId.get(); // 이미 존재하는 식단의 ID를 반환 + } + + Meal meal = new Meal(date, timePart, restaurant, price); + Meal savedMeal = mealRepository.save(meal); + addMenusToMeal(meal, restaurant, menuNames); + + return savedMeal.getId(); + } + + private Optional getExistingMealId(Date date, TimePart timePart, Restaurant restaurant, + List menuNames) { + List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(date, timePart, restaurant); + + List sortedRequestMenuNames = menuNames.stream() + .sorted() + .toList(); + + return meals.stream() + .filter(meal -> { + List sortedMenuNames = meal.getMenuNames().stream() + .sorted() + .toList(); + return sortedMenuNames.equals(sortedRequestMenuNames); + }) + .findFirst() + .map(Meal::getId); + } + + private void addMenusToMeal(Meal meal, Restaurant restaurant, List menuNames) { + for (String menuName : menuNames) { + Menu menu = menuService.createOrGetMenu(menuName, restaurant); + createMealMenu(meal, menu); + } + } + + private void createMealMenu(Meal meal, Menu menu) { + MealMenu mealMenu = MealMenu.builder() + .menu(menu) + .meal(meal) + .build(); + + mealMenuRepository.save(mealMenu); + meal.addMealMenu(mealMenu); + } + + @Transactional + public void deleteByMealId(Long mealId) { + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + + List menus = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .toList(); + + mealRepository.delete(meal); + mealRepository.flush(); + + deleteUnusedMenus(menus); + } + + private void deleteUnusedMenus(List menus) { + menus.stream() + .filter(menu -> menu.getMealMenus().isEmpty()) + .forEach(menuService::deleteMenu); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java index 8bd7f557..53935f88 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java @@ -1,17 +1,18 @@ package ssu.eatssu.domain.menu.service; - import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Service; + import ssu.eatssu.domain.menu.persistence.QuerydslMenuRatingCalculator; @Service @RequiredArgsConstructor public class MenuRatingService { - private final QuerydslMenuRatingCalculator menuRatingCalculator; + private final QuerydslMenuRatingCalculator menuRatingCalculator; - public Double getMainRatingAverage(Long menuId) { - return menuRatingCalculator.getMainRatingAverage(menuId); - } + public Double getMainRatingAverage(Long menuId) { + return menuRatingCalculator.getMainRatingAverage(menuId); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index 4d53068b..fe9e8452 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -3,8 +3,10 @@ import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; + import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.menu.persistence.MenuCategoryRepository; @@ -21,69 +23,68 @@ import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; - @Slf4j @Service @RequiredArgsConstructor @Transactional public class MenuService { - private final MenuRepository menuRepository; - private final MenuCategoryRepository menuCategoryRepository; - private final MenuRatingService menuRatingService; - - private static void validateMenuRestaurant(Restaurant restaurant) { - if (RestaurantType.isVariableType(restaurant)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } - } - - public MenuRestaurantResponse getMenusByRestaurant(Restaurant restaurant) { - validateMenuRestaurant(restaurant); - - List categories = findCategoriesByRestaurant(restaurant); - - MenuRestaurantResponse response = MenuRestaurantResponse.init(); - - for (MenuCategory category : categories) { - List menus = getMenuResponsesByRestaurantAndCategory(restaurant, - category); - response.add(CategoryWithMenusResponse.of(category.getName(), menus)); - } - - return response; - } - - private List findCategoriesByRestaurant(Restaurant restaurant) { - return menuCategoryRepository.findAllByRestaurant(restaurant); - } - - @NotNull - private List getMenuResponsesByRestaurantAndCategory(Restaurant restaurant, - MenuCategory category) { - return menuRepository.findAllByRestaurantAndCategory(restaurant, category) - .stream() - .filter(Menu::isContinued) - .map(menu -> MenuResponse.from(menu, - menuRatingService.getMainRatingAverage(menu.getId()))) - .toList(); - } - - @Transactional - public Menu createOrGetMenu(String menuName, Restaurant restaurant) { - return menuRepository.existsByNameAndRestaurant(menuName, restaurant) ? - findMenu(menuName, restaurant) : - menuRepository.save(Menu.createVariable(menuName, restaurant)); - } - - private Menu findMenu(String addMenuName, Restaurant restaurant) { - Menu menu = menuRepository.findByNameAndRestaurant(addMenuName, restaurant) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); - return menu; - } - - @Transactional - public void deleteMenu(Menu menu) { - menuRepository.delete(menu); - } + private final MenuRepository menuRepository; + private final MenuCategoryRepository menuCategoryRepository; + private final MenuRatingService menuRatingService; + + private static void validateMenuRestaurant(Restaurant restaurant) { + if (RestaurantType.isVariableType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } + } + + public MenuRestaurantResponse getMenusByRestaurant(Restaurant restaurant) { + validateMenuRestaurant(restaurant); + + List categories = findCategoriesByRestaurant(restaurant); + + MenuRestaurantResponse response = MenuRestaurantResponse.init(); + + for (MenuCategory category : categories) { + List menus = getMenuResponsesByRestaurantAndCategory(restaurant, + category); + response.add(CategoryWithMenusResponse.of(category.getName(), menus)); + } + + return response; + } + + private List findCategoriesByRestaurant(Restaurant restaurant) { + return menuCategoryRepository.findAllByRestaurant(restaurant); + } + + @NotNull + private List getMenuResponsesByRestaurantAndCategory(Restaurant restaurant, + MenuCategory category) { + return menuRepository.findAllByRestaurantAndCategory(restaurant, category) + .stream() + .filter(Menu::isContinued) + .map(menu -> MenuResponse.from(menu, + menuRatingService.getMainRatingAverage(menu.getId()))) + .toList(); + } + + @Transactional + public Menu createOrGetMenu(String menuName, Restaurant restaurant) { + return menuRepository.existsByNameAndRestaurant(menuName, restaurant) ? + findMenu(menuName, restaurant) : + menuRepository.save(Menu.createVariable(menuName, restaurant)); + } + + private Menu findMenu(String addMenuName, Restaurant restaurant) { + Menu menu = menuRepository.findByNameAndRestaurant(addMenuName, restaurant) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + return menu; + } + + @Transactional + public void deleteMenu(Menu menu) { + menuRepository.delete(menu); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java b/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java index 4ae7078c..0957f798 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java @@ -2,35 +2,38 @@ import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; + import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Repository; + import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; @Repository @RequiredArgsConstructor public class QuerydslMenuRatingCountProvider { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - private final QReview review = QReview.review; - - public Integer getReviewCountByStar(Long menuId, Integer star) { - return queryFactory - .select(review.count()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId), - reviewStarIs(star) - ) - .fetchOne().intValue(); - } - - private BooleanExpression reviewStarIs(Integer star) { - return review.ratings.mainRating.eq(star); - } - - private BooleanExpression menuIdEq(Long menuId) { - return menu.id.eq(menuId); - } + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QReview review = QReview.review; + + public Integer getReviewCountByStar(Long menuId, Integer star) { + return queryFactory + .select(review.count()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId), + reviewStarIs(star) + ) + .fetchOne().intValue(); + } + + private BooleanExpression reviewStarIs(Integer star) { + return review.ratings.mainRating.eq(star); + } + + private BooleanExpression menuIdEq(Long menuId) { + return menu.id.eq(menuId); + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java index 29f50394..0b43c95a 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java @@ -13,37 +13,37 @@ @Getter @AllArgsConstructor public class CreatePartnershipRequest { - @Schema(description = "제휴 가게 이름", example = "먹돼지") - private String storeName; - @Schema(description = "제휴 종류(DRINK, DISCOUNT, SIDE, OTHER)", example = "DISCOUNT") - private PartnershipType partnershipType; - @Schema(description = "제휴 타겟 종류(college or department)", example = "college") - private String targetType; // college or department - @Schema(description = "제휴 타겟", example = "IT대") - private String targetName; - @Schema(description = "제휴 내용", example = "IT대 학생증은 10% 할인") - private String description; - @Schema(description = "제휴 시작 날짜", example = "2025-03-01") - private LocalDate startDate; - @Schema(description = "제휴 종료 날짜", example = "2025-07-30") - private LocalDate endDate; - @Schema(description = "제휴 가게 종류(RESTAURANT, CAFE)", example = "RESTAURANT") - private RestaurantType restaurantType; - @Schema(description = "경도(x축)", example = "126.9566592") - private Double longitude; - @Schema(description = "위도(y축)", example = "37.4949404") - private Double latitude; + @Schema(description = "제휴 가게 이름", example = "먹돼지") + private String storeName; + @Schema(description = "제휴 종류(DRINK, DISCOUNT, SIDE, OTHER)", example = "DISCOUNT") + private PartnershipType partnershipType; + @Schema(description = "제휴 타겟 종류(college or department)", example = "college") + private String targetType; // college or department + @Schema(description = "제휴 타겟", example = "IT대") + private String targetName; + @Schema(description = "제휴 내용", example = "IT대 학생증은 10% 할인") + private String description; + @Schema(description = "제휴 시작 날짜", example = "2025-03-01") + private LocalDate startDate; + @Schema(description = "제휴 종료 날짜", example = "2025-07-30") + private LocalDate endDate; + @Schema(description = "제휴 가게 종류(RESTAURANT, CAFE)", example = "RESTAURANT") + private RestaurantType restaurantType; + @Schema(description = "경도(x축)", example = "126.9566592") + private Double longitude; + @Schema(description = "위도(y축)", example = "37.4949404") + private Double latitude; - public Partnership toPartnershipEntity() { - return Partnership.builder() - .partnershipType(partnershipType) - .storeName(storeName) - .description(description) - .startDate(startDate) - .endDate(endDate) - .restaurantType(restaurantType) - .longitude(longitude) - .latitude(latitude) - .build(); - } + public Partnership toPartnershipEntity() { + return Partnership.builder() + .partnershipType(partnershipType) + .storeName(storeName) + .description(description) + .startDate(startDate) + .endDate(endDate) + .restaurantType(restaurantType) + .longitude(longitude) + .latitude(latitude) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java index 66fa24cf..eab08ac8 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java @@ -13,42 +13,42 @@ @Getter @AllArgsConstructor public class PartnershipDetailResponse { - private Long id; - private PartnershipType partnershipType; - private String storeName; - private String description; - private LocalDate startDate; - private LocalDate endDate; - private RestaurantType restaurantType; - private Double longitude; - private Double latitude; - private List collegeNames; - private List departmentNames; - private int partnershipLikeCount; - private boolean likedByUser; + private Long id; + private PartnershipType partnershipType; + private String storeName; + private String description; + private LocalDate startDate; + private LocalDate endDate; + private RestaurantType restaurantType; + private Double longitude; + private Double latitude; + private List collegeNames; + private List departmentNames; + private int partnershipLikeCount; + private boolean likedByUser; - public static PartnershipDetailResponse fromEntity(Partnership partnership, boolean likedByUser) { - List collegeNames = partnership.getPartnershipColleges().stream() - .map(pc -> pc.getCollege().getName()) - .collect(Collectors.toList()); - List departmentNames = partnership.getPartnershipDepartments().stream() - .map(pc -> pc.getDepartment().getName()) - .collect(Collectors.toList()); + public static PartnershipDetailResponse fromEntity(Partnership partnership, boolean likedByUser) { + List collegeNames = partnership.getPartnershipColleges().stream() + .map(pc -> pc.getCollege().getName()) + .collect(Collectors.toList()); + List departmentNames = partnership.getPartnershipDepartments().stream() + .map(pc -> pc.getDepartment().getName()) + .collect(Collectors.toList()); - return new PartnershipDetailResponse( - partnership.getId(), - partnership.getPartnershipType(), - partnership.getStoreName(), - partnership.getDescription(), - partnership.getStartDate(), - partnership.getEndDate(), - partnership.getRestaurantType(), - partnership.getLongitude(), - partnership.getLatitude(), - collegeNames, - departmentNames, - partnership.getLikes().size(), - likedByUser - ); - } + return new PartnershipDetailResponse( + partnership.getId(), + partnership.getPartnershipType(), + partnership.getStoreName(), + partnership.getDescription(), + partnership.getStartDate(), + partnership.getEndDate(), + partnership.getRestaurantType(), + partnership.getLongitude(), + partnership.getLatitude(), + collegeNames, + departmentNames, + partnership.getLikes().size(), + likedByUser + ); + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java index c2b2975c..d97c6bff 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java @@ -13,38 +13,38 @@ @Getter @AllArgsConstructor public class PartnershipResponse { - private Long id; - private PartnershipType partnershipType; - private String storeName; - private String description; - private LocalDate startDate; - private LocalDate endDate; - private RestaurantType restaurantType; - private Double longitude; - private Double latitude; - private List collegeNames; - private List departmentNames; + private Long id; + private PartnershipType partnershipType; + private String storeName; + private String description; + private LocalDate startDate; + private LocalDate endDate; + private RestaurantType restaurantType; + private Double longitude; + private Double latitude; + private List collegeNames; + private List departmentNames; - public static PartnershipResponse fromEntity(Partnership partnership) { - List collegeNames = partnership.getPartnershipColleges().stream() - .map(pc -> pc.getCollege().getName()) - .collect(Collectors.toList()); - List departmentNames = partnership.getPartnershipDepartments().stream() - .map(pc -> pc.getDepartment().getName()) - .collect(Collectors.toList()); + public static PartnershipResponse fromEntity(Partnership partnership) { + List collegeNames = partnership.getPartnershipColleges().stream() + .map(pc -> pc.getCollege().getName()) + .collect(Collectors.toList()); + List departmentNames = partnership.getPartnershipDepartments().stream() + .map(pc -> pc.getDepartment().getName()) + .collect(Collectors.toList()); - return new PartnershipResponse( - partnership.getId(), - partnership.getPartnershipType(), - partnership.getStoreName(), - partnership.getDescription(), - partnership.getStartDate(), - partnership.getEndDate(), - partnership.getRestaurantType(), - partnership.getLongitude(), - partnership.getLatitude(), - collegeNames, - departmentNames - ); - } + return new PartnershipResponse( + partnership.getId(), + partnership.getPartnershipType(), + partnership.getStoreName(), + partnership.getDescription(), + partnership.getStartDate(), + partnership.getEndDate(), + partnership.getRestaurantType(), + partnership.getLongitude(), + partnership.getLatitude(), + collegeNames, + departmentNames + ); + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java index 8f8927f1..b489c330 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java @@ -2,6 +2,7 @@ import jakarta.persistence.*; import lombok.*; + import org.hibernate.annotations.Where; import java.time.LocalDate; @@ -15,46 +16,46 @@ @AllArgsConstructor @Where(clause = "end_date >= CURRENT_DATE") public class Partnership { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "partnership_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "partnership_id") + private Long id; - @Enumerated(EnumType.STRING) - @Column(name = "partnership_type", nullable = false) - private PartnershipType partnershipType; + @Enumerated(EnumType.STRING) + @Column(name = "partnership_type", nullable = false) + private PartnershipType partnershipType; - @Column(name = "store_name", nullable = false) - private String storeName; + @Column(name = "store_name", nullable = false) + private String storeName; - @Column(name = "description", nullable = false) - private String description; + @Column(name = "description", nullable = false) + private String description; - @Column(name = "start_date", nullable = false) - private LocalDate startDate; + @Column(name = "start_date", nullable = false) + private LocalDate startDate; - @Column(name = "end_date", nullable = false) - private LocalDate endDate; + @Column(name = "end_date", nullable = false) + private LocalDate endDate; - @Enumerated(EnumType.STRING) - @Column(name = "restaurant_type", nullable = false) - private RestaurantType restaurantType; + @Enumerated(EnumType.STRING) + @Column(name = "restaurant_type", nullable = false) + private RestaurantType restaurantType; - @Column(name = "longitude", nullable = false) - private Double longitude; // 경도 == x축 + @Column(name = "longitude", nullable = false) + private Double longitude; // 경도 == x축 - @Column(name = "latitude", nullable = false) - private Double latitude; // 위도 == y축 + @Column(name = "latitude", nullable = false) + private Double latitude; // 위도 == y축 - @Builder.Default - @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) - private List partnershipColleges = new ArrayList<>(); + @Builder.Default + @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) + private List partnershipColleges = new ArrayList<>(); - @Builder.Default - @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) - private List partnershipDepartments = new ArrayList<>(); + @Builder.Default + @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) + private List partnershipDepartments = new ArrayList<>(); - @Builder.Default - @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) - private List likes = new ArrayList<>(); + @Builder.Default + @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) + private List likes = new ArrayList<>(); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java index 0591bc45..10151e77 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java @@ -10,21 +10,21 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class PartnershipCollege { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "partnership_college_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "partnership_college_id") + private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "partnership_id") - private Partnership partnership; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "partnership_id") + private Partnership partnership; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "college_id") - private College college; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "college_id") + private College college; - public PartnershipCollege(Partnership partnership, College college) { - this.partnership = partnership; - this.college = college; - } + public PartnershipCollege(Partnership partnership, College college) { + this.partnership = partnership; + this.college = college; + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java index 5ff0b221..38c1ccd9 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java @@ -10,21 +10,21 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class PartnershipDepartment { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "partnership_college_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "partnership_college_id") + private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "partnership_id") - private Partnership partnership; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "partnership_id") + private Partnership partnership; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "department_id") - private Department department; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "department_id") + private Department department; - public PartnershipDepartment(Partnership partnership, Department department) { - this.partnership = partnership; - this.department = department; - } + public PartnershipDepartment(Partnership partnership, Department department) { + this.partnership = partnership; + this.department = department; + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java index 1bdc1c1b..e995bcec 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java @@ -10,21 +10,21 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class PartnershipLike { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "partnership_like_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "partnership_like_id") + private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") - private User user; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "partnership_id") - private Partnership partnership; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "partnership_id") + private Partnership partnership; - public PartnershipLike(User user, Partnership partnership) { - this.user = user; - this.partnership = partnership; - } + public PartnershipLike(User user, Partnership partnership) { + this.user = user; + this.partnership = partnership; + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java index 9d91ab0e..fdf72878 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java @@ -4,14 +4,14 @@ @Getter public enum PartnershipType { - DRINK("음료"), - DISCOUNT("할인"), - SIDE("사이드"), - OTHER("기타"); + DRINK("음료"), + DISCOUNT("할인"), + SIDE("사이드"), + OTHER("기타"); - private final String type; + private final String type; - PartnershipType(String type) { - this.type = type; - } + PartnershipType(String type) { + this.type = type; + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java index d849580c..0de32722 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java @@ -1,12 +1,12 @@ package ssu.eatssu.domain.partnership.entity; public enum RestaurantType { - RESTAURANT("음식점"), - CAFE("카페"); + RESTAURANT("음식점"), + CAFE("카페"); - private final String type; + private final String type; - RestaurantType(String type) { - this.type = type; - } + RestaurantType(String type) { + this.type = type; + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java index 041de913..f8e0a367 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.partnership.persistence; import org.springframework.data.jpa.repository.JpaRepository; + import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipLike; import ssu.eatssu.domain.user.entity.User; @@ -9,7 +10,7 @@ import java.util.Optional; public interface PartnershipLikeRepository extends JpaRepository { - Optional findByUserAndPartnership(User user, Partnership partnership); + Optional findByUserAndPartnership(User user, Partnership partnership); - List findAllByUser(User user); + List findAllByUser(User user); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java index 120c7a24..f2daac97 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java @@ -3,6 +3,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; + import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.user.department.entity.College; import ssu.eatssu.domain.user.department.entity.Department; @@ -10,12 +11,12 @@ import java.util.List; public interface PartnershipRepository extends JpaRepository { - @Query("SELECT DISTINCT p FROM Partnership p " + - "LEFT JOIN p.partnershipColleges pc " + - "LEFT JOIN pc.college c " + - "LEFT JOIN p.partnershipDepartments pd " + - "LEFT JOIN pd.department d " + - "WHERE (c = :college OR d = :department OR (c IS NOT NULL AND c.name = '총학'))") - List findRelevantPartnerships(@Param("college") College college, - @Param("department") Department department); + @Query("SELECT DISTINCT p FROM Partnership p " + + "LEFT JOIN p.partnershipColleges pc " + + "LEFT JOIN pc.college c " + + "LEFT JOIN p.partnershipDepartments pd " + + "LEFT JOIN pd.department d " + + "WHERE (c = :college OR d = :department OR (c IS NOT NULL AND c.name = '총학'))") + List findRelevantPartnerships(@Param("college") College college, + @Param("department") Department department); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java index 699c989e..f2da4f79 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java +++ b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java @@ -7,8 +7,10 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; + import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; + import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.CreatePartnershipRequest; import ssu.eatssu.domain.partnership.dto.PartnershipDetailResponse; @@ -23,57 +25,57 @@ @RequiredArgsConstructor @Tag(name = "Partnership", description = "제휴 API") public class PartnershipController { - private final PartnershipService partnershipService; + private final PartnershipService partnershipService; - @Operation(summary = "제휴 등록", description = "제휴를 등록하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "제휴 등록 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 대학", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 학과", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @PostMapping - public BaseResponse createPartnership(@RequestBody CreatePartnershipRequest request) { - partnershipService.createPartnership(request); - return BaseResponse.success(); - } + @Operation(summary = "제휴 등록", description = "제휴를 등록하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "제휴 등록 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 대학", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 학과", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @PostMapping + public BaseResponse createPartnership(@RequestBody CreatePartnershipRequest request) { + partnershipService.createPartnership(request); + return BaseResponse.success(); + } - @Operation(summary = "전체 제휴 조회", description = "전체 제휴를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "제휴 조회 성공"), - }) - @GetMapping - public BaseResponse> getAllPartnerships() { - return BaseResponse.success(partnershipService.getAllPartnerships()); - } + @Operation(summary = "전체 제휴 조회", description = "전체 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "제휴 조회 성공"), + }) + @GetMapping + public BaseResponse> getAllPartnerships() { + return BaseResponse.success(partnershipService.getAllPartnerships()); + } - @Operation(summary = "개별 제휴 조회", description = "개별 제휴를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "제휴 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 제휴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/{partnershipId}") - public BaseResponse getPartnership( - @PathVariable Long partnershipId, - @AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(partnershipService.getPartnership(partnershipId, userDetails)); - } + @Operation(summary = "개별 제휴 조회", description = "개별 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "제휴 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 제휴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + @GetMapping("/{partnershipId}") + public BaseResponse getPartnership( + @PathVariable Long partnershipId, + @AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(partnershipService.getPartnership(partnershipId, userDetails)); + } - @Operation(summary = "제휴 찜 등록하기/취소하기", description = "제휴 찜 등록하기/취소하기(토글) API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "제휴 찜 등록/취소 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 제휴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - }) - @PostMapping("/{partnershipId}/like") - public BaseResponse togglePartnershipLike( - @PathVariable Long partnershipId, - @AuthenticationPrincipal CustomUserDetails userDetails) { - partnershipService.togglePartnershipLike(partnershipId, userDetails); - return BaseResponse.success(); - } + @Operation(summary = "제휴 찜 등록하기/취소하기", description = "제휴 찜 등록하기/취소하기(토글) API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "제휴 찜 등록/취소 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 제휴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + @PostMapping("/{partnershipId}/like") + public BaseResponse togglePartnershipLike( + @PathVariable Long partnershipId, + @AuthenticationPrincipal CustomUserDetails userDetails) { + partnershipService.togglePartnershipLike(partnershipId, userDetails); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java index 1e666e63..31fb53cf 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -1,8 +1,10 @@ package ssu.eatssu.domain.partnership.service; import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.CreatePartnershipRequest; import ssu.eatssu.domain.partnership.dto.PartnershipDetailResponse; @@ -30,97 +32,98 @@ @Service @RequiredArgsConstructor public class PartnershipService { - private final PartnershipRepository partnershipRepository; - private final CollegeRepository collegeRepository; - private final DepartmentRepository departmentRepository; - private final UserRepository userRepository; - private final PartnershipLikeRepository partnershipLikeRepository; - - @Transactional - public void createPartnership(CreatePartnershipRequest request) { - Partnership partnership = request.toPartnershipEntity(); - - if ("college".equalsIgnoreCase(request.getTargetType())) { - College college = collegeRepository.findByName(request.getTargetName()) - .orElseThrow(() -> new BaseException(NOT_FOUND_COLLEGE)); - PartnershipCollege partnershipCollege = new PartnershipCollege(partnership, college); - partnership.getPartnershipColleges().add(partnershipCollege); - } else if ("department".equalsIgnoreCase(request.getTargetType())) { - Department department = departmentRepository.findByName(request.getTargetName()) - .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); - PartnershipDepartment partnershipDepartment = new PartnershipDepartment(partnership, department); - partnership.getPartnershipDepartments().add(partnershipDepartment); - } else { - throw new BaseException(INVALID_TARGET_TYPE); - } - partnershipRepository.save(partnership); - } - - public List getAllPartnerships() { - List partnerships = partnershipRepository.findAll(); - return partnerships.stream().map(PartnershipResponse::fromEntity) - .collect(Collectors.toList()); - } - - public PartnershipDetailResponse getPartnership(Long partnershipId, CustomUserDetails userDetails) { - Partnership partnership = partnershipRepository.findById(partnershipId) - .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); - - boolean likedByUser = false; - if (userDetails != null) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - likedByUser = partnershipLikeRepository.findByUserAndPartnership(user, partnership).isPresent(); - } - - return PartnershipDetailResponse.fromEntity(partnership, likedByUser); - } - - @Transactional - public void togglePartnershipLike(Long partnershipId, CustomUserDetails userDetails) { - Partnership partnership = partnershipRepository.findById(partnershipId) - .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Optional optionalPartnershipLike = partnershipLikeRepository.findByUserAndPartnership(user, partnership); - if (optionalPartnershipLike.isPresent()) { - PartnershipLike partnershipLike = optionalPartnershipLike.get(); - partnership.getLikes().remove(partnershipLike); - partnershipLikeRepository.delete(partnershipLike); - } else { - PartnershipLike partnershipLike = new PartnershipLike(user, partnership); - partnership.getLikes().add(partnershipLike); - partnershipLikeRepository.save(partnershipLike); - } - } - - public List getUserLikedPartnerships(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - List likes = partnershipLikeRepository.findAllByUser(user); - return likes - .stream() - .map(PartnershipLike::getPartnership) - .map(PartnershipResponse::fromEntity) - .collect(Collectors.toList()); - } - - public List getUserDepartmentPartnerships(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Department department = user.getDepartment(); - if (department == null) { - throw new BaseException(MISSING_USER_DEPARTMENT); - } - College college = department.getCollege(); - - return partnershipRepository - .findRelevantPartnerships(college, department) - .stream() - .map(PartnershipResponse::fromEntity) - .collect(Collectors.toList()); - } + private final PartnershipRepository partnershipRepository; + private final CollegeRepository collegeRepository; + private final DepartmentRepository departmentRepository; + private final UserRepository userRepository; + private final PartnershipLikeRepository partnershipLikeRepository; + + @Transactional + public void createPartnership(CreatePartnershipRequest request) { + Partnership partnership = request.toPartnershipEntity(); + + if ("college".equalsIgnoreCase(request.getTargetType())) { + College college = collegeRepository.findByName(request.getTargetName()) + .orElseThrow(() -> new BaseException(NOT_FOUND_COLLEGE)); + PartnershipCollege partnershipCollege = new PartnershipCollege(partnership, college); + partnership.getPartnershipColleges().add(partnershipCollege); + } else if ("department".equalsIgnoreCase(request.getTargetType())) { + Department department = departmentRepository.findByName(request.getTargetName()) + .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); + PartnershipDepartment partnershipDepartment = new PartnershipDepartment(partnership, department); + partnership.getPartnershipDepartments().add(partnershipDepartment); + } else { + throw new BaseException(INVALID_TARGET_TYPE); + } + partnershipRepository.save(partnership); + } + + public List getAllPartnerships() { + List partnerships = partnershipRepository.findAll(); + return partnerships.stream().map(PartnershipResponse::fromEntity) + .collect(Collectors.toList()); + } + + public PartnershipDetailResponse getPartnership(Long partnershipId, CustomUserDetails userDetails) { + Partnership partnership = partnershipRepository.findById(partnershipId) + .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); + + boolean likedByUser = false; + if (userDetails != null) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + likedByUser = partnershipLikeRepository.findByUserAndPartnership(user, partnership).isPresent(); + } + + return PartnershipDetailResponse.fromEntity(partnership, likedByUser); + } + + @Transactional + public void togglePartnershipLike(Long partnershipId, CustomUserDetails userDetails) { + Partnership partnership = partnershipRepository.findById(partnershipId) + .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Optional optionalPartnershipLike = partnershipLikeRepository.findByUserAndPartnership(user, + partnership); + if (optionalPartnershipLike.isPresent()) { + PartnershipLike partnershipLike = optionalPartnershipLike.get(); + partnership.getLikes().remove(partnershipLike); + partnershipLikeRepository.delete(partnershipLike); + } else { + PartnershipLike partnershipLike = new PartnershipLike(user, partnership); + partnership.getLikes().add(partnershipLike); + partnershipLikeRepository.save(partnershipLike); + } + } + + public List getUserLikedPartnerships(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + List likes = partnershipLikeRepository.findAllByUser(user); + return likes + .stream() + .map(PartnershipLike::getPartnership) + .map(PartnershipResponse::fromEntity) + .collect(Collectors.toList()); + } + + public List getUserDepartmentPartnerships(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Department department = user.getDepartment(); + if (department == null) { + throw new BaseException(MISSING_USER_DEPARTMENT); + } + College college = department.getCollege(); + + return partnershipRepository + .findRelevantPartnerships(college, department) + .stream() + .map(PartnershipResponse::fromEntity) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java index 735acc97..e3060aee 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java @@ -11,125 +11,125 @@ */ public class JpaLoadCollectionRatingCalculator implements RatingCalculator { - // 식단에 포함된 메뉴들의 평점 별 리뷰 개수 계산 - public ReviewRatingCount mealRatingCount(Meal meal) { - ReviewRating.resetAll(); - - meal.getMealMenus().forEach(mealMenu -> mealMenu.getMenu().getReviews().calculateReviewRatings()); - - return ReviewRating.toResponse(); - } - - // 각 메뉴의 평점 별 개수 계산 - public ReviewRatingCount menuRatingCount(Menu menu) { - ReviewRating.resetAll(); - - menu.getReviews().calculateReviewRatings(); - - return ReviewRating.toResponse(); - } - - // 식단 평균 평점 세트 계산 - public RatingAverages mealAverageRatings(Meal meal) { - long totalReviewCount = mealTotalReviewCount(meal); - - if (totalReviewCount == 0) - return new RatingAverages(null, null, null); - - return RatingAverages.builder() - .mainRating(averageRating(mealTotalMainRating(meal), totalReviewCount)) - .amountRating(averageRating(mealTotalAmountRating(meal), totalReviewCount)) - .tasteRating(averageRating(mealTotalTasteRating(meal), totalReviewCount)) - .build(); - } - - // 메뉴 평균 평점 세트 계산 - public RatingAverages menuAverageRatings(Menu menu) { - int totalReviewCount = menu.getTotalReviewCount(); - - if (totalReviewCount == 0) { - return new RatingAverages(null, null, null); - } - - return RatingAverages.builder() - .mainRating(averageRating(menuTotalMainRating(menu), totalReviewCount)) - .amountRating(averageRating(menuTotalAmountRating(menu), totalReviewCount)) - .tasteRating(averageRating(menuTotalTasteRating(menu), totalReviewCount)) - .build(); - } - - // 식단 메인 평점 평균 계산 - public Double mealAverageMainRating(Meal meal) { - long totalReviewCount = mealTotalReviewCount(meal); - - if (totalReviewCount == 0) { - return null; - } - - return averageRating(mealTotalMainRating(meal), totalReviewCount); - } - - // 메뉴 메인 평점 평균 계산 - public Double menuAverageMainRating(Menu menu) { - if (menu.getReviews().size() == 0) { - return null; - } - - return averageRating(menuTotalMainRating(menu), menu.getReviews().size()); - } - - // 식단 총 리뷰 개수 - public long mealTotalReviewCount(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .mapToLong(menu -> menu.getReviews().size()).sum(); - } - - // 평균 평점 계산 - public Double averageRating(Integer totalRating, long totalReviewCount) { - if (totalRating == null || totalReviewCount == 0) { - return null; - } - return totalRating / (double) totalReviewCount; - } - - // 식단 메인 평점 총합 - public Integer mealTotalMainRating(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(menu -> menu.getReviews().getTotalMainRating()) - .reduce(null, this::sum); - } - - // 식단 양 평점 총합 - public Integer mealTotalAmountRating(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(menu -> menu.getReviews().getTotalAmountRating()) - .reduce(null, this::sum); - } - - // 식단 맛 평점 총합 - public Integer mealTotalTasteRating(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(menu -> menu.getReviews().getTotalTasteRating()) - .reduce(null, this::sum); - } - - // 메뉴 메인 평점 총합 - public Integer menuTotalMainRating(Menu menu) { - return menu.getReviews().getTotalMainRating(); - } - - // 메뉴 양 평점 총합 - public Integer menuTotalAmountRating(Menu menu) { - return menu.getReviews().getTotalAmountRating(); - } - - // 메뉴 맛 평점 총합 - public Integer menuTotalTasteRating(Menu menu) { - return menu.getReviews().getTotalTasteRating(); - } + // 식단에 포함된 메뉴들의 평점 별 리뷰 개수 계산 + public ReviewRatingCount mealRatingCount(Meal meal) { + ReviewRating.resetAll(); + + meal.getMealMenus().forEach(mealMenu -> mealMenu.getMenu().getReviews().calculateReviewRatings()); + + return ReviewRating.toResponse(); + } + + // 각 메뉴의 평점 별 개수 계산 + public ReviewRatingCount menuRatingCount(Menu menu) { + ReviewRating.resetAll(); + + menu.getReviews().calculateReviewRatings(); + + return ReviewRating.toResponse(); + } + + // 식단 평균 평점 세트 계산 + public RatingAverages mealAverageRatings(Meal meal) { + long totalReviewCount = mealTotalReviewCount(meal); + + if (totalReviewCount == 0) + return new RatingAverages(null, null, null); + + return RatingAverages.builder() + .mainRating(averageRating(mealTotalMainRating(meal), totalReviewCount)) + .amountRating(averageRating(mealTotalAmountRating(meal), totalReviewCount)) + .tasteRating(averageRating(mealTotalTasteRating(meal), totalReviewCount)) + .build(); + } + + // 메뉴 평균 평점 세트 계산 + public RatingAverages menuAverageRatings(Menu menu) { + int totalReviewCount = menu.getTotalReviewCount(); + + if (totalReviewCount == 0) { + return new RatingAverages(null, null, null); + } + + return RatingAverages.builder() + .mainRating(averageRating(menuTotalMainRating(menu), totalReviewCount)) + .amountRating(averageRating(menuTotalAmountRating(menu), totalReviewCount)) + .tasteRating(averageRating(menuTotalTasteRating(menu), totalReviewCount)) + .build(); + } + + // 식단 메인 평점 평균 계산 + public Double mealAverageMainRating(Meal meal) { + long totalReviewCount = mealTotalReviewCount(meal); + + if (totalReviewCount == 0) { + return null; + } + + return averageRating(mealTotalMainRating(meal), totalReviewCount); + } + + // 메뉴 메인 평점 평균 계산 + public Double menuAverageMainRating(Menu menu) { + if (menu.getReviews().size() == 0) { + return null; + } + + return averageRating(menuTotalMainRating(menu), menu.getReviews().size()); + } + + // 식단 총 리뷰 개수 + public long mealTotalReviewCount(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .mapToLong(menu -> menu.getReviews().size()).sum(); + } + + // 평균 평점 계산 + public Double averageRating(Integer totalRating, long totalReviewCount) { + if (totalRating == null || totalReviewCount == 0) { + return null; + } + return totalRating / (double)totalReviewCount; + } + + // 식단 메인 평점 총합 + public Integer mealTotalMainRating(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(menu -> menu.getReviews().getTotalMainRating()) + .reduce(null, this::sum); + } + + // 식단 양 평점 총합 + public Integer mealTotalAmountRating(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(menu -> menu.getReviews().getTotalAmountRating()) + .reduce(null, this::sum); + } + + // 식단 맛 평점 총합 + public Integer mealTotalTasteRating(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(menu -> menu.getReviews().getTotalTasteRating()) + .reduce(null, this::sum); + } + + // 메뉴 메인 평점 총합 + public Integer menuTotalMainRating(Menu menu) { + return menu.getReviews().getTotalMainRating(); + } + + // 메뉴 양 평점 총합 + public Integer menuTotalAmountRating(Menu menu) { + return menu.getReviews().getTotalAmountRating(); + } + + // 메뉴 맛 평점 총합 + public Integer menuTotalTasteRating(Menu menu) { + return menu.getReviews().getTotalTasteRating(); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java index 0b8fc9c1..63f32632 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java @@ -20,78 +20,78 @@ @RequiredArgsConstructor public class JpaProjectionRatingCalculator implements RatingCalculator { - private final ReviewRepository reviewRepository; - - @Override - public ReviewRatingCount mealRatingCount(Meal meal) { - ReviewRating.resetAll(); - - Collection mealRatings = reviewRepository.findByMenu_MealMenus_Meal(meal, RatingsDto.class); - mealRatings.forEach(ratings -> ReviewRating.fromValue(ratings.getMainRating()).incrementCount()); - - return ReviewRating.toResponse(); - } - - @Override - public ReviewRatingCount menuRatingCount(Menu menu) { - return null; - } - - @Override - public RatingAverages mealAverageRatings(Meal meal) { - long totalReviewCount = mealTotalReviewCount(meal); - - if (totalReviewCount == 0) - return new RatingAverages(null, null, null); - - Collection mealRatings = reviewRepository.findByMenu_MealMenus_Meal(meal, RatingsDto.class); - - Integer totalMainRating = mealRatings.stream().mapToInt(RatingsDto::getMainRating).sum(); - Integer totalTasteRating = mealRatings.stream().mapToInt(RatingsDto::getTasteRating).sum(); - Integer totalAmountRating = mealRatings.stream().mapToInt(RatingsDto::getAmountRating).sum(); - - return RatingAverages.builder() - .mainRating(averageRating(totalMainRating, totalReviewCount)) - .tasteRating(averageRating(totalTasteRating, totalReviewCount)) - .amountRating(averageRating(totalAmountRating, totalReviewCount)) - .build(); - } - - @Override - public RatingAverages menuAverageRatings(Menu menu) { - return null; - } - - @Override - public Double mealAverageMainRating(Meal meal) { - long totalReviewCount = mealTotalReviewCount(meal); - - if (totalReviewCount == 0) { - return null; - } - - return averageRating(mealTotalMainRating(meal), totalReviewCount); - } - - @Override - public Double menuAverageMainRating(Menu menu) { - return null; - } - - @Override - public long mealTotalReviewCount(Meal meal) { - return reviewRepository.countByMenu_MealMenus_Meal(meal); - } - - public Double averageRating(Integer totalRating, long totalReviewCount) { - if (totalRating == null || totalReviewCount == 0) { - return null; - } - return totalRating / (double) totalReviewCount; - } - - public Integer mealTotalMainRating(Meal meal) { - return null; - } + private final ReviewRepository reviewRepository; + + @Override + public ReviewRatingCount mealRatingCount(Meal meal) { + ReviewRating.resetAll(); + + Collection mealRatings = reviewRepository.findByMenu_MealMenus_Meal(meal, RatingsDto.class); + mealRatings.forEach(ratings -> ReviewRating.fromValue(ratings.getMainRating()).incrementCount()); + + return ReviewRating.toResponse(); + } + + @Override + public ReviewRatingCount menuRatingCount(Menu menu) { + return null; + } + + @Override + public RatingAverages mealAverageRatings(Meal meal) { + long totalReviewCount = mealTotalReviewCount(meal); + + if (totalReviewCount == 0) + return new RatingAverages(null, null, null); + + Collection mealRatings = reviewRepository.findByMenu_MealMenus_Meal(meal, RatingsDto.class); + + Integer totalMainRating = mealRatings.stream().mapToInt(RatingsDto::getMainRating).sum(); + Integer totalTasteRating = mealRatings.stream().mapToInt(RatingsDto::getTasteRating).sum(); + Integer totalAmountRating = mealRatings.stream().mapToInt(RatingsDto::getAmountRating).sum(); + + return RatingAverages.builder() + .mainRating(averageRating(totalMainRating, totalReviewCount)) + .tasteRating(averageRating(totalTasteRating, totalReviewCount)) + .amountRating(averageRating(totalAmountRating, totalReviewCount)) + .build(); + } + + @Override + public RatingAverages menuAverageRatings(Menu menu) { + return null; + } + + @Override + public Double mealAverageMainRating(Meal meal) { + long totalReviewCount = mealTotalReviewCount(meal); + + if (totalReviewCount == 0) { + return null; + } + + return averageRating(mealTotalMainRating(meal), totalReviewCount); + } + + @Override + public Double menuAverageMainRating(Menu menu) { + return null; + } + + @Override + public long mealTotalReviewCount(Meal meal) { + return reviewRepository.countByMenu_MealMenus_Meal(meal); + } + + public Double averageRating(Integer totalRating, long totalReviewCount) { + if (totalRating == null || totalReviewCount == 0) { + return null; + } + return totalRating / (double)totalReviewCount; + } + + public Integer mealTotalMainRating(Meal meal) { + return null; + } } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java index 34261802..e2ed40e7 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java @@ -7,35 +7,37 @@ public interface RatingCalculator { - // 식단에 포함된 메뉴들의 평점 별 리뷰 개수 계산 - ReviewRatingCount mealRatingCount(Meal meal); - - // 각 메뉴의 평점 별 개수 계산 - ReviewRatingCount menuRatingCount(Menu menu); - - // 식단 평균 평점 세트 계산 - RatingAverages mealAverageRatings(Meal meal); - - // 메뉴 평균 평점 세트 계산 - RatingAverages menuAverageRatings(Menu menu); - - // 식단 메인 평점 평균 계산 - Double mealAverageMainRating(Meal meal); - - // 메뉴 메인 평점 평균 계산 - Double menuAverageMainRating(Menu menu); - - // 식단 총 리뷰 개수 - long mealTotalReviewCount(Meal meal); - - /** - * 리뷰 평접 총합 계산용 - * nullable 의 합 계산을 위한 메소드입니다. - */ - default Integer sum(Integer a, Integer b) { - if (a == null) return b; - if (b == null) return a; - return a + b; - } + // 식단에 포함된 메뉴들의 평점 별 리뷰 개수 계산 + ReviewRatingCount mealRatingCount(Meal meal); + + // 각 메뉴의 평점 별 개수 계산 + ReviewRatingCount menuRatingCount(Menu menu); + + // 식단 평균 평점 세트 계산 + RatingAverages mealAverageRatings(Meal meal); + + // 메뉴 평균 평점 세트 계산 + RatingAverages menuAverageRatings(Menu menu); + + // 식단 메인 평점 평균 계산 + Double mealAverageMainRating(Meal meal); + + // 메뉴 메인 평점 평균 계산 + Double menuAverageMainRating(Menu menu); + + // 식단 총 리뷰 개수 + long mealTotalReviewCount(Meal meal); + + /** + * 리뷰 평접 총합 계산용 + * nullable 의 합 계산을 위한 메소드입니다. + */ + default Integer sum(Integer a, Integer b) { + if (a == null) + return b; + if (b == null) + return a; + return a + b; + } } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java index e39bca62..06fe244e 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java @@ -5,31 +5,31 @@ public class RatingCountMap { - private Map ratingCountMap; - - public RatingCountMap() { - this.ratingCountMap = new HashMap<>(); - this.init(); - - } - - private void init() { - this.ratingCountMap.put(1, 0); - this.ratingCountMap.put(2, 0); - this.ratingCountMap.put(3, 0); - this.ratingCountMap.put(4, 0); - this.ratingCountMap.put(5, 0); - } - - public void setRatingCount(Integer rating, Integer count) { - this.ratingCountMap.put(rating, count); - } - - public void merge(RatingCountMap map) { - for (Map.Entry entry : map.ratingCountMap.entrySet()) { - Integer currentCount = this.ratingCountMap.getOrDefault(entry.getKey(), 0); - Integer newCount = entry.getValue(); - this.ratingCountMap.put(entry.getKey(), currentCount + newCount); - } - } + private Map ratingCountMap; + + public RatingCountMap() { + this.ratingCountMap = new HashMap<>(); + this.init(); + + } + + private void init() { + this.ratingCountMap.put(1, 0); + this.ratingCountMap.put(2, 0); + this.ratingCountMap.put(3, 0); + this.ratingCountMap.put(4, 0); + this.ratingCountMap.put(5, 0); + } + + public void setRatingCount(Integer rating, Integer count) { + this.ratingCountMap.put(rating, count); + } + + public void merge(RatingCountMap map) { + for (Map.Entry entry : map.ratingCountMap.entrySet()) { + Integer currentCount = this.ratingCountMap.getOrDefault(entry.getKey(), 0); + Integer newCount = entry.getValue(); + this.ratingCountMap.put(entry.getKey(), currentCount + newCount); + } + } } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java b/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java index 99bd8253..47e4282f 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java @@ -10,22 +10,22 @@ @Embeddable public class Ratings { - private Integer mainRating; + private Integer mainRating; - private Integer amountRating; + private Integer amountRating; - private Integer tasteRating; + private Integer tasteRating; - private Ratings(Integer mainRating, Integer amountRating, Integer tasteRating) { - Assert.isTrue(mainRating >= 0 && mainRating <= 5, "mainRating must be between 0 and 5"); - Assert.isTrue(amountRating >= 0 && amountRating <= 5, "amountRating must be between 0 and 5"); - Assert.isTrue(tasteRating >= 0 && tasteRating <= 5, "tasteRating must be between 0 and 5"); - this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; - } + private Ratings(Integer mainRating, Integer amountRating, Integer tasteRating) { + Assert.isTrue(mainRating >= 0 && mainRating <= 5, "mainRating must be between 0 and 5"); + Assert.isTrue(amountRating >= 0 && amountRating <= 5, "amountRating must be between 0 and 5"); + Assert.isTrue(tasteRating >= 0 && tasteRating <= 5, "tasteRating must be between 0 and 5"); + this.mainRating = mainRating; + this.amountRating = amountRating; + this.tasteRating = tasteRating; + } - public static Ratings of(Integer mainRating, Integer amountRating, Integer tasteRating) { - return new Ratings(mainRating, amountRating, tasteRating); - } + public static Ratings of(Integer mainRating, Integer amountRating, Integer tasteRating) { + return new Ratings(mainRating, amountRating, tasteRating); + } } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java b/src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java index 611e0074..acc013f0 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java @@ -3,54 +3,54 @@ import ssu.eatssu.domain.review.dto.ReviewRatingCount; public enum ReviewRating { - RATING_ONE(1), - RATING_TWO(2), - RATING_THREE(3), - RATING_FOUR(4), - RATING_FIVE(5); - - private final int value; - private int count; - - ReviewRating(int value) { - this.value = value; - this.count = 0; - } - - public static void resetAll() { - for (ReviewRating RATING : ReviewRating.values()) { - RATING.resetCount(); - } - } - - public static ReviewRating fromValue(int value) { - for (ReviewRating RATING : ReviewRating.values()) { - if (RATING.value == value) { - return RATING; - } - } - throw new IllegalArgumentException("Invalid ratings value: " + value); - } - - public static ReviewRatingCount toResponse() { - return new ReviewRatingCount( - RATING_ONE.getCount(), - RATING_TWO.getCount(), - RATING_THREE.getCount(), - RATING_FOUR.getCount(), - RATING_FIVE.getCount() - ); - } - - public void incrementCount() { - this.count++; - } - - public int getCount() { - return count; - } - - private void resetCount() { - this.count = 0; - } + RATING_ONE(1), + RATING_TWO(2), + RATING_THREE(3), + RATING_FOUR(4), + RATING_FIVE(5); + + private final int value; + private int count; + + ReviewRating(int value) { + this.value = value; + this.count = 0; + } + + public static void resetAll() { + for (ReviewRating RATING : ReviewRating.values()) { + RATING.resetCount(); + } + } + + public static ReviewRating fromValue(int value) { + for (ReviewRating RATING : ReviewRating.values()) { + if (RATING.value == value) { + return RATING; + } + } + throw new IllegalArgumentException("Invalid ratings value: " + value); + } + + public static ReviewRatingCount toResponse() { + return new ReviewRatingCount( + RATING_ONE.getCount(), + RATING_TWO.getCount(), + RATING_THREE.getCount(), + RATING_FOUR.getCount(), + RATING_FIVE.getCount() + ); + } + + public void incrementCount() { + this.count++; + } + + public int getCount() { + return count; + } + + private void resetCount() { + this.count = 0; + } } diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java b/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java index 6ddd6800..ee168a77 100644 --- a/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java @@ -6,13 +6,13 @@ @Schema(title = "리뷰 신고하기") public record ReportCreateRequest( - @Schema(description = "신고할 리뷰 id", example = "4") - Long reviewId, + @Schema(description = "신고할 리뷰 id", example = "4") + Long reviewId, - @Schema(description = "신고 타입", example = "BAD_WORD") - ReportType reportType, + @Schema(description = "신고 타입", example = "BAD_WORD") + ReportType reportType, - @Schema(description = "신고 내용", example = "음란성, 욕설 등 부적절한 내용") - String content) { + @Schema(description = "신고 내용", example = "음란성, 욕설 등 부적절한 내용") + String content) { } diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java index 387d2427..1bdae80f 100644 --- a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java @@ -6,14 +6,14 @@ @Getter @Schema(title = "리뷰 신고 사유") public class ReportTypeInformation { - @Schema(description = "신고 사유 타입") - private String type; + @Schema(description = "신고 사유 타입") + private String type; - @Schema(description = "신고 사유 설명") - private String description; + @Schema(description = "신고 사유 설명") + private String description; - public ReportTypeInformation(String type, String description) { - this.type = type; - this.description = description; - } + public ReportTypeInformation(String type, String description) { + this.type = type; + this.description = description; + } } diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java index 95734850..87aa7d4b 100644 --- a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java @@ -12,14 +12,14 @@ @Schema(title = "리뷰 신고 사유 목록 Response") public class ReportTypeList { - @Schema(description = "리뷰 신고 사유 목록") - private final List response = new ArrayList<>(); + @Schema(description = "리뷰 신고 사유 목록") + private final List response = new ArrayList<>(); - public static ReportTypeList get() { - ReportTypeList reportTypeList = new ReportTypeList(); - Arrays.stream(ReportType.values()) - .forEach(reportType -> reportTypeList.response.add( - new ReportTypeInformation(reportType.name(), reportType.getDescription()))); - return reportTypeList; - } + public static ReportTypeList get() { + ReportTypeList reportTypeList = new ReportTypeList(); + Arrays.stream(ReportType.values()) + .forEach(reportType -> reportTypeList.response.add( + new ReportTypeInformation(reportType.name(), reportType.getDescription()))); + return reportTypeList; + } } diff --git a/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java b/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java index a83988f2..4478c538 100644 --- a/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java +++ b/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java @@ -1,29 +1,30 @@ package ssu.eatssu.domain.report.entity; import com.fasterxml.jackson.annotation.JsonCreator; + import lombok.Getter; import java.util.Arrays; @Getter public enum ReportStatus { - PENDING("대기 중"), - IN_PROGRESS("진행 중"), - RESOLVED("해결됨"), - REJECTED("거절됨"), - FALSE_REPORT("거짓 신고"); + PENDING("대기 중"), + IN_PROGRESS("진행 중"), + RESOLVED("해결됨"), + REJECTED("거절됨"), + FALSE_REPORT("거짓 신고"); - private final String description; + private final String description; - ReportStatus(final String description) { - this.description = description; - } + ReportStatus(final String description) { + this.description = description; + } - @JsonCreator - public static ReportStatus from(final String description) { - return Arrays.stream(ReportStatus.values()) - .filter(v -> v.getDescription().equals(description)) - .findAny() - .orElseThrow(IllegalArgumentException::new); - } + @JsonCreator + public static ReportStatus from(final String description) { + return Arrays.stream(ReportStatus.values()) + .filter(v -> v.getDescription().equals(description)) + .findAny() + .orElseThrow(IllegalArgumentException::new); + } } diff --git a/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java b/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java index 7b6e3c07..ab92b6f8 100644 --- a/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java +++ b/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java @@ -1,27 +1,28 @@ package ssu.eatssu.domain.report.entity; import com.fasterxml.jackson.annotation.JsonCreator; + import lombok.Getter; import java.util.Locale; @Getter public enum ReportType { - NO_ASSOCIATE_CONTENT("메뉴와 관련 없는 내용"), - IMPROPER_CONTENT("음란성, 욕설 등 부적절한 내용"), - IMPROPER_ADVERTISEMENT("부적절한 홍보 및 광고"), - COPY("리뷰 취지에 맞지 않는 행동(복사글 등)"), - COPYRIGHT("저작권 도용 의심(사진 등)"), - EXTRA("기타 (하단 내용 작성)"); + NO_ASSOCIATE_CONTENT("메뉴와 관련 없는 내용"), + IMPROPER_CONTENT("음란성, 욕설 등 부적절한 내용"), + IMPROPER_ADVERTISEMENT("부적절한 홍보 및 광고"), + COPY("리뷰 취지에 맞지 않는 행동(복사글 등)"), + COPYRIGHT("저작권 도용 의심(사진 등)"), + EXTRA("기타 (하단 내용 작성)"); - private final String description; + private final String description; - ReportType(String description) { - this.description = description; - } + ReportType(String description) { + this.description = description; + } - @JsonCreator - public static ReportType from(final String name) { - return ReportType.valueOf(name.toUpperCase(Locale.ROOT)); - } + @JsonCreator + public static ReportType from(final String name) { + return ReportType.valueOf(name.toUpperCase(Locale.ROOT)); + } } diff --git a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java index 1808736f..b4a2ad56 100644 --- a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java +++ b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java @@ -7,8 +7,10 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; + import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; + import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.report.dto.ReportCreateRequest; import ssu.eatssu.domain.report.dto.ReportTypeList; @@ -25,31 +27,31 @@ @Tag(name = "Report", description = "신고 API") public class ReportController { - private final ReportService reportService; - private final SlackService slackService; - - @Operation(summary = "리뷰 신고 사유 종류 조회", description = "리뷰 신고 사유 종류를 조회하는 API 입니다.") - @GetMapping("/types") - public BaseResponse getReportType() { - ReportTypeList reportTypeList = reportService.getReportType(); - return BaseResponse.success(reportTypeList); - } - - /** - * 리뷰 신고 - */ - @Operation(summary = "리뷰 신고하기", description = "리뷰를 신고하는 API 입니다.") - @PostMapping("") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 신고 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - public BaseResponse reportReview(@RequestBody ReportCreateRequest createReportRequest, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - Report report = reportService.reportReview(customUserDetails, createReportRequest); - slackService.sendSlackMessage(SlackMessageFormat.sendReport(report), - SlackChannel.REPORT_CHANNEL); - return BaseResponse.success(); - } + private final ReportService reportService; + private final SlackService slackService; + + @Operation(summary = "리뷰 신고 사유 종류 조회", description = "리뷰 신고 사유 종류를 조회하는 API 입니다.") + @GetMapping("/types") + public BaseResponse getReportType() { + ReportTypeList reportTypeList = reportService.getReportType(); + return BaseResponse.success(reportTypeList); + } + + /** + * 리뷰 신고 + */ + @Operation(summary = "리뷰 신고하기", description = "리뷰를 신고하는 API 입니다.") + @PostMapping("") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 신고 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + public BaseResponse reportReview(@RequestBody ReportCreateRequest createReportRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + Report report = reportService.reportReview(customUserDetails, createReportRequest); + slackService.sendSlackMessage(SlackMessageFormat.sendReport(report), + SlackChannel.REPORT_CHANNEL); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java b/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java index 58d0a066..3cb1a9e9 100644 --- a/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java +++ b/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.report.repository; import org.springframework.data.jpa.repository.JpaRepository; + import ssu.eatssu.domain.review.entity.Report; public interface ReportRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java index 90bded6d..e077f50f 100644 --- a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java +++ b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java @@ -1,8 +1,10 @@ package ssu.eatssu.domain.report.service; import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.report.dto.ReportCreateRequest; import ssu.eatssu.domain.report.dto.ReportTypeList; @@ -18,28 +20,27 @@ import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; - @RequiredArgsConstructor @Service @Transactional public class ReportService { - private final ReviewRepository reviewRepository; - private final UserRepository userRepository; - private final ReportRepository reportRepository; + private final ReviewRepository reviewRepository; + private final UserRepository userRepository; + private final ReportRepository reportRepository; - public Report reportReview(CustomUserDetails userDetails, ReportCreateRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + public Report reportReview(CustomUserDetails userDetails, ReportCreateRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Review review = reviewRepository.findById(request.reviewId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + Review review = reviewRepository.findById(request.reviewId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - Report report = Report.create(user, review, request, ReportStatus.PENDING); - return reportRepository.save(report); - } + Report report = Report.create(user, review, request, ReportStatus.PENDING); + return reportRepository.save(report); + } - public ReportTypeList getReportType() { - return ReportTypeList.get(); - } + public ReportTypeList getReportType() { + return ReportTypeList.get(); + } } diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index af46a5f0..0c383a08 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -1,35 +1,35 @@ package ssu.eatssu.domain.restaurant.entity; import com.fasterxml.jackson.annotation.JsonCreator; + import lombok.Getter; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; import java.util.Arrays; - @Getter public enum Restaurant { - DODAM("DODAM", 6000), - DORMITORY("DORMITORY", 5500), - FOOD_COURT("FOOD_COURT", null), - SNACK_CORNER("SNACK_CORNER", null), - HAKSIK("HAKSIK", 5000); - - private String restaurantName; - private Integer restaurantPrice; - - Restaurant(String restaurantName, Integer price) { - this.restaurantName = restaurantName; - this.restaurantPrice = price; - } - - @JsonCreator - public static Restaurant from(String restaurantName) { - return Arrays.stream(Restaurant.values()) - .filter(r -> r.getRestaurantName().equals(restaurantName)) - .findAny() - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); - } + DODAM("DODAM", 6000), + DORMITORY("DORMITORY", 5500), + FOOD_COURT("FOOD_COURT", null), + SNACK_CORNER("SNACK_CORNER", null), + HAKSIK("HAKSIK", 5000); + + private String restaurantName; + private Integer restaurantPrice; + + Restaurant(String restaurantName, Integer price) { + this.restaurantName = restaurantName; + this.restaurantPrice = price; + } + + @JsonCreator + public static Restaurant from(String restaurantName) { + return Arrays.stream(Restaurant.values()) + .filter(r -> r.getRestaurantName().equals(restaurantName)) + .findAny() + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java index 5e771e9b..9616fb27 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java @@ -7,22 +7,22 @@ @Getter public enum RestaurantType { - FIXED("고정메뉴 식당", Arrays.asList(Restaurant.FOOD_COURT, Restaurant.SNACK_CORNER)), - VARIABLE("변동메뉴 식당", Arrays.asList(Restaurant.DODAM, Restaurant.DORMITORY, Restaurant.HAKSIK)); + FIXED("고정메뉴 식당", Arrays.asList(Restaurant.FOOD_COURT, Restaurant.SNACK_CORNER)), + VARIABLE("변동메뉴 식당", Arrays.asList(Restaurant.DODAM, Restaurant.DORMITORY, Restaurant.HAKSIK)); - private final String description; - private final List restaurants; + private final String description; + private final List restaurants; - RestaurantType(String description, List restaurants) { - this.description = description; - this.restaurants = restaurants; - } + RestaurantType(String description, List restaurants) { + this.description = description; + this.restaurants = restaurants; + } - public static boolean isFixedType(Restaurant restaurant) { - return FIXED.restaurants.contains(restaurant); - } + public static boolean isFixedType(Restaurant restaurant) { + return FIXED.restaurants.contains(restaurant); + } - public static boolean isVariableType(Restaurant restaurant) { - return VARIABLE.restaurants.contains(restaurant); - } + public static boolean isVariableType(Restaurant restaurant) { + return VARIABLE.restaurants.contains(restaurant); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java index abf2c706..8678a8a1 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java @@ -15,28 +15,28 @@ @Getter @AllArgsConstructor public class CreateMealReviewRequest { - @Schema(description = "식단 식별자", example = "123") - private Long mealId; - @Schema(description = "평점", example = "4") - private Integer rating; - private List menuLikes; - @Schema(description = "한줄평", example = "맛있어용") - private String content; - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imageUrls; + @Schema(description = "식단 식별자", example = "123") + private Long mealId; + @Schema(description = "평점", example = "4") + private Integer rating; + private List menuLikes; + @Schema(description = "한줄평", example = "맛있어용") + private String content; + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; - public Review toReviewEntity(User user, Meal meal) { - return Review.builder() - .user(user) - .meal(meal) - .content(content) - .rating(rating) - .build(); - } + public Review toReviewEntity(User user, Meal meal) { + return Review.builder() + .user(user) + .meal(meal) + .content(content) + .rating(rating) + .build(); + } - public List createReviewImages(Review review) { - return imageUrls.stream() - .map(imageUrl -> new ReviewImage(review, imageUrl)) - .collect(Collectors.toList()); - } + public List createReviewImages(Review review) { + return imageUrls.stream() + .map(imageUrl -> new ReviewImage(review, imageUrl)) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java index e3e87d3b..84342495 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java @@ -18,85 +18,85 @@ @Schema(title = "리뷰 상세") @Getter public class MealReviewResponse { - @Schema(description = "리뷰 식별자", example = "123") - Long reviewId; - - @Schema(description = "작성자 식별자", example = "123") - Long writerId; - - @Schema(description = "본인 글인지 여부(true/false)", example = "true") - Boolean isWriter; - - @Schema(description = "작성자 닉네임", example = "숭시리시리") - private String writerNickname; - - @Schema(description = "평점", example = "4") - private Integer rating; - - @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") - private LocalDate writtenAt; - - @Schema(description = "리뷰 내용", example = "맛있습니당") - private String content; - - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imageUrls; - - @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") - private List likedMenuNames; - - @Schema(description = "본인이 이 리뷰에 좋아요를 눌렀는지 여부(true/false)", example = "true") - private Boolean isLikedByUser; - - @Schema(description = "리뷰 좋아요 개수", example = "10") - private Integer likeCount; - - @Schema(description = "별칭", example = "미슈테리 미식가") - private String alias; - - public static MealReviewResponse from(Review review, Long userId) { - List imageUrls = new ArrayList<>(); - review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); - - List likedMenuNames = review.getMenuLikes().stream() - .filter(ReviewMenuLike::getIsLike) - .map(like -> like.getMenu().getName()) - .collect(Collectors.toList()); - - boolean isLikedByUser = (userId != null) && review.getReviewLikes().stream() - .anyMatch(like -> like.getUser().getId().equals(userId)); - - String alias = (review.getUser() != null) ? UserAliasUtil.getUserAlias(review.getUser(), - review.getUser().getReviews()) : "알 수 없음"; - - MealReviewResponseBuilder builder = MealReviewResponse.builder() - .reviewId(review.getId()) - .rating(review.getRating()) - .writtenAt(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .imageUrls(imageUrls) - .likedMenuNames(likedMenuNames) - .isLikedByUser(isLikedByUser) - .likeCount(review.getReviewLikes().size()) - .alias(alias); - - if (review.getUser() == null) { - return builder.writerId(null) - .writerNickname("알 수 없음") - .isWriter(false) - .build(); - } - - if (review.getUser().getId().equals(userId)) { - return builder.writerId(review.getUser().getId()) - .writerNickname(review.getUser().getNickname()) - .isWriter(true) - .build(); - } - - return builder.writerId(review.getUser().getId()) - .writerNickname(review.getUser().getNickname()) - .isWriter(false) - .build(); - } + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; + + @Schema(description = "작성자 식별자", example = "123") + Long writerId; + + @Schema(description = "본인 글인지 여부(true/false)", example = "true") + Boolean isWriter; + + @Schema(description = "작성자 닉네임", example = "숭시리시리") + private String writerNickname; + + @Schema(description = "평점", example = "4") + private Integer rating; + + @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") + private LocalDate writtenAt; + + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; + + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; + + @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") + private List likedMenuNames; + + @Schema(description = "본인이 이 리뷰에 좋아요를 눌렀는지 여부(true/false)", example = "true") + private Boolean isLikedByUser; + + @Schema(description = "리뷰 좋아요 개수", example = "10") + private Integer likeCount; + + @Schema(description = "별칭", example = "미슈테리 미식가") + private String alias; + + public static MealReviewResponse from(Review review, Long userId) { + List imageUrls = new ArrayList<>(); + review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); + + List likedMenuNames = review.getMenuLikes().stream() + .filter(ReviewMenuLike::getIsLike) + .map(like -> like.getMenu().getName()) + .collect(Collectors.toList()); + + boolean isLikedByUser = (userId != null) && review.getReviewLikes().stream() + .anyMatch(like -> like.getUser().getId().equals(userId)); + + String alias = (review.getUser() != null) ? UserAliasUtil.getUserAlias(review.getUser(), + review.getUser().getReviews()) : "알 수 없음"; + + MealReviewResponseBuilder builder = MealReviewResponse.builder() + .reviewId(review.getId()) + .rating(review.getRating()) + .writtenAt(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imageUrls(imageUrls) + .likedMenuNames(likedMenuNames) + .isLikedByUser(isLikedByUser) + .likeCount(review.getReviewLikes().size()) + .alias(alias); + + if (review.getUser() == null) { + return builder.writerId(null) + .writerNickname("알 수 없음") + .isWriter(false) + .build(); + } + + if (review.getUser().getId().equals(userId)) { + return builder.writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(true) + .build(); + } + + return builder.writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(false) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java index a856c264..f5edc3da 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java @@ -13,34 +13,34 @@ @Builder public class MealReviewsResponse implements ReviewInformationResponse { - @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") - private List menuNames; + @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") + private List menuNames; - @Schema(description = "리뷰 개수", example = "15") - private Long totalReviewCount; + @Schema(description = "리뷰 개수", example = "15") + private Long totalReviewCount; - @Schema(description = "평점-메인", example = "4.4") - private Double mainRating; + @Schema(description = "평점-메인", example = "4.4") + private Double mainRating; - @Schema(description = "평점-양", example = "4.4") - private Double amountRating; + @Schema(description = "평점-양", example = "4.4") + private Double amountRating; - @Schema(description = "평점-맛", example = "4.4") - private Double tasteRating; + @Schema(description = "평점-맛", example = "4.4") + private Double tasteRating; - @Schema(description = "평점 별 갯수") - private ReviewRatingCount reviewRatingCount; + @Schema(description = "평점 별 갯수") + private ReviewRatingCount reviewRatingCount; - public static MealReviewsResponse of(Long totalReviewCount, List menuNames, - RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { + public static MealReviewsResponse of(Long totalReviewCount, List menuNames, + RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { - return MealReviewsResponse.builder() - .menuNames(menuNames) - .mainRating(ratingAverages.mainRating()) - .amountRating(ratingAverages.amountRating()) - .tasteRating(ratingAverages.tasteRating()) - .totalReviewCount(totalReviewCount) - .reviewRatingCount(reviewRatingCount) - .build(); - } + return MealReviewsResponse.builder() + .menuNames(menuNames) + .mainRating(ratingAverages.mainRating()) + .amountRating(ratingAverages.amountRating()) + .tasteRating(ratingAverages.tasteRating()) + .totalReviewCount(totalReviewCount) + .reviewRatingCount(reviewRatingCount) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java index 1042f12c..593cdc4d 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java @@ -8,8 +8,8 @@ @Getter @AllArgsConstructor public class MenuLikeRequest { - @Schema(description = "메뉴 식별자", example = "123") - private Long menuId; - @Schema(description = "좋아요 or 싫어요", example = "좋아요 : true or 싫어요 : false") - private Boolean isLike; + @Schema(description = "메뉴 식별자", example = "123") + private Long menuId; + @Schema(description = "좋아요 or 싫어요", example = "좋아요 : true or 싫어요 : false") + private Boolean isLike; } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java index df38b001..c94bdc44 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java @@ -12,34 +12,34 @@ @Builder public class MenuReviewResponse implements ReviewInformationResponse { - @Schema(description = "메뉴 이름", example = "바질토마토베이글") - private String menuName; - - @Schema(description = "리뷰 개수", example = "15") - private Integer totalReviewCount; - - @Schema(description = "평점-메인", example = "4.4") - private Double mainRating; - - @Schema(description = "평점-양", example = "4.4") - private Double amountRating; - - @Schema(description = "평점-맛", example = "4.4") - private Double tasteRating; - - @Schema(description = "평점 별 갯수") - private ReviewRatingCount reviewRatingCount; - - public static MenuReviewResponse of(Menu menu, - RatingAverages ratingAverages, - ReviewRatingCount reviewRatingCount) { - return MenuReviewResponse.builder() - .menuName(menu.getName()) - .totalReviewCount(menu.getTotalReviewCount()) - .mainRating(ratingAverages.mainRating()) - .amountRating(ratingAverages.amountRating()) - .tasteRating(ratingAverages.tasteRating()) - .reviewRatingCount(reviewRatingCount) - .build(); - } + @Schema(description = "메뉴 이름", example = "바질토마토베이글") + private String menuName; + + @Schema(description = "리뷰 개수", example = "15") + private Integer totalReviewCount; + + @Schema(description = "평점-메인", example = "4.4") + private Double mainRating; + + @Schema(description = "평점-양", example = "4.4") + private Double amountRating; + + @Schema(description = "평점-맛", example = "4.4") + private Double tasteRating; + + @Schema(description = "평점 별 갯수") + private ReviewRatingCount reviewRatingCount; + + public static MenuReviewResponse of(Menu menu, + RatingAverages ratingAverages, + ReviewRatingCount reviewRatingCount) { + return MenuReviewResponse.builder() + .menuName(menu.getName()) + .totalReviewCount(menu.getTotalReviewCount()) + .mainRating(ratingAverages.mainRating()) + .amountRating(ratingAverages.amountRating()) + .tasteRating(ratingAverages.tasteRating()) + .reviewRatingCount(reviewRatingCount) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java b/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java index d96d03eb..66a4a8cd 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java @@ -4,7 +4,7 @@ public record RatingAverages(Double mainRating, Double amountRating, Double tasteRating) { - @Builder - public RatingAverages { - } + @Builder + public RatingAverages { + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java b/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java index 357155ad..c0b3efe8 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java @@ -1,20 +1,19 @@ package ssu.eatssu.domain.review.dto; - import ssu.eatssu.domain.rating.entity.Ratings; public record RatingsDto(Ratings ratings) { - public Integer getMainRating() { - return ratings.getMainRating(); - } + public Integer getMainRating() { + return ratings.getMainRating(); + } - public Integer getTasteRating() { - return ratings.getTasteRating(); - } + public Integer getTasteRating() { + return ratings.getTasteRating(); + } - public Integer getAmountRating() { - return ratings.getAmountRating(); - } + public Integer getAmountRating() { + return ratings.getAmountRating(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/RestaurantReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/RestaurantReviewResponse.java index 197d6f5f..962152b8 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/RestaurantReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/RestaurantReviewResponse.java @@ -10,18 +10,18 @@ @AllArgsConstructor @Builder public class RestaurantReviewResponse { - @Schema(description = "리뷰 개수", example = "15") - private Integer totalReviewCount; + @Schema(description = "리뷰 개수", example = "15") + private Integer totalReviewCount; - @Schema(description = "별점 별 개수") - private ReviewRatingCount reviewRatingCount; + @Schema(description = "별점 별 개수") + private ReviewRatingCount reviewRatingCount; - @Schema(description = "리뷰 평점", example = "4.4") - private Double mainRating; + @Schema(description = "리뷰 평점", example = "4.4") + private Double mainRating; - @Schema(description = "좋아요 개수", example = "15") - private Integer likeCount; + @Schema(description = "좋아요 개수", example = "15") + private Integer likeCount; - @Schema(description = "싫어요 개수", example = "15") - private Integer unlikeCount; + @Schema(description = "싫어요 개수", example = "15") + private Integer unlikeCount; } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java index b6fead60..f5a53b5c 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java @@ -6,7 +6,9 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; + import org.springframework.util.Assert; + import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.review.entity.Review; @@ -18,38 +20,38 @@ @Setter public class ReviewCreateRequest { - @Schema(description = "평점-메인", example = "4") - private Integer mainRating; - - @Schema(description = "평점-양", example = "4") - private Integer amountRating; - - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; - - @Max(150) - @Schema(description = "한줄평", example = "맛있어용") - private String content; - - public ReviewCreateRequest(int mainRating, int amountRating, int tasteRating, String content) { - Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); - this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; - this.content = content; - } - - public Review toEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); - return Review.builder() - .user(user) - .content(this.content) - .ratings(ratings) - .menu(menu) - .build(); - } + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; + + @Schema(description = "평점-양", example = "4") + private Integer amountRating; + + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; + + @Max(150) + @Schema(description = "한줄평", example = "맛있어용") + private String content; + + public ReviewCreateRequest(int mainRating, int amountRating, int tasteRating, String content) { + Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); + this.mainRating = mainRating; + this.amountRating = amountRating; + this.tasteRating = tasteRating; + this.content = content; + } + + public Review toEntity(User user, Menu menu) { + Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + return Review.builder() + .user(user) + .content(this.content) + .ratings(ratings) + .menu(menu) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java index c6f3e4ff..e6c2e198 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java @@ -16,73 +16,73 @@ @Getter public class ReviewDetail { - @Schema(description = "리뷰 식별자", example = "123") - Long reviewId; - - @Schema(description = "메뉴 이름", example = "콥샐러드") - String menu; - - @Schema(description = "작성자 식별자", example = "123") - Long writerId; - - @Schema(description = "본인 글인지 여부(true/false)", example = "true") - Boolean isWriter; - - @Schema(description = "작성자 닉네임", example = "숭시리시리") - private String writerNickname; - - @Schema(description = "평점-메인", example = "4") - private Integer mainRating; - - @Schema(description = "평점-양", example = "4") - private Integer amountRating; - - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; - - @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") - private LocalDate writedAt; - - @Schema(description = "리뷰 내용", example = "맛있습니당") - private String content; - - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imageUrls; - - public static ReviewDetail from(Review review, Long userId) { - List imageUrls = new ArrayList<>(); - review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); - - ReviewDetailBuilder builder = ReviewDetail.builder() - .reviewId(review.getId()) - .mainRating(review.getRatings().getMainRating()) - .amountRating(review.getRatings().getAmountRating()) - .tasteRating(review.getRatings().getTasteRating()) - .writedAt(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .imageUrls(imageUrls) - .menu(review.getMenu().getName()); - - if (review.getUser() == null) { - return builder - .writerId(null) - .writerNickname("알 수 없음") - .isWriter(false) - .build(); - } - - if (review.getUser().getId().equals(userId)) { - return builder - .writerId(review.getUser().getId()) - .writerNickname(review.getUser().getNickname()) - .isWriter(true) - .build(); - } - - return builder - .writerId(review.getUser().getId()) - .writerNickname(review.getUser().getNickname()) - .isWriter(false) - .build(); - } + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; + + @Schema(description = "메뉴 이름", example = "콥샐러드") + String menu; + + @Schema(description = "작성자 식별자", example = "123") + Long writerId; + + @Schema(description = "본인 글인지 여부(true/false)", example = "true") + Boolean isWriter; + + @Schema(description = "작성자 닉네임", example = "숭시리시리") + private String writerNickname; + + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; + + @Schema(description = "평점-양", example = "4") + private Integer amountRating; + + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; + + @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") + private LocalDate writedAt; + + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; + + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; + + public static ReviewDetail from(Review review, Long userId) { + List imageUrls = new ArrayList<>(); + review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); + + ReviewDetailBuilder builder = ReviewDetail.builder() + .reviewId(review.getId()) + .mainRating(review.getRatings().getMainRating()) + .amountRating(review.getRatings().getAmountRating()) + .tasteRating(review.getRatings().getTasteRating()) + .writedAt(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imageUrls(imageUrls) + .menu(review.getMenu().getName()); + + if (review.getUser() == null) { + return builder + .writerId(null) + .writerNickname("알 수 없음") + .isWriter(false) + .build(); + } + + if (review.getUser().getId().equals(userId)) { + return builder + .writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(true) + .build(); + } + + return builder + .writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(false) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java index 09ebfb14..83d2d083 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java @@ -9,21 +9,23 @@ //COMMENT: 더 좋은 매개변수 명이 있을 것 같은데 제 머리로는 이게 한계입니다... 멋진 변수명으로 바꿔주세요 public record ReviewRatingCount(long oneStarCount, long twoStarCount, long threeStarCount, long fourStarCount, - long fiveStarCount) { + long fiveStarCount) { - public ReviewRatingCount { - } + public ReviewRatingCount { + } - public static ReviewRatingCount from(List reviews) { - Map ratingDistribution = reviews.stream() - .collect(Collectors.groupingBy(Review::getRating, LinkedHashMap::new, Collectors.counting())); + public static ReviewRatingCount from(List reviews) { + Map ratingDistribution = reviews.stream() + .collect( + Collectors.groupingBy(Review::getRating, LinkedHashMap::new, + Collectors.counting())); - return new ReviewRatingCount( - ratingDistribution.getOrDefault(1, 0L), - ratingDistribution.getOrDefault(2, 0L), - ratingDistribution.getOrDefault(3, 0L), - ratingDistribution.getOrDefault(4, 0L), - ratingDistribution.getOrDefault(5, 0L) - ); - } + return new ReviewRatingCount( + ratingDistribution.getOrDefault(1, 0L), + ratingDistribution.getOrDefault(2, 0L), + ratingDistribution.getOrDefault(3, 0L), + ratingDistribution.getOrDefault(4, 0L), + ratingDistribution.getOrDefault(5, 0L) + ); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java index fd2b6565..471c07ba 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java @@ -6,18 +6,18 @@ @Schema(title = "리뷰 수정(글)") public record ReviewUpdateRequest( - @Schema(description = "평점-메인", example = "4") - Integer mainRating, + @Schema(description = "평점-메인", example = "4") + Integer mainRating, - @Schema(description = "평점-양", example = "4") - Integer amountRating, + @Schema(description = "평점-양", example = "4") + Integer amountRating, - @Schema(description = "평점-맛", example = "4") - Integer tasteRating, + @Schema(description = "평점-맛", example = "4") + Integer tasteRating, - @Max(150) - @Schema(description = "한줄평", example = "맛있어용") - String content + @Max(150) + @Schema(description = "한줄평", example = "맛있어용") + String content ) { } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/dto/SavedReviewImage.java b/src/main/java/ssu/eatssu/domain/review/dto/SavedReviewImage.java index 0529ad4a..430f5cfc 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/SavedReviewImage.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/SavedReviewImage.java @@ -9,6 +9,6 @@ @Schema(title = "업로드 된 이미지 url") public class SavedReviewImage { - @Schema(description = "이미지 url", example = "image123.jpg") - private String url; + @Schema(description = "이미지 url", example = "image123.jpg") + private String url; } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java index dce5e9ad..3b4fa924 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java @@ -11,10 +11,10 @@ @Getter @AllArgsConstructor public class UpdateMealReviewRequest { - @Schema(description = "평점", example = "4") - private Integer rating; - private List menuLikes; - @Max(150) - @Schema(description = "한줄평", example = "맛있어용") - private String content; + @Schema(description = "평점", example = "4") + private Integer rating; + private List menuLikes; + @Max(150) + @Schema(description = "한줄평", example = "맛있어용") + private String content; } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java index 699f44c2..2bf1c5fc 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java @@ -6,7 +6,9 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; + import org.springframework.util.Assert; + import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.review.entity.Review; @@ -18,42 +20,42 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) public class UploadReviewRequest { - @Schema(description = "평점-메인", example = "4") - private Integer mainRating; - - @Schema(description = "평점-양", example = "4") - private Integer amountRating; - - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; - - @Max(150) - @Schema(description = "한줄평", example = "맛있어용") - private String content; - - @Schema(description = "리뷰 이미지 URL", example = "https://s3.~~~.jpg") - private String imageUrl; - - public UploadReviewRequest(int mainRating, int amountRating, int tasteRating, String content) { - Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); - this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; - this.content = content; - } - - public Review toReviewEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); - return Review.builder() - .user(user) - .content(this.content) - .ratings(ratings) - .menu(menu) - .build(); - } + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; + + @Schema(description = "평점-양", example = "4") + private Integer amountRating; + + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; + + @Max(150) + @Schema(description = "한줄평", example = "맛있어용") + private String content; + + @Schema(description = "리뷰 이미지 URL", example = "https://s3.~~~.jpg") + private String imageUrl; + + public UploadReviewRequest(int mainRating, int amountRating, int tasteRating, String content) { + Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); + this.mainRating = mainRating; + this.amountRating = amountRating; + this.tasteRating = tasteRating; + this.content = content; + } + + public Review toReviewEntity(User user, Menu menu) { + Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + return Review.builder() + .user(user) + .content(this.content) + .ratings(ratings) + .menu(menu) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Report.java b/src/main/java/ssu/eatssu/domain/review/entity/Report.java index 6af16f01..644a4434 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Report.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Report.java @@ -15,35 +15,35 @@ @AllArgsConstructor public class Report extends BaseTimeEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "review_report_id") - private Long id; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "reporter_id") - private User user; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "review_id") - private Review review; - - @Enumerated(EnumType.STRING) - private ReportType reportType; - - private String content; - - @Enumerated(EnumType.STRING) - private ReportStatus status; - - public static Report create(User user, Review review, ReportCreateRequest request, - ReportStatus status) { - return Report.builder() - .user(user) - .review(review) - .reportType(request.reportType()) - .content(request.content()) - .status(status) - .build(); - } + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_report_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "reporter_id") + private User user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; + + @Enumerated(EnumType.STRING) + private ReportType reportType; + + private String content; + + @Enumerated(EnumType.STRING) + private ReportStatus status; + + public static Report create(User user, Review review, ReportCreateRequest request, + ReportStatus status) { + return Report.builder() + .user(user) + .review(review) + .reportType(request.reportType()) + .content(request.content()) + .status(status) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index 27cf5370..3e423936 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -13,7 +13,6 @@ import java.util.Map; import java.util.stream.Collectors; - @Entity @Getter @Setter @@ -22,112 +21,113 @@ @AllArgsConstructor public class Review extends BaseTimeEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "review_id") - private Long id; - - private String content; - - // TODO : 삭제되어야 함 - @Embedded - private Ratings ratings; - - private Integer rating; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") - private User user; - - // TODO : 삭제되어야 함 - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "menu_id") - private Menu menu; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "meal_id") - private Meal meal; - - @Builder.Default - @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) - private List reviewImages = new ArrayList<>(); - - @Builder.Default - @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) - private List menuLikes = new ArrayList<>(); - - @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) - private List reviewLikes = new ArrayList<>(); - - public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { - this.content = content; - this.ratings = Ratings.of(mainRate, amountRate, tasteRate); - } - - // TODO : this.user가 null이면? - public boolean isNotWrittenBy(User user) { - return !this.user.equals(user); - } - - public void clearUser() { - this.user = null; - } - - public void addReviewImage(String imageUrl) { - ReviewImage reviewImage = new ReviewImage(this, imageUrl); - this.reviewImages.add(reviewImage); - } - - public void addReviewMenuLike(Menu menu, boolean isLike) { - ReviewMenuLike reviewMenuLike = ReviewMenuLike.create(this, menu, isLike); - this.menuLikes.add(reviewMenuLike); - - if (isLike) { - menu.increaseLikeCount(); - } else { - menu.increaseUnlikeCount(); - } - } - - public void removeReviewMenuLike(ReviewMenuLike reviewMenuLike) { - this.menuLikes.remove(reviewMenuLike); - - if (reviewMenuLike.getIsLike()) { - reviewMenuLike.getMenu().decreaseLikeCount(); - } else { - reviewMenuLike.getMenu().decreaseUnlikeCount(); - } - } - - public void update(String content, int rating, Map updatedMenuLikes) { - this.content = content; - this.rating = rating; - - // 현재 menu like 상태를 menu를 기준으로 매핑 - Map currentMenuLikes = this.menuLikes.stream() - .collect(Collectors.toMap(ReviewMenuLike::getMenu, menuLike -> menuLike)); - - for (Map.Entry entry : updatedMenuLikes.entrySet()) { - Menu menu = entry.getKey(); - Boolean newState = entry.getValue(); - ReviewMenuLike existingReviewMenuLike = currentMenuLikes.get(menu); - if (existingReviewMenuLike == null) { - // 기존에 없는 메뉴이면 새롭게 추가 - this.addReviewMenuLike(menu, newState); - } else { - // 기존에 있는 경우 : 상태가 다르면 업데이트 - if (!existingReviewMenuLike.getIsLike().equals(newState)) { - existingReviewMenuLike.updateLike(newState); - menu.changeLikeStatus(newState); - } - } - } - } - - public void resetMenuLikes() { - for (ReviewMenuLike reviewMenuLike : this.menuLikes) { - reviewMenuLike.resetMenuLikeStatus(); - } - this.menuLikes.clear(); - } + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_id") + private Long id; + + private String content; + + // TODO : 삭제되어야 함 + @Embedded + private Ratings ratings; + + private Integer rating; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + // TODO : 삭제되어야 함 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "menu_id") + private Menu menu; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "meal_id") + private Meal meal; + + @Builder.Default + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) + private List reviewImages = new ArrayList<>(); + + @Builder.Default + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) + private List menuLikes = new ArrayList<>(); + + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) + private List reviewLikes = new ArrayList<>(); + + public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { + this.content = content; + this.ratings = Ratings.of(mainRate, amountRate, tasteRate); + } + + // TODO : this.user가 null이면? + public boolean isNotWrittenBy(User user) { + return !this.user.equals(user); + } + + public void clearUser() { + this.user = null; + } + + public void addReviewImage(String imageUrl) { + ReviewImage reviewImage = new ReviewImage(this, imageUrl); + this.reviewImages.add(reviewImage); + } + + public void addReviewMenuLike(Menu menu, boolean isLike) { + ReviewMenuLike reviewMenuLike = ReviewMenuLike.create(this, menu, isLike); + this.menuLikes.add(reviewMenuLike); + + if (isLike) { + menu.increaseLikeCount(); + } else { + menu.increaseUnlikeCount(); + } + } + + public void removeReviewMenuLike(ReviewMenuLike reviewMenuLike) { + this.menuLikes.remove(reviewMenuLike); + + if (reviewMenuLike.getIsLike()) { + reviewMenuLike.getMenu().decreaseLikeCount(); + } else { + reviewMenuLike.getMenu().decreaseUnlikeCount(); + } + } + + public void update(String content, int rating, Map updatedMenuLikes) { + this.content = content; + this.rating = rating; + + // 현재 menu like 상태를 menu를 기준으로 매핑 + Map currentMenuLikes = this.menuLikes.stream() + .collect(Collectors.toMap(ReviewMenuLike::getMenu, + menuLike -> menuLike)); + + for (Map.Entry entry : updatedMenuLikes.entrySet()) { + Menu menu = entry.getKey(); + Boolean newState = entry.getValue(); + ReviewMenuLike existingReviewMenuLike = currentMenuLikes.get(menu); + if (existingReviewMenuLike == null) { + // 기존에 없는 메뉴이면 새롭게 추가 + this.addReviewMenuLike(menu, newState); + } else { + // 기존에 있는 경우 : 상태가 다르면 업데이트 + if (!existingReviewMenuLike.getIsLike().equals(newState)) { + existingReviewMenuLike.updateLike(newState); + menu.changeLikeStatus(newState); + } + } + } + } + + public void resetMenuLikes() { + for (ReviewMenuLike reviewMenuLike : this.menuLikes) { + reviewMenuLike.resetMenuLikeStatus(); + } + this.menuLikes.clear(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java index 7b236b7e..5c6de4ab 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java @@ -10,19 +10,19 @@ @AllArgsConstructor public class ReviewImage { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "review_image_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_image_id") + private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "review_id") - private Review review; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; - private String imageUrl; + private String imageUrl; - public ReviewImage(Review review, String imageUrl) { - this.review = review; - this.imageUrl = imageUrl; - } + public ReviewImage(Review review, String imageUrl) { + this.review = review; + this.imageUrl = imageUrl; + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java index 620dbc0b..8cbf5d21 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java @@ -12,20 +12,20 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor public class ReviewLike { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "review_like_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_like_id") + private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "review_id") - private Review review; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") - private User user; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; - public static ReviewLike create(User user, Review review) { - return new ReviewLike(null, review, user); - } + public static ReviewLike create(User user, Review review) { + return new ReviewLike(null, review, user); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java index 400ca1fd..4982e951 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java @@ -10,35 +10,35 @@ @Builder @AllArgsConstructor public class ReviewMenuLike { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "review_menu_like_id") - private Long id; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "review_id") - private Review review; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "menu_id") - private Menu menu; - - @Column(nullable = false) - private Boolean isLike; // true : 좋아요, false : 싫어요 - - public static ReviewMenuLike create(Review review, Menu menu, Boolean isLike) { - return ReviewMenuLike.builder() - .review(review) - .menu(menu) - .isLike(isLike) - .build(); - } - - public void updateLike(Boolean like) { - isLike = like; - } - - public void resetMenuLikeStatus() { - menu.cancelLike(this.isLike); - } + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_menu_like_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "menu_id") + private Menu menu; + + @Column(nullable = false) + private Boolean isLike; // true : 좋아요, false : 싫어요 + + public static ReviewMenuLike create(Review review, Menu menu, Boolean isLike) { + return ReviewMenuLike.builder() + .review(review) + .menu(menu) + .isLike(isLike) + .build(); + } + + public void updateLike(Boolean like) { + isLike = like; + } + + public void resetMenuLikeStatus() { + menu.cancelLike(this.isLike); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java index c8ba98ad..c8b631c9 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java @@ -16,47 +16,47 @@ @Embeddable public class Reviews { - @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) - private List reviews = new ArrayList<>(); - - public void add(Review review) { - reviews.add(review); - } - - public int size() { - return reviews.size(); - } - - public void calculateReviewRatings() { - this.reviews.forEach(review -> { - int rateValue = review.getRatings().getMainRating(); - ReviewRating.fromValue(rateValue).incrementCount(); - }); - } - - public int getTotalMainRating() { - return this.reviews.stream().mapToInt(review -> review.getRatings().getMainRating()).sum(); - } - - public int getTotalAmountRating() { - return this.reviews.stream().mapToInt(review -> review.getRatings().getAmountRating()) - .sum(); - } - - public int getTotalTasteRating() { - return this.reviews.stream().mapToInt(review -> review.getRatings().getTasteRating()).sum(); - } - - public double getAverageMainRating() { - return (double) this.getTotalMainRating() / this.size(); - } - - public double getAverageAmountRating() { - return (double) this.getTotalAmountRating() / this.size(); - } - - public double getAverageTasteRating() { - return (double) this.getTotalTasteRating() / this.size(); - } + @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) + private List reviews = new ArrayList<>(); + + public void add(Review review) { + reviews.add(review); + } + + public int size() { + return reviews.size(); + } + + public void calculateReviewRatings() { + this.reviews.forEach(review -> { + int rateValue = review.getRatings().getMainRating(); + ReviewRating.fromValue(rateValue).incrementCount(); + }); + } + + public int getTotalMainRating() { + return this.reviews.stream().mapToInt(review -> review.getRatings().getMainRating()).sum(); + } + + public int getTotalAmountRating() { + return this.reviews.stream().mapToInt(review -> review.getRatings().getAmountRating()) + .sum(); + } + + public int getTotalTasteRating() { + return this.reviews.stream().mapToInt(review -> review.getRatings().getTasteRating()).sum(); + } + + public double getAverageMainRating() { + return (double)this.getTotalMainRating() / this.size(); + } + + public double getAverageAmountRating() { + return (double)this.getTotalAmountRating() / this.size(); + } + + public double getAverageTasteRating() { + return (double)this.getTotalTasteRating() / this.size(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java index 54450583..cfb3dabe 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java @@ -9,11 +9,13 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; + import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; + import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; @@ -29,110 +31,110 @@ @RequestMapping("/v2/reviews") @Tag(name = "Review V2", description = "리뷰 V2 API") public class MealReviewController { - private final MealReviewService mealReviewService; + private final MealReviewService mealReviewService; - @Operation(summary = "리뷰 작성", description = "리뷰를 작성하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - }) - @PostMapping() - public BaseResponse createReview( - @RequestBody CreateMealReviewRequest createMealReviewRequest, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - mealReviewService.createReview(customUserDetails, createMealReviewRequest); - return BaseResponse.success(); - } + @Operation(summary = "리뷰 작성", description = "리뷰를 작성하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + @PostMapping() + public BaseResponse createReview( + @RequestBody CreateMealReviewRequest createMealReviewRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + mealReviewService.createReview(customUserDetails, createMealReviewRequest); + return BaseResponse.success(); + } - @Operation(summary = "특정 식당 모든 리뷰 정보 조회(리뷰 개수, 평점 등등)", description = """ - 특정 식당 모든 리뷰 정보를 조회하는 API 입니다.

- 리뷰 개수, 별점 별 개수, 리뷰 평점, 좋아요 개수, 싫어요 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "path parameter 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/statistics") - public BaseResponse getRestaurantReviews( - @Parameter(description = "restaurant") - @RequestParam Restaurant restaurant - ) { - return BaseResponse.success(mealReviewService.findRestaurantReviews(restaurant)); - } + @Operation(summary = "특정 식당 모든 리뷰 정보 조회(리뷰 개수, 평점 등등)", description = """ + 특정 식당 모든 리뷰 정보를 조회하는 API 입니다.

+ 리뷰 개수, 별점 별 개수, 리뷰 평점, 좋아요 개수, 싫어요 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "path parameter 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/statistics") + public BaseResponse getRestaurantReviews( + @Parameter(description = "restaurant") + @RequestParam Restaurant restaurant + ) { + return BaseResponse.success(mealReviewService.findRestaurantReviews(restaurant)); + } - @Operation(summary = "리뷰 리스트 조회", description = """ - 리뷰 리스트를 조회하는 API 입니다.

- 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

- 페이징 기본 값 = {size=20, sort=date, direction=desc}

- """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("") - public BaseResponse> getReviews( - @Parameter(description = "mealId") - @RequestParam Long mealId, - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) - @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - Pageable pageable = PageRequest.of(0, 20, Sort.by(Sort.Direction.DESC, "id")); - SliceResponse myReviews = mealReviewService.findReviews(mealId, lastReviewId, pageable, - customUserDetails); - return BaseResponse.success(myReviews); - } + @Operation(summary = "리뷰 리스트 조회", description = """ + 리뷰 리스트를 조회하는 API 입니다.

+ 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

+ 페이징 기본 값 = {size=20, sort=date, direction=desc}

+ """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("") + public BaseResponse> getReviews( + @Parameter(description = "mealId") + @RequestParam Long mealId, + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) + @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + Pageable pageable = PageRequest.of(0, 20, Sort.by(Sort.Direction.DESC, "id")); + SliceResponse myReviews = mealReviewService.findReviews(mealId, lastReviewId, pageable, + customUserDetails); + return BaseResponse.success(myReviews); + } - @Operation(summary = "리뷰 수정(글 수정)", description = """ - 리뷰 내용을 수정하는 API 입니다.

- 글 수정만 가능하며 사진 수정은 지원하지 않습니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 수정 성공"), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @PatchMapping("/{reviewId}") - public BaseResponse updateReview(@Parameter(description = "reviewId") - @PathVariable("reviewId") Long reviewId, - @RequestBody UpdateMealReviewRequest request, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - mealReviewService.updateReview(customUserDetails, reviewId, request); - return BaseResponse.success(); - } + @Operation(summary = "리뷰 수정(글 수정)", description = """ + 리뷰 내용을 수정하는 API 입니다.

+ 글 수정만 가능하며 사진 수정은 지원하지 않습니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 수정 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @PatchMapping("/{reviewId}") + public BaseResponse updateReview(@Parameter(description = "reviewId") + @PathVariable("reviewId") Long reviewId, + @RequestBody UpdateMealReviewRequest request, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + mealReviewService.updateReview(customUserDetails, reviewId, request); + return BaseResponse.success(); + } - @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공"), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("/{reviewId}") - public BaseResponse deleteReview( - @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - mealReviewService.deleteReview(customUserDetails, reviewId); - return BaseResponse.success(); - } + @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("/{reviewId}") + public BaseResponse deleteReview( + @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + mealReviewService.deleteReview(customUserDetails, reviewId); + return BaseResponse.success(); + } - @Operation(summary = "리뷰 좋아요 누르기/취소하기", description = "리뷰에 좋아요(찜)를 누르거나 취소하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 좋아요 토글 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/{reviewId}/like") - public BaseResponse toggleReviewLike( - @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - mealReviewService.toggleReviewLike(customUserDetails, reviewId); - return BaseResponse.success(); - } + @Operation(summary = "리뷰 좋아요 누르기/취소하기", description = "리뷰에 좋아요(찜)를 누르거나 취소하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 좋아요 토글 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/{reviewId}/like") + public BaseResponse toggleReviewLike( + @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + mealReviewService.toggleReviewLike(customUserDetails, reviewId); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index a91d0649..bcafa04a 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -10,6 +10,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; + import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -18,6 +19,7 @@ import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; + import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.constants.MenuType; import ssu.eatssu.domain.review.dto.*; @@ -34,160 +36,159 @@ @Tag(name = "Review", description = "리뷰 API") public class ReviewController { - private final ReviewService reviewService; - private final SliceService sliceService; - - @Operation(summary = "리뷰 리스트 조회 [인증 토큰 필수 X]", description = """ - 리뷰 리스트를 조회하는 API 입니다.

- menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

- menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

- 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

- 페이징 기본 값 = {size=20, sort=date, direction=desc}

- """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("") - public BaseResponse> getReviews( - @Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") MenuType menuType, - @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) Long menuId, - @Parameter(description = "mealId(변동메뉴)") @RequestParam(value = "mealId", required = false) Long mealId, - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) - @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = sliceService.findReviews(menuType, menuId, mealId, - pageable, lastReviewId, customUserDetails); - - return BaseResponse.success(myReviews); - } - - @Hidden - @Operation(summary = "리뷰 작성", description = """ - 리뷰를 작성하는 API 입니다.

- reviewCreate는 application/json, multipartFileList는 multipart/form-data로 요청해주세요.

- 사진은 여러장 첨부 가능합니다.(기획상으로는 한 장만 첨부하도록 제한이 있지만 API 스펙 자체는 여러 장 첨부 가능) - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping(value = "/{menuId}", - consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, - produces = MediaType.APPLICATION_JSON_VALUE) - public BaseResponse writeReview( - @Parameter(description = "menuId") @PathVariable("menuId") Long menuId, - @RequestPart ReviewCreateRequest createReviewRequest, - @RequestPart(value = "multipartFileList", required = false) List multipartFileList, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewService.createReview(customUserDetails, menuId, createReviewRequest, - multipartFileList); - return BaseResponse.success(); - } - - /** - * 리뷰 이미지 업로드 - */ - @Operation(summary = "리뷰 이미지 업로드", description = "리뷰 이미지를 업로드하고 이미지 URL 을 반환합니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "이미지 업로드 및 URL 반환 성공"), - @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping(value = "/upload/image", - consumes = MediaType.MULTIPART_FORM_DATA_VALUE, - produces = MediaType.APPLICATION_JSON_VALUE) - public BaseResponse uploadReviewImage(@RequestPart(value = "image") MultipartFile image) { - return BaseResponse.success(reviewService.uploadImage(image)); - } - - @Operation(summary = "리뷰 작성", description = "리뷰를 작성하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - }) - @PostMapping("/write/{menuId}") - public BaseResponse writeReview(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, - @RequestBody UploadReviewRequest uploadReviewRequest, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewService.uploadReview(customUserDetails, menuId, uploadReviewRequest); - return BaseResponse.success(); - } - - @Operation(summary = "리뷰 수정(글 수정)", description = """ - 리뷰 내용을 수정하는 API 입니다.

- 글 수정만 가능하며 사진 수정은 지원하지 않습니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 수정 성공"), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PatchMapping("/{reviewId}") - public BaseResponse updateReview(@Parameter(description = "reviewId") - @PathVariable("reviewId") Long reviewId, - @RequestBody ReviewUpdateRequest request, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewService.updateReview(customUserDetails, reviewId, request); - return BaseResponse.success(); - } - - - @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공"), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("/{reviewId}") - public BaseResponse deleteReview( - @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewService.deleteReview(customUserDetails, reviewId); - return BaseResponse.success(); - } - - @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ - 식단 리뷰 정보를 조회하는 API 입니다.

- 메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/meals/{mealId}") - public BaseResponse getMealReviews( - @Parameter(description = "mealId") - @PathVariable(value = "mealId") Long mealId) { - return BaseResponse.success(reviewService.findMealReviews(mealId)); - } - - @Operation(summary = "고정 메뉴 리뷰 정보 조회(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ - 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

- 메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/menus/{menuId}") - public BaseResponse getMainReviews( - @Parameter(description = "menuId") - @PathVariable(value = "menuId") Long menuId) { - return BaseResponse.success(reviewService.findMenuReviews(menuId)); - } + private final ReviewService reviewService; + private final SliceService sliceService; + + @Operation(summary = "리뷰 리스트 조회 [인증 토큰 필수 X]", description = """ + 리뷰 리스트를 조회하는 API 입니다.

+ menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

+ menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

+ 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

+ 페이징 기본 값 = {size=20, sort=date, direction=desc}

+ """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("") + public BaseResponse> getReviews( + @Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") MenuType menuType, + @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) Long menuId, + @Parameter(description = "mealId(변동메뉴)") @RequestParam(value = "mealId", required = false) Long mealId, + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) + @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = sliceService.findReviews(menuType, menuId, mealId, + pageable, lastReviewId, customUserDetails); + + return BaseResponse.success(myReviews); + } + + @Hidden + @Operation(summary = "리뷰 작성", description = """ + 리뷰를 작성하는 API 입니다.

+ reviewCreate는 application/json, multipartFileList는 multipart/form-data로 요청해주세요.

+ 사진은 여러장 첨부 가능합니다.(기획상으로는 한 장만 첨부하도록 제한이 있지만 API 스펙 자체는 여러 장 첨부 가능) + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping(value = "/{menuId}", + consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, + produces = MediaType.APPLICATION_JSON_VALUE) + public BaseResponse writeReview( + @Parameter(description = "menuId") @PathVariable("menuId") Long menuId, + @RequestPart ReviewCreateRequest createReviewRequest, + @RequestPart(value = "multipartFileList", required = false) List multipartFileList, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewService.createReview(customUserDetails, menuId, createReviewRequest, + multipartFileList); + return BaseResponse.success(); + } + + /** + * 리뷰 이미지 업로드 + */ + @Operation(summary = "리뷰 이미지 업로드", description = "리뷰 이미지를 업로드하고 이미지 URL 을 반환합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "이미지 업로드 및 URL 반환 성공"), + @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping(value = "/upload/image", + consumes = MediaType.MULTIPART_FORM_DATA_VALUE, + produces = MediaType.APPLICATION_JSON_VALUE) + public BaseResponse uploadReviewImage(@RequestPart(value = "image") MultipartFile image) { + return BaseResponse.success(reviewService.uploadImage(image)); + } + + @Operation(summary = "리뷰 작성", description = "리뷰를 작성하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + @PostMapping("/write/{menuId}") + public BaseResponse writeReview(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, + @RequestBody UploadReviewRequest uploadReviewRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewService.uploadReview(customUserDetails, menuId, uploadReviewRequest); + return BaseResponse.success(); + } + + @Operation(summary = "리뷰 수정(글 수정)", description = """ + 리뷰 내용을 수정하는 API 입니다.

+ 글 수정만 가능하며 사진 수정은 지원하지 않습니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 수정 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PatchMapping("/{reviewId}") + public BaseResponse updateReview(@Parameter(description = "reviewId") + @PathVariable("reviewId") Long reviewId, + @RequestBody ReviewUpdateRequest request, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewService.updateReview(customUserDetails, reviewId, request); + return BaseResponse.success(); + } + + @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("/{reviewId}") + public BaseResponse deleteReview( + @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewService.deleteReview(customUserDetails, reviewId); + return BaseResponse.success(); + } + + @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ + 식단 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/meals/{mealId}") + public BaseResponse getMealReviews( + @Parameter(description = "mealId") + @PathVariable(value = "mealId") Long mealId) { + return BaseResponse.success(reviewService.findMealReviews(mealId)); + } + + @Operation(summary = "고정 메뉴 리뷰 정보 조회(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ + 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/menus/{menuId}") + public BaseResponse getMainReviews( + @Parameter(description = "menuId") + @PathVariable(value = "menuId") Long menuId) { + return BaseResponse.success(reviewService.findMenuReviews(menuId)); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewImageRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewImageRepository.java index b608010f..0395890b 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewImageRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewImageRepository.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.review.repository; import org.springframework.data.jpa.repository.JpaRepository; + import ssu.eatssu.domain.review.entity.ReviewImage; public interface ReviewImageRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java index c70d0bf0..215db5f4 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.review.repository; import org.springframework.data.jpa.repository.JpaRepository; + import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewLike; import ssu.eatssu.domain.user.entity.User; @@ -8,5 +9,5 @@ import java.util.Optional; public interface ReviewLikeRepository extends JpaRepository { - Optional findByReviewAndUser(Review review, User user); + Optional findByReviewAndUser(Review review, User user); } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java index 7b592f36..65c6dd1e 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java @@ -1,11 +1,12 @@ package ssu.eatssu.domain.review.repository; import org.springframework.data.jpa.repository.JpaRepository; + import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewMenuLike; import java.util.List; public interface ReviewMenuLikeRepository extends JpaRepository { - List findByReview(Review review); + List findByReview(Review review); } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java index 1f37af70..154eb982 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java @@ -5,6 +5,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; + import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.review.entity.Review; @@ -14,19 +15,19 @@ public interface ReviewRepository extends JpaRepository, ReviewRepositoryCustom { - List findAllByMenu(Menu menu); + List findAllByMenu(Menu menu); - /** - * dto projection - */ - Collection findByMenu_MealMenus_Meal(Meal meal, Class type); + /** + * dto projection + */ + Collection findByMenu_MealMenus_Meal(Meal meal, Class type); - Long countByMenu_MealMenus_Meal(Meal meal); + Long countByMenu_MealMenus_Meal(Meal meal); - List findByMealIn(List meals); + List findByMealIn(List meals); - @Query("SELECT r FROM Review r WHERE r.meal.id IN :mealIds AND (:lastReviewId IS NULL OR r.id < :lastReviewId) ") - Page findReviewsByMealIds(@Param("mealIds") List mealIds, - @Param("lastReviewId") Long lastReviewId, - Pageable pageable); + @Query("SELECT r FROM Review r WHERE r.meal.id IN :mealIds AND (:lastReviewId IS NULL OR r.id < :lastReviewId) ") + Page findReviewsByMealIds(@Param("mealIds") List mealIds, + @Param("lastReviewId") Long lastReviewId, + Pageable pageable); } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java index b1bb44db..96659076 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java @@ -2,6 +2,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; + import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.review.entity.Review; @@ -9,20 +10,19 @@ public interface ReviewRepositoryCustom { - //특정 메뉴 리뷰 - 최신순 정렬 - Slice findAllByMenuOrderByIdDesc(Menu menu, Long lastReviewId, Pageable pageable); - - //특정 메뉴 리뷰 - 오래된순 정렬 - //특정 식단 리뷰 - 최신순 정렬 - Slice findAllByMealOrderByIdDesc(Meal meal, Long lastReviewId, Pageable pageable); + //특정 메뉴 리뷰 - 최신순 정렬 + Slice findAllByMenuOrderByIdDesc(Menu menu, Long lastReviewId, Pageable pageable); - //특정 메뉴 리뷰 - 오래된순 정렬 - //특정 유저 리뷰 - 최신순 정렬 - Slice findByUserOrderByIdDesc(User user, Long lastReviewId, Pageable pageable); + //특정 메뉴 리뷰 - 오래된순 정렬 + //특정 식단 리뷰 - 최신순 정렬 + Slice findAllByMealOrderByIdDesc(Meal meal, Long lastReviewId, Pageable pageable); - Slice findAllByMenuOrderByIdAsc(Menu menu, Long lastReviewId, Pageable pageable); + //특정 메뉴 리뷰 - 오래된순 정렬 + //특정 유저 리뷰 - 최신순 정렬 + Slice findByUserOrderByIdDesc(User user, Long lastReviewId, Pageable pageable); - Slice findAllByMealOrderByIdAsc(Meal meal, Long lastReviewId, Pageable pageable); + Slice findAllByMenuOrderByIdAsc(Menu menu, Long lastReviewId, Pageable pageable); + Slice findAllByMealOrderByIdAsc(Meal meal, Long lastReviewId, Pageable pageable); } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java index 89568357..f1041f69 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java @@ -1,13 +1,15 @@ package ssu.eatssu.domain.review.repository; - import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; + import lombok.RequiredArgsConstructor; + import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.domain.SliceImpl; import org.springframework.stereotype.Repository; + import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.review.entity.QReview; @@ -20,105 +22,104 @@ @Repository @RequiredArgsConstructor public class ReviewRepositoryImpl implements ReviewRepositoryCustom { - private final JPAQueryFactory queryFactory; - private final QReview review = QReview.review; - - @Override - public Slice findAllByMenuOrderByIdDesc(Menu menu, Long lastReviewId, Pageable pageable) { - List reviewList = queryFactory.selectFrom(review) - .where( - nextFromLastReviewId(lastReviewId), - review.menu.eq(menu) - ) - .orderBy(review.id.desc()) - .limit(pageable.getPageSize() + 1L) - .fetch(); - return checkLastPage(pageable, reviewList); - } - - @Override - public Slice findAllByMenuOrderByIdAsc(Menu menu, Long lastReviewId, Pageable pageable) { - List reviewList = queryFactory.selectFrom(review) - .where( - beforeFromLastReviewId(lastReviewId), - review.menu.eq(menu) - ) - .orderBy(review.id.asc()) - .limit(pageable.getPageSize() + 1L) - .fetch(); - return checkLastPage(pageable, reviewList); - } - - @Override - public Slice findAllByMealOrderByIdDesc(Meal meal, Long lastReviewId, Pageable pageable) { - List menuList = new ArrayList<>(); - meal.getMealMenus().forEach(mealMenu -> menuList.add(mealMenu.getMenu())); - List reviewList = queryFactory.selectFrom(review) - .where( - nextFromLastReviewId(lastReviewId), - review.menu.in(menuList) - ) - .orderBy(review.id.desc()) - .limit(pageable.getPageSize() + 1L) - .fetch(); - return checkLastPage(pageable, reviewList); - } - - @Override - public Slice findAllByMealOrderByIdAsc(Meal meal, Long lastReviewId, Pageable pageable) { - List menuList = new ArrayList<>(); - meal.getMealMenus().forEach(mealMenu -> menuList.add(mealMenu.getMenu())); - List reviewList = queryFactory.selectFrom(review) - .where( - beforeFromLastReviewId(lastReviewId), - review.menu.in(menuList) - ) - .orderBy(review.id.asc()) - .limit(pageable.getPageSize() + 1L) - .fetch(); - return checkLastPage(pageable, reviewList); - } - - @Override - public Slice findByUserOrderByIdDesc(User user, Long lastReviewId, Pageable pageable) { - List reviewList = queryFactory.selectFrom(review) - .where( - nextFromLastReviewId(lastReviewId), - review.user.eq(user) - ) - .orderBy(review.id.desc()) - .limit(pageable.getPageSize() + 1L) - .fetch(); - return checkLastPage(pageable, reviewList); - } - - private BooleanExpression nextFromLastReviewId(Long reviewId) { - if (reviewId == null) { - return null; - } - return review.id.lt(reviewId); //reviewId < lastReviewId - } - - private BooleanExpression beforeFromLastReviewId(Long reviewId) { - if (reviewId == null) { - return null; - } - return review.id.gt(reviewId); //reviewId > lastReviewId - } - - //무한 스크롤 방식 처리하는 메소드 - private Slice checkLastPage(Pageable pageable, List results) { - - boolean hasNext = false; - - // 조회한 결과 개수가 요청한 페이지 사이즈보다 크면 뒤에 더 있음, next = true - if (results.size() > pageable.getPageSize()) { - hasNext = true; - results.remove(pageable.getPageSize()); - } - - return new SliceImpl<>(results, pageable, hasNext); - } - + private final JPAQueryFactory queryFactory; + private final QReview review = QReview.review; + + @Override + public Slice findAllByMenuOrderByIdDesc(Menu menu, Long lastReviewId, Pageable pageable) { + List reviewList = queryFactory.selectFrom(review) + .where( + nextFromLastReviewId(lastReviewId), + review.menu.eq(menu) + ) + .orderBy(review.id.desc()) + .limit(pageable.getPageSize() + 1L) + .fetch(); + return checkLastPage(pageable, reviewList); + } + + @Override + public Slice findAllByMenuOrderByIdAsc(Menu menu, Long lastReviewId, Pageable pageable) { + List reviewList = queryFactory.selectFrom(review) + .where( + beforeFromLastReviewId(lastReviewId), + review.menu.eq(menu) + ) + .orderBy(review.id.asc()) + .limit(pageable.getPageSize() + 1L) + .fetch(); + return checkLastPage(pageable, reviewList); + } + + @Override + public Slice findAllByMealOrderByIdDesc(Meal meal, Long lastReviewId, Pageable pageable) { + List menuList = new ArrayList<>(); + meal.getMealMenus().forEach(mealMenu -> menuList.add(mealMenu.getMenu())); + List reviewList = queryFactory.selectFrom(review) + .where( + nextFromLastReviewId(lastReviewId), + review.menu.in(menuList) + ) + .orderBy(review.id.desc()) + .limit(pageable.getPageSize() + 1L) + .fetch(); + return checkLastPage(pageable, reviewList); + } + + @Override + public Slice findAllByMealOrderByIdAsc(Meal meal, Long lastReviewId, Pageable pageable) { + List menuList = new ArrayList<>(); + meal.getMealMenus().forEach(mealMenu -> menuList.add(mealMenu.getMenu())); + List reviewList = queryFactory.selectFrom(review) + .where( + beforeFromLastReviewId(lastReviewId), + review.menu.in(menuList) + ) + .orderBy(review.id.asc()) + .limit(pageable.getPageSize() + 1L) + .fetch(); + return checkLastPage(pageable, reviewList); + } + + @Override + public Slice findByUserOrderByIdDesc(User user, Long lastReviewId, Pageable pageable) { + List reviewList = queryFactory.selectFrom(review) + .where( + nextFromLastReviewId(lastReviewId), + review.user.eq(user) + ) + .orderBy(review.id.desc()) + .limit(pageable.getPageSize() + 1L) + .fetch(); + return checkLastPage(pageable, reviewList); + } + + private BooleanExpression nextFromLastReviewId(Long reviewId) { + if (reviewId == null) { + return null; + } + return review.id.lt(reviewId); //reviewId < lastReviewId + } + + private BooleanExpression beforeFromLastReviewId(Long reviewId) { + if (reviewId == null) { + return null; + } + return review.id.gt(reviewId); //reviewId > lastReviewId + } + + //무한 스크롤 방식 처리하는 메소드 + private Slice checkLastPage(Pageable pageable, List results) { + + boolean hasNext = false; + + // 조회한 결과 개수가 요청한 페이지 사이즈보다 크면 뒤에 더 있음, next = true + if (results.size() > pageable.getPageSize()) { + hasNext = true; + results.remove(pageable.getPageSize()); + } + + return new SliceImpl<>(results, pageable, hasNext); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java index 29babc59..134beac2 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java @@ -1,11 +1,13 @@ package ssu.eatssu.domain.review.service; import lombok.RequiredArgsConstructor; + import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -34,187 +36,189 @@ @RequiredArgsConstructor @Service public class MealReviewService { - private final UserRepository userRepository; - private final ReviewRepository reviewRepository; - private final MenuRepository menuRepository; - private final MealRepository mealRepository; - private final MealMenuRepository mealMenuRepository; - private final ReviewLikeRepository reviewLikeRepository; - - /** - * 리뷰 생성 - */ - @Transactional - public void createReview(CustomUserDetails userDetails, CreateMealReviewRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Meal meal = mealRepository.findById(request.getMealId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); - - Review review = request.toReviewEntity(user, meal); - - request.getImageUrls().forEach(review::addReviewImage); - - for (MenuLikeRequest menuLike : request.getMenuLikes()) { - Menu menu = menuRepository.findById(menuLike.getMenuId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - review.addReviewMenuLike(menu, menuLike.getIsLike()); - } - - reviewRepository.save(review); - } - - /** - * 특정 식당 리뷰 조회 - */ - public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { - List meals = mealRepository.findByRestaurant(restaurant); - List reviews = reviewRepository.findByMealIn(meals); - List menus = mealMenuRepository.findMenusByMeals(meals); - - Double averageRating = reviews.stream() - .mapToInt(Review::getRating) - .average() - .orElse(0.0); - - Integer likeCount = menus.stream() - .mapToInt(Menu::getLikeCount) - .sum(); - - Integer unlikeCount = menus.stream() - .mapToInt(Menu::getUnlikeCount) - .sum(); - - ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); - - return RestaurantReviewResponse.builder() - .totalReviewCount(reviews.size()) - .reviewRatingCount(reviewRatingCount) - .mainRating(Math.round(averageRating * 10) / 10.0) - .likeCount(likeCount) - .unlikeCount(unlikeCount) - .build(); - } - - /** - * 특정 식단 리뷰 리스트 조회 - */ - public SliceResponse findReviews(Long mealId, Long lastReviewId, Pageable pageable, - CustomUserDetails userDetails) { - if (!mealRepository.existsById(mealId)) { - throw new BaseException(NOT_FOUND_MEAL); - } - - List menuIds = mealMenuRepository.findMenuIdsByMealId(mealId); - if (menuIds.isEmpty()) { - return SliceResponse.empty(); - } - - List mealIds = mealMenuRepository.findMealIdsByMenuIds(menuIds); - if (mealIds.isEmpty()) { - return SliceResponse.empty(); - } - - Page pageReviews = reviewRepository.findReviewsByMealIds(mealIds, lastReviewId, pageable); - - Long userId = (userDetails != null) ? userDetails.getId() : null; - List mealReviewResponses = - pageReviews.getContent().stream().map(review -> MealReviewResponse.from(review, - userId)).collect(Collectors.toList()); - - return SliceResponse.builder() - .numberOfElements(pageReviews.getNumberOfElements()) - .hasNext(pageReviews.hasNext()) - .dataList(mealReviewResponses) - .build(); - } - - /** - * 리뷰 수정 - */ - @Transactional - public void updateReview(CustomUserDetails userDetails, Long reviewId, UpdateMealReviewRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - if (review.isNotWrittenBy(user)) { - throw new BaseException(REVIEW_PERMISSION_DENIED); - } - - Map menuLikes = request.getMenuLikes().stream() - .collect(Collectors.toMap(menuLike -> menuRepository.findById(menuLike.getMenuId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)), - MenuLikeRequest::getIsLike)); - - review.update(request.getContent(), request.getRating(), menuLikes); - reviewRepository.save(review); - } - - /** - * 리뷰 삭제 - */ - @Transactional - public void deleteReview(CustomUserDetails userDetails, Long reviewId) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - if (review.isNotWrittenBy(user)) { - throw new BaseException(REVIEW_PERMISSION_DENIED); - } - - review.resetMenuLikes(); - reviewRepository.delete(review); - } - - /** - * 내 리뷰 리스트 조회 - */ - public SliceResponse findMyReviews(CustomUserDetails userDetails, Long lastReviewId, - Pageable pageable) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, - pageable); - - List myMealReviewResponses = sliceReviews.getContent().stream() - .map(MyMealReviewResponse::from).toList(); - - return SliceResponse.builder() - .numberOfElements(sliceReviews.getNumberOfElements()) - .hasNext(sliceReviews.hasNext()) - .dataList(myMealReviewResponses) - .build(); - } - - /** - * 리뷰 좋아요 누르기/취소하기 - */ - @Transactional - public void toggleReviewLike(CustomUserDetails userDetails, Long reviewId) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - Optional optionalReviewLike = reviewLikeRepository.findByReviewAndUser(review, user); - if (optionalReviewLike.isPresent()) { - // 이미 좋아요 한 경우 -> 좋아요 취소 처리 - ReviewLike reviewLike = optionalReviewLike.get(); - review.getReviewLikes().remove(reviewLike); - reviewLikeRepository.delete(reviewLike); - } else { - // 좋아요 하지 않은 경우 -> 좋아요 추가 처리 - ReviewLike reviewLike = ReviewLike.create(user, review); - review.getReviewLikes().add(reviewLike); - reviewLikeRepository.save(reviewLike); - } - } + private final UserRepository userRepository; + private final ReviewRepository reviewRepository; + private final MenuRepository menuRepository; + private final MealRepository mealRepository; + private final MealMenuRepository mealMenuRepository; + private final ReviewLikeRepository reviewLikeRepository; + + /** + * 리뷰 생성 + */ + @Transactional + public void createReview(CustomUserDetails userDetails, CreateMealReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Meal meal = mealRepository.findById(request.getMealId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + + Review review = request.toReviewEntity(user, meal); + + request.getImageUrls().forEach(review::addReviewImage); + + for (MenuLikeRequest menuLike : request.getMenuLikes()) { + Menu menu = menuRepository.findById(menuLike.getMenuId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + review.addReviewMenuLike(menu, menuLike.getIsLike()); + } + + reviewRepository.save(review); + } + + /** + * 특정 식당 리뷰 조회 + */ + public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { + List meals = mealRepository.findByRestaurant(restaurant); + List reviews = reviewRepository.findByMealIn(meals); + List menus = mealMenuRepository.findMenusByMeals(meals); + + Double averageRating = reviews.stream() + .mapToInt(Review::getRating) + .average() + .orElse(0.0); + + Integer likeCount = menus.stream() + .mapToInt(Menu::getLikeCount) + .sum(); + + Integer unlikeCount = menus.stream() + .mapToInt(Menu::getUnlikeCount) + .sum(); + + ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); + + return RestaurantReviewResponse.builder() + .totalReviewCount(reviews.size()) + .reviewRatingCount(reviewRatingCount) + .mainRating(Math.round(averageRating * 10) / 10.0) + .likeCount(likeCount) + .unlikeCount(unlikeCount) + .build(); + } + + /** + * 특정 식단 리뷰 리스트 조회 + */ + public SliceResponse findReviews(Long mealId, Long lastReviewId, Pageable pageable, + CustomUserDetails userDetails) { + if (!mealRepository.existsById(mealId)) { + throw new BaseException(NOT_FOUND_MEAL); + } + + List menuIds = mealMenuRepository.findMenuIdsByMealId(mealId); + if (menuIds.isEmpty()) { + return SliceResponse.empty(); + } + + List mealIds = mealMenuRepository.findMealIdsByMenuIds(menuIds); + if (mealIds.isEmpty()) { + return SliceResponse.empty(); + } + + Page pageReviews = reviewRepository.findReviewsByMealIds(mealIds, lastReviewId, pageable); + + Long userId = (userDetails != null) ? userDetails.getId() : null; + List mealReviewResponses = + pageReviews.getContent().stream().map(review -> MealReviewResponse.from(review, + userId)).collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(pageReviews.getNumberOfElements()) + .hasNext(pageReviews.hasNext()) + .dataList(mealReviewResponses) + .build(); + } + + /** + * 리뷰 수정 + */ + @Transactional + public void updateReview(CustomUserDetails userDetails, Long reviewId, UpdateMealReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (review.isNotWrittenBy(user)) { + throw new BaseException(REVIEW_PERMISSION_DENIED); + } + + Map menuLikes = request.getMenuLikes().stream() + .collect(Collectors.toMap( + menuLike -> menuRepository.findById(menuLike.getMenuId()) + .orElseThrow(() -> new BaseException( + NOT_FOUND_MENU)), + MenuLikeRequest::getIsLike)); + + review.update(request.getContent(), request.getRating(), menuLikes); + reviewRepository.save(review); + } + + /** + * 리뷰 삭제 + */ + @Transactional + public void deleteReview(CustomUserDetails userDetails, Long reviewId) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (review.isNotWrittenBy(user)) { + throw new BaseException(REVIEW_PERMISSION_DENIED); + } + + review.resetMenuLikes(); + reviewRepository.delete(review); + } + + /** + * 내 리뷰 리스트 조회 + */ + public SliceResponse findMyReviews(CustomUserDetails userDetails, Long lastReviewId, + Pageable pageable) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, + pageable); + + List myMealReviewResponses = sliceReviews.getContent().stream() + .map(MyMealReviewResponse::from).toList(); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(myMealReviewResponses) + .build(); + } + + /** + * 리뷰 좋아요 누르기/취소하기 + */ + @Transactional + public void toggleReviewLike(CustomUserDetails userDetails, Long reviewId) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + Optional optionalReviewLike = reviewLikeRepository.findByReviewAndUser(review, user); + if (optionalReviewLike.isPresent()) { + // 이미 좋아요 한 경우 -> 좋아요 취소 처리 + ReviewLike reviewLike = optionalReviewLike.get(); + review.getReviewLikes().remove(reviewLike); + reviewLikeRepository.delete(reviewLike); + } else { + // 좋아요 하지 않은 경우 -> 좋아요 추가 처리 + ReviewLike reviewLike = ReviewLike.create(user, review); + review.getReviewLikes().add(reviewLike); + reviewLikeRepository.save(reviewLike); + } + } } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java index cf422bc9..ee26c65b 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java @@ -1,7 +1,9 @@ package ssu.eatssu.domain.review.service; import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Service; + import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.persistence.QuerydslMealRatingCalculator; @@ -18,64 +20,64 @@ @RequiredArgsConstructor public class ReviewRatingService implements RatingCalculator { - private final QuerydslMealRatingCalculator mealRatingCalculator; - private final QuerydslMenuRatingCalculator menuRatingCalculator; - private final QuerydslMealRatingCounter mealRatingCounter; - private final QuerydslMenuRatingCounter menuRatingCounter; + private final QuerydslMealRatingCalculator mealRatingCalculator; + private final QuerydslMenuRatingCalculator menuRatingCalculator; + private final QuerydslMealRatingCounter mealRatingCounter; + private final QuerydslMenuRatingCounter menuRatingCounter; - @Override - public ReviewRatingCount mealRatingCount(Meal meal) { - Map ratingCountMap = mealRatingCounter.getRatingCountMap(meal.getId()); - return getRatingCount(ratingCountMap); - } + @Override + public ReviewRatingCount mealRatingCount(Meal meal) { + Map ratingCountMap = mealRatingCounter.getRatingCountMap(meal.getId()); + return getRatingCount(ratingCountMap); + } - @Override - public ReviewRatingCount menuRatingCount(Menu menu) { - Map ratingCountMap = menuRatingCounter.getRatingCountMap(menu.getId()); - return getRatingCount(ratingCountMap); - } + @Override + public ReviewRatingCount menuRatingCount(Menu menu) { + Map ratingCountMap = menuRatingCounter.getRatingCountMap(menu.getId()); + return getRatingCount(ratingCountMap); + } - @Override - public RatingAverages mealAverageRatings(Meal meal) { - Double mainRatingAverage = mealRatingCalculator.getMainRatingAverage(meal.getId()); - Double amountRatingAverage = mealRatingCalculator.getAmountRatingAverage(meal.getId()); - Double tasteRatingAverage = mealRatingCalculator.getTasteRatingAverage(meal.getId()); - return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); - } + @Override + public RatingAverages mealAverageRatings(Meal meal) { + Double mainRatingAverage = mealRatingCalculator.getMainRatingAverage(meal.getId()); + Double amountRatingAverage = mealRatingCalculator.getAmountRatingAverage(meal.getId()); + Double tasteRatingAverage = mealRatingCalculator.getTasteRatingAverage(meal.getId()); + return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); + } - @Override - public RatingAverages menuAverageRatings(Menu menu) { - Double mainRatingAverage = menuRatingCalculator.getMainRatingAverage(menu.getId()); - Double amountRatingAverage = menuRatingCalculator.getAmountRatingAverage(menu.getId()); - Double tasteRatingAverage = menuRatingCalculator.getTasteRatingAverage(menu.getId()); - return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); - } + @Override + public RatingAverages menuAverageRatings(Menu menu) { + Double mainRatingAverage = menuRatingCalculator.getMainRatingAverage(menu.getId()); + Double amountRatingAverage = menuRatingCalculator.getAmountRatingAverage(menu.getId()); + Double tasteRatingAverage = menuRatingCalculator.getTasteRatingAverage(menu.getId()); + return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); + } - @Override - public Double mealAverageMainRating(Meal meal) { - return mealRatingCalculator.getMainRatingAverage(meal.getId()); - } + @Override + public Double mealAverageMainRating(Meal meal) { + return mealRatingCalculator.getMainRatingAverage(meal.getId()); + } - @Override - public Double menuAverageMainRating(Menu menu) { - return menuRatingCalculator.getMainRatingAverage(menu.getId()); - } + @Override + public Double menuAverageMainRating(Menu menu) { + return menuRatingCalculator.getMainRatingAverage(menu.getId()); + } - @Override - public long mealTotalReviewCount(Meal meal) { - return mealRatingCounter.getTotalRatingCount(meal.getId()); - } + @Override + public long mealTotalReviewCount(Meal meal) { + return mealRatingCounter.getTotalRatingCount(meal.getId()); + } - private ReviewRatingCount getRatingCount(Map ratingCountMap) { - long oneStarCount = getCount(ratingCountMap, 1); - long twoStarCount = getCount(ratingCountMap, 2); - long threeStarCount = getCount(ratingCountMap, 3); - long fourStarCount = getCount(ratingCountMap, 4); - long fiveStarCount = getCount(ratingCountMap, 5); - return new ReviewRatingCount(oneStarCount, twoStarCount, threeStarCount, fourStarCount, fiveStarCount); - } + private ReviewRatingCount getRatingCount(Map ratingCountMap) { + long oneStarCount = getCount(ratingCountMap, 1); + long twoStarCount = getCount(ratingCountMap, 2); + long threeStarCount = getCount(ratingCountMap, 3); + long fourStarCount = getCount(ratingCountMap, 4); + long fiveStarCount = getCount(ratingCountMap, 5); + return new ReviewRatingCount(oneStarCount, twoStarCount, threeStarCount, fourStarCount, fiveStarCount); + } - private long getCount(Map ratingCountMap, int star) { - return ratingCountMap.getOrDefault(star, 0L); - } + private long getCount(Map ratingCountMap, int star) { + return ratingCountMap.getOrDefault(star, 0L); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index a5eeea65..ad9d3c3d 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -1,9 +1,11 @@ package ssu.eatssu.domain.review.service; import lombok.RequiredArgsConstructor; + import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; + import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -30,131 +32,130 @@ @Transactional public class ReviewService { - private final UserRepository userRepository; - private final ReviewRepository reviewRepository; - private final ReviewImageRepository reviewImageRepository; - private final MenuRepository menuRepository; - private final MealRepository mealRepository; - private final RatingCalculator ratingCalculator; - private final S3Uploader s3Uploader; - - public Review createReview(CustomUserDetails userDetails, Long menuId, ReviewCreateRequest request, - List images) { - - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - - Review review = request.toEntity(user, menu); - - menu.addReview(review); - processReviewImages(images, review); - - return reviewRepository.save(review); - } - - private void processReviewImages(List images, Review review) { - if (images == null || images.isEmpty()) { - return; - } - for (MultipartFile image : images) { - addReviewImage(review, image); - } - } - - private void addReviewImage(Review review, MultipartFile image) { - if (!image.isEmpty()) { - try { - String reviewImageUrl = s3Uploader.upload(image, "reviewImg"); - ReviewImage reviewImage = ReviewImage.builder().review(review) - .imageUrl(reviewImageUrl) - .build(); - reviewImageRepository.save(reviewImage); - } catch (IOException e) { - throw new BaseException(FAIL_IMAGE_UPLOAD); - } - } - } - - public SavedReviewImage uploadImage(MultipartFile image) { - try { - String imageUrl = s3Uploader.upload(image, "reviewImg"); - return new SavedReviewImage(imageUrl); - } catch (IOException e) { - throw new BaseException(FAIL_IMAGE_UPLOAD); - } - } - - public void uploadReview(CustomUserDetails userDetails, Long menuId, UploadReviewRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - - Review review = request.toReviewEntity(user, menu); - reviewRepository.save(review); - - ReviewImage reviewImage = new ReviewImage(review, request.getImageUrl()); - reviewImageRepository.save(reviewImage); - - menu.addReview(review); - } - - public void updateReview(CustomUserDetails userDetails, Long reviewId, - ReviewUpdateRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - if (review.isNotWrittenBy(user)) { - throw new BaseException(REVIEW_PERMISSION_DENIED); - } - - review.update(request.content(), request.mainRating(), request.amountRating(), - request.tasteRating()); - } - - - public void deleteReview(CustomUserDetails userDetails, Long reviewId) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - if (review.isNotWrittenBy(user)) { - throw new BaseException(REVIEW_PERMISSION_DENIED); - } - reviewRepository.delete(review); - reviewRepository.flush(); - } - - public MenuReviewResponse findMenuReviews(Long menuId) { - Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - - RatingAverages ratingAverages = ratingCalculator.menuAverageRatings(menu); - ReviewRatingCount ratingCount = ratingCalculator.menuRatingCount(menu); - - return MenuReviewResponse.of(menu, ratingAverages, ratingCount); - - } - - public MealReviewsResponse findMealReviews(Long mealId) { - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); - - long reviewCount = ratingCalculator.mealTotalReviewCount(meal); - - RatingAverages averageRating = ratingCalculator.mealAverageRatings(meal); - ReviewRatingCount ratingCountMap = ratingCalculator.mealRatingCount(meal); - - return MealReviewsResponse.of(reviewCount, meal.getMenuNames(), averageRating, - ratingCountMap); - } + private final UserRepository userRepository; + private final ReviewRepository reviewRepository; + private final ReviewImageRepository reviewImageRepository; + private final MenuRepository menuRepository; + private final MealRepository mealRepository; + private final RatingCalculator ratingCalculator; + private final S3Uploader s3Uploader; + + public Review createReview(CustomUserDetails userDetails, Long menuId, ReviewCreateRequest request, + List images) { + + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + + Review review = request.toEntity(user, menu); + + menu.addReview(review); + processReviewImages(images, review); + + return reviewRepository.save(review); + } + + private void processReviewImages(List images, Review review) { + if (images == null || images.isEmpty()) { + return; + } + for (MultipartFile image : images) { + addReviewImage(review, image); + } + } + + private void addReviewImage(Review review, MultipartFile image) { + if (!image.isEmpty()) { + try { + String reviewImageUrl = s3Uploader.upload(image, "reviewImg"); + ReviewImage reviewImage = ReviewImage.builder().review(review) + .imageUrl(reviewImageUrl) + .build(); + reviewImageRepository.save(reviewImage); + } catch (IOException e) { + throw new BaseException(FAIL_IMAGE_UPLOAD); + } + } + } + + public SavedReviewImage uploadImage(MultipartFile image) { + try { + String imageUrl = s3Uploader.upload(image, "reviewImg"); + return new SavedReviewImage(imageUrl); + } catch (IOException e) { + throw new BaseException(FAIL_IMAGE_UPLOAD); + } + } + + public void uploadReview(CustomUserDetails userDetails, Long menuId, UploadReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + + Review review = request.toReviewEntity(user, menu); + reviewRepository.save(review); + + ReviewImage reviewImage = new ReviewImage(review, request.getImageUrl()); + reviewImageRepository.save(reviewImage); + + menu.addReview(review); + } + + public void updateReview(CustomUserDetails userDetails, Long reviewId, + ReviewUpdateRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (review.isNotWrittenBy(user)) { + throw new BaseException(REVIEW_PERMISSION_DENIED); + } + + review.update(request.content(), request.mainRating(), request.amountRating(), + request.tasteRating()); + } + + public void deleteReview(CustomUserDetails userDetails, Long reviewId) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (review.isNotWrittenBy(user)) { + throw new BaseException(REVIEW_PERMISSION_DENIED); + } + reviewRepository.delete(review); + reviewRepository.flush(); + } + + public MenuReviewResponse findMenuReviews(Long menuId) { + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + + RatingAverages ratingAverages = ratingCalculator.menuAverageRatings(menu); + ReviewRatingCount ratingCount = ratingCalculator.menuRatingCount(menu); + + return MenuReviewResponse.of(menu, ratingAverages, ratingCount); + + } + + public MealReviewsResponse findMealReviews(Long mealId) { + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + + long reviewCount = ratingCalculator.mealTotalReviewCount(meal); + + RatingAverages averageRating = ratingCalculator.mealAverageRatings(meal); + ReviewRatingCount ratingCountMap = ratingCalculator.mealRatingCount(meal); + + return MealReviewsResponse.of(reviewCount, meal.getMenuNames(), averageRating, + ratingCountMap); + } } diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java index 89cec564..7f327996 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java @@ -4,15 +4,15 @@ public enum SlackChannel { - REPORT_CHANNEL("#신고"), - ADDMENU_CHANNEL("#메뉴_추가"), - ERROR_CHANNEL("#장애"), - USER_INQUIRY_CHANNEL("#유저-문의"); + REPORT_CHANNEL("#신고"), + ADDMENU_CHANNEL("#메뉴_추가"), + ERROR_CHANNEL("#장애"), + USER_INQUIRY_CHANNEL("#유저-문의"); - @Getter - private String krName; + @Getter + private String krName; - SlackChannel(String krName) { - this.krName = krName; - } + SlackChannel(String krName) { + this.krName = krName; + } } diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java index bd6aa71a..cca596d2 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.slack.entity; import org.springframework.stereotype.Component; + import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.review.entity.Report; import ssu.eatssu.domain.review.entity.Review; @@ -11,55 +12,55 @@ @Component public class SlackMessageFormat { - private SlackMessageFormat() { - } + private SlackMessageFormat() { + } - public static String sendReport(Report report) { - User reporter = report.getUser(); - Review review = report.getReview(); - MessageFormat messageFormat = new MessageFormat( - """ - =================== - *신고자 INFO* - - 신고자 ID: {0} - - 닉네임: {1} - *신고된 리뷰 INFO* - - 리뷰 ID: {2} - - 리뷰 작성자 ID : {3} - - 리뷰 작성자 닉네임 : {4} - - 리뷰 메뉴: {5} - - 리뷰 내용: {6} - - 리뷰 날짜: {7} - *신고 INFO* - - 신고사유: {8} - - 신고내용: {9} - - 신고 날짜: {10} - =================== - """ - ); - Object[] args = {reporter.getId(), reporter.getNickname(), review.getId(), review.getUser().getId(), - review.getUser().getNickname(), review.getMenu().getName(), review.getContent(), - review.getModifiedDate().toString(), report.getReportType().getDescription(), report.getContent(), - report.getCreatedDate()}; - return messageFormat.format(args); - } + public static String sendReport(Report report) { + User reporter = report.getUser(); + Review review = report.getReview(); + MessageFormat messageFormat = new MessageFormat( + """ + =================== + *신고자 INFO* + - 신고자 ID: {0} + - 닉네임: {1} + *신고된 리뷰 INFO* + - 리뷰 ID: {2} + - 리뷰 작성자 ID : {3} + - 리뷰 작성자 닉네임 : {4} + - 리뷰 메뉴: {5} + - 리뷰 내용: {6} + - 리뷰 날짜: {7} + *신고 INFO* + - 신고사유: {8} + - 신고내용: {9} + - 신고 날짜: {10} + =================== + """ + ); + Object[] args = {reporter.getId(), reporter.getNickname(), review.getId(), review.getUser().getId(), + review.getUser().getNickname(), review.getMenu().getName(), review.getContent(), + review.getModifiedDate().toString(), report.getReportType().getDescription(), report.getContent(), + report.getCreatedDate()}; + return messageFormat.format(args); + } - public static String sendUserInquiry(Inquiry inquiry) { - MessageFormat messageFormat = new MessageFormat( - """ - =================== - *문의 INFO* - - 문의자 ID: {0} - - 닉네임: {1} - - 이메일: {2} - *문의 내용* - - Date: {3} - - Content: {4} - =================== - """ - ); - Object[] args = {inquiry.getUser().getId(), inquiry.getUser().getNickname(), inquiry.getUser().getEmail() - , inquiry.getCreatedDate(), inquiry.getContent()}; - return messageFormat.format(args); - } + public static String sendUserInquiry(Inquiry inquiry) { + MessageFormat messageFormat = new MessageFormat( + """ + =================== + *문의 INFO* + - 문의자 ID: {0} + - 닉네임: {1} + - 이메일: {2} + *문의 내용* + - Date: {3} + - Content: {4} + =================== + """ + ); + Object[] args = {inquiry.getUser().getId(), inquiry.getUser().getNickname(), inquiry.getUser().getEmail() + , inquiry.getCreatedDate(), inquiry.getContent()}; + return messageFormat.format(args); + } } diff --git a/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java b/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java index 3062b348..1d9d527c 100644 --- a/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java +++ b/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java @@ -4,9 +4,12 @@ import com.slack.api.methods.MethodsClient; import com.slack.api.methods.SlackApiException; import com.slack.api.methods.request.chat.ChatPostMessageRequest; + import lombok.extern.slf4j.Slf4j; + import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; + import ssu.eatssu.domain.slack.entity.SlackChannel; import java.io.IOException; @@ -15,26 +18,26 @@ @Service public class SlackService { - @Value(value = "${slack.token}") - String slackToken; + @Value(value = "${slack.token}") + String slackToken; - public void sendSlackMessage(String message, SlackChannel channel) { + public void sendSlackMessage(String message, SlackChannel channel) { - String channelAddress = channel.getKrName(); + String channelAddress = channel.getKrName(); - try { - MethodsClient methods = Slack.getInstance().methods(slackToken); + try { + MethodsClient methods = Slack.getInstance().methods(slackToken); - ChatPostMessageRequest request = ChatPostMessageRequest.builder() - .channel(channelAddress) - .text(message) - .build(); + ChatPostMessageRequest request = ChatPostMessageRequest.builder() + .channel(channelAddress) + .text(message) + .build(); - methods.chatPostMessage(request); + methods.chatPostMessage(request); - log.info("Slack " + channel + " 에 메시지 보냄"); - } catch (SlackApiException | IOException e) { - log.error(e.getMessage()); - } - } + log.info("Slack " + channel + " 에 메시지 보냄"); + } catch (SlackApiException | IOException e) { + log.error(e.getMessage()); + } + } } diff --git a/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java b/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java index fd82109a..b74659b6 100644 --- a/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java +++ b/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java @@ -12,16 +12,16 @@ @Builder @Getter public class SliceResponse { - @Schema(description = "현재 넘겨준 페이지에 넘어간 개수(마지막 페이지일시, size 보다 작을 수 있음)", example = "20") - private int numberOfElements; + @Schema(description = "현재 넘겨준 페이지에 넘어간 개수(마지막 페이지일시, size 보다 작을 수 있음)", example = "20") + private int numberOfElements; - @Schema(description = "다음페이지가 있는지 알려주는 값(마지막 페이지라면 false)", example = "true") - private boolean hasNext; + @Schema(description = "다음페이지가 있는지 알려주는 값(마지막 페이지라면 false)", example = "true") + private boolean hasNext; - @Schema(description = "데이터 리스트") - private List dataList; + @Schema(description = "데이터 리스트") + private List dataList; - public static SliceResponse empty() { - return new SliceResponse<>(0, false, Collections.emptyList()); - } + public static SliceResponse empty() { + return new SliceResponse<>(0, false, Collections.emptyList()); + } } diff --git a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java index 88ccedbb..c0c7b3a1 100644 --- a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java +++ b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java @@ -1,9 +1,11 @@ package ssu.eatssu.domain.slice.service; import lombok.RequiredArgsConstructor; + import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; + import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -29,73 +31,73 @@ @RequiredArgsConstructor public class SliceService { - private final UserRepository userRepository; - private final ReviewRepository reviewRepository; - private final MenuRepository menuRepository; - private final MealRepository mealRepository; - - public SliceResponse findMyReviews( - CustomUserDetails userDetails, - Pageable pageable, - Long lastReviewId) { - - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, - pageable); - - return convertToMyReviewDetail(sliceReviews); - } - - public SliceResponse findReviews(MenuType menuType, - Long menuId, - Long mealId, - Pageable pageable, - Long lastReviewId, - CustomUserDetails userDetails) { - Slice sliceReviews = null; - if (menuType == MenuType.FIXED) { - Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - sliceReviews = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, - pageable); - } - - if (menuType == MenuType.VARIABLE) { - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - sliceReviews = reviewRepository.findAllByMealOrderByIdDesc(meal, lastReviewId, - pageable); - } - - Long userId = (userDetails != null) ? userDetails.getId() : null; - return convertToReviewDetail(sliceReviews, userId); - } - - private SliceResponse convertToReviewDetail(Slice sliceReviews, - Long userId) { - List reviewDetails = sliceReviews.getContent().stream() - .map(review -> ReviewDetail.from(review, userId)) - .collect(Collectors.toList()); - - return SliceResponse.builder() - .numberOfElements(sliceReviews.getNumberOfElements()) - .hasNext(sliceReviews.hasNext()) - .dataList(reviewDetails) - .build(); - } - - private SliceResponse convertToMyReviewDetail(Slice sliceReviews) { - List myReviewDetails = sliceReviews.getContent().stream() - .map(MyReviewDetail::from) - .collect(Collectors.toList()); - - return SliceResponse.builder() - .numberOfElements(sliceReviews.getNumberOfElements()) - .hasNext(sliceReviews.hasNext()) - .dataList(myReviewDetails) - .build(); - } + private final UserRepository userRepository; + private final ReviewRepository reviewRepository; + private final MenuRepository menuRepository; + private final MealRepository mealRepository; + + public SliceResponse findMyReviews( + CustomUserDetails userDetails, + Pageable pageable, + Long lastReviewId) { + + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, + pageable); + + return convertToMyReviewDetail(sliceReviews); + } + + public SliceResponse findReviews(MenuType menuType, + Long menuId, + Long mealId, + Pageable pageable, + Long lastReviewId, + CustomUserDetails userDetails) { + Slice sliceReviews = null; + if (menuType == MenuType.FIXED) { + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + sliceReviews = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, + pageable); + } + + if (menuType == MenuType.VARIABLE) { + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + sliceReviews = reviewRepository.findAllByMealOrderByIdDesc(meal, lastReviewId, + pageable); + } + + Long userId = (userDetails != null) ? userDetails.getId() : null; + return convertToReviewDetail(sliceReviews, userId); + } + + private SliceResponse convertToReviewDetail(Slice sliceReviews, + Long userId) { + List reviewDetails = sliceReviews.getContent().stream() + .map(review -> ReviewDetail.from(review, userId)) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(reviewDetails) + .build(); + } + + private SliceResponse convertToMyReviewDetail(Slice sliceReviews) { + List myReviewDetails = sliceReviews.getContent().stream() + .map(MyReviewDetail::from) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(myReviewDetails) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/department/entity/College.java b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java index 38fa20d3..59843e86 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/entity/College.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java @@ -13,17 +13,17 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class College { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "college_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "college_id") + private Long id; - @Column(nullable = false, unique = true) - private String name; + @Column(nullable = false, unique = true) + private String name; - @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) - private List departments = new ArrayList<>(); + @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) + private List departments = new ArrayList<>(); - @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) - private List partnershipColleges = new ArrayList<>(); + @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) + private List partnershipColleges = new ArrayList<>(); } diff --git a/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java index 4d75d71a..1419c1c7 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java @@ -13,18 +13,18 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Department { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "department_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "department_id") + private Long id; - @Column(nullable = false) - private String name; + @Column(nullable = false) + private String name; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "college_id") - private College college; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "college_id") + private College college; - @OneToMany(mappedBy = "department", cascade = CascadeType.ALL, orphanRemoval = true) - private List partnershipDepartments = new ArrayList<>(); + @OneToMany(mappedBy = "department", cascade = CascadeType.ALL, orphanRemoval = true) + private List partnershipDepartments = new ArrayList<>(); } diff --git a/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java b/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java index 4e7c6d89..6e32ce11 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java @@ -1,10 +1,11 @@ package ssu.eatssu.domain.user.department.persistence; import org.springframework.data.jpa.repository.JpaRepository; + import ssu.eatssu.domain.user.department.entity.College; import java.util.Optional; public interface CollegeRepository extends JpaRepository { - Optional findByName(String name); + Optional findByName(String name); } diff --git a/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java b/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java index 942e4063..9be39ece 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java @@ -1,10 +1,11 @@ package ssu.eatssu.domain.user.department.persistence; import org.springframework.data.jpa.repository.JpaRepository; + import ssu.eatssu.domain.user.department.entity.Department; import java.util.Optional; public interface DepartmentRepository extends JpaRepository { - Optional findByName(String name); + Optional findByName(String name); } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java index 7df39fdb..ef62a91b 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java @@ -6,5 +6,5 @@ @Getter @AllArgsConstructor public class DepartmentResponse { - private String departmentName; + private String departmentName; } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index c3c4a559..ccc1d6ba 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -15,31 +15,31 @@ @Schema(title = "리뷰 상세 - 내 리뷰 리스트 조회 용") @Getter public class MyMealReviewResponse { - @Schema(description = "리뷰 식별자", example = "123") - Long reviewId; + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; - @Schema(description = "평점", example = "4") - private Integer rating; + @Schema(description = "평점", example = "4") + private Integer rating; - @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") - private LocalDate writtenAt; + @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") + private LocalDate writtenAt; - @Schema(description = "리뷰 내용", example = "맛있습니당") - private String content; + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imageUrls; + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; - public static MyMealReviewResponse from(Review review) { - List imgUrlList = new ArrayList<>(); - review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); + public static MyMealReviewResponse from(Review review) { + List imgUrlList = new ArrayList<>(); + review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); - return MyMealReviewResponse.builder() - .reviewId(review.getId()) - .rating(review.getRating()) - .writtenAt(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .imageUrls(imgUrlList) - .build(); - } + return MyMealReviewResponse.builder() + .reviewId(review.getId()) + .rating(review.getRating()) + .writtenAt(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imageUrls(imgUrlList) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java index d5d7d529..22d0b19e 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java @@ -11,9 +11,9 @@ @Schema(title = "마이페이지 정보") @Getter public class MyPageResponse { - @Schema(description = "닉네임", example = "피치푸치") - private String nickname; + @Schema(description = "닉네임", example = "피치푸치") + private String nickname; - @Schema(description = "연결 계정 정보", example = "피치푸치") - private OAuthProvider provider; + @Schema(description = "연결 계정 정보", example = "피치푸치") + private OAuthProvider provider; } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java index ae63ec76..1e30e549 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java @@ -16,44 +16,44 @@ @Getter public class MyReviewDetail { - @Schema(description = "리뷰 식별자", example = "123") - Long reviewId; + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; - @Schema(description = "평점-메인", example = "4") - private Integer mainRating; + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; - @Schema(description = "평점-양", example = "4") - private Integer amountRating; + @Schema(description = "평점-양", example = "4") + private Integer amountRating; - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; - @Schema(description = "리뷰 작성 날짜(format = yyyyMMdd)", example = "20230407") - private LocalDate writeDate; + @Schema(description = "리뷰 작성 날짜(format = yyyyMMdd)", example = "20230407") + private LocalDate writeDate; - @Schema(description = "메뉴 이름", example = "돈까스") - private String menuName; + @Schema(description = "메뉴 이름", example = "돈까스") + private String menuName; - @Schema(description = "리뷰 내용", example = "맛있습니당") - private String content; + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imgUrlList; + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imgUrlList; - public static MyReviewDetail from(Review review) { + public static MyReviewDetail from(Review review) { - List imgUrlList = new ArrayList<>(); - review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); + List imgUrlList = new ArrayList<>(); + review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); - return MyReviewDetail.builder() - .reviewId(review.getId()) - .mainRating(review.getRatings().getMainRating()) - .amountRating(review.getRatings().getAmountRating()) - .tasteRating(review.getRatings().getTasteRating()) - .writeDate(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .imgUrlList(imgUrlList) - .menuName(review.getMenu().getName()) - .build(); - } + return MyReviewDetail.builder() + .reviewId(review.getId()) + .mainRating(review.getRatings().getMainRating()) + .amountRating(review.getRatings().getAmountRating()) + .tasteRating(review.getRatings().getTasteRating()) + .writeDate(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imgUrlList(imgUrlList) + .menuName(review.getMenu().getName()) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java b/src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java index 10fcaef0..f55579b0 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java @@ -5,6 +5,6 @@ @Schema(title = "닉네임 수정") public record NicknameUpdateRequest( - @NotBlank(message = "닉네임을 입력해주세요.") @Schema(description = "닉네임", example = "jumukzzang") String nickname) { + @NotBlank(message = "닉네임을 입력해주세요.") @Schema(description = "닉네임", example = "jumukzzang") String nickname) { } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java b/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java index b848f223..a97686a3 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java @@ -8,15 +8,15 @@ @Getter public class Tokens { - @Schema(description = "accessToken", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjEsXCJlbWFpbFwiOlwiZW1haWxAZW1haWwuY29tXCJ9IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY3OTIyNzc0NX0.gM7F00Dh7OvybtEYODxYqFNATDDdquGCIivAeifNrEnF1ush3Fx1ChWqwD60U6Ek7rmJRU3CUUFAMLUrWDi4Aw") - private String accessToken; + @Schema(description = "accessToken", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjEsXCJlbWFpbFwiOlwiZW1haWxAZW1haWwuY29tXCJ9IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY3OTIyNzc0NX0.gM7F00Dh7OvybtEYODxYqFNATDDdquGCIivAeifNrEnF1ush3Fx1ChWqwD60U6Ek7rmJRU3CUUFAMLUrWDi4Aw") + private String accessToken; - @Schema(description = "refreshToken", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjEsXCJlbWFpbFwiOlwiZW1haWxAZW1haWwuY29tXCJ9IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY3OTgzMDc0NX0.OBtrGGKuSujBxwLTNVs-sc4eEH8uYiG8-Cwomqb_OgB9ADVbWbtSqaml9Ll34TFrKhPZuhMvzdchsWHqMQQ_kg") - private String refreshToken; + @Schema(description = "refreshToken", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjEsXCJlbWFpbFwiOlwiZW1haWxAZW1haWwuY29tXCJ9IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY3OTgzMDc0NX0.OBtrGGKuSujBxwLTNVs-sc4eEH8uYiG8-Cwomqb_OgB9ADVbWbtSqaml9Ll34TFrKhPZuhMvzdchsWHqMQQ_kg") + private String refreshToken; - @Builder - public Tokens(String accessToken, String refreshToken) { - this.accessToken = accessToken; - this.refreshToken = refreshToken; - } + @Builder + public Tokens(String accessToken, String refreshToken) { + this.accessToken = accessToken; + this.refreshToken = refreshToken; + } } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java b/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java index c93bd8b1..72acf3df 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java @@ -10,6 +10,6 @@ @AllArgsConstructor @NoArgsConstructor public class UpdateDepartmentRequest { - @Schema(description = "학과 이름", example = "소프트") - private String departmentName; + @Schema(description = "학과 이름", example = "소프트") + private String departmentName; } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java b/src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java index c975acf3..be2fe755 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java @@ -4,6 +4,7 @@ import jakarta.persistence.EntityListeners; import jakarta.persistence.MappedSuperclass; import lombok.Getter; + import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; @@ -15,12 +16,12 @@ @EntityListeners(AuditingEntityListener.class) public abstract class BaseTimeEntity { - @Column(nullable = false) - @CreatedDate - private LocalDateTime createdDate; + @Column(nullable = false) + @CreatedDate + private LocalDateTime createdDate; - @Column(nullable = false) - @LastModifiedDate - private LocalDateTime modifiedDate; + @Column(nullable = false) + @LastModifiedDate + private LocalDateTime modifiedDate; } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/user/entity/Role.java b/src/main/java/ssu/eatssu/domain/user/entity/Role.java index 19780594..e8bd61cb 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/Role.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/Role.java @@ -1,24 +1,25 @@ package ssu.eatssu.domain.user.entity; import lombok.Getter; + import org.springframework.security.core.GrantedAuthority; @Getter public enum Role implements GrantedAuthority { - USER("ROLE_USER", "유저"), - ADMIN("ROLE_ADMIN", "관리자"); + USER("ROLE_USER", "유저"), + ADMIN("ROLE_ADMIN", "관리자"); - private final String authority; - private final String description; + private final String authority; + private final String description; - Role(String authority, String description) { - this.authority = authority; - this.description = description; - } + Role(String authority, String description) { + this.authority = authority; + this.description = description; + } - @Override - public String getAuthority() { - return authority; - } + @Override + public String getAuthority() { + return authority; + } } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index b5ae638d..05c822b3 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -1,11 +1,12 @@ package ssu.eatssu.domain.user.entity; - import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; + import org.jetbrains.annotations.NotNull; + import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.partnership.entity.PartnershipLike; @@ -22,92 +23,92 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) public class User extends BaseTimeEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "user_id") - private Long id; - - @Enumerated(EnumType.STRING) - private Role role; - - @Column(unique = true) - private String email; - - private String nickname; - - @Enumerated(EnumType.STRING) - private OAuthProvider provider; - - private String providerId; - - private String credentials; - - @Enumerated(EnumType.STRING) - private UserStatus status; - - @OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE - , CascadeType.REFRESH}) - private List reviews = new ArrayList<>(); - - @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) - private List reviewReports = new ArrayList<>(); - - @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) - private List userInquiries = new ArrayList<>(); - - @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) - private List reviewLikes = new ArrayList<>(); - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "department_id") - private Department department; - - @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) - private List partnershipLikes = new ArrayList<>(); - - /** - * Oauth 회원가입 용 생성자 - */ - private User(@NotNull String email, String nickname, @NotNull Role role, @NotNull OAuthProvider provider, - @NotNull String providerId, @NotNull UserStatus status, @NotNull String credentials) { - this.email = email; - this.nickname = nickname; - this.role = role; - this.provider = provider; - this.providerId = providerId; - this.status = status; - this.credentials = credentials; - } - - /** - * <--Static Factory Method--> - * Oauth 회원가입 - */ - public static User create(@NotNull String email, @NotNull String nickname, @NotNull OAuthProvider provider, - String providerId, - String credentials) { - return new User(email, nickname, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials); - } - - /** - * <--Static Factory Method--> - * admin 회원가입 - * Role 은 다른 방법으로 세팅할 예정 - */ - public static User adminJoin(@NotNull String loginId, @NotNull String credentials) { - return new User(loginId, null, Role.USER, OAuthProvider.EATSSU, loginId, UserStatus.INACTIVE, credentials); - } - - public void updateNickname(@NotNull String nickname) { - this.nickname = nickname; - } - - public void updateEmail(String email) { - this.email = email; - } - - public void updateDepartment(Department department) { - this.department = department; - } + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_id") + private Long id; + + @Enumerated(EnumType.STRING) + private Role role; + + @Column(unique = true) + private String email; + + private String nickname; + + @Enumerated(EnumType.STRING) + private OAuthProvider provider; + + private String providerId; + + private String credentials; + + @Enumerated(EnumType.STRING) + private UserStatus status; + + @OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE + , CascadeType.REFRESH}) + private List reviews = new ArrayList<>(); + + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) + private List reviewReports = new ArrayList<>(); + + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) + private List userInquiries = new ArrayList<>(); + + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) + private List reviewLikes = new ArrayList<>(); + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "department_id") + private Department department; + + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) + private List partnershipLikes = new ArrayList<>(); + + /** + * Oauth 회원가입 용 생성자 + */ + private User(@NotNull String email, String nickname, @NotNull Role role, @NotNull OAuthProvider provider, + @NotNull String providerId, @NotNull UserStatus status, @NotNull String credentials) { + this.email = email; + this.nickname = nickname; + this.role = role; + this.provider = provider; + this.providerId = providerId; + this.status = status; + this.credentials = credentials; + } + + /** + * <--Static Factory Method--> + * Oauth 회원가입 + */ + public static User create(@NotNull String email, @NotNull String nickname, @NotNull OAuthProvider provider, + String providerId, + String credentials) { + return new User(email, nickname, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials); + } + + /** + * <--Static Factory Method--> + * admin 회원가입 + * Role 은 다른 방법으로 세팅할 예정 + */ + public static User adminJoin(@NotNull String loginId, @NotNull String credentials) { + return new User(loginId, null, Role.USER, OAuthProvider.EATSSU, loginId, UserStatus.INACTIVE, credentials); + } + + public void updateNickname(@NotNull String nickname) { + this.nickname = nickname; + } + + public void updateEmail(String email) { + this.email = email; + } + + public void updateDepartment(Department department) { + this.department = department; + } } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/UserStatus.java b/src/main/java/ssu/eatssu/domain/user/entity/UserStatus.java index 4f374c39..3827d4e1 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/UserStatus.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/UserStatus.java @@ -4,5 +4,5 @@ @Getter public enum UserStatus { - ACTIVE, INACTIVE + ACTIVE, INACTIVE } diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 8fb02d9a..7230d116 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -10,12 +10,14 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; + import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.web.PageableDefault; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; + import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.PartnershipResponse; import ssu.eatssu.domain.partnership.service.PartnershipService; @@ -34,163 +36,166 @@ @Tag(name = "User", description = "유저 API") public class UserController { - private final UserService userService; - private final SliceService sliceService; - private final MealReviewService mealReviewService; - private final PartnershipService partnershipService; - - @Operation(summary = "이메일 중복 체크", description = """ - 이메일 중복 체크 API 입니다.

- 중복되지 않은 이메일이면 true 를 반환합니다 - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "중복되지 않은 이메일") - }) - @PostMapping("/validate/email/{email}") //todo: 중복인 경우 error throw, 중복 아니면 ApiReposne return - public BaseResponse validateDuplicatedEmail( - @Parameter(description = "이메일") @PathVariable String email) { - return BaseResponse.success(userService.validateDuplicatedEmail(email)); - } - - @Operation(summary = "닉네임 중복 체크", description = """ - 닉네임 중복 체크 API 입니다.

- 중복되지 않은 닉네임이면 true 를 반환합니다 - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임") - }) - @GetMapping("/validate/nickname") - public BaseResponse validateDuplicatedNickname(@Parameter(description = "닉네임") - @RequestParam(value = "nickname") String nickname) { - return BaseResponse.success(userService.validateDuplicatedNickname(nickname)); - } - - @Operation(summary = "닉네임 수정", description = "닉네임 수정 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "닉네임 수정 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PatchMapping("/nickname") - public BaseResponse updateNickname( - @Valid @RequestBody NicknameUpdateRequest updateNicknameRequest, - @AuthenticationPrincipal CustomUserDetails userDetails) { - userService.updateNickname(userDetails, updateNicknameRequest); - return BaseResponse.success(); - } - - @Operation(summary = "유저 탈퇴", description = "유저 탈퇴 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("") - public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(userService.withdraw(userDetails)); - } - - @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/reviews") - public BaseResponse> getMyReviewList( - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = sliceService.findMyReviews(customUserDetails, - pageable, - lastReviewId); - return BaseResponse.success(myReviews); - } - - @Operation(summary = "내가 쓴 리뷰 리스트 조회 V2", description = "내가 쓴 리뷰 리스트를 조회하는 API V2 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/v2/reviews") - public BaseResponse> getMyReviews( - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = mealReviewService.findMyReviews(customUserDetails, - lastReviewId, - pageable); - return BaseResponse.success(myReviews); - } - - @Operation(summary = "마이페이지 정보 조회", description = "마이페이지 정보를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/mypage") - public BaseResponse getMyPage( - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - return BaseResponse.success(userService.findMyPage(customUserDetails)); - } - - @Operation(summary = "유저가 찜한 제휴 조회", description = "유저가 찜한 제휴를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저가 찜한 제휴 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/partnerships") - public BaseResponse> getUserLikedPartnerships(@AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(partnershipService.getUserLikedPartnerships(userDetails)); - } - - @Operation(summary = "유저의 학과 등록", description = "유저의 학과를 등록하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저의 학과 등록 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 학과", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @PostMapping("/department") - public BaseResponse registerDepartment(@RequestBody UpdateDepartmentRequest request, @AuthenticationPrincipal CustomUserDetails userDetails) { - userService.registerDepartment(request, userDetails); - return BaseResponse.success(); - } - - @Operation(summary = "유저의 단과대/학과 제휴 조회", description = "유저의 단과대/학과 제휴를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저의 단과대/학과 제휴 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/department/partnerships") - public BaseResponse> getUserDepartmentPartnerships(@AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(partnershipService.getUserDepartmentPartnerships(userDetails)); - } - - @Operation(summary = "학과 기입 여부 체크", description = """ - 학과 기입 여부 체크 API 입니다.

- 학과를 기입했으면 true, 아니면 false 를 반환합니다 - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "학과 기입함") - }) - @GetMapping("/validate/department") - public BaseResponse validateDepartmentExists(@AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(userService.validateDepartmentExists(userDetails)); - } - - @Operation(summary = "유저의 학과 조회", description = "유저의 학과를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저의 학과 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/department") - public BaseResponse getDepartment(@AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(userService.getDepartment(userDetails)); - } + private final UserService userService; + private final SliceService sliceService; + private final MealReviewService mealReviewService; + private final PartnershipService partnershipService; + + @Operation(summary = "이메일 중복 체크", description = """ + 이메일 중복 체크 API 입니다.

+ 중복되지 않은 이메일이면 true 를 반환합니다 + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "중복되지 않은 이메일") + }) + @PostMapping("/validate/email/{email}") //todo: 중복인 경우 error throw, 중복 아니면 ApiReposne return + public BaseResponse validateDuplicatedEmail( + @Parameter(description = "이메일") @PathVariable String email) { + return BaseResponse.success(userService.validateDuplicatedEmail(email)); + } + + @Operation(summary = "닉네임 중복 체크", description = """ + 닉네임 중복 체크 API 입니다.

+ 중복되지 않은 닉네임이면 true 를 반환합니다 + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임") + }) + @GetMapping("/validate/nickname") + public BaseResponse validateDuplicatedNickname(@Parameter(description = "닉네임") + @RequestParam(value = "nickname") String nickname) { + return BaseResponse.success(userService.validateDuplicatedNickname(nickname)); + } + + @Operation(summary = "닉네임 수정", description = "닉네임 수정 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "닉네임 수정 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PatchMapping("/nickname") + public BaseResponse updateNickname( + @Valid @RequestBody NicknameUpdateRequest updateNicknameRequest, + @AuthenticationPrincipal CustomUserDetails userDetails) { + userService.updateNickname(userDetails, updateNicknameRequest); + return BaseResponse.success(); + } + + @Operation(summary = "유저 탈퇴", description = "유저 탈퇴 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("") + public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(userService.withdraw(userDetails)); + } + + @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/reviews") + public BaseResponse> getMyReviewList( + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = sliceService.findMyReviews(customUserDetails, + pageable, + lastReviewId); + return BaseResponse.success(myReviews); + } + + @Operation(summary = "내가 쓴 리뷰 리스트 조회 V2", description = "내가 쓴 리뷰 리스트를 조회하는 API V2 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/v2/reviews") + public BaseResponse> getMyReviews( + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = mealReviewService.findMyReviews(customUserDetails, + lastReviewId, + pageable); + return BaseResponse.success(myReviews); + } + + @Operation(summary = "마이페이지 정보 조회", description = "마이페이지 정보를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/mypage") + public BaseResponse getMyPage( + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + return BaseResponse.success(userService.findMyPage(customUserDetails)); + } + + @Operation(summary = "유저가 찜한 제휴 조회", description = "유저가 찜한 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저가 찜한 제휴 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @GetMapping("/partnerships") + public BaseResponse> getUserLikedPartnerships( + @AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(partnershipService.getUserLikedPartnerships(userDetails)); + } + + @Operation(summary = "유저의 학과 등록", description = "유저의 학과를 등록하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저의 학과 등록 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 학과", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @PostMapping("/department") + public BaseResponse registerDepartment(@RequestBody UpdateDepartmentRequest request, + @AuthenticationPrincipal CustomUserDetails userDetails) { + userService.registerDepartment(request, userDetails); + return BaseResponse.success(); + } + + @Operation(summary = "유저의 단과대/학과 제휴 조회", description = "유저의 단과대/학과 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저의 단과대/학과 제휴 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @GetMapping("/department/partnerships") + public BaseResponse> getUserDepartmentPartnerships( + @AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(partnershipService.getUserDepartmentPartnerships(userDetails)); + } + + @Operation(summary = "학과 기입 여부 체크", description = """ + 학과 기입 여부 체크 API 입니다.

+ 학과를 기입했으면 true, 아니면 false 를 반환합니다 + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "학과 기입함") + }) + @GetMapping("/validate/department") + public BaseResponse validateDepartmentExists(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(userService.validateDepartmentExists(userDetails)); + } + + @Operation(summary = "유저의 학과 조회", description = "유저의 학과를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저의 학과 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @GetMapping("/department") + public BaseResponse getDepartment(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(userService.getDepartment(userDetails)); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java index ea4f9cf9..5bf6bf79 100644 --- a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java @@ -1,16 +1,17 @@ package ssu.eatssu.domain.user.repository; import org.springframework.data.jpa.repository.JpaRepository; + import ssu.eatssu.domain.user.entity.User; import java.util.Optional; public interface UserRepository extends JpaRepository { - boolean existsByEmail(String email); + boolean existsByEmail(String email); - boolean existsByNickname(String nickname); + boolean existsByNickname(String nickname); - Optional findByEmail(String email); + Optional findByEmail(String email); - Optional findByProviderId(String providerId); + Optional findByProviderId(String providerId); } diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index c38b72e3..6f4ee603 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -3,9 +3,11 @@ import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; + import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.review.entity.Review; @@ -30,82 +32,82 @@ @Component public class UserService { - private final UserRepository userRepository; - private final PasswordEncoder passwordEncoder; - private final DepartmentRepository departmentRepository; - - public User join(String email, OAuthProvider provider, String providerId) { - String credentials = createCredentials(provider, providerId); - String nickname = createNickname(); - User user = User.create(email, nickname, provider, providerId, credentials); - return userRepository.save(user); - } - - public void updateNickname(CustomUserDetails userDetails, NicknameUpdateRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - user.updateNickname(request.nickname()); - } - - public MyPageResponse findMyPage(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - return new MyPageResponse(user.getNickname(), user.getProvider()); - } - - public boolean withdraw(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - user.getReviews().forEach(Review::clearUser); - user.getUserInquiries().forEach(inquiry -> inquiry.clearUser()); - userRepository.delete(user); - - return true; - } - - public Boolean validateDuplicatedEmail(String email) { - return !userRepository.existsByEmail(email); - } - - public Boolean validateDuplicatedNickname(String nickname) { - return !userRepository.existsByNickname(nickname); - } - - public String createNickname() { - String uuid = UUID.randomUUID().toString(); - String shortUUID = uuid.substring(0, 4); - return "user-" + shortUUID; - } - - private String createCredentials(OAuthProvider provider, String providerId) { - return passwordEncoder.encode(provider + providerId); - } - - @Transactional - public void registerDepartment(UpdateDepartmentRequest request, CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Department department = departmentRepository.findByName(request.getDepartmentName()) - .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); - - user.updateDepartment(department); - } - - public Boolean validateDepartmentExists(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - return user.getDepartment() != null; - } - - public DepartmentResponse getDepartment(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Department department = user.getDepartment(); - if (department == null) { - throw new BaseException(MISSING_USER_DEPARTMENT); - } - return new DepartmentResponse(department.getName()); - } + private final UserRepository userRepository; + private final PasswordEncoder passwordEncoder; + private final DepartmentRepository departmentRepository; + + public User join(String email, OAuthProvider provider, String providerId) { + String credentials = createCredentials(provider, providerId); + String nickname = createNickname(); + User user = User.create(email, nickname, provider, providerId, credentials); + return userRepository.save(user); + } + + public void updateNickname(CustomUserDetails userDetails, NicknameUpdateRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + user.updateNickname(request.nickname()); + } + + public MyPageResponse findMyPage(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + return new MyPageResponse(user.getNickname(), user.getProvider()); + } + + public boolean withdraw(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + user.getReviews().forEach(Review::clearUser); + user.getUserInquiries().forEach(inquiry -> inquiry.clearUser()); + userRepository.delete(user); + + return true; + } + + public Boolean validateDuplicatedEmail(String email) { + return !userRepository.existsByEmail(email); + } + + public Boolean validateDuplicatedNickname(String nickname) { + return !userRepository.existsByNickname(nickname); + } + + public String createNickname() { + String uuid = UUID.randomUUID().toString(); + String shortUUID = uuid.substring(0, 4); + return "user-" + shortUUID; + } + + private String createCredentials(OAuthProvider provider, String providerId) { + return passwordEncoder.encode(provider + providerId); + } + + @Transactional + public void registerDepartment(UpdateDepartmentRequest request, CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + Department department = departmentRepository.findByName(request.getDepartmentName()) + .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); + + user.updateDepartment(department); + } + + public Boolean validateDepartmentExists(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + return user.getDepartment() != null; + } + + public DepartmentResponse getDepartment(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + Department department = user.getDepartment(); + if (department == null) { + throw new BaseException(MISSING_USER_DEPARTMENT); + } + return new DepartmentResponse(department.getName()); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java b/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java index 5d7f5e4d..e809857e 100644 --- a/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java +++ b/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java @@ -6,28 +6,28 @@ import java.util.List; public class UserAliasUtil { - public static String getUserAlias(User user, List reviews) { - if (reviews == null || reviews.isEmpty()) { - return "미슈테리 미식가"; - } - double avg = reviews.stream() - .mapToInt(Review::getRating) - .average() - .orElse(0.0); - int avgRating = (int) Math.round(avg); - switch (avgRating) { - case 1: - return "깐깐슈"; - case 2: - return "아이슈"; - case 3: - return "밸런슈"; - case 4: - return "딱좋슈"; - case 5: - return "다 맛있슈"; - default: - return "미슈테리 미식가"; - } - } + public static String getUserAlias(User user, List reviews) { + if (reviews == null || reviews.isEmpty()) { + return "미슈테리 미식가"; + } + double avg = reviews.stream() + .mapToInt(Review::getRating) + .average() + .orElse(0.0); + int avgRating = (int)Math.round(avg); + switch (avgRating) { + case 1: + return "깐깐슈"; + case 2: + return "아이슈"; + case 3: + return "밸런슈"; + case 4: + return "딱좋슈"; + case 5: + return "다 맛있슈"; + default: + return "미슈테리 미식가"; + } + } } diff --git a/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java b/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java index 8262a5ce..23cc6f3f 100644 --- a/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java +++ b/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java @@ -1,20 +1,22 @@ package ssu.eatssu.global.config; import com.querydsl.jpa.impl.JPAQueryFactory; + import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; + import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class QueryDslConfig { - @PersistenceContext - private EntityManager entityManager; + @PersistenceContext + private EntityManager entityManager; - @Bean - public JPAQueryFactory queryFactory() { - return new JPAQueryFactory(entityManager); - } + @Bean + public JPAQueryFactory queryFactory() { + return new JPAQueryFactory(entityManager); + } } diff --git a/src/main/java/ssu/eatssu/global/config/S3Config.java b/src/main/java/ssu/eatssu/global/config/S3Config.java index 575d76dc..e41d2409 100644 --- a/src/main/java/ssu/eatssu/global/config/S3Config.java +++ b/src/main/java/ssu/eatssu/global/config/S3Config.java @@ -5,6 +5,7 @@ import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.AmazonS3ClientBuilder; + import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -12,23 +13,23 @@ @Configuration public class S3Config { - @Value("${cloud.aws.credentials.accessKey}") - private String accessKey; + @Value("${cloud.aws.credentials.accessKey}") + private String accessKey; - @Value("${cloud.aws.credentials.secretKey}") - private String secretKey; + @Value("${cloud.aws.credentials.secretKey}") + private String secretKey; - @Value("${cloud.aws.region.static}") - private String region; + @Value("${cloud.aws.region.static}") + private String region; - @Bean - public AmazonS3Client amazonS3Client() { - AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); + @Bean + public AmazonS3Client amazonS3Client() { + AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); - return (AmazonS3Client) AmazonS3ClientBuilder - .standard() - .withCredentials(new AWSStaticCredentialsProvider(credentials)) - .withRegion(region) - .build(); - } + return (AmazonS3Client)AmazonS3ClientBuilder + .standard() + .withCredentials(new AWSStaticCredentialsProvider(credentials)) + .withRegion(region) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java b/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java index 71ef0602..5c8327d2 100644 --- a/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java +++ b/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java @@ -6,6 +6,7 @@ import io.swagger.v3.oas.models.security.SecurityRequirement; import io.swagger.v3.oas.models.security.SecurityScheme; import io.swagger.v3.oas.models.servers.Server; + import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -17,36 +18,35 @@ @Configuration public class SwaggerConfig { - private static final String API_NAME = "EAT-SSU API"; - private static final String API_VERSION = "1.0.0"; - private static final String API_DESCRIPTION = "EAT-SSU API 명세서"; - - @Value("${swagger.url}") - private String SERVER_URL; - @Value("${swagger.description}") - private String SERVER_DESCRIPTION; - - - @Bean - public OpenAPI openAPI() { - Info info = new Info() - .version(API_VERSION) - .title(API_NAME) - .description(API_DESCRIPTION); - - List servers = new ArrayList<>(); - servers.add(new Server().url(SERVER_URL).description(SERVER_DESCRIPTION)); - - SecurityScheme securityScheme = new SecurityScheme() - .type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT") - .in(SecurityScheme.In.HEADER).name("Authorization"); - - SecurityRequirement securityRequirement = new SecurityRequirement().addList("bearerAuth"); - - return new OpenAPI() - .components(new Components().addSecuritySchemes("bearerAuth", securityScheme)) - .security(Arrays.asList(securityRequirement)) - .servers(servers) - .info(info); - } + private static final String API_NAME = "EAT-SSU API"; + private static final String API_VERSION = "1.0.0"; + private static final String API_DESCRIPTION = "EAT-SSU API 명세서"; + + @Value("${swagger.url}") + private String SERVER_URL; + @Value("${swagger.description}") + private String SERVER_DESCRIPTION; + + @Bean + public OpenAPI openAPI() { + Info info = new Info() + .version(API_VERSION) + .title(API_NAME) + .description(API_DESCRIPTION); + + List servers = new ArrayList<>(); + servers.add(new Server().url(SERVER_URL).description(SERVER_DESCRIPTION)); + + SecurityScheme securityScheme = new SecurityScheme() + .type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT") + .in(SecurityScheme.In.HEADER).name("Authorization"); + + SecurityRequirement securityRequirement = new SecurityRequirement().addList("bearerAuth"); + + return new OpenAPI() + .components(new Components().addSecuritySchemes("bearerAuth", securityScheme)) + .security(Arrays.asList(securityRequirement)) + .servers(servers) + .info(info); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java index 55f6bdaf..6910f437 100644 --- a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java @@ -1,6 +1,7 @@ package ssu.eatssu.global.handler; import lombok.extern.slf4j.Slf4j; + import org.springframework.beans.TypeMismatchException; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; @@ -23,6 +24,7 @@ import org.springframework.web.multipart.support.MissingServletRequestPartException; import org.springframework.web.servlet.NoHandlerFoundException; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.global.handler.response.BaseResponseStatus; @@ -34,184 +36,184 @@ @RestControllerAdvice public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { - /** - * BaseException 처리 - */ - @ExceptionHandler(BaseException.class) - public ResponseEntity> handleBaseException(BaseException e) { - log.info(e.getStatus().toString()); - return ResponseEntity.status(e.getStatus().getHttpStatus()).body(BaseResponse.fail(e.getStatus())); - } - - /** - * 경로는 있으나 지원하지 않는 http method로 요청 시 - */ - @Override - protected ResponseEntity handleHttpRequestMethodNotSupported( - @NonNull HttpRequestMethodNotSupportedException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.METHOD_NOT_ALLOWED).body(BaseResponse.fail( - BaseResponseStatus.METHOD_NOT_ALLOWED)); - } - - /** - * 지원하지 않는 content type으로 요청 시 - */ - @Override - protected ResponseEntity handleHttpMediaTypeNotSupported( - @NonNull HttpMediaTypeNotSupportedException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE) - .body(BaseResponse.fail(BaseResponseStatus.UNSUPPORTED_MEDIA_TYPE)); - } - - /** - * 인식할 수 없는 content type으로 요청 시 - */ - @Override - protected ResponseEntity handleHttpMediaTypeNotAcceptable( - @NonNull HttpMediaTypeNotAcceptableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.NOT_ACCEPTABLE) - .body(BaseResponse.fail(BaseResponseStatus.NOT_ACCEPTABLE)); - } - - /** - * PathVariable 값 누락 시 - */ - @Override - protected ResponseEntity handleMissingPathVariable( - @NonNull MissingPathVariableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISSING_PATH_VARIABLE)); - } - - /*** - * RequestParam 값 누락 시 - */ - @Override - protected ResponseEntity handleMissingServletRequestParameter( - @NonNull MissingServletRequestParameterException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PARAM)); - } - - /** - * RequestPart 값 누락 시 - */ - @Override - protected ResponseEntity handleMissingServletRequestPart( - @NonNull MissingServletRequestPartException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PART)); - } - - /** - * 요청 값 바인딩 처리에 실패한 경우 - */ - @Override - protected ResponseEntity handleServletRequestBindingException( - @NonNull ServletRequestBindingException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.REQ_BINDING_FAIL)); - } - - /** - * request @Valid 유효성 체크를 통과하지 못한 경우 - */ - @Override - protected ResponseEntity handleMethodArgumentNotValid( - @NonNull MethodArgumentNotValidException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.FAILED_VALIDATION)); - } - - /** - * Dispatcher Servlet에서 핸들러를 찾지 못한 경우 - *

기본적으로는 404-Not Found응답을 내리지만 Dispatcher Servlet의 throwExceptionIfNoHandlerFound 값이 true인 경우 - * NoHandlerFoundException 예외를 발생

- */ - @Override - protected ResponseEntity handleNoHandlerFoundException( - @NonNull NoHandlerFoundException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.NOT_FOUND) - .body(BaseResponse.fail(BaseResponseStatus.NOT_FOUND)); - } - - /** - * 비동기 요청의 응답시간이 초과될 경우 - */ - @Override - protected ResponseEntity handleAsyncRequestTimeoutException( - @NonNull AsyncRequestTimeoutException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE) - .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_TIME_OUT)); - } - - /** - * 파라미터 타입 불일치가 발생한 경우 - */ - @Override - protected ResponseEntity handleTypeMismatch( - @NonNull TypeMismatchException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISMATCH_PARAM_TYPE)); - } - - /** - * 적절하지 않은 RequestBody 때문에 HttpMessageConverter.read 메소드 실패한 경우 - */ - @Override - protected ResponseEntity handleHttpMessageNotReadable( - @NonNull HttpMessageNotReadableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.BAD_REQUEST)); - } - - /** - * 직렬화 실패한 경우 - */ - @Override - protected ResponseEntity handleHttpMessageNotWritable( - @NonNull HttpMessageNotWritableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); - } + /** + * BaseException 처리 + */ + @ExceptionHandler(BaseException.class) + public ResponseEntity> handleBaseException(BaseException e) { + log.info(e.getStatus().toString()); + return ResponseEntity.status(e.getStatus().getHttpStatus()).body(BaseResponse.fail(e.getStatus())); + } + + /** + * 경로는 있으나 지원하지 않는 http method로 요청 시 + */ + @Override + protected ResponseEntity handleHttpRequestMethodNotSupported( + @NonNull HttpRequestMethodNotSupportedException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.METHOD_NOT_ALLOWED).body(BaseResponse.fail( + BaseResponseStatus.METHOD_NOT_ALLOWED)); + } + + /** + * 지원하지 않는 content type으로 요청 시 + */ + @Override + protected ResponseEntity handleHttpMediaTypeNotSupported( + @NonNull HttpMediaTypeNotSupportedException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE) + .body(BaseResponse.fail(BaseResponseStatus.UNSUPPORTED_MEDIA_TYPE)); + } + + /** + * 인식할 수 없는 content type으로 요청 시 + */ + @Override + protected ResponseEntity handleHttpMediaTypeNotAcceptable( + @NonNull HttpMediaTypeNotAcceptableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.NOT_ACCEPTABLE) + .body(BaseResponse.fail(BaseResponseStatus.NOT_ACCEPTABLE)); + } + + /** + * PathVariable 값 누락 시 + */ + @Override + protected ResponseEntity handleMissingPathVariable( + @NonNull MissingPathVariableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISSING_PATH_VARIABLE)); + } + + /*** + * RequestParam 값 누락 시 + */ + @Override + protected ResponseEntity handleMissingServletRequestParameter( + @NonNull MissingServletRequestParameterException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PARAM)); + } + + /** + * RequestPart 값 누락 시 + */ + @Override + protected ResponseEntity handleMissingServletRequestPart( + @NonNull MissingServletRequestPartException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PART)); + } + + /** + * 요청 값 바인딩 처리에 실패한 경우 + */ + @Override + protected ResponseEntity handleServletRequestBindingException( + @NonNull ServletRequestBindingException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.REQ_BINDING_FAIL)); + } + + /** + * request @Valid 유효성 체크를 통과하지 못한 경우 + */ + @Override + protected ResponseEntity handleMethodArgumentNotValid( + @NonNull MethodArgumentNotValidException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.FAILED_VALIDATION)); + } + + /** + * Dispatcher Servlet에서 핸들러를 찾지 못한 경우 + *

기본적으로는 404-Not Found응답을 내리지만 Dispatcher Servlet의 throwExceptionIfNoHandlerFound 값이 true인 경우 + * NoHandlerFoundException 예외를 발생

+ */ + @Override + protected ResponseEntity handleNoHandlerFoundException( + @NonNull NoHandlerFoundException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.NOT_FOUND) + .body(BaseResponse.fail(BaseResponseStatus.NOT_FOUND)); + } + + /** + * 비동기 요청의 응답시간이 초과될 경우 + */ + @Override + protected ResponseEntity handleAsyncRequestTimeoutException( + @NonNull AsyncRequestTimeoutException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE) + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_TIME_OUT)); + } + + /** + * 파라미터 타입 불일치가 발생한 경우 + */ + @Override + protected ResponseEntity handleTypeMismatch( + @NonNull TypeMismatchException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISMATCH_PARAM_TYPE)); + } + + /** + * 적절하지 않은 RequestBody 때문에 HttpMessageConverter.read 메소드 실패한 경우 + */ + @Override + protected ResponseEntity handleHttpMessageNotReadable( + @NonNull HttpMessageNotReadableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.BAD_REQUEST)); + } + + /** + * 직렬화 실패한 경우 + */ + @Override + protected ResponseEntity handleHttpMessageNotWritable( + @NonNull HttpMessageNotWritableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); + } } diff --git a/src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java b/src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java index 1b390b61..84bd045f 100644 --- a/src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java @@ -1,14 +1,17 @@ package ssu.eatssu.global.handler; import com.fasterxml.jackson.databind.ObjectMapper; + import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; + import org.springframework.http.MediaType; import org.springframework.security.access.AccessDeniedException; import org.springframework.security.web.access.AccessDeniedHandler; import org.springframework.stereotype.Component; + import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.global.handler.response.BaseResponseStatus; @@ -22,20 +25,21 @@ @RequiredArgsConstructor public class JwtAccessDeniedHandler implements AccessDeniedHandler { - private final ObjectMapper objectMapper; + private final ObjectMapper objectMapper; - @Override - public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException { + @Override + public void handle(HttpServletRequest request, HttpServletResponse response, + AccessDeniedException accessDeniedException) throws IOException, ServletException { - BaseResponseStatus responseStatus = BaseResponseStatus.FORBIDDEN; + BaseResponseStatus responseStatus = BaseResponseStatus.FORBIDDEN; - BaseResponse body = BaseResponse.fail(responseStatus); - String bodyString = objectMapper.writeValueAsString(body); + BaseResponse body = BaseResponse.fail(responseStatus); + String bodyString = objectMapper.writeValueAsString(body); - //response setting - response.setStatus(responseStatus.getHttpStatus().value()); - response.setContentType(MediaType.APPLICATION_JSON_VALUE); - response.setCharacterEncoding("UTF-8"); - response.getWriter().write(bodyString); - } + //response setting + response.setStatus(responseStatus.getHttpStatus().value()); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write(bodyString); + } } diff --git a/src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java b/src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java index f8032dc3..8e6eece3 100644 --- a/src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java +++ b/src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java @@ -1,14 +1,17 @@ package ssu.eatssu.global.handler; import com.fasterxml.jackson.databind.ObjectMapper; + import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; + import org.springframework.http.MediaType; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.stereotype.Component; + import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.global.handler.response.BaseResponseStatus; @@ -22,21 +25,21 @@ @RequiredArgsConstructor public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint { - private final ObjectMapper objectMapper; + private final ObjectMapper objectMapper; - @Override - public void commence(HttpServletRequest request, HttpServletResponse response, - AuthenticationException authException) throws IOException, ServletException { + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, + AuthenticationException authException) throws IOException, ServletException { - BaseResponseStatus responseStatus = BaseResponseStatus.UNAUTHORIZED; + BaseResponseStatus responseStatus = BaseResponseStatus.UNAUTHORIZED; - BaseResponse body = BaseResponse.fail(responseStatus); - String bodyString = objectMapper.writeValueAsString(body); + BaseResponse body = BaseResponse.fail(responseStatus); + String bodyString = objectMapper.writeValueAsString(body); - //response setting - response.setStatus(responseStatus.getHttpStatus().value()); - response.setContentType(MediaType.APPLICATION_JSON_VALUE); - response.setCharacterEncoding("UTF-8"); - response.getWriter().write(bodyString); - } + //response setting + response.setStatus(responseStatus.getHttpStatus().value()); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write(bodyString); + } } diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseException.java b/src/main/java/ssu/eatssu/global/handler/response/BaseException.java index 6ab7f076..a7aa52c1 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseException.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseException.java @@ -8,5 +8,5 @@ @Setter @AllArgsConstructor public class BaseException extends RuntimeException { - private final BaseResponseStatus status; + private final BaseResponseStatus status; } diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java index 1e82b2b2..108e1e95 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonPropertyOrder; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; @@ -11,47 +12,46 @@ @JsonPropertyOrder({"isSuccess", "code", "message", "result"}) public class BaseResponse { - @Schema(description = "성공 여부") - private final Boolean isSuccess; - private final String message; - private final int code; - - @Schema(description = "결과 값") - @JsonInclude(JsonInclude.Include.NON_NULL) //JSON으로 응답이 나갈 때 null인 경우 포함되지 않음 - private T result; - - /** - * 정적 팩토리 메서드를 위한 private 생성자 - */ - private BaseResponse(BaseResponseStatus status) { - this.isSuccess = status.isSuccess(); - this.message = status.getMessage(); - this.code = status.getCode(); - } - - private BaseResponse(BaseResponseStatus status, T result) { - this.isSuccess = status.isSuccess(); - this.message = status.getMessage(); - this.code = status.getCode(); - this.result = result; - } - - - /** - * API 성공 응답 - */ - public static BaseResponse success() { - return new BaseResponse<>(BaseResponseStatus.SUCCESS); - } - - public static BaseResponse success(T result) { - return new BaseResponse<>(BaseResponseStatus.SUCCESS, result); - } - - /** - * API 실패 응답 - */ - public static BaseResponse fail(BaseResponseStatus status) { - return new BaseResponse<>(status); - } + @Schema(description = "성공 여부") + private final Boolean isSuccess; + private final String message; + private final int code; + + @Schema(description = "결과 값") + @JsonInclude(JsonInclude.Include.NON_NULL) //JSON으로 응답이 나갈 때 null인 경우 포함되지 않음 + private T result; + + /** + * 정적 팩토리 메서드를 위한 private 생성자 + */ + private BaseResponse(BaseResponseStatus status) { + this.isSuccess = status.isSuccess(); + this.message = status.getMessage(); + this.code = status.getCode(); + } + + private BaseResponse(BaseResponseStatus status, T result) { + this.isSuccess = status.isSuccess(); + this.message = status.getMessage(); + this.code = status.getCode(); + this.result = result; + } + + /** + * API 성공 응답 + */ + public static BaseResponse success() { + return new BaseResponse<>(BaseResponseStatus.SUCCESS); + } + + public static BaseResponse success(T result) { + return new BaseResponse<>(BaseResponseStatus.SUCCESS, result); + } + + /** + * API 실패 응답 + */ + public static BaseResponse fail(BaseResponseStatus status) { + return new BaseResponse<>(status); + } } diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index f4aedd06..fda40c2b 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -1,6 +1,7 @@ package ssu.eatssu.global.handler.response; import lombok.Getter; + import org.springframework.http.HttpStatus; /** @@ -9,100 +10,99 @@ @Getter public enum BaseResponseStatus { - /** - * 1000 : 요청 성공 - */ - SUCCESS(true, HttpStatus.OK, 1000, "요청에 성공하였습니다."), - - /** - * 400 BAD_REQUEST 잘못된 요청 - */ - BAD_REQUEST(false, HttpStatus.BAD_REQUEST, 400, "잘못된 요청입니다."), - VALIDATION_ERROR(false, HttpStatus.BAD_REQUEST, 40001, "입력값을 확인해주세요."), - MISSING_PATH_VARIABLE(false, HttpStatus.BAD_REQUEST, 40002, "경로 변수가 누락되었습니다."), - MISSING_REQUEST_PARAM(false, HttpStatus.BAD_REQUEST, 40003, "쿼리 파라미터가 누락되었습니다."), - MISSING_REQUEST_PART(false, HttpStatus.BAD_REQUEST, 40004, "multipart/form-data 파일이 누락되었습니다."), - REQ_BINDING_FAIL(false, HttpStatus.BAD_REQUEST, 40005, "잘못된 request 입니다."), - MISMATCH_PARAM_TYPE(false, HttpStatus.BAD_REQUEST, 40006, "잘못된 파라미터 타입입니다."), - FAILED_VALIDATION(false, HttpStatus.BAD_REQUEST, 40007, "입력값이 누락되었거나, 부적절한 입력 값이 있습니다."), - INVALID_DATE(false, HttpStatus.BAD_REQUEST, 40008, "잘못된 날짜형식입니다."), - NOT_SUPPORT_RESTAURANT(false, HttpStatus.BAD_REQUEST, 40009, "해당 식당은 지원하지 않습니다."), - INVALID_IDENTITY_TOKEN(false, HttpStatus.BAD_REQUEST, 40010, "잘못된 identityToken 입니다."), - EXISTED_MEAL(false, HttpStatus.BAD_REQUEST, 40011, "이미 존재하는 식단입니다."), - INVALID_TARGET_TYPE(false, HttpStatus.BAD_REQUEST, 40012, "잘못된 targetType 입니다."), - MISSING_USER_DEPARTMENT(false, HttpStatus.BAD_REQUEST, 40013, "사용자의 학과 정보가 없습니다."), - - /** - * 401 UNAUTHORIZED 권한없음(인증 실패) - */ - UNAUTHORIZED(false, HttpStatus.UNAUTHORIZED, 401, "인증에 실패했습니다."), - INVALID_TOKEN(false, HttpStatus.UNAUTHORIZED, 40101, "유효하지 않은 토큰 입니다."), - - /** - * 403 FORBIDDEN 권한없음(인가 실패) - */ - FORBIDDEN(false, HttpStatus.FORBIDDEN, 403, "권한이 없습니다."), - REVIEW_PERMISSION_DENIED(false, HttpStatus.FORBIDDEN, 40301, "리뷰에 대한 권한이 없습니다."), - - /** - * 404 NOT_FOUND 잘못된 리소스 접근 - */ - NOT_FOUND(false, HttpStatus.NOT_FOUND, 404, "요청한 리소스를 찾을 수 없습니다."), - NOT_FOUND_USER(false, HttpStatus.NOT_FOUND, 40401, "해당 회원을 찾을 수 없습니다."), - NOT_FOUND_MENU(false, HttpStatus.NOT_FOUND, 40402, "해당 메뉴를 찾을 수 없습니다."), - NOT_FOUND_MEAL(false, HttpStatus.NOT_FOUND, 40403, "해당 식단을 찾을 수 없습니다."), - NOT_FOUND_RESTAURANT(false, HttpStatus.NOT_FOUND, 40404, "해당 식당을 찾을 수 없습니다."), - NOT_FOUND_REVIEW(false, HttpStatus.NOT_FOUND, 40405, "해당 리뷰을 찾을 수 없습니다."), - NOT_FOUND_REVIEW_REPORT(false, HttpStatus.NOT_FOUND, 40406, "해당 리뷰 신고 내역을 찾을 수 없습니다."), - NOT_FOUND_USER_INQUIRY(false, HttpStatus.NOT_FOUND, 40407, "해당 문의 내역을 찾을 수 없습니다."), - NOT_FOUND_COLLEGE(false, HttpStatus.NOT_FOUND, 40408, "해당 대학을 찾을 수 없습니다."), - NOT_FOUND_DEPARTMENT(false, HttpStatus.NOT_FOUND, 40409, "해당 학과를 찾을 수 없습니다."), - NOT_FOUND_PARTNERSHIP(false, HttpStatus.NOT_FOUND, 40410, "해당 제휴를 찾을 수 없습니다."), - - /** - * 405 METHOD_NOT_ALLOWED 지원하지 않은 method 호출 - */ - METHOD_NOT_ALLOWED(false, HttpStatus.METHOD_NOT_ALLOWED, 405, "해당 method는 지원하지 않습니다."), - - /** - * 406 NOT_ACCEPTABLE 인식할 수 없는 content type - */ - NOT_ACCEPTABLE(false, HttpStatus.NOT_ACCEPTABLE, 406, "인식할 수 없는 미디어 타입입니다."), - - /** - * 409 CONFLICT 중복된 리소스 - */ - CONFLICT(false, HttpStatus.CONFLICT, 409, "중복된 리소스를 입력했습니다."), - DUPLICATE_EMAIL(false, HttpStatus.CONFLICT, 40901, "중복된 이메일입니다."), - DUPLICATE_NICKNAME(false, HttpStatus.CONFLICT, 40902, "중복된 닉네임입니다."), - - /** - * 415 UNSUPPORTED_MEDIA_TYPE 지원하지 않는 content type - */ - UNSUPPORTED_MEDIA_TYPE(false, HttpStatus.UNSUPPORTED_MEDIA_TYPE, 415, "지원하지 않는 미디어 타입입니다."), - - /** - * 500 INTERNAL_SERVER_ERROR 서버 내부 에러 - */ - INTERNAL_SERVER_ERROR(false, HttpStatus.INTERNAL_SERVER_ERROR, 500, "서버 내부 에러입니다"), - FAIL_IMAGE_UPLOAD(false, HttpStatus.INTERNAL_SERVER_ERROR, 50001, "이미지 업로드에 실패했습니다."), - - /** - * 503 SERVICE_UNAVAILABLE 서버 내부 에러 - */ - SERVICE_UNAVAILABLE(false, HttpStatus.SERVICE_UNAVAILABLE, 503, "현재 서비스가 불가능한 상태입니다."), - INTERNAL_SERVER_TIME_OUT(false, HttpStatus.SERVICE_UNAVAILABLE, 503, "서버에서 시간초과가 발생했습니다."); - - - private final boolean isSuccess; - private final HttpStatus httpStatus; - private final int code; - private final String message; - - BaseResponseStatus(boolean isSuccess, HttpStatus httpStatus, int code, String message) { - this.isSuccess = isSuccess; - this.httpStatus = httpStatus; - this.code = code; - this.message = message; - } + /** + * 1000 : 요청 성공 + */ + SUCCESS(true, HttpStatus.OK, 1000, "요청에 성공하였습니다."), + + /** + * 400 BAD_REQUEST 잘못된 요청 + */ + BAD_REQUEST(false, HttpStatus.BAD_REQUEST, 400, "잘못된 요청입니다."), + VALIDATION_ERROR(false, HttpStatus.BAD_REQUEST, 40001, "입력값을 확인해주세요."), + MISSING_PATH_VARIABLE(false, HttpStatus.BAD_REQUEST, 40002, "경로 변수가 누락되었습니다."), + MISSING_REQUEST_PARAM(false, HttpStatus.BAD_REQUEST, 40003, "쿼리 파라미터가 누락되었습니다."), + MISSING_REQUEST_PART(false, HttpStatus.BAD_REQUEST, 40004, "multipart/form-data 파일이 누락되었습니다."), + REQ_BINDING_FAIL(false, HttpStatus.BAD_REQUEST, 40005, "잘못된 request 입니다."), + MISMATCH_PARAM_TYPE(false, HttpStatus.BAD_REQUEST, 40006, "잘못된 파라미터 타입입니다."), + FAILED_VALIDATION(false, HttpStatus.BAD_REQUEST, 40007, "입력값이 누락되었거나, 부적절한 입력 값이 있습니다."), + INVALID_DATE(false, HttpStatus.BAD_REQUEST, 40008, "잘못된 날짜형식입니다."), + NOT_SUPPORT_RESTAURANT(false, HttpStatus.BAD_REQUEST, 40009, "해당 식당은 지원하지 않습니다."), + INVALID_IDENTITY_TOKEN(false, HttpStatus.BAD_REQUEST, 40010, "잘못된 identityToken 입니다."), + EXISTED_MEAL(false, HttpStatus.BAD_REQUEST, 40011, "이미 존재하는 식단입니다."), + INVALID_TARGET_TYPE(false, HttpStatus.BAD_REQUEST, 40012, "잘못된 targetType 입니다."), + MISSING_USER_DEPARTMENT(false, HttpStatus.BAD_REQUEST, 40013, "사용자의 학과 정보가 없습니다."), + + /** + * 401 UNAUTHORIZED 권한없음(인증 실패) + */ + UNAUTHORIZED(false, HttpStatus.UNAUTHORIZED, 401, "인증에 실패했습니다."), + INVALID_TOKEN(false, HttpStatus.UNAUTHORIZED, 40101, "유효하지 않은 토큰 입니다."), + + /** + * 403 FORBIDDEN 권한없음(인가 실패) + */ + FORBIDDEN(false, HttpStatus.FORBIDDEN, 403, "권한이 없습니다."), + REVIEW_PERMISSION_DENIED(false, HttpStatus.FORBIDDEN, 40301, "리뷰에 대한 권한이 없습니다."), + + /** + * 404 NOT_FOUND 잘못된 리소스 접근 + */ + NOT_FOUND(false, HttpStatus.NOT_FOUND, 404, "요청한 리소스를 찾을 수 없습니다."), + NOT_FOUND_USER(false, HttpStatus.NOT_FOUND, 40401, "해당 회원을 찾을 수 없습니다."), + NOT_FOUND_MENU(false, HttpStatus.NOT_FOUND, 40402, "해당 메뉴를 찾을 수 없습니다."), + NOT_FOUND_MEAL(false, HttpStatus.NOT_FOUND, 40403, "해당 식단을 찾을 수 없습니다."), + NOT_FOUND_RESTAURANT(false, HttpStatus.NOT_FOUND, 40404, "해당 식당을 찾을 수 없습니다."), + NOT_FOUND_REVIEW(false, HttpStatus.NOT_FOUND, 40405, "해당 리뷰을 찾을 수 없습니다."), + NOT_FOUND_REVIEW_REPORT(false, HttpStatus.NOT_FOUND, 40406, "해당 리뷰 신고 내역을 찾을 수 없습니다."), + NOT_FOUND_USER_INQUIRY(false, HttpStatus.NOT_FOUND, 40407, "해당 문의 내역을 찾을 수 없습니다."), + NOT_FOUND_COLLEGE(false, HttpStatus.NOT_FOUND, 40408, "해당 대학을 찾을 수 없습니다."), + NOT_FOUND_DEPARTMENT(false, HttpStatus.NOT_FOUND, 40409, "해당 학과를 찾을 수 없습니다."), + NOT_FOUND_PARTNERSHIP(false, HttpStatus.NOT_FOUND, 40410, "해당 제휴를 찾을 수 없습니다."), + + /** + * 405 METHOD_NOT_ALLOWED 지원하지 않은 method 호출 + */ + METHOD_NOT_ALLOWED(false, HttpStatus.METHOD_NOT_ALLOWED, 405, "해당 method는 지원하지 않습니다."), + + /** + * 406 NOT_ACCEPTABLE 인식할 수 없는 content type + */ + NOT_ACCEPTABLE(false, HttpStatus.NOT_ACCEPTABLE, 406, "인식할 수 없는 미디어 타입입니다."), + + /** + * 409 CONFLICT 중복된 리소스 + */ + CONFLICT(false, HttpStatus.CONFLICT, 409, "중복된 리소스를 입력했습니다."), + DUPLICATE_EMAIL(false, HttpStatus.CONFLICT, 40901, "중복된 이메일입니다."), + DUPLICATE_NICKNAME(false, HttpStatus.CONFLICT, 40902, "중복된 닉네임입니다."), + + /** + * 415 UNSUPPORTED_MEDIA_TYPE 지원하지 않는 content type + */ + UNSUPPORTED_MEDIA_TYPE(false, HttpStatus.UNSUPPORTED_MEDIA_TYPE, 415, "지원하지 않는 미디어 타입입니다."), + + /** + * 500 INTERNAL_SERVER_ERROR 서버 내부 에러 + */ + INTERNAL_SERVER_ERROR(false, HttpStatus.INTERNAL_SERVER_ERROR, 500, "서버 내부 에러입니다"), + FAIL_IMAGE_UPLOAD(false, HttpStatus.INTERNAL_SERVER_ERROR, 50001, "이미지 업로드에 실패했습니다."), + + /** + * 503 SERVICE_UNAVAILABLE 서버 내부 에러 + */ + SERVICE_UNAVAILABLE(false, HttpStatus.SERVICE_UNAVAILABLE, 503, "현재 서비스가 불가능한 상태입니다."), + INTERNAL_SERVER_TIME_OUT(false, HttpStatus.SERVICE_UNAVAILABLE, 503, "서버에서 시간초과가 발생했습니다."); + + private final boolean isSuccess; + private final HttpStatus httpStatus; + private final int code; + private final String message; + + BaseResponseStatus(boolean isSuccess, HttpStatus httpStatus, int code, String message) { + this.isSuccess = isSuccess; + this.httpStatus = httpStatus; + this.code = code; + this.message = message; + } } diff --git a/src/main/java/ssu/eatssu/global/util/S3Uploader.java b/src/main/java/ssu/eatssu/global/util/S3Uploader.java index 5bbe59d5..abfa1f20 100644 --- a/src/main/java/ssu/eatssu/global/util/S3Uploader.java +++ b/src/main/java/ssu/eatssu/global/util/S3Uploader.java @@ -3,8 +3,10 @@ import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.CannedAccessControlList; import com.amazonaws.services.s3.model.PutObjectRequest; + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; + import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; @@ -22,48 +24,48 @@ @Slf4j public class S3Uploader { - private final AmazonS3Client amazonS3Client; + private final AmazonS3Client amazonS3Client; - @Value("${cloud.aws.s3.bucket}") - private String bucket; + @Value("${cloud.aws.s3.bucket}") + private String bucket; - public String upload(MultipartFile multipartFile, String dirName) throws IOException { - File uploadFile = convert(multipartFile) - .orElseThrow(() -> new IllegalArgumentException("MultipartFile -> File로 전환이 실패했습니다.")); - return upload(uploadFile, dirName); - } + public String upload(MultipartFile multipartFile, String dirName) throws IOException { + File uploadFile = convert(multipartFile) + .orElseThrow(() -> new IllegalArgumentException("MultipartFile -> File로 전환이 실패했습니다.")); + return upload(uploadFile, dirName); + } - private String upload(File uploadFile, String dirName) { - String fileName = dirName + "/" + UUID.randomUUID() + uploadFile.getName(); - String uploadImageUrl = putS3(uploadFile, fileName); - removeNewFile(uploadFile); - return uploadImageUrl; - } + private String upload(File uploadFile, String dirName) { + String fileName = dirName + "/" + UUID.randomUUID() + uploadFile.getName(); + String uploadImageUrl = putS3(uploadFile, fileName); + removeNewFile(uploadFile); + return uploadImageUrl; + } - private String putS3(File uploadFile, String fileName) { - amazonS3Client.putObject(new PutObjectRequest(bucket, fileName, uploadFile).withCannedAcl( - CannedAccessControlList.PublicRead)); - return amazonS3Client.getUrl(bucket, fileName).toString(); - } + private String putS3(File uploadFile, String fileName) { + amazonS3Client.putObject(new PutObjectRequest(bucket, fileName, uploadFile).withCannedAcl( + CannedAccessControlList.PublicRead)); + return amazonS3Client.getUrl(bucket, fileName).toString(); + } - private void removeNewFile(File targetFile) { - if (targetFile.delete()) { - log.info("파일이 삭제되었습니다."); - } else { - log.info("파일이 삭제되지 못했습니다."); - } - } + private void removeNewFile(File targetFile) { + if (targetFile.delete()) { + log.info("파일이 삭제되었습니다."); + } else { + log.info("파일이 삭제되지 못했습니다."); + } + } - private Optional convert(MultipartFile file) throws IOException { - String formatedNow = LocalDateTime.now() - .format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); - File convertFile = new File(formatedNow + file.getOriginalFilename()); - if (convertFile.createNewFile()) { - try (FileOutputStream fos = new FileOutputStream(convertFile)) { - fos.write(file.getBytes()); - } - return Optional.of(convertFile); - } - return Optional.empty(); - } + private Optional convert(MultipartFile file) throws IOException { + String formatedNow = LocalDateTime.now() + .format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + File convertFile = new File(formatedNow + file.getOriginalFilename()); + if (convertFile.createNewFile()) { + try (FileOutputStream fos = new FileOutputStream(convertFile)) { + fos.write(file.getBytes()); + } + return Optional.of(convertFile); + } + return Optional.empty(); + } } \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/EatSsuApplicationTests.java b/src/test/java/ssu/eatssu/EatSsuApplicationTests.java index 92b384f5..d8ba04b6 100644 --- a/src/test/java/ssu/eatssu/EatSsuApplicationTests.java +++ b/src/test/java/ssu/eatssu/EatSsuApplicationTests.java @@ -6,8 +6,8 @@ @SpringBootTest class EatSsuApplicationTests { - @Test - void contextLoads() { - } + @Test + void contextLoads() { + } } diff --git a/src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java b/src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java index 58e03d83..cf22a4eb 100644 --- a/src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java +++ b/src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java @@ -5,8 +5,8 @@ public class TestAppleAuthenticator implements AppleAuthenticator { - @Override - public OAuthInfo getOAuthInfoByIdentityToken(String identityToken) { - return new OAuthInfo("test@test.com", "1234567890"); - } + @Override + public OAuthInfo getOAuthInfoByIdentityToken(String identityToken) { + return new OAuthInfo("test@test.com", "1234567890"); + } } diff --git a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java b/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java index 2a123a6f..0d61eecf 100644 --- a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java @@ -7,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; + import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.auth.infrastructure.TestAppleAuthenticator; @@ -19,60 +20,59 @@ @SpringBootTest class OauthServiceTest { - @Autowired - private OAuthService oauthService; - - @Autowired - private UserService userService; - - @Autowired - private UserRepository userRepository; - - @Autowired - private AuthenticationManagerBuilder authenticationManagerBuilder; - - @Autowired - private JwtTokenProvider jwtTokenProvider; - - @Autowired - private ReviewRepository reviewRepository; - - - @BeforeEach - void setUp() { - reviewRepository.deleteAll(); - userRepository.deleteAll(); - oauthService = new OAuthService(userService, userRepository, - new TestAppleAuthenticator(), authenticationManagerBuilder, jwtTokenProvider); - } - - @Test - void 카카오로_회원가입을_한다() { - // given - KakaoLoginRequest request = new KakaoLoginRequest("test@email.com", "10378247832195"); - - // when - oauthService.kakaoLogin(request); - - // then - User user = userRepository.findByProviderId(request.providerId()).get(); - assertThat(userRepository.findAll()).hasSize(1); - assertThat(user.getEmail()).isEqualTo(request.email()); - assertThat(user.getProviderId()).isEqualTo(request.providerId()); - } - - @Test - void 애플로_회원가입을_한다() { - // given - AppleLoginRequest request = new AppleLoginRequest("eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi"); - - // when - oauthService.appleLogin(request); - - // then - User user = userRepository.findByProviderId("1234567890").get(); - assertThat(userRepository.findAll()).hasSize(1); - assertThat(user.getEmail()).isEqualTo("test@test.com"); - assertThat(user.getProviderId()).isEqualTo("1234567890"); - } + @Autowired + private OAuthService oauthService; + + @Autowired + private UserService userService; + + @Autowired + private UserRepository userRepository; + + @Autowired + private AuthenticationManagerBuilder authenticationManagerBuilder; + + @Autowired + private JwtTokenProvider jwtTokenProvider; + + @Autowired + private ReviewRepository reviewRepository; + + @BeforeEach + void setUp() { + reviewRepository.deleteAll(); + userRepository.deleteAll(); + oauthService = new OAuthService(userService, userRepository, + new TestAppleAuthenticator(), authenticationManagerBuilder, jwtTokenProvider); + } + + @Test + void 카카오로_회원가입을_한다() { + // given + KakaoLoginRequest request = new KakaoLoginRequest("test@email.com", "10378247832195"); + + // when + oauthService.kakaoLogin(request); + + // then + User user = userRepository.findByProviderId(request.providerId()).get(); + assertThat(userRepository.findAll()).hasSize(1); + assertThat(user.getEmail()).isEqualTo(request.email()); + assertThat(user.getProviderId()).isEqualTo(request.providerId()); + } + + @Test + void 애플로_회원가입을_한다() { + // given + AppleLoginRequest request = new AppleLoginRequest("eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi"); + + // when + oauthService.appleLogin(request); + + // then + User user = userRepository.findByProviderId("1234567890").get(); + assertThat(userRepository.findAll()).hasSize(1); + assertThat(user.getEmail()).isEqualTo("test@test.com"); + assertThat(user.getProviderId()).isEqualTo("1234567890"); + } } \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java index b8f448f8..ae0bf248 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java @@ -6,6 +6,7 @@ import java.sql.Date; import java.util.List; import java.util.Optional; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -13,6 +14,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.annotation.Transactional; + import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.menu.persistence.MealRepository; @@ -25,68 +27,68 @@ @ActiveProfiles("test") class MealServiceTest { - @Autowired - private MealService mealService; - - @Autowired - private MealRepository mealRepository; - - @BeforeEach - void setUp() { - mealRepository.deleteAll(); - } - - @Transactional - @Test - void 식단을_생성한다() { - // when - Long mealId = 식단_생성_요청(); - - // then - Optional meal = mealRepository.findById(mealId); - - assertThat(meal).isPresent(); - assertThat(mealRepository.findAll()).hasSize(1); - - Meal createdMeal = meal.get(); - assertThat(createdMeal.getMenuNames()).containsExactlyInAnyOrder("돈까스", "샐러드", "김치"); - assertThat(createdMeal.getRestaurant().name()).isEqualTo("HAKSIK"); - assertThat(createdMeal.getTimePart()).isEqualTo(LUNCH); - } - - private Long 식단_생성_요청() { - // given & when - Date date = Date.valueOf("2024-01-03"); - TimePart timePart = LUNCH; - Restaurant restaurant = Restaurant.from("HAKSIK"); - CreateMealRequest request = new CreateMealRequest(List.of("돈까스", "샐러드", "김치")); - - // then - return mealService.createMeal(date, restaurant, timePart, request); - } - - @Test - void 식단을_조회한다() { - // given - Long meadId = 식단_생성_요청(); - - // when - MenusInMealResponse response = mealService.getMenusInMealByMealId(meadId); - - // then - assertThat(response.getBriefMenus()).hasSize(3); - } - - @Test - void 식단을_삭제한다() { - // given - Long mealId = 식단_생성_요청(); - - // when - mealService.deleteByMealId(mealId); - - // then - assertThat(mealRepository.findAll()).hasSize(0); - assertThat(mealRepository.findAll()).hasSize(0); - } + @Autowired + private MealService mealService; + + @Autowired + private MealRepository mealRepository; + + @BeforeEach + void setUp() { + mealRepository.deleteAll(); + } + + @Transactional + @Test + void 식단을_생성한다() { + // when + Long mealId = 식단_생성_요청(); + + // then + Optional meal = mealRepository.findById(mealId); + + assertThat(meal).isPresent(); + assertThat(mealRepository.findAll()).hasSize(1); + + Meal createdMeal = meal.get(); + assertThat(createdMeal.getMenuNames()).containsExactlyInAnyOrder("돈까스", "샐러드", "김치"); + assertThat(createdMeal.getRestaurant().name()).isEqualTo("HAKSIK"); + assertThat(createdMeal.getTimePart()).isEqualTo(LUNCH); + } + + private Long 식단_생성_요청() { + // given & when + Date date = Date.valueOf("2024-01-03"); + TimePart timePart = LUNCH; + Restaurant restaurant = Restaurant.from("HAKSIK"); + CreateMealRequest request = new CreateMealRequest(List.of("돈까스", "샐러드", "김치")); + + // then + return mealService.createMeal(date, restaurant, timePart, request); + } + + @Test + void 식단을_조회한다() { + // given + Long meadId = 식단_생성_요청(); + + // when + MenusInMealResponse response = mealService.getMenusInMealByMealId(meadId); + + // then + assertThat(response.getBriefMenus()).hasSize(3); + } + + @Test + void 식단을_삭제한다() { + // given + Long mealId = 식단_생성_요청(); + + // when + mealService.deleteByMealId(mealId); + + // then + assertThat(mealRepository.findAll()).hasSize(0); + assertThat(mealRepository.findAll()).hasSize(0); + } } \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java index 02eb9fa7..e3655346 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java @@ -6,6 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; + import ssu.eatssu.domain.menu.presentation.dto.response.MenuRestaurantResponse; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.MenuCategory; @@ -24,41 +25,41 @@ @ActiveProfiles("test") class MenuServiceTest { - @Autowired - private MenuService menuService; + @Autowired + private MenuService menuService; - @Autowired - private MenuRepository menuRepository; + @Autowired + private MenuRepository menuRepository; - @Autowired - private MenuCategoryRepository menuCategoryRepository; + @Autowired + private MenuCategoryRepository menuCategoryRepository; - @BeforeEach - void setUp() { - menuRepository.deleteAll(); - } + @BeforeEach + void setUp() { + menuRepository.deleteAll(); + } - @Test - void 식당_이름으로_고정_메뉴를_조회한다() { - // given - List menus = new ArrayList<>(); - Restaurant foodCourt = Restaurant.from("FOOD_COURT"); + @Test + void 식당_이름으로_고정_메뉴를_조회한다() { + // given + List menus = new ArrayList<>(); + Restaurant foodCourt = Restaurant.from("FOOD_COURT"); - MenuCategory category1 = MenuCategory.builder().name("분식").restaurant(foodCourt).build(); - MenuCategory category2 = MenuCategory.builder().name("한식").restaurant(foodCourt).build(); + MenuCategory category1 = MenuCategory.builder().name("분식").restaurant(foodCourt).build(); + MenuCategory category2 = MenuCategory.builder().name("한식").restaurant(foodCourt).build(); - menus.add(Menu.createFixed("라면", foodCourt, 3000, category1)); - menus.add(Menu.createFixed("떡볶이", foodCourt, 5000, category2)); - menus.add(Menu.createFixed("짜게치", foodCourt, 4000, category1)); + menus.add(Menu.createFixed("라면", foodCourt, 3000, category1)); + menus.add(Menu.createFixed("떡볶이", foodCourt, 5000, category2)); + menus.add(Menu.createFixed("짜게치", foodCourt, 4000, category1)); - menuCategoryRepository.save(category1); - menuCategoryRepository.save(category2); - menuRepository.saveAll(menus); + menuCategoryRepository.save(category1); + menuCategoryRepository.save(category2); + menuRepository.saveAll(menus); - // when - MenuRestaurantResponse response = menuService.getMenusByRestaurant(foodCourt); + // when + MenuRestaurantResponse response = menuService.getMenusByRestaurant(foodCourt); - // then - assertThat(response.getCategoryMenuListCollection()).hasSize(2); - } + // then + assertThat(response.getCategoryMenuListCollection()).hasSize(2); + } } \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java b/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java index 22e28cb8..0483cdd5 100644 --- a/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java @@ -1,12 +1,13 @@ package ssu.eatssu.domain.report.service; - import jakarta.transaction.Transactional; + import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; + import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.report.dto.ReportCreateRequest; @@ -21,58 +22,58 @@ @SpringBootTest class ReportServiceTest { - @Autowired - private ReportService reportService; - - @Autowired - private ReviewRepository reviewRepository; - - @Autowired - private ReportRepository reportRepository; - - @Autowired - private UserRepository userRepository; - - @BeforeEach - void setUp() { - reportRepository.deleteAll(); - reviewRepository.deleteAll(); - userRepository.deleteAll(); - } - - @Test - @Transactional - void 신고를_생성한다() { - //given - User user = createUser(); // 이 부분에서 User가 데이터베이스에 저장되었는지 확인 - Review review = createReview(user); - CustomUserDetails userDetails = createCustomUserDetails(user); - ReportCreateRequest request = new ReportCreateRequest( - review.getId(), ReportType.IMPROPER_ADVERTISEMENT, "음란성, 욕설 등 부적절한 내용"); - - //when - Report createdReport = reportService.reportReview(userDetails, request); - - //then - Assertions.assertThat(reportRepository.findAll()).hasSize(1); - Assertions.assertThat(createdReport.getContent()) - .isEqualTo("음란성, 욕설 등 부적절한 내용"); - } - - private User createUser() { - return User.create("test1@test.com", "user-test", OAuthProvider.EATSSU, "1234", "1234"); - } - - private CustomUserDetails createCustomUserDetails(User user) { - User savedUser = userRepository.save(user); - return new CustomUserDetails(savedUser); - } - - private Review createReview(User user) { - return reviewRepository.save(Review.builder() - .user(user) - .content("굿") - .build()); - } + @Autowired + private ReportService reportService; + + @Autowired + private ReviewRepository reviewRepository; + + @Autowired + private ReportRepository reportRepository; + + @Autowired + private UserRepository userRepository; + + @BeforeEach + void setUp() { + reportRepository.deleteAll(); + reviewRepository.deleteAll(); + userRepository.deleteAll(); + } + + @Test + @Transactional + void 신고를_생성한다() { + //given + User user = createUser(); // 이 부분에서 User가 데이터베이스에 저장되었는지 확인 + Review review = createReview(user); + CustomUserDetails userDetails = createCustomUserDetails(user); + ReportCreateRequest request = new ReportCreateRequest( + review.getId(), ReportType.IMPROPER_ADVERTISEMENT, "음란성, 욕설 등 부적절한 내용"); + + //when + Report createdReport = reportService.reportReview(userDetails, request); + + //then + Assertions.assertThat(reportRepository.findAll()).hasSize(1); + Assertions.assertThat(createdReport.getContent()) + .isEqualTo("음란성, 욕설 등 부적절한 내용"); + } + + private User createUser() { + return User.create("test1@test.com", "user-test", OAuthProvider.EATSSU, "1234", "1234"); + } + + private CustomUserDetails createCustomUserDetails(User user) { + User savedUser = userRepository.save(user); + return new CustomUserDetails(savedUser); + } + + private Review createReview(User user) { + return reviewRepository.save(Review.builder() + .user(user) + .content("굿") + .build()); + } } \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java index c69579c8..727981f5 100644 --- a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java @@ -6,6 +6,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; + import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Menu; @@ -21,90 +22,89 @@ @SpringBootTest class ReviewServiceTest { - @Autowired - private ReviewService reviewService; - - @Autowired - private UserRepository userRepository; - - @Autowired - private MenuRepository menuRepository; - - @Autowired - private ReviewRepository reviewRepository; - - @BeforeEach - void setup() { - reviewRepository.deleteAll(); - userRepository.deleteAll(); - menuRepository.deleteAll(); - } - - - @Test - void 리뷰를_생성한다() { - User user = createUser(); - CustomUserDetails userDetails = createCustomUserDetails(user); - Review createdReview = 리뷰_생성_요청(userDetails); - - // then - assertThat(reviewRepository.findAll()).hasSize(1); - assertThat(reviewRepository.findById(createdReview.getId()).orElseThrow().getContent()) - .isEqualTo("굿"); - } - - @Test - void 리뷰를_업데이트한다() { - // given - User user = createUser(); - CustomUserDetails userDetails = createCustomUserDetails(user); - Review createdReview = 리뷰_생성_요청(userDetails); - - // when - ReviewUpdateRequest request = new ReviewUpdateRequest(5, 5, 5, "굿굿"); - reviewService.updateReview(userDetails, createdReview.getId(), request); - - // then - assertThat(reviewRepository.findById(createdReview.getId()).orElseThrow().getContent()) - .isEqualTo("굿굿"); - } - - @Test - void 리뷰를_삭제한다() { - // given - User user = createUser(); - CustomUserDetails userDetails = createCustomUserDetails(user); - Review createdReview = 리뷰_생성_요청(userDetails); - - // when - reviewService.deleteReview(userDetails, createdReview.getId()); - - // then - assertThat(reviewRepository.findAll()).hasSize(0); - } - - private Review 리뷰_생성_요청(CustomUserDetails userDetails) { - // given - Menu menu = createMenu(); - ReviewCreateRequest request = new ReviewCreateRequest(4, 4, 4, "굿"); - - // when - Review createdReview = reviewService.createReview(userDetails, menu.getId(), - request, null); - return createdReview; - } - - private User createUser() { - return User.create("test@test.com", "user-test", OAuthProvider.EATSSU, "1234", "1234"); - } - - private CustomUserDetails createCustomUserDetails(User user) { - User savedUser = userRepository.save(user); - return new CustomUserDetails(savedUser); - } - - private Menu createMenu() { - Menu menu = Menu.createFixed("라면", Restaurant.FOOD_COURT, 3000, null); - return menuRepository.save(menu); - } + @Autowired + private ReviewService reviewService; + + @Autowired + private UserRepository userRepository; + + @Autowired + private MenuRepository menuRepository; + + @Autowired + private ReviewRepository reviewRepository; + + @BeforeEach + void setup() { + reviewRepository.deleteAll(); + userRepository.deleteAll(); + menuRepository.deleteAll(); + } + + @Test + void 리뷰를_생성한다() { + User user = createUser(); + CustomUserDetails userDetails = createCustomUserDetails(user); + Review createdReview = 리뷰_생성_요청(userDetails); + + // then + assertThat(reviewRepository.findAll()).hasSize(1); + assertThat(reviewRepository.findById(createdReview.getId()).orElseThrow().getContent()) + .isEqualTo("굿"); + } + + @Test + void 리뷰를_업데이트한다() { + // given + User user = createUser(); + CustomUserDetails userDetails = createCustomUserDetails(user); + Review createdReview = 리뷰_생성_요청(userDetails); + + // when + ReviewUpdateRequest request = new ReviewUpdateRequest(5, 5, 5, "굿굿"); + reviewService.updateReview(userDetails, createdReview.getId(), request); + + // then + assertThat(reviewRepository.findById(createdReview.getId()).orElseThrow().getContent()) + .isEqualTo("굿굿"); + } + + @Test + void 리뷰를_삭제한다() { + // given + User user = createUser(); + CustomUserDetails userDetails = createCustomUserDetails(user); + Review createdReview = 리뷰_생성_요청(userDetails); + + // when + reviewService.deleteReview(userDetails, createdReview.getId()); + + // then + assertThat(reviewRepository.findAll()).hasSize(0); + } + + private Review 리뷰_생성_요청(CustomUserDetails userDetails) { + // given + Menu menu = createMenu(); + ReviewCreateRequest request = new ReviewCreateRequest(4, 4, 4, "굿"); + + // when + Review createdReview = reviewService.createReview(userDetails, menu.getId(), + request, null); + return createdReview; + } + + private User createUser() { + return User.create("test@test.com", "user-test", OAuthProvider.EATSSU, "1234", "1234"); + } + + private CustomUserDetails createCustomUserDetails(User user) { + User savedUser = userRepository.save(user); + return new CustomUserDetails(savedUser); + } + + private Menu createMenu() { + Menu menu = Menu.createFixed("라면", Restaurant.FOOD_COURT, 3000, null); + return menuRepository.save(menu); + } } \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java b/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java index 9f49ce8d..990faebe 100644 --- a/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; + import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.review.repository.ReviewRepository; @@ -17,73 +18,73 @@ @SpringBootTest class UserServiceTest { - @Autowired - private UserService userService; - @Autowired - private UserRepository userRepository; - @Autowired - private ReviewRepository reviewRepository; - - @BeforeEach - void setUp() { - reviewRepository.deleteAll(); - userRepository.deleteAll(); - } - - @Test - void 회원가입을_한다() { - // given & when - 회원가입_요청(); - - // then - assertThat(userRepository.findAll()).hasSize(1); - } - - @Test - void 닉네임을_변경한다() { - // given - User user = 회원가입_요청(); - CustomUserDetails userDetails = UserDetails_생성(user); - - // when - userService.updateNickname(userDetails, new NicknameUpdateRequest("newNickname")); - - // then - user = userRepository.findById(userDetails.getId()).orElseThrow(); - assertThat(user.getNickname()).isEqualTo("newNickname"); - } - - @Test - void 회원탈퇴를_한다() { - // given - User user = 회원가입_요청(); - CustomUserDetails userDetails = UserDetails_생성(user); - - // when - userService.withdraw(userDetails); - - // then - assertThat(userRepository.findAll()).hasSize(0); - } - - @Test - void 중복_이메일을_확인한다() { - // given - User user = 회원가입_요청(); - - // when - boolean isDuplicated = userService.validateDuplicatedEmail(user.getEmail()); - - // then - assertThat(isDuplicated).isFalse(); - } - - private User 회원가입_요청() { - return userService.join("test@test.com", OAuthProvider.EATSSU, "1234"); - } - - @NotNull - private CustomUserDetails UserDetails_생성(User user) { - return new CustomUserDetails(user); - } + @Autowired + private UserService userService; + @Autowired + private UserRepository userRepository; + @Autowired + private ReviewRepository reviewRepository; + + @BeforeEach + void setUp() { + reviewRepository.deleteAll(); + userRepository.deleteAll(); + } + + @Test + void 회원가입을_한다() { + // given & when + 회원가입_요청(); + + // then + assertThat(userRepository.findAll()).hasSize(1); + } + + @Test + void 닉네임을_변경한다() { + // given + User user = 회원가입_요청(); + CustomUserDetails userDetails = UserDetails_생성(user); + + // when + userService.updateNickname(userDetails, new NicknameUpdateRequest("newNickname")); + + // then + user = userRepository.findById(userDetails.getId()).orElseThrow(); + assertThat(user.getNickname()).isEqualTo("newNickname"); + } + + @Test + void 회원탈퇴를_한다() { + // given + User user = 회원가입_요청(); + CustomUserDetails userDetails = UserDetails_생성(user); + + // when + userService.withdraw(userDetails); + + // then + assertThat(userRepository.findAll()).hasSize(0); + } + + @Test + void 중복_이메일을_확인한다() { + // given + User user = 회원가입_요청(); + + // when + boolean isDuplicated = userService.validateDuplicatedEmail(user.getEmail()); + + // then + assertThat(isDuplicated).isFalse(); + } + + private User 회원가입_요청() { + return userService.join("test@test.com", OAuthProvider.EATSSU, "1234"); + } + + @NotNull + private CustomUserDetails UserDetails_생성(User user) { + return new CustomUserDetails(user); + } } From 1c79aa89b118f01b9f8a9fce2493d633cead3dc9 Mon Sep 17 00:00:00 2001 From: Jiwoong CHOI Date: Mon, 17 Mar 2025 13:02:44 +0900 Subject: [PATCH 187/399] Update issue template - Fix and feature --- .github/ISSUE_TEMPLATE/fix-report.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/fix-report.md diff --git a/.github/ISSUE_TEMPLATE/fix-report.md b/.github/ISSUE_TEMPLATE/fix-report.md new file mode 100644 index 00000000..b7d6384b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/fix-report.md @@ -0,0 +1,16 @@ +--- +name: Fix Report +about: 고쳐야 할 사항들 +title: "[Fix]" +labels: fix +assignees: '' + +--- + +# Fix Report + +## 고쳐야 할 사항 + + + +## 첨부자료 From 01f5ad40f2e852553d1d6cce9248c91c877b3cd9 Mon Sep 17 00:00:00 2001 From: Jiwoong CHOI Date: Mon, 17 Mar 2025 13:04:19 +0900 Subject: [PATCH 188/399] Update issue templates --- .github/ISSUE_TEMPLATE/feature-report.md | 16 ++++++++++++++++ .github/ISSUE_TEMPLATE/fix-report.md | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 .github/ISSUE_TEMPLATE/feature-report.md diff --git a/.github/ISSUE_TEMPLATE/feature-report.md b/.github/ISSUE_TEMPLATE/feature-report.md new file mode 100644 index 00000000..0bc35758 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-report.md @@ -0,0 +1,16 @@ +--- +name: Feature Report +about: 추가할 사항들 +title: "[feature]" +labels: feat +assignees: '' + +--- + +# Feature Report + +## 추가 할 사항들 + + + +## 첨부자료 diff --git a/.github/ISSUE_TEMPLATE/fix-report.md b/.github/ISSUE_TEMPLATE/fix-report.md index b7d6384b..e7c2807a 100644 --- a/.github/ISSUE_TEMPLATE/fix-report.md +++ b/.github/ISSUE_TEMPLATE/fix-report.md @@ -1,7 +1,7 @@ --- name: Fix Report about: 고쳐야 할 사항들 -title: "[Fix]" +title: "[fix]" labels: fix assignees: '' From 850a5f4ffb038dc5d41499ad2eb1a85387d998e4 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Mon, 17 Mar 2025 14:25:30 +0900 Subject: [PATCH 189/399] refactor: reformat files via InteliJ --- .github/ISSUE_TEMPLATE/feature-report.md | 2 - .github/ISSUE_TEMPLATE/fix-report.md | 2 - .../controller/AuthenticationController.java | 5 +-- .../controller/ManageCategoryController.java | 9 +++-- .../controller/ManageFixMenuController.java | 13 ++++-- .../controller/ManageInquiryController.java | 11 +++-- .../controller/ManageMealController.java | 14 +++++-- .../controller/ManageReportController.java | 9 +++-- .../controller/ManageReviewController.java | 3 +- .../eatssu/domain/admin/dto/InquiryLine.java | 4 +- .../ssu/eatssu/domain/admin/dto/MealInfo.java | 4 +- .../eatssu/domain/admin/dto/MenuSection.java | 4 +- .../eatssu/domain/admin/dto/PageWrapper.java | 4 +- .../eatssu/domain/admin/dto/ReportLine.java | 4 +- .../AdminAuthConfigurationProperties.java | 4 +- .../admin/listener/ReportEventListener.java | 3 +- .../persistence/LoadCategoryRepository.java | 5 +-- .../persistence/LoadFixMenuRepository.java | 9 ++--- .../persistence/LoadInquiryRepository.java | 15 ++++--- .../admin/persistence/LoadMealRepository.java | 11 +++-- .../persistence/LoadReportRepository.java | 13 +++--- .../persistence/ManageMenuRepository.java | 4 +- .../persistence/MenuRatingRepository.java | 5 +-- .../admin/service/AuthenticationService.java | 3 +- .../admin/service/ManageCategoryService.java | 3 +- .../admin/service/ManageFixMenuService.java | 13 ++++-- .../admin/service/ManageInquiryService.java | 3 +- .../admin/service/ManageMealService.java | 21 +++++++--- .../admin/service/ManageReportService.java | 5 +-- .../admin/service/ManageReviewService.java | 5 +-- .../ssu/eatssu/domain/auth/dto/AppleKeys.java | 6 +-- .../auth/entity/SystemAppleAuthenticator.java | 35 ++++++++-------- .../auth/infrastructure/SecurityConfig.java | 3 +- .../auth/presentation/OAuthController.java | 15 ++++--- .../auth/security/CustomUserDetails.java | 9 ++--- .../security/CustomUserDetailsService.java | 5 +-- .../security/JwtAuthenticationFilter.java | 14 +++---- .../auth/security/JwtTokenProvider.java | 29 +++++++------- .../security/UserAuthenticationProvider.java | 4 +- .../domain/auth/service/OAuthService.java | 8 ++-- .../eatssu/domain/inquiry/entity/Inquiry.java | 17 +++++++- .../presentation/InquiryController.java | 13 +++--- .../inquiry/service/InquiryService.java | 5 +-- .../ssu/eatssu/domain/menu/entity/Meal.java | 26 ++++++++---- .../eatssu/domain/menu/entity/MealMenu.java | 15 ++++++- .../ssu/eatssu/domain/menu/entity/Menu.java | 20 ++++++++-- .../domain/menu/entity/MenuCategory.java | 14 ++++++- .../menu/entity/constants/MenuType.java | 10 ++--- .../menu/entity/constants/TimePart.java | 4 +- .../LoadMenusInMealRepository.java | 9 ++--- .../menu/persistence/MealMenuRepository.java | 4 +- .../menu/persistence/MealRepository.java | 6 +-- .../persistence/MenuCategoryRepository.java | 4 +- .../menu/persistence/MenuRepository.java | 6 +-- .../QuerydslMealRatingCalculator.java | 9 ++--- .../QuerydslMealRatingCounter.java | 13 +++--- .../QuerydslMenuRatingCalculator.java | 5 +-- .../QuerydslMenuRatingCounter.java | 13 +++--- .../dto/request/CreateMealRequest.java | 4 +- .../request/MealCreateWithPriceRequest.java | 4 +- .../response/CategoryWithMenusResponse.java | 4 +- .../dto/response/MealDetailResponse.java | 4 +- .../dto/response/MenuRestaurantResponse.java | 4 +- .../dto/response/MenusInMealResponse.java | 4 +- .../presentation/rest/MealController.java | 24 ++++++----- .../presentation/rest/MenuController.java | 11 +++-- .../menu/service/MealRatingService.java | 3 +- .../domain/menu/service/MealService.java | 15 ++++--- .../menu/service/MenuRatingService.java | 3 +- .../domain/menu/service/MenuService.java | 13 +++--- .../QuerydslMenuRatingCountProvider.java | 5 +-- .../dto/CreatePartnershipRequest.java | 4 +- .../dto/PartnershipDetailResponse.java | 8 ++-- .../partnership/dto/PartnershipResponse.java | 8 ++-- .../partnership/entity/Partnership.java | 22 +++++++--- .../entity/PartnershipCollege.java | 9 ++++- .../entity/PartnershipDepartment.java | 9 ++++- .../partnership/entity/PartnershipLike.java | 9 ++++- .../PartnershipLikeRepository.java | 6 +-- .../persistence/PartnershipRepository.java | 4 +- .../presentation/PartnershipController.java | 16 +++++--- .../service/PartnershipService.java | 13 +++--- .../entity/JpaProjectionRatingCalculator.java | 4 +- .../domain/report/dto/ReportTypeList.java | 8 ++-- .../domain/report/entity/ReportStatus.java | 4 +- .../domain/report/entity/ReportType.java | 4 +- .../report/presentation/ReportController.java | 11 +++-- .../domain/report/service/ReportService.java | 6 +-- .../domain/restaurant/entity/Restaurant.java | 8 ++-- .../restaurant/entity/RestaurantType.java | 4 +- .../review/dto/CreateMealReviewRequest.java | 6 +-- .../domain/review/dto/MealReviewResponse.java | 10 ++--- .../review/dto/MealReviewsResponse.java | 4 +- .../review/dto/ReviewCreateRequest.java | 5 +-- .../domain/review/dto/ReviewDetail.java | 8 ++-- .../domain/review/dto/ReviewRatingCount.java | 4 +- .../review/dto/UpdateMealReviewRequest.java | 4 +- .../review/dto/UploadReviewRequest.java | 5 +-- .../eatssu/domain/review/entity/Report.java | 17 +++++++- .../eatssu/domain/review/entity/Review.java | 29 ++++++++++---- .../domain/review/entity/ReviewImage.java | 15 ++++++- .../domain/review/entity/ReviewLike.java | 9 ++++- .../domain/review/entity/ReviewMenuLike.java | 15 ++++++- .../eatssu/domain/review/entity/Reviews.java | 6 +-- .../presentation/MealReviewController.java | 21 ++++++---- .../review/presentation/ReviewController.java | 40 +++++++++++++------ .../repository/ReviewLikeRepository.java | 4 +- .../repository/ReviewMenuLikeRepository.java | 4 +- .../review/repository/ReviewRepository.java | 6 +-- .../repository/ReviewRepositoryImpl.java | 13 +++--- .../review/service/MealReviewService.java | 22 +++++----- .../review/service/ReviewRatingService.java | 5 +-- .../domain/review/service/ReviewService.java | 20 ++++++---- .../slack/entity/SlackMessageFormat.java | 4 +- .../domain/slack/service/SlackService.java | 11 +++-- .../domain/slice/dto/SliceResponse.java | 6 +-- .../domain/slice/service/SliceService.java | 12 +++--- .../user/department/entity/College.java | 14 +++++-- .../user/department/entity/Department.java | 17 ++++++-- .../persistence/CollegeRepository.java | 4 +- .../persistence/DepartmentRepository.java | 4 +- .../domain/user/dto/MyMealReviewResponse.java | 8 ++-- .../domain/user/dto/MyReviewDetail.java | 8 ++-- .../domain/user/entity/BaseTimeEntity.java | 10 ++--- .../ssu/eatssu/domain/user/entity/Role.java | 4 +- .../ssu/eatssu/domain/user/entity/User.java | 24 +++++++---- .../user/presentation/UserController.java | 34 +++++++++++----- .../user/repository/UserRepository.java | 4 +- .../domain/user/service/UserService.java | 13 +++--- .../domain/user/util/UserAliasUtil.java | 4 +- .../eatssu/global/config/QueryDslConfig.java | 6 +-- .../ssu/eatssu/global/config/S3Config.java | 8 ++-- .../eatssu/global/config/SwaggerConfig.java | 19 ++++----- .../handler/GlobalExceptionHandler.java | 3 +- .../handler/JwtAccessDeniedHandler.java | 15 ++++--- .../handler/JwtAuthenticationEntryPoint.java | 15 ++++--- .../handler/response/BaseResponseStatus.java | 4 +- .../ssu/eatssu/global/util/S3Uploader.java | 22 +++++----- .../domain/menu/service/MealServiceTest.java | 2 +- .../domain/menu/service/MenuServiceTest.java | 13 +++--- .../report/service/ReportServiceTest.java | 3 +- .../domain/user/service/UserServiceTest.java | 4 +- 142 files changed, 782 insertions(+), 571 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/feature-report.md b/.github/ISSUE_TEMPLATE/feature-report.md index 0bc35758..a70df6cf 100644 --- a/.github/ISSUE_TEMPLATE/feature-report.md +++ b/.github/ISSUE_TEMPLATE/feature-report.md @@ -11,6 +11,4 @@ assignees: '' ## 추가 할 사항들 - - ## 첨부자료 diff --git a/.github/ISSUE_TEMPLATE/fix-report.md b/.github/ISSUE_TEMPLATE/fix-report.md index e7c2807a..bee136b0 100644 --- a/.github/ISSUE_TEMPLATE/fix-report.md +++ b/.github/ISSUE_TEMPLATE/fix-report.md @@ -11,6 +11,4 @@ assignees: '' ## 고쳐야 할 사항 - - ## 첨부자료 diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java b/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java index dcdb35fe..20c8b38a 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java @@ -1,14 +1,13 @@ package ssu.eatssu.domain.admin.controller; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; - import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.admin.dto.LoginRequest; import ssu.eatssu.domain.admin.service.AuthenticationService; import ssu.eatssu.domain.user.dto.Tokens; diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java index 7edd71f4..c8b99234 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java @@ -1,10 +1,13 @@ package ssu.eatssu.domain.admin.controller; -import lombok.RequiredArgsConstructor; - import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.RegisterCategoryRequest; import ssu.eatssu.domain.admin.service.ManageCategoryService; import ssu.eatssu.domain.restaurant.entity.Restaurant; diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java index 28774954..5acefb1d 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java @@ -1,10 +1,17 @@ package ssu.eatssu.domain.admin.controller; -import lombok.RequiredArgsConstructor; - import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.MenuBoards; import ssu.eatssu.domain.admin.dto.RegisterFixMenuRequest; import ssu.eatssu.domain.admin.dto.UpdateFixMenuRequest; diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java index 8392508f..fe15516d 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java @@ -1,13 +1,18 @@ package ssu.eatssu.domain.admin.controller; -import lombok.RequiredArgsConstructor; - import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.InquiryLine; import ssu.eatssu.domain.admin.dto.PageWrapper; import ssu.eatssu.domain.admin.dto.UpdateStatusRequest; diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java index 14b79e01..e2b57669 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java @@ -1,12 +1,20 @@ package ssu.eatssu.domain.admin.controller; -import lombok.RequiredArgsConstructor; +import java.util.Date; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.MealInfo; import ssu.eatssu.domain.admin.dto.MenuBoards; import ssu.eatssu.domain.admin.dto.RegisterMealRequest; @@ -15,8 +23,6 @@ import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.global.handler.response.BaseResponse; -import java.util.Date; - @Controller @RequestMapping("/admin/meals") @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java index 497925f1..4e04532e 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java @@ -1,13 +1,16 @@ package ssu.eatssu.domain.admin.controller; -import lombok.RequiredArgsConstructor; - import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.PageWrapper; import ssu.eatssu.domain.admin.dto.ReportLine; import ssu.eatssu.domain.admin.service.ManageReportService; diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java index 6571bd7b..612fcc3d 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java @@ -1,13 +1,12 @@ package ssu.eatssu.domain.admin.controller; -import lombok.RequiredArgsConstructor; - import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.service.ManageReviewService; import ssu.eatssu.global.handler.response.BaseResponse; diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java b/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java index 7f46580a..93bbc9d6 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java @@ -1,10 +1,10 @@ package ssu.eatssu.domain.admin.dto; +import java.time.LocalDateTime; + import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.inquiry.entity.InquiryStatus; -import java.time.LocalDateTime; - public record InquiryLine(Long inquiryId, LocalDateTime date, String email, String content, InquiryStatus status) { public InquiryLine(Inquiry inquiry) { this(inquiry.getId(), inquiry.getCreatedDate(), inquiry.getEmail(), inquiry.getContent(), inquiry.getStatus()); diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java b/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java index 56cc82b3..d6a015fc 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java @@ -1,9 +1,9 @@ package ssu.eatssu.domain.admin.dto; +import java.util.Date; + import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import java.util.Date; - public record MealInfo(Restaurant restaurant, Date date, TimePart timePart) { } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java index 8b0845a6..c080b7b7 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java @@ -1,10 +1,10 @@ package ssu.eatssu.domain.admin.dto; -import ssu.eatssu.domain.menu.entity.MenuCategory; - import java.util.ArrayList; import java.util.List; +import ssu.eatssu.domain.menu.entity.MenuCategory; + public record MenuSection(Long categoryId, String categoryName, List menuLines) implements SectionInBoard { public MenuSection(MenuCategory category) { this(category.getId(), category.getName(), new ArrayList<>()); diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java b/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java index c7c14e46..5fa7d3a7 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java @@ -1,9 +1,9 @@ package ssu.eatssu.domain.admin.dto; -import org.springframework.data.domain.Page; - import java.util.List; +import org.springframework.data.domain.Page; + public record PageWrapper(List content, int totalPages, long totalElements, int number, int size, int numberOfElements, boolean isFirst, boolean isLast) { diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java b/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java index 43160c6c..8948d13d 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java @@ -1,10 +1,10 @@ package ssu.eatssu.domain.admin.dto; +import java.time.LocalDateTime; + import ssu.eatssu.domain.review.entity.Report; import ssu.eatssu.domain.review.entity.Review; -import java.time.LocalDateTime; - public record ReportLine(Long reportId, LocalDateTime date, String type, Long reviewId, String reviewText) { public ReportLine(Report report, Review review) { this(report.getId(), report.getCreatedDate(), report.getReportType().getDescription(), diff --git a/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java b/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java index ee2b821f..4c2f7ea0 100644 --- a/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java +++ b/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java @@ -1,9 +1,9 @@ package ssu.eatssu.domain.admin.infrastructure; -import lombok.Data; - import org.springframework.boot.context.properties.ConfigurationProperties; +import lombok.Data; + @Data @ConfigurationProperties(prefix = "admin") public class AdminAuthConfigurationProperties { diff --git a/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java b/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java index d9780e36..5219f6ae 100644 --- a/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java +++ b/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java @@ -1,10 +1,9 @@ package ssu.eatssu.domain.admin.listener; -import lombok.RequiredArgsConstructor; - import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.event.ReviewDeleteEvent; import ssu.eatssu.domain.admin.service.ManageReportService; diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java index 60225778..7ae755f2 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java @@ -1,11 +1,10 @@ package ssu.eatssu.domain.admin.persistence; +import org.springframework.stereotype.Repository; + import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; - -import org.springframework.stereotype.Repository; - import ssu.eatssu.domain.menu.entity.QMenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java index 13d56fe6..470d76f4 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java @@ -1,21 +1,20 @@ package ssu.eatssu.domain.admin.persistence; +import java.util.List; + +import org.springframework.stereotype.Repository; + import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; - -import org.springframework.stereotype.Repository; - import ssu.eatssu.domain.admin.dto.BriefMenu; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.menu.entity.QMenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import java.util.List; - @Repository @RequiredArgsConstructor public class LoadFixMenuRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java index 9eb2ba3e..ccc0b3c2 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java @@ -1,23 +1,22 @@ package ssu.eatssu.domain.admin.persistence; -import com.querydsl.core.types.dsl.CaseBuilder; -import com.querydsl.core.types.dsl.NumberExpression; -import com.querydsl.jpa.impl.JPAQuery; -import com.querydsl.jpa.impl.JPAQueryFactory; - -import lombok.RequiredArgsConstructor; +import java.util.List; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.support.PageableExecutionUtils; import org.springframework.stereotype.Repository; +import com.querydsl.core.types.dsl.CaseBuilder; +import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.jpa.impl.JPAQuery; +import com.querydsl.jpa.impl.JPAQueryFactory; + +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.inquiry.entity.InquiryStatus; import ssu.eatssu.domain.inquiry.entity.QInquiry; -import java.util.List; - @RequiredArgsConstructor @Repository public class LoadInquiryRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java index 1ec3592e..73f6e7d0 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java @@ -1,13 +1,15 @@ package ssu.eatssu.domain.admin.persistence; +import java.util.Date; +import java.util.List; + +import org.springframework.stereotype.Repository; + import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; - -import org.springframework.stereotype.Repository; - import ssu.eatssu.domain.admin.dto.BriefMenu; import ssu.eatssu.domain.admin.dto.MealInfo; import ssu.eatssu.domain.menu.entity.Menu; @@ -17,9 +19,6 @@ import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import java.util.Date; -import java.util.List; - @Repository @RequiredArgsConstructor public class LoadMealRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java index 8f775aea..6bfde01f 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java @@ -1,22 +1,21 @@ package ssu.eatssu.domain.admin.persistence; -import com.querydsl.core.types.Projections; -import com.querydsl.jpa.impl.JPAQuery; -import com.querydsl.jpa.impl.JPAQueryFactory; - -import lombok.RequiredArgsConstructor; +import java.util.List; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.support.PageableExecutionUtils; import org.springframework.stereotype.Repository; +import com.querydsl.core.types.Projections; +import com.querydsl.jpa.impl.JPAQuery; +import com.querydsl.jpa.impl.JPAQueryFactory; + +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.ReportLine; import ssu.eatssu.domain.review.entity.QReport; import ssu.eatssu.domain.review.entity.QReview; -import java.util.List; - @Repository @RequiredArgsConstructor public class LoadReportRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java index 0cfeac9e..6e7cb30e 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java @@ -1,12 +1,12 @@ package ssu.eatssu.domain.admin.persistence; +import java.util.Optional; + import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import ssu.eatssu.domain.menu.entity.Menu; -import java.util.Optional; - @Repository public interface ManageMenuRepository extends JpaRepository { Optional findById(Long id); diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java index 84c361cf..e90ff3fb 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java @@ -1,12 +1,11 @@ package ssu.eatssu.domain.admin.persistence; +import org.springframework.stereotype.Repository; + import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; - -import org.springframework.stereotype.Repository; - import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; diff --git a/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java b/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java index cae34329..f16bc8c6 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java @@ -1,10 +1,9 @@ package ssu.eatssu.domain.admin.service; -import lombok.RequiredArgsConstructor; - import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.controller.AdminAuth; import ssu.eatssu.domain.admin.dto.LoginRequest; import ssu.eatssu.domain.auth.security.JwtTokenProvider; diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java index 5f99ea8d..249b1a87 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java @@ -1,10 +1,9 @@ package ssu.eatssu.domain.admin.service; -import lombok.RequiredArgsConstructor; - import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.RegisterCategoryRequest; import ssu.eatssu.domain.admin.persistence.LoadCategoryRepository; import ssu.eatssu.domain.admin.persistence.ManageCategoryRepository; diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java index ad500ed3..fdfa44aa 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java @@ -1,11 +1,18 @@ package ssu.eatssu.domain.admin.service; -import lombok.RequiredArgsConstructor; +import java.util.List; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import ssu.eatssu.domain.admin.dto.*; +import lombok.RequiredArgsConstructor; +import ssu.eatssu.domain.admin.dto.BriefMenu; +import ssu.eatssu.domain.admin.dto.MenuBoard; +import ssu.eatssu.domain.admin.dto.MenuBoards; +import ssu.eatssu.domain.admin.dto.MenuLine; +import ssu.eatssu.domain.admin.dto.MenuSection; +import ssu.eatssu.domain.admin.dto.RegisterFixMenuRequest; +import ssu.eatssu.domain.admin.dto.UpdateFixMenuRequest; import ssu.eatssu.domain.admin.persistence.LoadFixMenuRepository; import ssu.eatssu.domain.admin.persistence.ManageMenuRepository; import ssu.eatssu.domain.admin.persistence.MenuRatingRepository; @@ -16,8 +23,6 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; -import java.util.List; - @Service @Transactional @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java index fb9c3af4..cf0981da 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java @@ -1,11 +1,10 @@ package ssu.eatssu.domain.admin.service; -import lombok.RequiredArgsConstructor; - import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.InquiryLine; import ssu.eatssu.domain.admin.dto.PageWrapper; import ssu.eatssu.domain.admin.dto.UpdateStatusRequest; diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java index 0af8a0ca..3a27dc8b 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java @@ -1,11 +1,23 @@ package ssu.eatssu.domain.admin.service; -import lombok.RequiredArgsConstructor; +import java.util.Date; +import java.util.List; import org.springframework.stereotype.Service; -import ssu.eatssu.domain.admin.dto.*; -import ssu.eatssu.domain.admin.persistence.*; +import lombok.RequiredArgsConstructor; +import ssu.eatssu.domain.admin.dto.BriefMenu; +import ssu.eatssu.domain.admin.dto.MealInfo; +import ssu.eatssu.domain.admin.dto.MealSection; +import ssu.eatssu.domain.admin.dto.MenuBoard; +import ssu.eatssu.domain.admin.dto.MenuBoards; +import ssu.eatssu.domain.admin.dto.MenuLine; +import ssu.eatssu.domain.admin.dto.RegisterMealRequest; +import ssu.eatssu.domain.admin.persistence.LoadMealRepository; +import ssu.eatssu.domain.admin.persistence.ManageMealMenuRepository; +import ssu.eatssu.domain.admin.persistence.ManageMealRepository; +import ssu.eatssu.domain.admin.persistence.ManageMenuRepository; +import ssu.eatssu.domain.admin.persistence.MenuRatingRepository; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; @@ -14,9 +26,6 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; -import java.util.Date; -import java.util.List; - @RequiredArgsConstructor @Service public class ManageMealService { diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java index 8b248b65..1495698f 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java @@ -1,18 +1,17 @@ package ssu.eatssu.domain.admin.service; -import lombok.RequiredArgsConstructor; +import java.util.List; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.PageWrapper; import ssu.eatssu.domain.admin.dto.ReportLine; import ssu.eatssu.domain.admin.persistence.LoadReportRepository; import ssu.eatssu.domain.admin.persistence.ManageReportRepository; -import java.util.List; - @Service @RequiredArgsConstructor public class ManageReportService { diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java index 58aab53a..2e158888 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java @@ -1,11 +1,10 @@ package ssu.eatssu.domain.admin.service; -import jakarta.transaction.Transactional; -import lombok.RequiredArgsConstructor; - import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.event.ReviewDeleteEvent; import ssu.eatssu.domain.admin.persistence.ManageReviewRepository; diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java b/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java index 9060f2a9..a4a9b42b 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java @@ -1,11 +1,11 @@ package ssu.eatssu.domain.auth.dto; -import lombok.Getter; -import lombok.NoArgsConstructor; - import java.util.List; import java.util.Optional; +import lombok.Getter; +import lombok.NoArgsConstructor; + @Getter @NoArgsConstructor public class AppleKeys { diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java index 91ed7b4d..34300152 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java @@ -1,22 +1,6 @@ package ssu.eatssu.domain.auth.entity; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.jsonwebtoken.Claims; -import io.jsonwebtoken.ExpiredJwtException; -import io.jsonwebtoken.Jwts; -import lombok.RequiredArgsConstructor; - -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Component; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.UriComponentsBuilder; - -import ssu.eatssu.domain.auth.dto.AppleKeys; -import ssu.eatssu.domain.auth.dto.OAuthInfo; -import ssu.eatssu.global.handler.response.BaseException; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; import java.math.BigInteger; import java.net.URI; @@ -28,7 +12,22 @@ import java.util.Base64; import java.util.Map; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.INVALID_IDENTITY_TOKEN; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.ExpiredJwtException; +import io.jsonwebtoken.Jwts; +import lombok.RequiredArgsConstructor; +import ssu.eatssu.domain.auth.dto.AppleKeys; +import ssu.eatssu.domain.auth.dto.OAuthInfo; +import ssu.eatssu.global.handler.response.BaseException; @Component @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 2ce078cc..42c42a55 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -1,7 +1,5 @@ package ssu.eatssu.domain.auth.infrastructure; -import lombok.RequiredArgsConstructor; - import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -14,6 +12,7 @@ import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.JwtAuthenticationFilter; import ssu.eatssu.domain.auth.security.JwtTokenProvider; import ssu.eatssu.global.handler.JwtAccessDeniedHandler; diff --git a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java index 8ec2f85d..dba5ce6f 100644 --- a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java @@ -1,5 +1,12 @@ package ssu.eatssu.domain.auth.presentation; +import static ssu.eatssu.domain.auth.infrastructure.SecurityUtil.*; + +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -9,20 +16,12 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; - -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.auth.service.OAuthService; import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.global.handler.response.BaseResponse; -import static ssu.eatssu.domain.auth.infrastructure.SecurityUtil.getLoginUser; - @Slf4j @RestController @RequestMapping("/oauths") diff --git a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java index 838a9d72..285b26a2 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java @@ -1,17 +1,16 @@ package ssu.eatssu.domain.auth.security; -import lombok.Getter; -import lombok.RequiredArgsConstructor; +import java.util.ArrayList; +import java.util.Collection; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; +import lombok.Getter; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.user.entity.User; -import java.util.ArrayList; -import java.util.Collection; - @RequiredArgsConstructor @Getter public class CustomUserDetails implements UserDetails { diff --git a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java index 627e252b..0bf9f65e 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java @@ -1,12 +1,11 @@ package ssu.eatssu.domain.auth.security; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; - import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.stereotype.Component; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java index af9efe42..fcbf573e 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java @@ -1,5 +1,12 @@ package ssu.eatssu.domain.auth.security; +import java.io.IOException; + +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.util.StringUtils; +import org.springframework.web.filter.GenericFilterBean; + import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; @@ -8,13 +15,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.util.StringUtils; -import org.springframework.web.filter.GenericFilterBean; - -import java.io.IOException; - @Slf4j @RequiredArgsConstructor public class JwtAuthenticationFilter extends GenericFilterBean { diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java index 2b44fb02..b667f8ee 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java @@ -1,5 +1,19 @@ package ssu.eatssu.domain.auth.security; +import java.security.Key; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.stereotype.Component; + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -10,25 +24,10 @@ import io.jsonwebtoken.security.Keys; import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.stereotype.Component; - import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; -import java.security.Key; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - @Slf4j @Component public class JwtTokenProvider { diff --git a/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java b/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java index c5e9dd34..5db0db61 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java @@ -1,12 +1,12 @@ package ssu.eatssu.domain.auth.security; -import lombok.RequiredArgsConstructor; - import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Component; +import lombok.RequiredArgsConstructor; + /** * 인증 정보를 바탕으로 Authentication 객체 생성 */ diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java index bb8fb366..370c26cf 100644 --- a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.auth.service; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; +import static ssu.eatssu.domain.auth.entity.OAuthProvider.*; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; @@ -9,6 +8,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.auth.dto.OAuthInfo; @@ -20,9 +21,6 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.user.service.UserService; -import static ssu.eatssu.domain.auth.entity.OAuthProvider.APPLE; -import static ssu.eatssu.domain.auth.entity.OAuthProvider.KAKAO; - @Slf4j @Service @Transactional diff --git a/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java b/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java index 1c39c69d..9fc8c2a5 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java @@ -1,7 +1,20 @@ package ssu.eatssu.domain.inquiry.entity; -import jakarta.persistence.*; -import lombok.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; import ssu.eatssu.domain.user.entity.BaseTimeEntity; import ssu.eatssu.domain.user.entity.User; diff --git a/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java b/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java index 1f411571..9f09bbc1 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java @@ -1,5 +1,11 @@ package ssu.eatssu.domain.inquiry.presentation; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -7,13 +13,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; - -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.inquiry.dto.CreateInquiryRequest; import ssu.eatssu.domain.inquiry.entity.Inquiry; diff --git a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java index 27e9483a..f87b123e 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java @@ -1,10 +1,11 @@ package ssu.eatssu.domain.inquiry.service; -import lombok.RequiredArgsConstructor; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.inquiry.dto.CreateInquiryRequest; import ssu.eatssu.domain.inquiry.entity.Inquiry; @@ -13,8 +14,6 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; - @RequiredArgsConstructor @Service @Transactional diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index c56cd872..953d640f 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -1,19 +1,29 @@ package ssu.eatssu.domain.menu.entity; -import jakarta.persistence.*; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; import org.springframework.format.annotation.DateTimeFormat; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Temporal; +import jakarta.persistence.TemporalType; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java b/src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java index 957bf31b..f6518088 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java @@ -1,7 +1,18 @@ package ssu.eatssu.domain.menu.entity; -import jakarta.persistence.*; -import lombok.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; @Entity @Getter diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index e880d85c..7462e912 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -1,6 +1,21 @@ package ssu.eatssu.domain.menu.entity; -import jakarta.persistence.*; +import java.util.ArrayList; +import java.util.List; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Embedded; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -8,9 +23,6 @@ import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.Reviews; -import java.util.ArrayList; -import java.util.List; - @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java b/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java index 96f57f60..400dd8ef 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java @@ -1,7 +1,17 @@ package ssu.eatssu.domain.menu.entity; -import jakarta.persistence.*; -import lombok.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; import ssu.eatssu.domain.restaurant.entity.Restaurant; @Entity diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java b/src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java index c80e25dd..edc97d96 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java @@ -1,14 +1,14 @@ package ssu.eatssu.domain.menu.entity.constants; -import com.fasterxml.jackson.annotation.JsonCreator; - -import lombok.Getter; -import ssu.eatssu.domain.restaurant.entity.Restaurant; +import static ssu.eatssu.domain.restaurant.entity.Restaurant.*; import java.util.Arrays; import java.util.List; -import static ssu.eatssu.domain.restaurant.entity.Restaurant.*; +import com.fasterxml.jackson.annotation.JsonCreator; + +import lombok.Getter; +import ssu.eatssu.domain.restaurant.entity.Restaurant; @Getter public enum MenuType { diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java b/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java index d1b426a2..2866bffd 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java @@ -1,11 +1,11 @@ package ssu.eatssu.domain.menu.entity.constants; +import java.util.Arrays; + import com.fasterxml.jackson.annotation.JsonCreator; import lombok.Getter; -import java.util.Arrays; - @Getter public enum TimePart { MORNING("조식"), diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/LoadMenusInMealRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/LoadMenusInMealRepository.java index 3b7f952d..2b20f5b4 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/LoadMenusInMealRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/LoadMenusInMealRepository.java @@ -1,17 +1,16 @@ package ssu.eatssu.domain.menu.persistence; -import com.querydsl.jpa.impl.JPAQueryFactory; - -import lombok.RequiredArgsConstructor; +import java.util.List; import org.springframework.stereotype.Component; +import com.querydsl.jpa.impl.JPAQueryFactory; + +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.menu.entity.QMeal; import ssu.eatssu.domain.menu.entity.QMealMenu; import ssu.eatssu.domain.menu.entity.QMenu; -import java.util.List; - @Component @RequiredArgsConstructor public class LoadMenusInMealRepository { diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java index b3ac36c2..21c93a8a 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java @@ -1,5 +1,7 @@ package ssu.eatssu.domain.menu.persistence; +import java.util.List; + import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -8,8 +10,6 @@ import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; -import java.util.List; - public interface MealMenuRepository extends JpaRepository { @Query("SELECT mm.menu FROM MealMenu mm WHERE mm.meal IN :meals") List findMenusByMeals(List meals); diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java index e28ccc73..dcc471cc 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java @@ -1,14 +1,14 @@ package ssu.eatssu.domain.menu.persistence; +import java.util.Date; +import java.util.List; + import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import java.util.Date; -import java.util.List; - public interface MealRepository extends JpaRepository { List findAllByDateAndTimePartAndRestaurant(Date date, TimePart timePart, Restaurant restaurant); diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java index 2581d891..5b171e61 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java @@ -1,12 +1,12 @@ package ssu.eatssu.domain.menu.persistence; +import java.util.List; + import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import java.util.List; - public interface MenuCategoryRepository extends JpaRepository { List findAllByRestaurant(Restaurant restaurant); diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java index 8ea3b95b..19ab9f94 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java @@ -1,14 +1,14 @@ package ssu.eatssu.domain.menu.persistence; +import java.util.List; +import java.util.Optional; + import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import java.util.List; -import java.util.Optional; - public interface MenuRepository extends JpaRepository { boolean existsByNameAndRestaurant(String name, Restaurant restaurant); diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java index 73c0fb77..74a3639f 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java @@ -1,17 +1,16 @@ package ssu.eatssu.domain.menu.persistence; +import java.util.List; + +import org.springframework.stereotype.Repository; + import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; - -import org.springframework.stereotype.Repository; - import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; -import java.util.List; - @Repository @RequiredArgsConstructor public class QuerydslMealRatingCalculator { diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java index 7a1c6261..5747e33f 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java @@ -1,20 +1,19 @@ package ssu.eatssu.domain.menu.persistence; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Repository; + import com.querydsl.core.Tuple; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; - -import org.springframework.stereotype.Repository; - import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - @Repository @RequiredArgsConstructor public class QuerydslMealRatingCounter { diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java index 6e9b5f2e..dcfb2795 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java @@ -1,12 +1,11 @@ package ssu.eatssu.domain.menu.persistence; +import org.springframework.stereotype.Repository; + import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; - -import org.springframework.stereotype.Repository; - import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java index cb518282..db426a00 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java @@ -1,20 +1,19 @@ package ssu.eatssu.domain.menu.persistence; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Repository; + import com.querydsl.core.Tuple; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; - -import org.springframework.stereotype.Repository; - import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - @Repository @RequiredArgsConstructor public class QuerydslMenuRatingCounter { diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java index bbe42642..6286bc52 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java @@ -1,9 +1,9 @@ package ssu.eatssu.domain.menu.presentation.dto.request; -import io.swagger.v3.oas.annotations.media.Schema; - import java.util.List; +import io.swagger.v3.oas.annotations.media.Schema; + @Schema(title = "식단 추가") public record CreateMealRequest( @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java index 4ef854cb..0c5c2bcf 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java @@ -1,9 +1,9 @@ package ssu.eatssu.domain.menu.presentation.dto.request; -import io.swagger.v3.oas.annotations.media.Schema; - import java.util.List; +import io.swagger.v3.oas.annotations.media.Schema; + @Schema(title = "식단 추가(가격 입력 받는 버전)") public record MealCreateWithPriceRequest( @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java index 4c999891..20eee35d 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java @@ -1,10 +1,10 @@ package ssu.eatssu.domain.menu.presentation.dto.response; +import java.util.List; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; -import java.util.List; - @Getter @Schema(title = "카테고리 별 메뉴 목록 Response") public class CategoryWithMenusResponse { diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java index 1e7d2b2d..81544743 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java @@ -1,5 +1,7 @@ package ssu.eatssu.domain.menu.presentation.dto.response; +import java.util.List; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; @@ -7,8 +9,6 @@ import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; -import java.util.List; - @Getter @NoArgsConstructor @AllArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java index e78fd75c..ec1e7a53 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java @@ -1,10 +1,10 @@ package ssu.eatssu.domain.menu.presentation.dto.response; -import lombok.Getter; - import java.util.ArrayList; import java.util.List; +import lombok.Getter; + @Getter public class MenuRestaurantResponse { diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java index 0c097a5e..85480c5d 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java @@ -1,5 +1,7 @@ package ssu.eatssu.domain.menu.presentation.dto.response; +import java.util.List; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; @@ -7,8 +9,6 @@ import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; -import java.util.List; - @Getter @NoArgsConstructor @AllArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java index 24d17c23..04f24f7a 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java @@ -1,5 +1,20 @@ package ssu.eatssu.domain.menu.presentation.rest; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; + +import java.util.Date; +import java.util.List; + +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; @@ -8,10 +23,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; - -import org.springframework.format.annotation.DateTimeFormat; -import org.springframework.web.bind.annotation.*; - import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.menu.presentation.dto.request.CreateMealRequest; import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateWithPriceRequest; @@ -23,11 +34,6 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponse; -import java.util.Date; -import java.util.List; - -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; - @RestController @RequiredArgsConstructor @RequestMapping("/meals") diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java index 35140874..21abe326 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java @@ -1,5 +1,10 @@ package ssu.eatssu.domain.menu.presentation.rest; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -7,12 +12,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - import ssu.eatssu.domain.menu.presentation.dto.response.MenuRestaurantResponse; import ssu.eatssu.domain.menu.service.MenuService; import ssu.eatssu.domain.restaurant.entity.Restaurant; diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java b/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java index 2fe6f70e..4756055c 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java @@ -1,9 +1,8 @@ package ssu.eatssu.domain.menu.service; -import lombok.RequiredArgsConstructor; - import org.springframework.stereotype.Service; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.menu.persistence.QuerydslMealRatingCalculator; @Service diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MealService.java b/src/main/java/ssu/eatssu/domain/menu/service/MealService.java index 6e4c0de3..a858543c 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MealService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MealService.java @@ -1,11 +1,16 @@ package ssu.eatssu.domain.menu.service; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; + +import java.util.Date; +import java.util.List; +import java.util.Optional; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; @@ -21,12 +26,6 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; -import java.util.Date; -import java.util.List; -import java.util.Optional; - -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; - @Slf4j @Service @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java index 53935f88..454b15de 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java @@ -1,9 +1,8 @@ package ssu.eatssu.domain.menu.service; -import lombok.RequiredArgsConstructor; - import org.springframework.stereotype.Service; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.menu.persistence.QuerydslMenuRatingCalculator; @Service diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index fe9e8452..cd8eb7de 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -1,12 +1,15 @@ package ssu.eatssu.domain.menu.service; -import jakarta.transaction.Transactional; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; + +import java.util.List; import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.menu.persistence.MenuCategoryRepository; @@ -19,10 +22,6 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; -import java.util.List; - -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; - @Slf4j @Service @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java b/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java index 0957f798..d8c18dd7 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java @@ -1,12 +1,11 @@ package ssu.eatssu.domain.menu.service; +import org.springframework.stereotype.Repository; + import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; - -import org.springframework.stereotype.Repository; - import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java index 0b43c95a..cacfb46d 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java @@ -1,5 +1,7 @@ package ssu.eatssu.domain.partnership.dto; +import java.time.LocalDate; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; @@ -7,8 +9,6 @@ import ssu.eatssu.domain.partnership.entity.PartnershipType; import ssu.eatssu.domain.partnership.entity.RestaurantType; -import java.time.LocalDate; - @Schema(title = "제휴 등록") @Getter @AllArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java index eab08ac8..4e09634a 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java @@ -1,15 +1,15 @@ package ssu.eatssu.domain.partnership.dto; +import java.time.LocalDate; +import java.util.List; +import java.util.stream.Collectors; + import lombok.AllArgsConstructor; import lombok.Getter; import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipType; import ssu.eatssu.domain.partnership.entity.RestaurantType; -import java.time.LocalDate; -import java.util.List; -import java.util.stream.Collectors; - @Getter @AllArgsConstructor public class PartnershipDetailResponse { diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java index d97c6bff..af0d82d5 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java @@ -1,15 +1,15 @@ package ssu.eatssu.domain.partnership.dto; +import java.time.LocalDate; +import java.util.List; +import java.util.stream.Collectors; + import lombok.AllArgsConstructor; import lombok.Getter; import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipType; import ssu.eatssu.domain.partnership.entity.RestaurantType; -import java.time.LocalDate; -import java.util.List; -import java.util.stream.Collectors; - @Getter @AllArgsConstructor public class PartnershipResponse { diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java index b489c330..75f037c7 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java @@ -1,14 +1,26 @@ package ssu.eatssu.domain.partnership.entity; -import jakarta.persistence.*; -import lombok.*; - -import org.hibernate.annotations.Where; - import java.time.LocalDate; import java.util.ArrayList; import java.util.List; +import org.hibernate.annotations.Where; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java index 10151e77..eb7de49e 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java @@ -1,6 +1,13 @@ package ssu.eatssu.domain.partnership.entity; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java index 38c1ccd9..b3bb887b 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java @@ -1,6 +1,13 @@ package ssu.eatssu.domain.partnership.entity; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java index e995bcec..12283630 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java @@ -1,6 +1,13 @@ package ssu.eatssu.domain.partnership.entity; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java index f8e0a367..f107da58 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java @@ -1,14 +1,14 @@ package ssu.eatssu.domain.partnership.persistence; +import java.util.List; +import java.util.Optional; + import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipLike; import ssu.eatssu.domain.user.entity.User; -import java.util.List; -import java.util.Optional; - public interface PartnershipLikeRepository extends JpaRepository { Optional findByUserAndPartnership(User user, Partnership partnership); diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java index f2daac97..896eab1d 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java @@ -1,5 +1,7 @@ package ssu.eatssu.domain.partnership.persistence; +import java.util.List; + import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -8,8 +10,6 @@ import ssu.eatssu.domain.user.department.entity.College; import ssu.eatssu.domain.user.department.entity.Department; -import java.util.List; - public interface PartnershipRepository extends JpaRepository { @Query("SELECT DISTINCT p FROM Partnership p " + "LEFT JOIN p.partnershipColleges pc " + diff --git a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java index f2da4f79..a3534c2f 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java +++ b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java @@ -1,5 +1,15 @@ package ssu.eatssu.domain.partnership.presentation; +import java.util.List; + +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -7,10 +17,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; - -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.*; - import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.CreatePartnershipRequest; import ssu.eatssu.domain.partnership.dto.PartnershipDetailResponse; @@ -18,8 +24,6 @@ import ssu.eatssu.domain.partnership.service.PartnershipService; import ssu.eatssu.global.handler.response.BaseResponse; -import java.util.List; - @RestController @RequestMapping("/partnerships") @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java index 31fb53cf..38558e62 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -1,10 +1,15 @@ package ssu.eatssu.domain.partnership.service; -import lombok.RequiredArgsConstructor; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.CreatePartnershipRequest; import ssu.eatssu.domain.partnership.dto.PartnershipDetailResponse; @@ -23,12 +28,6 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - @Service @RequiredArgsConstructor public class PartnershipService { diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java index 63f32632..85f5056c 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java @@ -1,5 +1,7 @@ package ssu.eatssu.domain.rating.entity; +import java.util.Collection; + import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -8,8 +10,6 @@ import ssu.eatssu.domain.review.dto.ReviewRatingCount; import ssu.eatssu.domain.review.repository.ReviewRepository; -import java.util.Collection; - /** * Jpa projection 을 이용하여 구현한 클래스입니다. * 더미 데이터 diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java index 87aa7d4b..e0c2eb18 100644 --- a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java @@ -1,13 +1,13 @@ package ssu.eatssu.domain.report.dto; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Getter; -import ssu.eatssu.domain.report.entity.ReportType; - import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import ssu.eatssu.domain.report.entity.ReportType; + @Getter @Schema(title = "리뷰 신고 사유 목록 Response") public class ReportTypeList { diff --git a/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java b/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java index 4478c538..67b8af13 100644 --- a/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java +++ b/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java @@ -1,11 +1,11 @@ package ssu.eatssu.domain.report.entity; +import java.util.Arrays; + import com.fasterxml.jackson.annotation.JsonCreator; import lombok.Getter; -import java.util.Arrays; - @Getter public enum ReportStatus { PENDING("대기 중"), diff --git a/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java b/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java index ab92b6f8..f029c7bf 100644 --- a/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java +++ b/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java @@ -1,11 +1,11 @@ package ssu.eatssu.domain.report.entity; +import java.util.Locale; + import com.fasterxml.jackson.annotation.JsonCreator; import lombok.Getter; -import java.util.Locale; - @Getter public enum ReportType { NO_ASSOCIATE_CONTENT("메뉴와 관련 없는 내용"), diff --git a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java index b4a2ad56..17694962 100644 --- a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java +++ b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java @@ -1,5 +1,12 @@ package ssu.eatssu.domain.report.presentation; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -7,10 +14,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; - -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.*; - import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.report.dto.ReportCreateRequest; import ssu.eatssu.domain.report.dto.ReportTypeList; diff --git a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java index e077f50f..d701996b 100644 --- a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java +++ b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java @@ -1,10 +1,11 @@ package ssu.eatssu.domain.report.service; -import lombok.RequiredArgsConstructor; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.report.dto.ReportCreateRequest; import ssu.eatssu.domain.report.dto.ReportTypeList; @@ -17,9 +18,6 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; - @RequiredArgsConstructor @Service @Transactional diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index 0c383a08..5a7f15bf 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -1,13 +1,13 @@ package ssu.eatssu.domain.restaurant.entity; +import java.util.Arrays; + import com.fasterxml.jackson.annotation.JsonCreator; import lombok.Getter; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; -import java.util.Arrays; - @Getter public enum Restaurant { @@ -17,8 +17,8 @@ public enum Restaurant { SNACK_CORNER("SNACK_CORNER", null), HAKSIK("HAKSIK", 5000); - private String restaurantName; - private Integer restaurantPrice; + private final String restaurantName; + private final Integer restaurantPrice; Restaurant(String restaurantName, Integer price) { this.restaurantName = restaurantName; diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java index 9616fb27..3d93bcf8 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java @@ -1,10 +1,10 @@ package ssu.eatssu.domain.restaurant.entity; -import lombok.Getter; - import java.util.Arrays; import java.util.List; +import lombok.Getter; + @Getter public enum RestaurantType { FIXED("고정메뉴 식당", Arrays.asList(Restaurant.FOOD_COURT, Restaurant.SNACK_CORNER)), diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java index 8678a8a1..bc9ec02e 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java @@ -1,5 +1,8 @@ package ssu.eatssu.domain.review.dto; +import java.util.List; +import java.util.stream.Collectors; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; @@ -8,9 +11,6 @@ import ssu.eatssu.domain.review.entity.ReviewImage; import ssu.eatssu.domain.user.entity.User; -import java.util.List; -import java.util.stream.Collectors; - @Schema(title = "리뷰 작성") @Getter @AllArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java index 84342495..b15f081d 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java @@ -1,5 +1,10 @@ package ssu.eatssu.domain.review.dto; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; @@ -8,11 +13,6 @@ import ssu.eatssu.domain.review.entity.ReviewMenuLike; import ssu.eatssu.domain.user.util.UserAliasUtil; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - @AllArgsConstructor @Builder @Schema(title = "리뷰 상세") diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java index f5edc3da..b7c9e5ab 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java @@ -1,12 +1,12 @@ package ssu.eatssu.domain.review.dto; +import java.util.List; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import java.util.List; - @Schema(title = "식단 리뷰 정보(평점 등등)") @Getter @AllArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java index f5a53b5c..c138369f 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java @@ -1,14 +1,13 @@ package ssu.eatssu.domain.review.dto; +import org.springframework.util.Assert; + import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; - -import org.springframework.util.Assert; - import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.review.entity.Review; diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java index e6c2e198..b99ebd3c 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java @@ -1,15 +1,15 @@ package ssu.eatssu.domain.review.dto; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import ssu.eatssu.domain.review.entity.Review; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; - @AllArgsConstructor @Builder @Schema(title = "리뷰 상세") diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java index 83d2d083..2edd23f9 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java @@ -1,12 +1,12 @@ package ssu.eatssu.domain.review.dto; -import ssu.eatssu.domain.review.entity.Review; - import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import ssu.eatssu.domain.review.entity.Review; + //COMMENT: 더 좋은 매개변수 명이 있을 것 같은데 제 머리로는 이게 한계입니다... 멋진 변수명으로 바꿔주세요 public record ReviewRatingCount(long oneStarCount, long twoStarCount, long threeStarCount, long fourStarCount, long fiveStarCount) { diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java index 3b4fa924..21a9d57c 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java @@ -1,12 +1,12 @@ package ssu.eatssu.domain.review.dto; +import java.util.List; + import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; import lombok.AllArgsConstructor; import lombok.Getter; -import java.util.List; - @Schema(title = "리뷰 수정(글)") @Getter @AllArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java index 2bf1c5fc..57c3b344 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java @@ -1,14 +1,13 @@ package ssu.eatssu.domain.review.dto; +import org.springframework.util.Assert; + import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; - -import org.springframework.util.Assert; - import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.review.entity.Review; diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Report.java b/src/main/java/ssu/eatssu/domain/review/entity/Report.java index 644a4434..72879752 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Report.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Report.java @@ -1,7 +1,20 @@ package ssu.eatssu.domain.review.entity; -import jakarta.persistence.*; -import lombok.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; import ssu.eatssu.domain.report.dto.ReportCreateRequest; import ssu.eatssu.domain.report.entity.ReportStatus; import ssu.eatssu.domain.report.entity.ReportType; diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index 3e423936..72c42056 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -1,18 +1,33 @@ package ssu.eatssu.domain.review.entity; -import jakarta.persistence.*; -import lombok.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Embedded; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.user.entity.BaseTimeEntity; import ssu.eatssu.domain.user.entity.User; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - @Entity @Getter @Setter diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java index 5c6de4ab..c43f7fd7 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java @@ -1,7 +1,18 @@ package ssu.eatssu.domain.review.entity; -import jakarta.persistence.*; -import lombok.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; @Entity @Getter diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java index 8cbf5d21..04597f5f 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java @@ -1,6 +1,13 @@ package ssu.eatssu.domain.review.entity; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java index 4982e951..7d51e4e3 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java @@ -1,7 +1,18 @@ package ssu.eatssu.domain.review.entity; -import jakarta.persistence.*; -import lombok.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; import ssu.eatssu.domain.menu.entity.Menu; @Entity diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java index c8b631c9..76eb3a5d 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java @@ -1,5 +1,8 @@ package ssu.eatssu.domain.review.entity; +import java.util.ArrayList; +import java.util.List; + import jakarta.persistence.CascadeType; import jakarta.persistence.Embeddable; import jakarta.persistence.OneToMany; @@ -8,9 +11,6 @@ import lombok.NoArgsConstructor; import ssu.eatssu.domain.rating.entity.ReviewRating; -import java.util.ArrayList; -import java.util.List; - @Getter @NoArgsConstructor(access = AccessLevel.PUBLIC) @Embeddable diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java index cfb3dabe..9e5f7002 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java @@ -1,5 +1,19 @@ package ssu.eatssu.domain.review.presentation; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; @@ -9,13 +23,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; - -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.*; - import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index bcafa04a..fd3fac83 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -1,5 +1,25 @@ package ssu.eatssu.domain.review.presentation; +import java.util.List; + +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.web.PageableDefault; +import org.springframework.http.MediaType; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -10,26 +30,20 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; - -import org.springdoc.core.annotations.ParameterObject; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.web.PageableDefault; -import org.springframework.http.MediaType; -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.constants.MenuType; -import ssu.eatssu.domain.review.dto.*; +import ssu.eatssu.domain.review.dto.MealReviewsResponse; +import ssu.eatssu.domain.review.dto.MenuReviewResponse; +import ssu.eatssu.domain.review.dto.ReviewCreateRequest; +import ssu.eatssu.domain.review.dto.ReviewDetail; +import ssu.eatssu.domain.review.dto.ReviewUpdateRequest; +import ssu.eatssu.domain.review.dto.SavedReviewImage; +import ssu.eatssu.domain.review.dto.UploadReviewRequest; import ssu.eatssu.domain.review.service.ReviewService; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.domain.slice.service.SliceService; import ssu.eatssu.global.handler.response.BaseResponse; -import java.util.List; - @RestController @RequiredArgsConstructor @RequestMapping("/reviews") diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java index 215db5f4..fcba8185 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java @@ -1,13 +1,13 @@ package ssu.eatssu.domain.review.repository; +import java.util.Optional; + import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewLike; import ssu.eatssu.domain.user.entity.User; -import java.util.Optional; - public interface ReviewLikeRepository extends JpaRepository { Optional findByReviewAndUser(Review review, User user); } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java index 65c6dd1e..545240e0 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java @@ -1,12 +1,12 @@ package ssu.eatssu.domain.review.repository; +import java.util.List; + import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewMenuLike; -import java.util.List; - public interface ReviewMenuLikeRepository extends JpaRepository { List findByReview(Review review); } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java index 154eb982..fe3473ed 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java @@ -1,5 +1,8 @@ package ssu.eatssu.domain.review.repository; +import java.util.Collection; +import java.util.List; + import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -10,9 +13,6 @@ import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.review.entity.Review; -import java.util.Collection; -import java.util.List; - public interface ReviewRepository extends JpaRepository, ReviewRepositoryCustom { List findAllByMenu(Menu menu); diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java index f1041f69..73339ad9 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java @@ -1,24 +1,23 @@ package ssu.eatssu.domain.review.repository; -import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.jpa.impl.JPAQueryFactory; - -import lombok.RequiredArgsConstructor; +import java.util.ArrayList; +import java.util.List; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.domain.SliceImpl; import org.springframework.stereotype.Repository; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.jpa.impl.JPAQueryFactory; + +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.review.entity.QReview; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; -import java.util.ArrayList; -import java.util.List; - @Repository @RequiredArgsConstructor public class ReviewRepositoryImpl implements ReviewRepositoryCustom { diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java index 134beac2..bbf1584b 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java @@ -1,6 +1,11 @@ package ssu.eatssu.domain.review.service; -import lombok.RequiredArgsConstructor; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -8,6 +13,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -15,7 +21,12 @@ import ssu.eatssu.domain.menu.persistence.MealRepository; import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import ssu.eatssu.domain.review.dto.*; +import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; +import ssu.eatssu.domain.review.dto.MealReviewResponse; +import ssu.eatssu.domain.review.dto.MenuLikeRequest; +import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; +import ssu.eatssu.domain.review.dto.ReviewRatingCount; +import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewLike; import ssu.eatssu.domain.review.repository.ReviewLikeRepository; @@ -26,13 +37,6 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.stream.Collectors; - -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - @RequiredArgsConstructor @Service public class MealReviewService { diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java index ee26c65b..8247a80a 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java @@ -1,9 +1,10 @@ package ssu.eatssu.domain.review.service; -import lombok.RequiredArgsConstructor; +import java.util.Map; import org.springframework.stereotype.Service; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.persistence.QuerydslMealRatingCalculator; @@ -14,8 +15,6 @@ import ssu.eatssu.domain.review.dto.RatingAverages; import ssu.eatssu.domain.review.dto.ReviewRatingCount; -import java.util.Map; - @Service @RequiredArgsConstructor public class ReviewRatingService implements RatingCalculator { diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index ad9d3c3d..5f199b43 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -1,18 +1,29 @@ package ssu.eatssu.domain.review.service; -import lombok.RequiredArgsConstructor; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; + +import java.io.IOException; +import java.util.List; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.persistence.MealRepository; import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.rating.entity.RatingCalculator; -import ssu.eatssu.domain.review.dto.*; +import ssu.eatssu.domain.review.dto.MealReviewsResponse; +import ssu.eatssu.domain.review.dto.MenuReviewResponse; +import ssu.eatssu.domain.review.dto.RatingAverages; +import ssu.eatssu.domain.review.dto.ReviewCreateRequest; +import ssu.eatssu.domain.review.dto.ReviewRatingCount; +import ssu.eatssu.domain.review.dto.ReviewUpdateRequest; +import ssu.eatssu.domain.review.dto.SavedReviewImage; +import ssu.eatssu.domain.review.dto.UploadReviewRequest; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewImage; import ssu.eatssu.domain.review.repository.ReviewImageRepository; @@ -22,11 +33,6 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.util.S3Uploader; -import java.io.IOException; -import java.util.List; - -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - @RequiredArgsConstructor @Service @Transactional diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java index cca596d2..05616c0b 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java @@ -1,5 +1,7 @@ package ssu.eatssu.domain.slack.entity; +import java.text.MessageFormat; + import org.springframework.stereotype.Component; import ssu.eatssu.domain.inquiry.entity.Inquiry; @@ -7,8 +9,6 @@ import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; -import java.text.MessageFormat; - @Component public class SlackMessageFormat { diff --git a/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java b/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java index 1d9d527c..e3ed2b86 100644 --- a/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java +++ b/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java @@ -1,19 +1,18 @@ package ssu.eatssu.domain.slack.service; +import java.io.IOException; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + import com.slack.api.Slack; import com.slack.api.methods.MethodsClient; import com.slack.api.methods.SlackApiException; import com.slack.api.methods.request.chat.ChatPostMessageRequest; import lombok.extern.slf4j.Slf4j; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; - import ssu.eatssu.domain.slack.entity.SlackChannel; -import java.io.IOException; - @Slf4j @Service public class SlackService { diff --git a/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java b/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java index b74659b6..6d7015ba 100644 --- a/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java +++ b/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java @@ -1,13 +1,13 @@ package ssu.eatssu.domain.slice.dto; +import java.util.Collections; +import java.util.List; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import java.util.Collections; -import java.util.List; - @AllArgsConstructor @Builder @Getter diff --git a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java index c0c7b3a1..7ad650aa 100644 --- a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java +++ b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java @@ -1,11 +1,15 @@ package ssu.eatssu.domain.slice.service; -import lombok.RequiredArgsConstructor; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; + +import java.util.List; +import java.util.stream.Collectors; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -21,12 +25,6 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; -import java.util.List; -import java.util.stream.Collectors; - -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; - @Service @RequiredArgsConstructor public class SliceService { diff --git a/src/main/java/ssu/eatssu/domain/user/department/entity/College.java b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java index 59843e86..1f6ec4e3 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/entity/College.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java @@ -1,14 +1,20 @@ package ssu.eatssu.domain.user.department.entity; -import jakarta.persistence.*; +import java.util.ArrayList; +import java.util.List; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import ssu.eatssu.domain.partnership.entity.PartnershipCollege; -import java.util.ArrayList; -import java.util.List; - @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) diff --git a/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java index 1419c1c7..f91bd744 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java @@ -1,14 +1,23 @@ package ssu.eatssu.domain.user.department.entity; -import jakarta.persistence.*; +import java.util.ArrayList; +import java.util.List; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import ssu.eatssu.domain.partnership.entity.PartnershipDepartment; -import java.util.ArrayList; -import java.util.List; - @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) diff --git a/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java b/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java index 6e32ce11..c9d21e6c 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java @@ -1,11 +1,11 @@ package ssu.eatssu.domain.user.department.persistence; +import java.util.Optional; + import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.user.department.entity.College; -import java.util.Optional; - public interface CollegeRepository extends JpaRepository { Optional findByName(String name); } diff --git a/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java b/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java index 9be39ece..db9a9bfb 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java @@ -1,11 +1,11 @@ package ssu.eatssu.domain.user.department.persistence; +import java.util.Optional; + import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.user.department.entity.Department; -import java.util.Optional; - public interface DepartmentRepository extends JpaRepository { Optional findByName(String name); } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index ccc1d6ba..d5336984 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -1,15 +1,15 @@ package ssu.eatssu.domain.user.dto; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import ssu.eatssu.domain.review.entity.Review; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; - @AllArgsConstructor @Builder @Schema(title = "리뷰 상세 - 내 리뷰 리스트 조회 용") diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java index 1e30e549..72af9b1b 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java @@ -1,15 +1,15 @@ package ssu.eatssu.domain.user.dto; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import ssu.eatssu.domain.review.entity.Review; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; - @AllArgsConstructor @Builder @Schema(title = "리뷰 상세 - 내 리뷰 리스트 조회 용") diff --git a/src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java b/src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java index be2fe755..573e920c 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java @@ -1,15 +1,15 @@ package ssu.eatssu.domain.user.entity; -import jakarta.persistence.Column; -import jakarta.persistence.EntityListeners; -import jakarta.persistence.MappedSuperclass; -import lombok.Getter; +import java.time.LocalDateTime; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.LastModifiedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; -import java.time.LocalDateTime; +import jakarta.persistence.Column; +import jakarta.persistence.EntityListeners; +import jakarta.persistence.MappedSuperclass; +import lombok.Getter; @Getter @MappedSuperclass diff --git a/src/main/java/ssu/eatssu/domain/user/entity/Role.java b/src/main/java/ssu/eatssu/domain/user/entity/Role.java index e8bd61cb..ef27b76e 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/Role.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/Role.java @@ -1,9 +1,9 @@ package ssu.eatssu.domain.user.entity; -import lombok.Getter; - import org.springframework.security.core.GrantedAuthority; +import lombok.Getter; + @Getter public enum Role implements GrantedAuthority { USER("ROLE_USER", "유저"), diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index 05c822b3..5523bf44 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -1,12 +1,25 @@ package ssu.eatssu.domain.user.entity; -import jakarta.persistence.*; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; +import java.util.ArrayList; +import java.util.List; import org.jetbrains.annotations.NotNull; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.partnership.entity.PartnershipLike; @@ -15,9 +28,6 @@ import ssu.eatssu.domain.review.entity.ReviewLike; import ssu.eatssu.domain.user.department.entity.Department; -import java.util.ArrayList; -import java.util.List; - @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 7230d116..d0726302 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -1,5 +1,22 @@ package ssu.eatssu.domain.user.presentation; +import java.util.List; + +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.web.PageableDefault; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; @@ -10,26 +27,21 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; - -import org.springdoc.core.annotations.ParameterObject; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.web.PageableDefault; -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.*; - import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.PartnershipResponse; import ssu.eatssu.domain.partnership.service.PartnershipService; import ssu.eatssu.domain.review.service.MealReviewService; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.domain.slice.service.SliceService; -import ssu.eatssu.domain.user.dto.*; +import ssu.eatssu.domain.user.dto.DepartmentResponse; +import ssu.eatssu.domain.user.dto.MyMealReviewResponse; +import ssu.eatssu.domain.user.dto.MyPageResponse; +import ssu.eatssu.domain.user.dto.MyReviewDetail; +import ssu.eatssu.domain.user.dto.NicknameUpdateRequest; +import ssu.eatssu.domain.user.dto.UpdateDepartmentRequest; import ssu.eatssu.domain.user.service.UserService; import ssu.eatssu.global.handler.response.BaseResponse; -import java.util.List; - @RestController @RequiredArgsConstructor @RequestMapping("/users") diff --git a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java index 5bf6bf79..8dbf0a9d 100644 --- a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java @@ -1,11 +1,11 @@ package ssu.eatssu.domain.user.repository; +import java.util.Optional; + import org.springframework.data.jpa.repository.JpaRepository; import ssu.eatssu.domain.user.entity.User; -import java.util.Optional; - public interface UserRepository extends JpaRepository { boolean existsByEmail(String email); diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index 6f4ee603..8b96eede 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -1,13 +1,16 @@ package ssu.eatssu.domain.user.service; -import jakarta.transaction.Transactional; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; + +import java.util.UUID; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.review.entity.Review; @@ -21,10 +24,6 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; -import java.util.UUID; - -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - @Slf4j @Service @RequiredArgsConstructor diff --git a/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java b/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java index e809857e..56dbfecb 100644 --- a/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java +++ b/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java @@ -1,10 +1,10 @@ package ssu.eatssu.domain.user.util; +import java.util.List; + import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; -import java.util.List; - public class UserAliasUtil { public static String getUserAlias(User user, List reviews) { if (reviews == null || reviews.isEmpty()) { diff --git a/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java b/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java index 23cc6f3f..0ad66cbf 100644 --- a/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java +++ b/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java @@ -1,13 +1,13 @@ package ssu.eatssu.global.config; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - @Configuration public class QueryDslConfig { diff --git a/src/main/java/ssu/eatssu/global/config/S3Config.java b/src/main/java/ssu/eatssu/global/config/S3Config.java index e41d2409..092cc3a8 100644 --- a/src/main/java/ssu/eatssu/global/config/S3Config.java +++ b/src/main/java/ssu/eatssu/global/config/S3Config.java @@ -1,15 +1,15 @@ package ssu.eatssu.global.config; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.AmazonS3ClientBuilder; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - @Configuration public class S3Config { diff --git a/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java b/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java index 5c8327d2..50f40512 100644 --- a/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java +++ b/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java @@ -1,5 +1,14 @@ package ssu.eatssu.global.config; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; @@ -7,14 +16,6 @@ import io.swagger.v3.oas.models.security.SecurityScheme; import io.swagger.v3.oas.models.servers.Server; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - @Configuration public class SwaggerConfig { @@ -45,7 +46,7 @@ public OpenAPI openAPI() { return new OpenAPI() .components(new Components().addSecuritySchemes("bearerAuth", securityScheme)) - .security(Arrays.asList(securityRequirement)) + .security(Collections.singletonList(securityRequirement)) .servers(servers) .info(info); } diff --git a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java index 6910f437..6a0df601 100644 --- a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java @@ -1,7 +1,5 @@ package ssu.eatssu.global.handler; -import lombok.extern.slf4j.Slf4j; - import org.springframework.beans.TypeMismatchException; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; @@ -25,6 +23,7 @@ import org.springframework.web.servlet.NoHandlerFoundException; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; +import lombok.extern.slf4j.Slf4j; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.global.handler.response.BaseResponseStatus; diff --git a/src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java b/src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java index 84bd045f..ea2846e0 100644 --- a/src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java @@ -1,22 +1,21 @@ package ssu.eatssu.global.handler; -import com.fasterxml.jackson.databind.ObjectMapper; - -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import lombok.RequiredArgsConstructor; +import java.io.IOException; import org.springframework.http.MediaType; import org.springframework.security.access.AccessDeniedException; import org.springframework.security.web.access.AccessDeniedHandler; import org.springframework.stereotype.Component; +import com.fasterxml.jackson.databind.ObjectMapper; + +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.global.handler.response.BaseResponseStatus; -import java.io.IOException; - /** * jwt 인가 실패 시 처리 * HttpStatus 403 diff --git a/src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java b/src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java index 8e6eece3..2555f4f2 100644 --- a/src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java +++ b/src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java @@ -1,22 +1,21 @@ package ssu.eatssu.global.handler; -import com.fasterxml.jackson.databind.ObjectMapper; - -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import lombok.RequiredArgsConstructor; +import java.io.IOException; import org.springframework.http.MediaType; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.stereotype.Component; +import com.fasterxml.jackson.databind.ObjectMapper; + +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.global.handler.response.BaseResponseStatus; -import java.io.IOException; - /** * jwt 인증 실패 시 처리 * HttpStatus 401 diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index fda40c2b..cebc6da1 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -1,9 +1,9 @@ package ssu.eatssu.global.handler.response; -import lombok.Getter; - import org.springframework.http.HttpStatus; +import lombok.Getter; + /** * 에러 코드 관리 */ diff --git a/src/main/java/ssu/eatssu/global/util/S3Uploader.java b/src/main/java/ssu/eatssu/global/util/S3Uploader.java index abfa1f20..2bbb7925 100644 --- a/src/main/java/ssu/eatssu/global/util/S3Uploader.java +++ b/src/main/java/ssu/eatssu/global/util/S3Uploader.java @@ -1,16 +1,5 @@ package ssu.eatssu.global.util; -import com.amazonaws.services.s3.AmazonS3Client; -import com.amazonaws.services.s3.model.CannedAccessControlList; -import com.amazonaws.services.s3.model.PutObjectRequest; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; -import org.springframework.web.multipart.MultipartFile; - import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -19,6 +8,17 @@ import java.util.Optional; import java.util.UUID; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import com.amazonaws.services.s3.AmazonS3Client; +import com.amazonaws.services.s3.model.CannedAccessControlList; +import com.amazonaws.services.s3.model.PutObjectRequest; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + @RequiredArgsConstructor @Component @Slf4j diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java index ae0bf248..7d1f252d 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java @@ -1,7 +1,7 @@ package ssu.eatssu.domain.menu.service; import static org.assertj.core.api.Assertions.*; -import static ssu.eatssu.domain.menu.entity.constants.TimePart.LUNCH; +import static ssu.eatssu.domain.menu.entity.constants.TimePart.*; import java.sql.Date; import java.util.List; diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java index e3655346..aeaafcc9 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java @@ -1,5 +1,10 @@ package ssu.eatssu.domain.menu.service; +import static org.assertj.core.api.Assertions.*; + +import java.util.ArrayList; +import java.util.List; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -7,19 +12,13 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; -import ssu.eatssu.domain.menu.presentation.dto.response.MenuRestaurantResponse; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.MenuCategory; -import ssu.eatssu.domain.menu.persistence.MealRepository; import ssu.eatssu.domain.menu.persistence.MenuCategoryRepository; import ssu.eatssu.domain.menu.persistence.MenuRepository; +import ssu.eatssu.domain.menu.presentation.dto.response.MenuRestaurantResponse; import ssu.eatssu.domain.restaurant.entity.Restaurant; -import java.util.ArrayList; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; - @SpringBootTest @DisplayName("MenuService 테스트") @ActiveProfiles("test") diff --git a/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java b/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java index 0483cdd5..89d3b443 100644 --- a/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java @@ -1,13 +1,12 @@ package ssu.eatssu.domain.report.service; -import jakarta.transaction.Transactional; - import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import jakarta.transaction.Transactional; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.report.dto.ReportCreateRequest; diff --git a/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java b/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java index 990faebe..9c612f23 100644 --- a/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java @@ -1,5 +1,7 @@ package ssu.eatssu.domain.user.service; +import static org.assertj.core.api.Assertions.*; + import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -13,8 +15,6 @@ import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; -import static org.assertj.core.api.Assertions.assertThat; - @SpringBootTest class UserServiceTest { From 24509d2a0bff68c95ed0c3a5b3d332392d734154 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Fri, 14 Mar 2025 15:53:06 +0900 Subject: [PATCH 190/399] feat: make guidelines for junie agent --- .junie/guidelines.md | 93 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 .junie/guidelines.md diff --git a/.junie/guidelines.md b/.junie/guidelines.md new file mode 100644 index 00000000..b32a8b45 --- /dev/null +++ b/.junie/guidelines.md @@ -0,0 +1,93 @@ +# EAT-SSU Project Guidelines + +## Project Overview + +EAT-SSU is a mobile application designed for Soongsil University students to review and compare cafeteria menus across campus. The app aims to enhance the dining experience by providing comprehensive information about various dining options, including menu reviews, operating hours, and locations. + +### Key Features + +- View and compare menus from all campus dining facilities: + - Student Cafeteria (학생식당) + - Dodam Cafeteria (도담식당) + - Food Court (푸드코트) + - Snack Corner (스낵코너) + - Dormitory Cafeteria (기숙사 식당) +- Write and read reviews for meals +- Check restaurant operating hours and locations +- User authentication system + +## Technical Stack + +### Backend +- **Framework**: Spring Boot 3.0.4 +- **Language**: Java 17 +- **Database**: MySQL (Production), H2 (Testing) +- **ORM**: Spring Data JPA with QueryDSL +- **Security**: Spring Security with JWT +- **API Documentation**: OpenAPI (Springdoc) +- **Build Tool**: Gradle +- **Cloud Storage**: AWS S3 +- **Notifications**: Slack API integration + +### Mobile Applications +- Available on both iOS (App Store) and Android (Play Store) + +## Project Structure + +The project follows a domain-driven design approach with the following structure: + +``` +src/main/java/ssu/eatssu/ +├── domain/ +│ ├── menu/ +│ │ ├── entity/ +│ │ ├── persistence/ +│ │ ├── presentation/ +│ │ │ ├── dto/ +│ │ │ ├── rest/ +│ │ └── service/ +│ ├── restaurant/ +│ │ ├── entity/ +│ │ ├── persistence/ +│ │ ├── presentation/ +│ │ └── service/ +│ └── [other domains] +├── global/ +│ ├── config/ +│ ├── error/ +│ └── security/ +└── [other packages] +``` + +## Development Guidelines + +### Code Style +- Follow Java coding conventions +- Use meaningful variable and method names +- Write comprehensive comments for complex logic +- Create unit tests for all new features + +### Git Workflow +- Create feature branches from the main branch +- Use descriptive commit messages +- Submit pull requests for code review before merging +- Keep commits focused and atomic + +### Security +- Never commit sensitive information (API keys, credentials) +- The `application.yml` file is shared only within the team +- Always validate user input +- Follow the principle of least privilege + +### Testing +- Write unit tests for all services +- Use integration tests for API endpoints +- Maintain test coverage for critical components + +## Deployment + +The application is deployed as a Docker container. The build process creates a JAR file named `eat-ssu.jar`. + +## Contact + +For more information about the project, visit the [project page](https://hi-jin-1514.notion.site/EAT-SSU-b04aaec9b7814a628c6ef6b3e08c74a3). \ No newline at end of file From 480d4a31353f88caf2ab8b3c74ca69245a136ce8 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Fri, 14 Mar 2025 16:08:44 +0900 Subject: [PATCH 191/399] =?UTF-8?q?fix:=20Ubuntu=20=EC=8B=A4=ED=96=89?= =?UTF-8?q?=ED=99=98=EA=B2=BD=EC=9D=84=20=EC=9C=84=ED=95=B4=20Dockerfile?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index aeec73ff..c68d1129 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # 1단계: 빌드 단계 (Gradle Wrapper를 사용하여 애플리케이션 빌드) -FROM gradle:7.5.1-jdk17 AS builder +FROM --platform=linux/amd64 gradle:7.5.1-jdk17 AS builder WORKDIR /home/gradle/project # 소스 코드 전체를 복사 (gradlew, build.gradle, settings.gradle, src/ 등) @@ -12,7 +12,7 @@ RUN chmod +x gradlew RUN ./gradlew clean build --no-daemon # 2단계: 실행 단계 (빌드 결과물 실행을 위한 환경) -FROM openjdk:17-jdk-slim +FROM --platform=linux/amd64 openjdk:17-jdk-slim WORKDIR /app # 빌드 단계에서 생성된 JAR 파일 복사 (파일명이 프로젝트에 따라 달라질 수 있으므로 와일드카드 사용) From 47b25d34b86e97897b31d1c7058306964381268d Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Mon, 17 Mar 2025 13:41:23 +0900 Subject: [PATCH 192/399] =?UTF-8?q?refactor:=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20=EC=BB=A8=EB=B2=A4=EC=85=98?= =?UTF-8?q?=EC=97=90=20=EB=94=B0=EB=9D=BC=20LoadMenusInMealRepository?= =?UTF-8?q?=EB=A5=BC=20MealMenuQueryRepository=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클래스 이름을 명확하고 일관되게 표현하기 위해 기존의 LoadMenusInMealRepository를 MealMenuQueryRepository로 리팩토링하였습니다. --- ...InMealRepository.java => MealMenuQueryRepository.java} | 2 +- .../menu/persistence/QuerydslMealRatingCalculator.java | 8 ++++---- .../menu/persistence/QuerydslMealRatingCounter.java | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) rename src/main/java/ssu/eatssu/domain/menu/persistence/{LoadMenusInMealRepository.java => MealMenuQueryRepository.java} (95%) diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/LoadMenusInMealRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuQueryRepository.java similarity index 95% rename from src/main/java/ssu/eatssu/domain/menu/persistence/LoadMenusInMealRepository.java rename to src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuQueryRepository.java index 2b20f5b4..ffe34ee4 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/LoadMenusInMealRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuQueryRepository.java @@ -13,7 +13,7 @@ @Component @RequiredArgsConstructor -public class LoadMenusInMealRepository { +public class MealMenuQueryRepository { private final JPAQueryFactory queryFactory; private final QMenu menu = QMenu.menu; diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java index 74a3639f..f68363ff 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java @@ -15,7 +15,7 @@ @RequiredArgsConstructor public class QuerydslMealRatingCalculator { - private final LoadMenusInMealRepository loadMenusInMealRepository; + private final MealMenuQueryRepository mealMenuQueryRepository; private final JPAQueryFactory queryFactory; private final QMenu menu = QMenu.menu; @@ -23,7 +23,7 @@ public class QuerydslMealRatingCalculator { private final QReview review = QReview.review; public Double getMainRatingAverage(Long mealId) { - List menuIds = loadMenusInMealRepository.getMenuIds(mealId); + List menuIds = mealMenuQueryRepository.getMenuIds(mealId); return queryFactory .select(review.ratings.mainRating.avg()) .from(review) @@ -35,7 +35,7 @@ public Double getMainRatingAverage(Long mealId) { } public Double getTasteRatingAverage(Long mealId) { - List menuIds = loadMenusInMealRepository.getMenuIds(mealId); + List menuIds = mealMenuQueryRepository.getMenuIds(mealId); return queryFactory .select(review.ratings.tasteRating.avg()) .from(review) @@ -47,7 +47,7 @@ public Double getTasteRatingAverage(Long mealId) { } public Double getAmountRatingAverage(Long mealId) { - List menuIds = loadMenusInMealRepository.getMenuIds(mealId); + List menuIds = mealMenuQueryRepository.getMenuIds(mealId); return queryFactory .select(review.ratings.amountRating.avg()) .from(review) diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java index 5747e33f..a4125b0d 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java @@ -18,7 +18,7 @@ @RequiredArgsConstructor public class QuerydslMealRatingCounter { - private final LoadMenusInMealRepository loadMenusInMealRepository; + private final MealMenuQueryRepository mealMenuQueryRepository; private final JPAQueryFactory queryFactory; private final QMenu menu = QMenu.menu; @@ -30,7 +30,7 @@ public Map getRatingCountMap(Long mealId) { .from(review) .join(review.menu, menu) .groupBy(review.ratings.mainRating) - .where(menuIdIn(loadMenusInMealRepository.getMenuIds(mealId))) + .where(menuIdIn(mealMenuQueryRepository.getMenuIds(mealId))) .fetch(); Map ratingCountMap = new HashMap<>(); @@ -47,7 +47,7 @@ public Long getTotalRatingCount(Long mealId) { .select(review.count()) .from(review) .join(review.menu, menu) - .where(menuIdIn(loadMenusInMealRepository.getMenuIds(mealId))) + .where(menuIdIn(mealMenuQueryRepository.getMenuIds(mealId))) .fetchOne(); } From fbcc13c447cb37f61f98cf074bcdf920bf302de4 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Mon, 17 Mar 2025 16:01:03 +0900 Subject: [PATCH 193/399] feat: Write junie guideline into korean --- .junie/guidelines.md | 108 +++++++++++++++++++++---------------------- 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/.junie/guidelines.md b/.junie/guidelines.md index b32a8b45..dfc272d1 100644 --- a/.junie/guidelines.md +++ b/.junie/guidelines.md @@ -1,40 +1,40 @@ -# EAT-SSU Project Guidelines +# EAT-SSU 프로젝트 가이드라인 -## Project Overview +## 프로젝트 개요 -EAT-SSU is a mobile application designed for Soongsil University students to review and compare cafeteria menus across campus. The app aims to enhance the dining experience by providing comprehensive information about various dining options, including menu reviews, operating hours, and locations. +EAT-SSU는 숭실대학교 학생들이 캠퍼스 내 식당 메뉴를 리뷰하고 비교할 수 있는 모바일 애플리케이션입니다. 이 앱은 메뉴 리뷰, 운영 시간, 위치 등 다양한 식사 옵션에 대한 종합적인 정보를 제공하여 식사 경험을 향상시키는 것을 목표로 합니다. -### Key Features +### 주요 기능 -- View and compare menus from all campus dining facilities: - - Student Cafeteria (학생식당) - - Dodam Cafeteria (도담식당) - - Food Court (푸드코트) - - Snack Corner (스낵코너) - - Dormitory Cafeteria (기숙사 식당) -- Write and read reviews for meals -- Check restaurant operating hours and locations -- User authentication system +- 캠퍼스 내 모든 식당 시설의 메뉴 보기 및 비교: + - 학생식당 + - 도담식당 + - 푸드코트 + - 스낵코너 + - 기숙사 식당 +- 식사에 대한 리뷰 작성 및 읽기 +- 식당 운영 시간 및 위치 확인 +- 사용자 인증 시스템 -## Technical Stack +## 기술 스택 -### Backend -- **Framework**: Spring Boot 3.0.4 -- **Language**: Java 17 -- **Database**: MySQL (Production), H2 (Testing) -- **ORM**: Spring Data JPA with QueryDSL -- **Security**: Spring Security with JWT -- **API Documentation**: OpenAPI (Springdoc) -- **Build Tool**: Gradle -- **Cloud Storage**: AWS S3 -- **Notifications**: Slack API integration +### 백엔드 +- **프레임워크**: Spring Boot 3.0.4 +- **언어**: Java 17 +- **데이터베이스**: MySQL (프로덕션), H2 (테스팅) +- **ORM**: Spring Data JPA와 QueryDSL +- **보안**: Spring Security와 JWT +- **API 문서화**: OpenAPI (Springdoc) +- **빌드 도구**: Gradle +- **클라우드 스토리지**: AWS S3 +- **알림**: Slack API 통합 -### Mobile Applications -- Available on both iOS (App Store) and Android (Play Store) +### 모바일 애플리케이션 +- iOS(App Store)와 Android(Play Store) 모두에서 이용 가능 -## Project Structure +## 프로젝트 구조 -The project follows a domain-driven design approach with the following structure: +이 프로젝트는 다음과 같은 구조로 도메인 주도 설계 접근 방식을 따릅니다: ``` src/main/java/ssu/eatssu/ @@ -51,43 +51,43 @@ src/main/java/ssu/eatssu/ │ │ ├── persistence/ │ │ ├── presentation/ │ │ └── service/ -│ └── [other domains] +│ └── [기타 도메인] ├── global/ │ ├── config/ │ ├── error/ │ └── security/ -└── [other packages] +└── [기타 패키지] ``` -## Development Guidelines +## 개발 가이드라인 -### Code Style -- Follow Java coding conventions -- Use meaningful variable and method names -- Write comprehensive comments for complex logic -- Create unit tests for all new features +### 코드 스타일 +- Java 코딩 규칙 준수 +- 의미 있는 변수 및 메소드 이름 사용 +- 복잡한 로직에 대한 포괄적인 주석 작성 +- 모든 새로운 기능에 대한 단위 테스트 작성 -### Git Workflow -- Create feature branches from the main branch -- Use descriptive commit messages -- Submit pull requests for code review before merging -- Keep commits focused and atomic +### Git 워크플로우 +- 메인 브랜치에서 기능 브랜치 생성 +- 설명적인 커밋 메시지 사용 +- 병합 전 코드 리뷰를 위한 풀 리퀘스트 제출 +- 커밋을 집중적이고 원자적으로 유지 -### Security -- Never commit sensitive information (API keys, credentials) -- The `application.yml` file is shared only within the team -- Always validate user input -- Follow the principle of least privilege +### 보안 +- 민감한 정보(API 키, 자격 증명)를 절대 커밋하지 않음 +- `application.yml` 파일은 팀 내에서만 공유 +- 항상 사용자 입력 검증 +- 최소 권한 원칙 준수 -### Testing -- Write unit tests for all services -- Use integration tests for API endpoints -- Maintain test coverage for critical components +### 테스팅 +- 모든 서비스에 대한 단위 테스트 작성 +- API 엔드포인트에 대한 통합 테스트 사용 +- 중요 구성 요소에 대한 테스트 커버리지 유지 -## Deployment +## 배포 -The application is deployed as a Docker container. The build process creates a JAR file named `eat-ssu.jar`. +애플리케이션은 Docker 컨테이너로 배포됩니다. 빌드 프로세스는 `eat-ssu.jar`라는 JAR 파일을 생성합니다. -## Contact +## 연락처 -For more information about the project, visit the [project page](https://hi-jin-1514.notion.site/EAT-SSU-b04aaec9b7814a628c6ef6b3e08c74a3). \ No newline at end of file +프로젝트에 대한 자세한 정보는 [프로젝트 페이지](https://hi-jin-1514.notion.site/EAT-SSU-b04aaec9b7814a628c6ef6b3e08c74a3)를 방문하세요. \ No newline at end of file From 6a8eed9e4ca6d8002c0e1f3c94d2f790fd372ace Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Mon, 17 Mar 2025 17:14:36 +0900 Subject: [PATCH 194/399] =?UTF-8?q?docs:=20Java=20SDK=2017=20=EB=AA=85?= =?UTF-8?q?=EC=84=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/README.md | 11 +++++- .junie/guidelines.md | 37 +++++++++++++++++++ .../eatssu/global/config/SwaggerConfig.java | 1 - 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/.github/README.md b/.github/README.md index cebbaef5..4786125a 100644 --- a/.github/README.md +++ b/.github/README.md @@ -16,6 +16,13 @@ - [App Store](https://apps.apple.com/kr/app/eat-ssu-%EC%88%AD%EC%8B%A4%EB%8C%80-%ED%95%99%EC%8B%9D-%EB%A6%AC%EB%B7%B0-%EC%95%B1/id6472618331) - [Play Store](https://play.google.com/store/apps/details?id=com.eatssu.android) -## 개발 조건 +## 개발 환경 -- `application.yml` 파일은 팀 내부에서만 공유합니다. \ No newline at end of file +### Application 환경 + +- `application.yml` 파일은 팀 내부에서만 공유합니다. + +### Java SDK 17 + +- `build.gradle`을 확인해도 알겠지만, Java 17을 사용합니다. +- Vendor는 어느 것을 사용해도 무방합니다. \ No newline at end of file diff --git a/.junie/guidelines.md b/.junie/guidelines.md index dfc272d1..efe7ac65 100644 --- a/.junie/guidelines.md +++ b/.junie/guidelines.md @@ -2,16 +2,29 @@ ## 프로젝트 개요 +<<<<<<< HEAD EAT-SSU는 숭실대학교 학생들이 캠퍼스 내 식당 메뉴를 리뷰하고 비교할 수 있는 모바일 애플리케이션입니다. 이 앱은 메뉴 리뷰, 운영 시간, 위치 등 다양한 식사 옵션에 대한 종합적인 정보를 제공하여 식사 경험을 향상시키는 것을 목표로 합니다. +======= +EAT-SSU는 숭실대학교 학생들이 캠퍼스 내 식당 메뉴를 리뷰하고 비교할 수 있는 모바일 애플리케이션입니다. 이 앱은 메뉴 리뷰, 운영 시간, 위치 등 다양한 식사 옵션에 대한 종합적인 정보를 제공하여 식사 경험을 +향상시키는 것을 목표로 합니다. +>>>>>>> bbb0601 (docs: Java SDK 17 명세) ### 주요 기능 - 캠퍼스 내 모든 식당 시설의 메뉴 보기 및 비교: +<<<<<<< HEAD - 학생식당 - 도담식당 - 푸드코트 - 스낵코너 - 기숙사 식당 +======= + - 학생식당 + - 도담식당 + - 푸드코트 + - 스낵코너 + - 기숙사 식당 +>>>>>>> bbb0601 (docs: Java SDK 17 명세) - 식사에 대한 리뷰 작성 및 읽기 - 식당 운영 시간 및 위치 확인 - 사용자 인증 시스템 @@ -19,6 +32,10 @@ EAT-SSU는 숭실대학교 학생들이 캠퍼스 내 식당 메뉴를 리뷰하 ## 기술 스택 ### 백엔드 +<<<<<<< HEAD +======= + +>>>>>>> bbb0601 (docs: Java SDK 17 명세) - **프레임워크**: Spring Boot 3.0.4 - **언어**: Java 17 - **데이터베이스**: MySQL (프로덕션), H2 (테스팅) @@ -30,6 +47,10 @@ EAT-SSU는 숭실대학교 학생들이 캠퍼스 내 식당 메뉴를 리뷰하 - **알림**: Slack API 통합 ### 모바일 애플리케이션 +<<<<<<< HEAD +======= + +>>>>>>> bbb0601 (docs: Java SDK 17 명세) - iOS(App Store)와 Android(Play Store) 모두에서 이용 가능 ## 프로젝트 구조 @@ -62,24 +83,40 @@ src/main/java/ssu/eatssu/ ## 개발 가이드라인 ### 코드 스타일 +<<<<<<< HEAD +======= + +>>>>>>> bbb0601 (docs: Java SDK 17 명세) - Java 코딩 규칙 준수 - 의미 있는 변수 및 메소드 이름 사용 - 복잡한 로직에 대한 포괄적인 주석 작성 - 모든 새로운 기능에 대한 단위 테스트 작성 ### Git 워크플로우 +<<<<<<< HEAD +======= + +>>>>>>> bbb0601 (docs: Java SDK 17 명세) - 메인 브랜치에서 기능 브랜치 생성 - 설명적인 커밋 메시지 사용 - 병합 전 코드 리뷰를 위한 풀 리퀘스트 제출 - 커밋을 집중적이고 원자적으로 유지 ### 보안 +<<<<<<< HEAD +======= + +>>>>>>> bbb0601 (docs: Java SDK 17 명세) - 민감한 정보(API 키, 자격 증명)를 절대 커밋하지 않음 - `application.yml` 파일은 팀 내에서만 공유 - 항상 사용자 입력 검증 - 최소 권한 원칙 준수 ### 테스팅 +<<<<<<< HEAD +======= + +>>>>>>> bbb0601 (docs: Java SDK 17 명세) - 모든 서비스에 대한 단위 테스트 작성 - API 엔드포인트에 대한 통합 테스트 사용 - 중요 구성 요소에 대한 테스트 커버리지 유지 diff --git a/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java b/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java index 50f40512..12811e8f 100644 --- a/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java +++ b/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java @@ -1,7 +1,6 @@ package ssu.eatssu.global.config; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.List; From e221c6e9505ae1b6ca3de82e4bfc7e7b3fe0fb4c Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Sat, 22 Mar 2025 16:48:51 +0900 Subject: [PATCH 195/399] =?UTF-8?q?feat:=20=EC=BB=B4=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=EB=9F=AC=EC=97=90=20Java=2017=EB=A1=9C=20=EB=B9=8C=EB=93=9C=20?= =?UTF-8?q?=EB=AA=85=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .sdkmanrc | 2 ++ build.gradle | 6 ++++++ 2 files changed, 8 insertions(+) create mode 100644 .sdkmanrc diff --git a/.sdkmanrc b/.sdkmanrc new file mode 100644 index 00000000..1e0fdff4 --- /dev/null +++ b/.sdkmanrc @@ -0,0 +1,2 @@ +# 프로젝트 루트/.sdkmanrc +java=17.0.14-jbr \ No newline at end of file diff --git a/build.gradle b/build.gradle index 8817ac9e..359f49c6 100644 --- a/build.gradle +++ b/build.gradle @@ -14,6 +14,12 @@ bootJar { archiveVersion = "0.0.1" } +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(17)) + } +} + configurations { compileOnly { extendsFrom annotationProcessor From aae425cdc38ec672ef2198c246b6f82cdf31de86 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Sun, 23 Mar 2025 10:45:32 +0900 Subject: [PATCH 196/399] =?UTF-8?q?fix:=20sdkmanrc=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=EC=9D=80=20=EB=A1=9C=EC=BB=AC=EC=97=90=20=EC=9C=84=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 각자 로컬 개발 환경은 알아서 구성하는걸로! --- .gitignore | 3 +++ .sdkmanrc | 2 -- 2 files changed, 3 insertions(+), 2 deletions(-) delete mode 100644 .sdkmanrc diff --git a/.gitignore b/.gitignore index 47789491..de90d1f0 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,6 @@ out/ ### Docker Tar files ### /eat-ssu.tar + +### SDKMAN ### +.sdkmanrc \ No newline at end of file diff --git a/.sdkmanrc b/.sdkmanrc deleted file mode 100644 index 1e0fdff4..00000000 --- a/.sdkmanrc +++ /dev/null @@ -1,2 +0,0 @@ -# 프로젝트 루트/.sdkmanrc -java=17.0.14-jbr \ No newline at end of file From ad2c5e41f731fcc910047d25fc3fbd0ff1da4c30 Mon Sep 17 00:00:00 2001 From: Jiwoong CHOI Date: Fri, 28 Mar 2025 13:44:41 +0900 Subject: [PATCH 197/399] Update issue templates --- .github/ISSUE_TEMPLATE/feature-report.md | 2 +- .github/ISSUE_TEMPLATE/fix-report.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/feature-report.md b/.github/ISSUE_TEMPLATE/feature-report.md index a70df6cf..c3671495 100644 --- a/.github/ISSUE_TEMPLATE/feature-report.md +++ b/.github/ISSUE_TEMPLATE/feature-report.md @@ -1,7 +1,7 @@ --- name: Feature Report about: 추가할 사항들 -title: "[feature]" +title: 'feature: ' labels: feat assignees: '' diff --git a/.github/ISSUE_TEMPLATE/fix-report.md b/.github/ISSUE_TEMPLATE/fix-report.md index bee136b0..0b670924 100644 --- a/.github/ISSUE_TEMPLATE/fix-report.md +++ b/.github/ISSUE_TEMPLATE/fix-report.md @@ -1,7 +1,7 @@ --- name: Fix Report about: 고쳐야 할 사항들 -title: "[fix]" +title: 'fix: ' labels: fix assignees: '' From 432a0994654456405436c1a30a945500ccddb2b6 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sat, 29 Mar 2025 20:59:43 +0900 Subject: [PATCH 198/399] =?UTF-8?q?hotfix:=20dev=EC=84=9C=EB=B2=84?= =?UTF-8?q?=EC=97=90=20github=20action=20workflow=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/.github/workflows/gradle.yml | 113 +++++++++++++++++++++++++++ .gitignore | 7 +- 2 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 .github/.github/workflows/gradle.yml diff --git a/.github/.github/workflows/gradle.yml b/.github/.github/workflows/gradle.yml new file mode 100644 index 00000000..f098935f --- /dev/null +++ b/.github/.github/workflows/gradle.yml @@ -0,0 +1,113 @@ +name: CI/CD github Actions & Docker + +on: + push: + branches: [ "dev" ] + +permissions: + contents: read + +jobs: + CI-CD: + runs-on: ubuntu-latest + steps: + # JDK setting - github actions에서 사용할 JDK 설정 (aws 과 project의 java 버전과 별도로 관리) + - uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + + ## gradle caching (빌드 시간 줄이기) + - name: Gradle Caching + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + # 환경별 yml 파일 생성(1) - dev + - name: make dev server application.yml + if: contains(github.ref, 'dev') + run: | + cd ./src/main/resources + touch ./application.yml + echo "${{ secrets.YML_DEV }}" > ./application.yml + shell: bash + + # 환경별 yml 파일 생성(2) - prod +# - name: make application-prod.yml +# if: contains(github.ref, 'main') +# run: | +# cd ./src/main/resources +# touch ./application.yml +# echo "${{ secrets.YML }}" > ./application.yml +# shell: bash + + # gradle chmod + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + # gradle build + - name: Build with Gradle + run: ./gradlew clean build -x test + + # docker login + - name: Docker Hub Login + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + # docker build & push to production +# - name: Docker build & push to prod +# if: contains(github.ref, 'main') +# run: | +# docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu . +# docker push ${{ secrets.DOCKER_REPO }}/eatssu + + # docker build & push to develop + - name: Docker build & push to dev server + if: contains(github.ref, 'dev') + run: | + docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu . + docker push ${{ secrets.DOCKER_REPO }}/eatssu + + ## deploy to production +# - name: Deploy to prod +# uses: appleboy/ssh-action@master +# id: deploy-prod +# if: contains(github.ref, 'main') +# with: +# host: ${{ secrets.HOST_PROD }} # EC2 퍼블릭 IPv4 DNS +# username: ubuntu +# key: ${{ secrets.PRIVATE_KEY }} +# envs: GITHUB_SHA +# script: | +# sudo docker ps +# sudo docker rm -f $(docker ps -qa) +# sudo docker pull ${{ secrets.DOCKER_REPO }}/agaproject +# sudo docker run -d -p 8080:8080 ${{ secrets.DOCKER_REPO }}/agaproject +# sudo docker image prune -f + ## ## sudo docker run -d -p 8080:8080 ${{ secrets.DOCKER_REPO }}/agaproject + + ## deploy to develop + - name: Deploy to dev server + uses: appleboy/ssh-action@master + id: deploy-dev + if: contains(github.ref, 'dev') + with: + host: ${{ secrets.HOST_DEV }} # EC2 퍼블릭 IPv4 DNS + username: ${{ secrets.USERNAME }} # ubuntu + port: 22 + key: ${{ secrets.DEV_PRIVATE_KEY }} + script: | + sudo docker ps + sudo docker rm -f $(docker ps -qa) + sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu + sudo docker run -d -p 9000:9000 ${{ secrets.DOCKER_REPO }}/eatssu + sudo docker image prune -f diff --git a/.gitignore b/.gitignore index de90d1f0..e9d39619 100644 --- a/.gitignore +++ b/.gitignore @@ -38,7 +38,12 @@ out/ ### application files ### *.properties -*.yml +application.yml +application-local.yml +application-dev.yml +application-test.yml +application-prod.yml + ### Generated files ### /src/main/generated/ From c474b238e410fed6cdd492e34179117c59ddc794 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sat, 29 Mar 2025 21:01:30 +0900 Subject: [PATCH 199/399] =?UTF-8?q?chore:=20=EB=94=94=EB=A0=89=ED=84=B0?= =?UTF-8?q?=EB=A6=AC=20=EA=B2=BD=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/{.github => }/workflows/gradle.yml | 0 build.gradle | 6 ------ 2 files changed, 6 deletions(-) rename .github/{.github => }/workflows/gradle.yml (100%) diff --git a/.github/.github/workflows/gradle.yml b/.github/workflows/gradle.yml similarity index 100% rename from .github/.github/workflows/gradle.yml rename to .github/workflows/gradle.yml diff --git a/build.gradle b/build.gradle index 359f49c6..8817ac9e 100644 --- a/build.gradle +++ b/build.gradle @@ -14,12 +14,6 @@ bootJar { archiveVersion = "0.0.1" } -java { - toolchain { - languageVersion.set(JavaLanguageVersion.of(17)) - } -} - configurations { compileOnly { extendsFrom annotationProcessor From 9ef99d20e18310baec9571b8605a3386f7a521b8 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sat, 29 Mar 2025 21:05:13 +0900 Subject: [PATCH 200/399] =?UTF-8?q?hotfix:=20gradlew=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradlew.bat | 188 ++++++++++++++++++++++++++-------------------------- 1 file changed, 94 insertions(+), 94 deletions(-) diff --git a/gradlew.bat b/gradlew.bat index 9d21a218..9b42019c 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,94 +1,94 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem -@rem SPDX-License-Identifier: Apache-2.0 -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega From 5c4269f6a8f8acf6c2d103d727271daaf64f1df0 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sat, 29 Mar 2025 21:05:52 +0900 Subject: [PATCH 201/399] =?UTF-8?q?hotfix:=20gradlew=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - gradle/wrapper/gradle-wrapper.properties | 7 +++++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 gradle/wrapper/gradle-wrapper.properties diff --git a/.gitignore b/.gitignore index e9d39619..1399cc26 100644 --- a/.gitignore +++ b/.gitignore @@ -37,7 +37,6 @@ out/ .vscode/ ### application files ### -*.properties application.yml application-local.yml application-dev.yml diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..37f853b1 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists From b48c7ef24a63bc565a9db9efca6cea8302df9f8e Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sat, 29 Mar 2025 23:33:31 +0900 Subject: [PATCH 202/399] =?UTF-8?q?hotfix:=20gradle.yml=20prod=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/gradle.yml | 66 ++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index f098935f..5fe08367 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -2,7 +2,7 @@ name: CI/CD github Actions & Docker on: push: - branches: [ "dev" ] + branches: [ "main", "dev" ] permissions: contents: read @@ -40,13 +40,13 @@ jobs: shell: bash # 환경별 yml 파일 생성(2) - prod -# - name: make application-prod.yml -# if: contains(github.ref, 'main') -# run: | -# cd ./src/main/resources -# touch ./application.yml -# echo "${{ secrets.YML }}" > ./application.yml -# shell: bash + - name: make prod server application.yml + if: contains(github.ref, 'main') + run: | + cd ./src/main/resources + touch ./application.yml + echo "${{ secrets.YML }}" > ./application.yml + shell: bash # gradle chmod - name: Grant execute permission for gradlew @@ -64,36 +64,36 @@ jobs: password: ${{ secrets.DOCKER_PASSWORD }} # docker build & push to production -# - name: Docker build & push to prod -# if: contains(github.ref, 'main') -# run: | -# docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu . -# docker push ${{ secrets.DOCKER_REPO }}/eatssu + - name: Docker build & push to prod + if: contains(github.ref, 'main') + run: | + docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-prod . + docker push ${{ secrets.DOCKER_REPO }}/eatssu-prod # docker build & push to develop - name: Docker build & push to dev server if: contains(github.ref, 'dev') run: | - docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu . - docker push ${{ secrets.DOCKER_REPO }}/eatssu + docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev . + docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev ## deploy to production -# - name: Deploy to prod -# uses: appleboy/ssh-action@master -# id: deploy-prod -# if: contains(github.ref, 'main') -# with: -# host: ${{ secrets.HOST_PROD }} # EC2 퍼블릭 IPv4 DNS -# username: ubuntu -# key: ${{ secrets.PRIVATE_KEY }} -# envs: GITHUB_SHA -# script: | -# sudo docker ps -# sudo docker rm -f $(docker ps -qa) -# sudo docker pull ${{ secrets.DOCKER_REPO }}/agaproject -# sudo docker run -d -p 8080:8080 ${{ secrets.DOCKER_REPO }}/agaproject -# sudo docker image prune -f - ## ## sudo docker run -d -p 8080:8080 ${{ secrets.DOCKER_REPO }}/agaproject + - name: Deploy to prod + uses: appleboy/ssh-action@master + id: deploy-prod + if: contains(github.ref, 'main') + with: + host: ${{ secrets.HOST_PROD }} # EC2 퍼블릭 IPv4 DNS + username: ubuntu + key: ${{ secrets.PROD_PRIVATE_KEY }} + envs: GITHUB_SHA + script: | + sudo docker ps + sudo docker rm -f $(docker ps -qa) + sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-prod + sudo docker run -d -p 8080:8080 ${{ secrets.DOCKER_REPO }}/eatssu-prod + sudo docker image prune -f + ## deploy to develop - name: Deploy to dev server @@ -108,6 +108,6 @@ jobs: script: | sudo docker ps sudo docker rm -f $(docker ps -qa) - sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu - sudo docker run -d -p 9000:9000 ${{ secrets.DOCKER_REPO }}/eatssu + sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev + sudo docker run -d -p 9000:9000 ${{ secrets.DOCKER_REPO }}/eatssu-dev sudo docker image prune -f From a5d17a195f1160c3fb469da0533f16229594fa76 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sat, 29 Mar 2025 23:53:24 +0900 Subject: [PATCH 203/399] =?UTF-8?q?hotfix:=20prod=20server=20ci/cd=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 5 ++ .github/workflows/gradle.yml | 113 +++++++++++++++++++++++++++++++++++ .gitignore | 23 +++++-- Dockerfile | 25 ++++++++ build.gradle | 91 ++++++++++++++++++++++++++++ 5 files changed, 252 insertions(+), 5 deletions(-) create mode 100644 .dockerignore create mode 100644 .github/workflows/gradle.yml create mode 100644 Dockerfile create mode 100644 build.gradle diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..8c2ff6b5 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +.git +.gitignore +*.md +build/ +src/test/ \ No newline at end of file diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml new file mode 100644 index 00000000..688f934e --- /dev/null +++ b/.github/workflows/gradle.yml @@ -0,0 +1,113 @@ +name: CI/CD github Actions & Docker + +on: + push: + branches: [ "main", "dev" ] + +permissions: + contents: read + +jobs: + CI-CD: + runs-on: ubuntu-latest + steps: + # JDK setting - github actions에서 사용할 JDK 설정 (aws 과 project의 java 버전과 별도로 관리) + - uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + + ## gradle caching (빌드 시간 줄이기) + - name: Gradle Caching + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + # 환경별 yml 파일 생성(1) - dev + - name: make dev server application.yml + if: contains(github.ref, 'dev') + run: | + cd ./src/main/resources + touch ./application.yml + echo "${{ secrets.YML_DEV }}" > ./application.yml + shell: bash + + # 환경별 yml 파일 생성(2) - prod + - name: make prod server application.yml + if: contains(github.ref, 'main') + run: | + cd ./src/main/resources + touch ./application.yml + echo "${{ secrets.YML }}" > ./application.yml + shell: bash + + # gradle chmod + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + # gradle build + - name: Build with Gradle + run: ./gradlew clean build -x test + + # docker login + - name: Docker Hub Login + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + # docker build & push to production + - name: Docker build & push to prod + if: contains(github.ref, 'main') + run: | + docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-prod . + docker push ${{ secrets.DOCKER_REPO }}/eatssu-prod + + # docker build & push to develop + - name: Docker build & push to dev server + if: contains(github.ref, 'dev') + run: | + docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev . + docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev + + ## deploy to production + - name: Deploy to prod + uses: appleboy/ssh-action@master + id: deploy-prod + if: contains(github.ref, 'main') + with: + host: ${{ secrets.HOST_PROD }} # EC2 퍼블릭 IPv4 DNS + username: ubuntu + key: ${{ secrets.PROD_PRIVATE_KEY }} + envs: GITHUB_SHA + script: | + sudo docker ps + sudo docker rm -f $(docker ps -qa) + sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-prod + sudo docker run -d -p 8080:8080 ${{ secrets.DOCKER_REPO }}/eatssu-prod + sudo docker image prune -f + + + ## deploy to develop + - name: Deploy to dev server + uses: appleboy/ssh-action@master + id: deploy-dev + if: contains(github.ref, 'dev') + with: + host: ${{ secrets.HOST_DEV }} # EC2 퍼블릭 IPv4 DNS + username: ${{ secrets.USERNAME }} # ubuntu + port: 22 + key: ${{ secrets.DEV_PRIVATE_KEY }} + script: | + sudo docker ps + sudo docker rm -f $(docker ps -qa) + sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev + sudo docker run -d -p 9000:9000 ${{ secrets.DOCKER_REPO }}/eatssu-dev + sudo docker image prune -f diff --git a/.gitignore b/.gitignore index b504a4a1..1399cc26 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,9 @@ -HELP.md -.gradle +### Build files ### +.gradle/ build/ !gradle/wrapper/gradle-wrapper.jar !**/src/main/**/build/ !**/src/test/**/build/ -build.gradle ### STS ### .apt_generated @@ -37,5 +36,19 @@ out/ ### VS Code ### .vscode/ -*.properties -*.yml \ No newline at end of file +### application files ### +application.yml +application-local.yml +application-dev.yml +application-test.yml +application-prod.yml + + +### Generated files ### +/src/main/generated/ + +### Docker Tar files ### +/eat-ssu.tar + +### SDKMAN ### +.sdkmanrc \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..c68d1129 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +# 1단계: 빌드 단계 (Gradle Wrapper를 사용하여 애플리케이션 빌드) +FROM --platform=linux/amd64 gradle:7.5.1-jdk17 AS builder +WORKDIR /home/gradle/project + +# 소스 코드 전체를 복사 (gradlew, build.gradle, settings.gradle, src/ 등) +COPY --chown=gradle:gradle . . + +# Gradle Wrapper 실행 권한 부여 (실행 권한이 없을 경우를 대비) +RUN chmod +x gradlew + +# Gradle을 사용하여 프로젝트 빌드 (JAR 파일은 build/libs 폴더에 생성됨) +RUN ./gradlew clean build --no-daemon + +# 2단계: 실행 단계 (빌드 결과물 실행을 위한 환경) +FROM --platform=linux/amd64 openjdk:17-jdk-slim +WORKDIR /app + +# 빌드 단계에서 생성된 JAR 파일 복사 (파일명이 프로젝트에 따라 달라질 수 있으므로 와일드카드 사용) +COPY --from=builder /home/gradle/project/build/libs/*.jar app.jar + +# 컨테이너에서 사용할 포트 (필요 시 변경) +EXPOSE 9000 + +# 애플리케이션 실행 +ENTRYPOINT ["java", "-jar", "app.jar"] \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 00000000..98d5af20 --- /dev/null +++ b/build.gradle @@ -0,0 +1,91 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.0.4' + id 'io.spring.dependency-management' version '1.1.0' +} + +group = 'ssu' +version = '0.0.1-SNAPSHOT' +sourceCompatibility = '17' + +bootJar { + archivesBaseName = 'EatSsu' + archiveFileName = 'eat-ssu.jar' + archiveVersion = "0.0.1" +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.jetbrains:annotations:20.1.0' + implementation 'org.springframework.boot:spring-boot-starter-security' + implementation 'org.hibernate.validator:hibernate-validator:8.0.0.Final' + + // Lombok + annotationProcessor 'org.projectlombok:lombok' + compileOnly 'org.projectlombok:lombok' + + developmentOnly 'org.springframework.boot:spring-boot-devtools' + + runtimeOnly 'com.mysql:mysql-connector-j' + + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testImplementation 'org.springframework.security:spring-security-test' + + implementation 'com.h2database:h2' + + + //openApi + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' + + //jwt + implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2' + runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2' + runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2' + + //httpClient + implementation 'org.apache.httpcomponents.client5:httpclient5:5.3-alpha1' + + // Querydsl 추가 + implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' + annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" + annotationProcessor "jakarta.annotation:jakarta.annotation-api" + annotationProcessor "jakarta.persistence:jakarta.persistence-api" + + //S3 + implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' + + //slack + implementation("com.slack.api:bolt:1.35.0") + implementation("com.slack.api:bolt-servlet:1.35.0") + implementation("com.slack.api:bolt-jetty:1.35.0") + implementation("org.slf4j:slf4j-simple:1.7.36") +} + +tasks.named('test') { + useJUnitPlatform() +} + +def generated = 'src/main/generated' + +tasks.withType(JavaCompile) { + options.getGeneratedSourceOutputDirectory().set(file(generated)) +} + +sourceSets { + main.java.srcDirs += [generated] +} + +clean { + delete file('src/main/generated') +} \ No newline at end of file From b1a160705333b1162dfb463983113ab26031d283 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sat, 29 Mar 2025 23:54:21 +0900 Subject: [PATCH 204/399] =?UTF-8?q?hotfix:=20gradle=20wrapper=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 --- gradle/wrapper/gradle-wrapper.jar | Bin 60756 -> 43705 bytes gradle/wrapper/gradle-wrapper.properties | 7 + gradlew | 37 +++-- gradlew.bat | 185 ++++++++++++----------- 4 files changed, 125 insertions(+), 104 deletions(-) create mode 100644 gradle/wrapper/gradle-wrapper.properties mode change 100644 => 100755 gradlew diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 249e5832f090a2944b7473328c07c9755baa3196..9bbc975c742b298b441bfb90dbc124400a3751b9 100644 GIT binary patch literal 43705 zcma&Obx`DOvL%eWOXJW;V64viP??$)@wHcsJ68)>bJS6*&iHnskXE8MjvIPVl|FrmV}Npeql07fCw6`pw`0s zGauF(<*@v{3t!qoUU*=j)6;|-(yg@jvDx&fV^trtZt27?4Tkn729qrItVh@PMwG5$ z+oXHSPM??iHZ!cVP~gYact-CwV`}~Q+R}PPNRy+T-geK+>fHrijpllon_F4N{@b-} z1M0=a!VbVmJM8Xk@NRv)m&aRYN}FSJ{LS;}2ArQ5baSjfy40l@T5)1r-^0fAU6f_} zzScst%$Nd-^ElV~H0TetQhMc%S{}Q4lssln=|;LG?Ulo}*mhg8YvBAUY7YFdXs~vv zv~{duzVw%C#GxkBwX=TYp1Dh*Uaum2?RmsvPaLlzO^fIJ`L?&OV?Y&kKj~^kWC`Ly zfL-}J^4a0Ojuz9O{jUbIS;^JatJ5+YNNHe}6nG9Yd6P-lJiK2ms)A^xq^H2fKrTF) zp!6=`Ece~57>^9(RA4OB9;f1FAhV%zVss%#rDq$9ZW3N2cXC7dMz;|UcRFecBm`DA z1pCO!#6zKp#@mx{2>Qcme8y$Qg_gnA%(`Vtg3ccwgb~D(&@y8#Jg8nNYW*-P{_M#E zZ|wCsQoO1(iIKd-2B9xzI}?l#Q@G5d$m1Lfh0q;iS5FDQ&9_2X-H)VDKA*fa{b(sV zL--krNCXibi1+*C2;4qVjb0KWUVGjjRT{A}Q*!cFmj0tRip2ra>WYJ>ZK4C|V~RYs z6;~+*)5F^x^aQqk9tjh)L;DOLlD8j+0<>kHc8MN|68PxQV`tJFbgxSfq-}b(_h`luA0&;Vk<@51i0 z_cu6{_*=vlvYbKjDawLw+t^H?OV00_73Cn3goU5?})UYFuoSX6Xqw;TKcrsc|r# z$sMWYl@cs#SVopO$hpHZ)cdU-+Ui%z&Sa#lMI~zWW@vE%QDh@bTe0&V9nL>4Et9`N zGT8(X{l@A~loDx}BDz`m6@tLv@$mTlVJ;4MGuj!;9Y=%;;_kj#o8n5tX%@M)2I@}u z_{I!^7N1BxW9`g&Z+K#lZ@7_dXdsqp{W9_`)zgZ=sD~%WS5s$`7z#XR!Lfy(4se(m zR@a3twgMs19!-c4jh`PfpJOSU;vShBKD|I0@rmv_x|+ogqslnLLOepJpPMOxhRb*i zGHkwf#?ylQ@k9QJL?!}MY4i7joSzMcEhrDKJH&?2v{-tgCqJe+Y0njl7HYff z{&~M;JUXVR$qM1FPucIEY(IBAuCHC@^~QG6O!dAjzQBxDOR~lJEr4KS9R*idQ^p{D zS#%NQADGbAH~6wAt}(1=Uff-1O#ITe)31zCL$e9~{w)gx)g>?zFE{Bc9nJT6xR!i8 z)l)~9&~zSZTHk{?iQL^MQo$wLi}`B*qnvUy+Y*jEraZMnEhuj`Fu+>b5xD1_Tp z)8|wedv42#3AZUL7x&G@p@&zcUvPkvg=YJS6?1B7ZEXr4b>M+9Gli$gK-Sgh{O@>q7TUg+H zNJj`6q#O@>4HpPJEHvNij`sYW&u%#=215HKNg;C!0#hH1vlO5+dFq9& zS)8{5_%hz?#D#wn&nm@aB?1_|@kpA@{%jYcs{K%$a4W{k@F zPyTav?jb;F(|GaZhm6&M#g|`ckO+|mCtAU)5_(hn&Ogd z9Ku}orOMu@K^Ac>eRh3+0-y^F`j^noa*OkS3p^tLV`TY$F$cPXZJ48!xz1d7%vfA( zUx2+sDPqHfiD-_wJDb38K^LtpN2B0w=$A10z%F9f_P2aDX63w7zDG5CekVQJGy18I zB!tI`6rZr7TK10L(8bpiaQ>S@b7r_u@lh^vakd0e6USWw7W%d_Ob%M!a`K>#I3r-w zo2^+9Y)Sb?P9)x0iA#^ns+Kp{JFF|$09jb6ZS2}_<-=$?^#IUo5;g`4ICZknr!_aJ zd73%QP^e-$%Xjt|28xM}ftD|V@76V_qvNu#?Mt*A-OV{E4_zC4Ymo|(cb+w^`Wv== z>)c%_U0w`d$^`lZQp@midD89ta_qTJW~5lRrIVwjRG_9aRiQGug%f3p@;*%Y@J5uQ|#dJ+P{Omc`d2VR)DXM*=ukjVqIpkb<9gn9{*+&#p)Ek zN=4zwNWHF~=GqcLkd!q0p(S2_K=Q`$whZ}r@ec_cb9hhg9a z6CE=1n8Q;hC?;ujo0numJBSYY6)GTq^=kB~`-qE*h%*V6-ip=c4+Yqs*7C@@b4YAi zuLjsmD!5M7r7d5ZPe>4$;iv|zq=9=;B$lI|xuAJwi~j~^Wuv!Qj2iEPWjh9Z&#+G>lZQpZ@(xfBrhc{rlLwOC;optJZDj4Xfu3$u6rt_=YY0~lxoy~fq=*L_&RmD7dZWBUmY&12S;(Ui^y zBpHR0?Gk|`U&CooNm_(kkO~pK+cC%uVh^cnNn)MZjF@l{_bvn4`Jc}8QwC5_)k$zs zM2qW1Zda%bIgY^3NcfL)9ug`05r5c%8ck)J6{fluBQhVE>h+IA&Kb}~$55m-^c1S3 zJMXGlOk+01qTQUFlh5Jc3xq|7McY$nCs$5=`8Y;|il#Ypb{O9}GJZD8!kYh{TKqs@ z-mQn1K4q$yGeyMcryHQgD6Ra<6^5V(>6_qg`3uxbl|T&cJVA*M_+OC#>w(xL`RoPQ zf1ZCI3G%;o-x>RzO!mc}K!XX{1rih0$~9XeczHgHdPfL}4IPi~5EV#ZcT9 zdgkB3+NPbybS-d;{8%bZW^U+x@Ak+uw;a5JrZH!WbNvl!b~r4*vs#he^bqz`W93PkZna2oYO9dBrKh2QCWt{dGOw)%Su%1bIjtp4dKjZ^ zWfhb$M0MQiDa4)9rkip9DaH0_tv=XxNm>6MKeWv>`KNk@QVkp$Lhq_~>M6S$oliq2 zU6i7bK;TY)m>-}X7hDTie>cc$J|`*}t=MAMfWIALRh2=O{L57{#fA_9LMnrV(HrN6 zG0K_P5^#$eKt{J|#l~U0WN_3)p^LLY(XEqes0OvI?3)GTNY&S13X+9`6PLVFRf8K) z9x@c|2T72+-KOm|kZ@j4EDDec>03FdgQlJ!&FbUQQH+nU^=U3Jyrgu97&#-W4C*;_ z(WacjhBDp@&Yon<9(BWPb;Q?Kc0gR5ZH~aRNkPAWbDY!FiYVSu!~Ss^9067|JCrZk z-{Rn2KEBR|Wti_iy) zXnh2wiU5Yz2L!W{{_#LwNWXeNPHkF=jjXmHC@n*oiz zIoM~Wvo^T@@t!QQW?Ujql-GBOlnB|HjN@x~K8z)c(X}%%5Zcux09vC8=@tvgY>czq z3D(U&FiETaN9aP}FDP3ZSIXIffq>M3{~eTB{uauL07oYiM=~K(XA{SN!rJLyXeC+Y zOdeebgHOc2aCIgC=8>-Q>zfuXV*=a&gp{l#E@K|{qft@YtO>xaF>O7sZz%8);e86? z+jJlFB{0fu6%8ew^_<+v>>%6eB8|t*_v7gb{x=vLLQYJKo;p7^o9!9A1)fZZ8i#ZU z<|E?bZakjkEV8xGi?n+{Xh3EgFKdM^;4D;5fHmc04PI>6oU>>WuLy6jgpPhf8$K4M zjJo*MbN0rZbZ!5DmoC^@hbqXiP^1l7I5;Wtp2i9Jkh+KtDJoXP0O8qmN;Sp(+%upX zAxXs*qlr(ck+-QG_mMx?hQNXVV~LT{$Q$ShX+&x?Q7v z@8t|UDylH6@RZ?WsMVd3B0z5zf50BP6U<&X_}+y3uJ0c5OD}+J&2T8}A%2Hu#Nt_4 zoOoTI$A!hQ<2pk5wfZDv+7Z{yo+Etqry=$!*pvYyS+kA4xnJ~3b~TBmA8Qd){w_bE zqDaLIjnU8m$wG#&T!}{e0qmHHipA{$j`%KN{&#_Kmjd&#X-hQN+ju$5Ms$iHj4r?) z&5m8tI}L$ih&95AjQ9EDfPKSmMj-@j?Q+h~C3<|Lg2zVtfKz=ft{YaQ1i6Om&EMll zzov%MsjSg=u^%EfnO+W}@)O6u0LwoX709h3Cxdc2Rwgjd%LLTChQvHZ+y<1q6kbJXj3_pq1&MBE{8 zd;aFotyW>4WHB{JSD8Z9M@jBitC1RF;!B8;Rf-B4nOiVbGlh9w51(8WjL&e{_iXN( zAvuMDIm_>L?rJPxc>S`bqC|W$njA0MKWa?V$u6mN@PLKYqak!bR!b%c^ze(M`ec(x zv500337YCT4gO3+9>oVIJLv$pkf`01S(DUM+4u!HQob|IFHJHm#>eb#eB1X5;bMc| z>QA4Zv}$S?fWg~31?Lr(C>MKhZg>gplRm`2WZ--iw%&&YlneQYY|PXl;_4*>vkp;I z$VYTZq|B*(3(y17#@ud@o)XUZPYN*rStQg5U1Sm2gM}7hf_G<>*T%6ebK*tF(kbJc zNPH4*xMnJNgw!ff{YXrhL&V$6`ylY={qT_xg9znQWw9>PlG~IbhnpsG_94Kk_(V-o&v7#F znra%uD-}KOX2dkak**hJnZZQyp#ERyyV^lNe!Qrg=VHiyr7*%j#PMvZMuYNE8o;JM zGrnDWmGGy)(UX{rLzJ*QEBd(VwMBXnJ@>*F8eOFy|FK*Vi0tYDw;#E zu#6eS;%Nm2KY+7dHGT3m{TM7sl=z8|V0e!DzEkY-RG8vTWDdSQFE|?+&FYA146@|y zV(JP>LWL;TSL6rao@W5fWqM1-xr$gRci#RQV2DX-x4@`w{uEUgoH4G|`J%H!N?*Qn zy~rjzuf(E7E!A9R2bSF|{{U(zO+;e29K_dGmC^p7MCP!=Bzq@}&AdF5=rtCwka zTT1A?5o}i*sXCsRXBt)`?nOL$zxuP3i*rm3Gmbmr6}9HCLvL*45d|(zP;q&(v%}S5yBmRVdYQQ24zh z6qL2<2>StU$_Ft29IyF!6=!@;tW=o8vNzVy*hh}XhZhUbxa&;9~woye<_YmkUZ)S?PW{7t; zmr%({tBlRLx=ffLd60`e{PQR3NUniWN2W^~7Sy~MPJ>A#!6PLnlw7O0(`=PgA}JLZ ztqhiNcKvobCcBel2 z-N82?4-()eGOisnWcQ9Wp23|ybG?*g!2j#>m3~0__IX1o%dG4b;VF@^B+mRgKx|ij zWr5G4jiRy}5n*(qu!W`y54Y*t8g`$YrjSunUmOsqykYB4-D(*(A~?QpuFWh;)A;5= zPl|=x+-w&H9B7EZGjUMqXT}MkcSfF}bHeRFLttu!vHD{Aq)3HVhvtZY^&-lxYb2%` zDXk7>V#WzPfJs6u{?ZhXpsMdm3kZscOc<^P&e&684Rc1-d=+=VOB)NR;{?0NjTl~D z1MXak$#X4{VNJyD$b;U~Q@;zlGoPc@ny!u7Pe;N2l4;i8Q=8>R3H{>HU(z z%hV2?rSinAg6&wuv1DmXok`5@a3@H0BrqsF~L$pRYHNEXXuRIWom0l zR9hrZpn1LoYc+G@q@VsFyMDNX;>_Vf%4>6$Y@j;KSK#g)TZRmjJxB!_NmUMTY(cAV zmewn7H{z`M3^Z& z2O$pWlDuZHAQJ{xjA}B;fuojAj8WxhO}_9>qd0|p0nBXS6IIRMX|8Qa!YDD{9NYYK z%JZrk2!Ss(Ra@NRW<7U#%8SZdWMFDU@;q<}%F{|6n#Y|?FaBgV$7!@|=NSVoxlJI4G-G(rn}bh|?mKkaBF$-Yr zA;t0r?^5Nz;u6gwxURapQ0$(-su(S+24Ffmx-aP(@8d>GhMtC5x*iEXIKthE*mk$` zOj!Uri|EAb4>03C1xaC#(q_I<;t}U7;1JqISVHz3tO{) zD(Yu@=>I9FDmDtUiWt81;BeaU{_=es^#QI7>uYl@e$$lGeZ~Q(f$?^3>$<<{n`Bn$ zn8bamZlL@6r^RZHV_c5WV7m2(G6X|OI!+04eAnNA5=0v1Z3lxml2#p~Zo57ri;4>;#16sSXXEK#QlH>=b$inEH0`G#<_ zvp;{+iY)BgX$R!`HmB{S&1TrS=V;*5SB$7*&%4rf_2wQS2ed2E%Wtz@y$4ecq4w<) z-?1vz_&u>s?BMrCQG6t9;t&gvYz;@K@$k!Zi=`tgpw*v-#U1Pxy%S9%52`uf$XMv~ zU}7FR5L4F<#9i%$P=t29nX9VBVv)-y7S$ZW;gmMVBvT$BT8d}B#XV^@;wXErJ-W2A zA=JftQRL>vNO(!n4mcd3O27bHYZD!a0kI)6b4hzzL9)l-OqWn)a~{VP;=Uo|D~?AY z#8grAAASNOkFMbRDdlqVUfB;GIS-B-_YXNlT_8~a|LvRMVXf!<^uy;)d$^OR(u)!) zHHH=FqJF-*BXif9uP~`SXlt0pYx|W&7jQnCbjy|8b-i>NWb@!6bx;1L&$v&+!%9BZ z0nN-l`&}xvv|wwxmC-ZmoFT_B#BzgQZxtm|4N+|;+(YW&Jtj^g!)iqPG++Z%x0LmqnF875%Ry&2QcCamx!T@FgE@H zN39P6e#I5y6Yl&K4eUP{^biV`u9{&CiCG#U6xgGRQr)zew;Z%x+ z-gC>y%gvx|dM=OrO`N@P+h2klPtbYvjS!mNnk4yE0+I&YrSRi?F^plh}hIp_+OKd#o7ID;b;%*c0ES z!J))9D&YufGIvNVwT|qsGWiZAwFODugFQ$VsNS%gMi8OJ#i${a4!E3<-4Jj<9SdSY z&xe|D0V1c`dZv+$8>(}RE|zL{E3 z-$5Anhp#7}oO(xm#}tF+W=KE*3(xxKxhBt-uuJP}`_K#0A< zE%rhMg?=b$ot^i@BhE3&)bNBpt1V*O`g?8hhcsV-n#=|9wGCOYt8`^#T&H7{U`yt2 z{l9Xl5CVsE=`)w4A^%PbIR6uG_5Ww9k`=q<@t9Bu662;o{8PTjDBzzbY#tL;$wrpjONqZ{^Ds4oanFm~uyPm#y1Ll3(H57YDWk9TlC zq;kebC!e=`FU&q2ojmz~GeLxaJHfs0#F%c(i+~gg$#$XOHIi@1mA72g2pFEdZSvp}m0zgQb5u2?tSRp#oo!bp`FP}< zaK4iuMpH+Jg{bb7n9N6eR*NZfgL7QiLxI zk6{uKr>xxJ42sR%bJ%m8QgrL|fzo9@?9eQiMW8O`j3teoO_R8cXPe_XiLnlYkE3U4 zN!^F)Z4ZWcA8gekEPLtFqX-Q~)te`LZnJK_pgdKs)Dp50 zdUq)JjlJeELskKg^6KY!sIou-HUnSFRsqG^lsHuRs`Z{f(Ti9eyd3cwu*Kxp?Ws7l z3cN>hGPXTnQK@qBgqz(n*qdJ2wbafELi?b90fK~+#XIkFGU4+HihnWq;{{)1J zv*Txl@GlnIMOjzjA1z%g?GsB2(6Zb-8fooT*8b0KF2CdsIw}~Hir$d3TdVHRx1m3c z4C3#h@1Xi@{t4zge-#B6jo*ChO%s-R%+9%-E|y<*4;L>$766RiygaLR?X%izyqMXA zb|N=Z-0PSFeH;W6aQ3(5VZWVC>5Ibgi&cj*c%_3=o#VyUJv* zM&bjyFOzlaFq;ZW(q?|yyi|_zS%oIuH^T*MZ6NNXBj;&yM3eQ7!CqXY?`7+*+GN47 zNR#%*ZH<^x{(0@hS8l{seisY~IE*)BD+R6^OJX}<2HRzo^fC$n>#yTOAZbk4%=Bei=JEe=o$jm`or0YDw*G?d> z=i$eEL7^}_?UI^9$;1Tn9b>$KOM@NAnvWrcru)r`?LodV%lz55O3y(%FqN;cKgj7t zlJ7BmLTQ*NDX#uelGbCY>k+&H*iSK?x-{w;f5G%%!^e4QT9z<_0vHbXW^MLR} zeC*jezrU|{*_F`I0mi)9=sUj^G03i@MjXx@ePv@(Udt2CCXVOJhRh4yp~fpn>ssHZ z?k(C>2uOMWKW5FVsBo#Nk!oqYbL`?#i~#!{3w^qmCto05uS|hKkT+iPrC-}hU_nbL zO622#mJupB21nChpime}&M1+whF2XM?prT-Vv)|EjWYK(yGYwJLRRMCkx;nMSpu?0 zNwa*{0n+Yg6=SR3-S&;vq=-lRqN`s9~#)OOaIcy3GZ&~l4g@2h| zThAN#=dh{3UN7Xil;nb8@%)wx5t!l z0RSe_yJQ+_y#qEYy$B)m2yDlul^|m9V2Ia$1CKi6Q19~GTbzqk*{y4;ew=_B4V8zw zScDH&QedBl&M*-S+bH}@IZUSkUfleyM45G>CnYY{hx8J9q}ME?Iv%XK`#DJRNmAYt zk2uY?A*uyBA=nlYjkcNPMGi*552=*Q>%l?gDK_XYh*Rya_c)ve{=ps`QYE0n!n!)_$TrGi_}J|>1v}(VE7I~aP-wns#?>Y zu+O7`5kq32zM4mAQpJ50vJsUDT_^s&^k-llQMy9!@wRnxw@~kXV6{;z_wLu3i=F3m z&eVsJmuauY)8(<=pNUM5!!fQ4uA6hBkJoElL1asWNkYE#qaP?a+biwWw~vB48PRS7 zY;DSHvgbIB$)!uJU)xA!yLE*kP0owzYo`v@wfdux#~f!dv#uNc_$SF@Qq9#3q5R zfuQnPPN_(z;#X#nRHTV>TWL_Q%}5N-a=PhkQ^GL+$=QYfoDr2JO-zo#j;mCsZVUQ) zJ96e^OqdLW6b-T@CW@eQg)EgIS9*k`xr$1yDa1NWqQ|gF^2pn#dP}3NjfRYx$pTrb zwGrf8=bQAjXx*8?du*?rlH2x~^pXjiEmj^XwQo{`NMonBN=Q@Y21!H)D( zA~%|VhiTjaRQ%|#Q9d*K4j~JDXOa4wmHb0L)hn*;Eq#*GI}@#ux4}bt+olS(M4$>c z=v8x74V_5~xH$sP+LZCTrMxi)VC%(Dg!2)KvW|Wwj@pwmH6%8zd*x0rUUe$e(Z%AW z@Q{4LL9#(A-9QaY2*+q8Yq2P`pbk3!V3mJkh3uH~uN)+p?67d(r|Vo0CebgR#u}i? zBxa^w%U|7QytN%L9bKaeYhwdg7(z=AoMeP0)M3XZA)NnyqL%D_x-(jXp&tp*`%Qsx z6}=lGr;^m1<{;e=QQZ!FNxvLcvJVGPkJ63at5%*`W?46!6|5FHYV0qhizSMT>Zoe8 zsJ48kb2@=*txGRe;?~KhZgr-ZZ&c0rNV7eK+h$I-UvQ=552@psVrvj#Ys@EU4p8`3 zsNqJu-o=#@9N!Pq`}<=|((u)>^r0k^*%r<{YTMm+mOPL>EoSREuQc-e2~C#ZQ&Xve zZ}OUzmE4{N-7cqhJiUoO_V#(nHX11fdfVZJT>|6CJGX5RQ+Ng$Nq9xs-C86-)~`>p zW--X53J`O~vS{WWjsAuGq{K#8f#2iz` zzSSNIf6;?5sXrHig%X(}0q^Y=eYwvh{TWK-fT>($8Ex>!vo_oGFw#ncr{vmERi^m7lRi%8Imph})ZopLoIWt*eFWSPuBK zu>;Pu2B#+e_W|IZ0_Q9E9(s@0>C*1ft`V{*UWz^K<0Ispxi@4umgGXW!j%7n+NC~* zBDhZ~k6sS44(G}*zg||X#9Weto;u*Ty;fP!+v*7be%cYG|yEOBomch#m8Np!Sw`L)q+T` zmrTMf2^}7j=RPwgpO9@eXfb{Q>GW#{X=+xt`AwTl!=TgYm)aS2x5*`FSUaaP_I{Xi zA#irF%G33Bw>t?^1YqX%czv|JF0+@Pzi%!KJ?z!u$A`Catug*tYPO`_Zho5iip0@! z;`rR0-|Ao!YUO3yaujlSQ+j-@*{m9dHLtve!sY1Xq_T2L3&=8N;n!!Eb8P0Z^p4PL zQDdZ?An2uzbIakOpC|d@=xEA}v-srucnX3Ym{~I#Ghl~JZU(a~Ppo9Gy1oZH&Wh%y zI=KH_s!Lm%lAY&`_KGm*Ht)j*C{-t}Nn71drvS!o|I|g>ZKjE3&Mq0TCs6}W;p>%M zQ(e!h*U~b;rsZ1OPigud>ej=&hRzs@b>>sq6@Yjhnw?M26YLnDH_Wt#*7S$-BtL08 zVyIKBm$}^vp?ILpIJetMkW1VtIc&7P3z0M|{y5gA!Yi5x4}UNz5C0Wdh02!h zNS>923}vrkzl07CX`hi)nj-B?#n?BJ2Vk0zOGsF<~{Fo7OMCN_85daxhk*pO}x_8;-h>}pcw26V6CqR-=x2vRL?GB#y%tYqi;J}kvxaz}*iFO6YO0ha6!fHU9#UI2Nv z_(`F#QU1B+P;E!t#Lb)^KaQYYSewj4L!_w$RH%@IL-M($?DV@lGj%3ZgVdHe^q>n(x zyd5PDpGbvR-&p*eU9$#e5#g3-W_Z@loCSz}f~{94>k6VRG`e5lI=SE0AJ7Z_+=nnE zTuHEW)W|a8{fJS>2TaX zuRoa=LCP~kP)kx4L+OqTjtJOtXiF=y;*eUFgCn^Y@`gtyp?n14PvWF=zhNGGsM{R- z^DsGxtoDtx+g^hZi@E2Y(msb-hm{dWiHdoQvdX88EdM>^DS#f}&kCGpPFDu*KjEpv$FZtLpeT>@)mf|z#ZWEsueeW~hF78Hu zfY9a+Gp?<)s{Poh_qdcSATV2oZJo$OH~K@QzE2kCADZ@xX(; z)0i=kcAi%nvlsYagvUp(z0>3`39iKG9WBDu3z)h38p|hLGdD+Khk394PF3qkX!02H z#rNE`T~P9vwNQ_pNe0toMCRCBHuJUmNUl)KFn6Gu2je+p>{<9^oZ4Gfb!)rLZ3CR3 z-o&b;Bh>51JOt=)$-9+Z!P}c@cKev_4F1ZZGs$I(A{*PoK!6j@ZJrAt zv2LxN#p1z2_0Ox|Q8PVblp9N${kXkpsNVa^tNWhof)8x8&VxywcJz#7&P&d8vvxn` zt75mu>yV=Dl#SuiV!^1BPh5R)`}k@Nr2+s8VGp?%Le>+fa{3&(XYi~{k{ z-u4#CgYIdhp~GxLC+_wT%I*)tm4=w;ErgmAt<5i6c~)7JD2olIaK8by{u-!tZWT#RQddptXRfEZxmfpt|@bs<*uh?Y_< zD>W09Iy4iM@@80&!e^~gj!N`3lZwosC!!ydvJtc0nH==K)v#ta_I}4Tar|;TLb|+) zSF(;=?$Z0?ZFdG6>Qz)6oPM}y1&zx_Mf`A&chb znSERvt9%wdPDBIU(07X+CY74u`J{@SSgesGy~)!Mqr#yV6$=w-dO;C`JDmv=YciTH zvcrN1kVvq|(3O)NNdth>X?ftc`W2X|FGnWV%s})+uV*bw>aoJ#0|$pIqK6K0Lw!@- z3pkPbzd`ljS=H2Bt0NYe)u+%kU%DWwWa>^vKo=lzDZHr>ruL5Ky&#q7davj-_$C6J z>V8D-XJ}0cL$8}Xud{T_{19#W5y}D9HT~$&YY-@=Th219U+#nT{tu=d|B)3K`pL53 zf7`I*|L@^dPEIDJkI3_oA9vsH7n7O}JaR{G~8 zfi$?kmKvu20(l`dV7=0S43VwVKvtF!7njv1Q{Ju#ysj=|dASq&iTE8ZTbd-iiu|2& zmll%Ee1|M?n9pf~?_tdQ<7%JA53!ulo1b^h#s|Su2S4r{TH7BRB3iIOiX5|vc^;5( zKfE1+ah18YA9o1EPT(AhBtve5(%GMbspXV)|1wf5VdvzeYt8GVGt0e*3|ELBhwRaO zE|yMhl;Bm?8Ju3-;DNnxM3Roelg`^!S%e({t)jvYtJCKPqN`LmMg^V&S z$9OIFLF$%Py~{l?#ReyMzpWixvm(n(Y^Am*#>atEZ8#YD&?>NUU=zLxOdSh0m6mL? z_twklB0SjM!3+7U^>-vV=KyQZI-6<(EZiwmNBzGy;Sjc#hQk%D;bay$v#zczt%mFCHL*817X4R;E$~N5(N$1Tv{VZh7d4mhu?HgkE>O+^-C*R@ zR0ima8PsEV*WFvz`NaB+lhX3&LUZcWWJJrG7ZjQrOWD%_jxv=)`cbCk zMgelcftZ%1-p9u!I-Zf_LLz{hcn5NRbxkWby@sj2XmYfAV?iw^0?hM<$&ZDctdC`; zsL|C-7d;w$z2Gt0@hsltNlytoPnK&$>ksr(=>!7}Vk#;)Hp)LuA7(2(Hh(y3LcxRY zim!`~j6`~B+sRBv4 z<#B{@38kH;sLB4eH2+8IPWklhd25r5j2VR}YK$lpZ%7eVF5CBr#~=kUp`i zlb+>Z%i%BJH}5dmfg1>h7U5Q(-F{1d=aHDbMv9TugohX5lq#szPAvPE|HaokMQIi_ zTcTNsO53(oX=hg2w!XA&+qP}nwr$(C)pgG8emS@Mf7m0&*kiA!wPLS`88c=aD$niJ zp?3j%NI^uy|5*MzF`k4hFbsyQZ@wu!*IY+U&&9PwumdmyfL(S0#!2RFfmtzD3m9V7 zsNOw9RQofl-XBfKBF^~~{oUVouka#r3EqRf=SnleD=r1Hm@~`y8U7R)w16fgHvK-6?-TFth)f3WlklbZh+}0 zx*}7oDF4U^1tX4^$qd%987I}g;+o0*$Gsd=J>~Uae~XY6UtbdF)J8TzJXoSrqHVC) zJ@pMgE#;zmuz?N2MIC+{&)tx=7A%$yq-{GAzyz zLzZLf=%2Jqy8wGHD;>^x57VG)sDZxU+EMfe0L{@1DtxrFOp)=zKY1i%HUf~Dro#8} zUw_Mj10K7iDsX}+fThqhb@&GI7PwONx!5z;`yLmB_92z0sBd#HiqTzDvAsTdx+%W{ z2YL#U=9r!@3pNXMp_nvximh+@HV3psUaVa-lOBekVuMf1RUd26~P*|MLouQrb}XM-bEw(UgQxMI6M&l3Nha z{MBcV=tl(b_4}oFdAo}WX$~$Mj-z70FowdoB{TN|h2BdYs?$imcj{IQpEf9q z)rzpttc0?iwopSmEoB&V!1aoZqEWEeO-MKMx(4iK7&Fhc(94c zdy}SOnSCOHX+A8q@i>gB@mQ~Anv|yiUsW!bO9hb&5JqTfDit9X6xDEz*mQEiNu$ay zwqkTV%WLat|Ar+xCOfYs0UQNM`sdsnn*zJr>5T=qOU4#Z(d90!IL76DaHIZeWKyE1 zqwN%9+~lPf2d7)vN2*Q?En?DEPcM+GQwvA<#;X3v=fqsxmjYtLJpc3)A8~*g(KqFx zZEnqqruFDnEagXUM>TC7ngwKMjc2Gx%#Ll#=N4qkOuK|;>4%=0Xl7k`E69@QJ-*Vq zk9p5!+Ek#bjuPa<@Xv7ku4uiWo|_wy)6tIr`aO!)h>m5zaMS-@{HGIXJ0UilA7*I} z?|NZ!Tp8@o-lnyde*H+@8IHME8VTQOGh96&XX3E+}OB zA>VLAGW+urF&J{H{9Gj3&u+Gyn?JAVW84_XBeGs1;mm?2SQm9^!3UE@(_FiMwgkJI zZ*caE={wMm`7>9R?z3Ewg!{PdFDrbzCmz=RF<@(yQJ_A6?PCd_MdUf5vv6G#9Mf)i#G z($OxDT~8RNZ>1R-vw|nN699a}MQN4gJE_9gA-0%>a?Q<9;f3ymgoi$OI!=aE6Elw z2I`l!qe-1J$T$X&x9Zz#;3!P$I);jdOgYY1nqny-k=4|Q4F!mkqACSN`blRji>z1` zc8M57`~1lgL+Ha%@V9_G($HFBXH%k;Swyr>EsQvg%6rNi){Tr&+NAMga2;@85531V z_h+h{jdB&-l+%aY{$oy2hQfx`d{&?#psJ78iXrhrO)McOFt-o80(W^LKM{Zw93O}m z;}G!51qE?hi=Gk2VRUL2kYOBRuAzktql%_KYF4>944&lJKfbr+uo@)hklCHkC=i)E zE*%WbWr@9zoNjumq|kT<9Hm*%&ahcQ)|TCjp@uymEU!&mqqgS;d|v)QlBsE0Jw|+^ zFi9xty2hOk?rlGYT3)Q7i4k65@$RJ-d<38o<`}3KsOR}t8sAShiVWevR8z^Si4>dS z)$&ILfZ9?H#H&lumngpj7`|rKQQ`|tmMmFR+y-9PP`;-425w+#PRKKnx7o-Rw8;}*Ctyw zKh~1oJ5+0hNZ79!1fb(t7IqD8*O1I_hM;o*V~vd_LKqu7c_thyLalEF8Y3oAV=ODv z$F_m(Z>ucO(@?+g_vZ`S9+=~Msu6W-V5I-V6h7->50nQ@+TELlpl{SIfYYNvS6T6D z`9cq=at#zEZUmTfTiM3*vUamr!OB~g$#?9$&QiwDMbSaEmciWf3O2E8?oE0ApScg38hb&iN%K+kvRt#d))-tr^ zD+%!d`i!OOE3in0Q_HzNXE!JcZ<0;cu6P_@;_TIyMZ@Wv!J z)HSXAYKE%-oBk`Ye@W3ShYu-bfCAZ}1|J16hFnLy z?Bmg2_kLhlZ*?`5R8(1%Y?{O?xT)IMv{-)VWa9#1pKH|oVRm4!lLmls=u}Lxs44@g^Zwa0Z_h>Rk<(_mHN47=Id4oba zQ-=qXGz^cNX(b*=NT0<^23+hpS&#OXzzVO@$Z2)D`@oS=#(s+eQ@+FSQcpXD@9npp zlxNC&q-PFU6|!;RiM`?o&Sj&)<4xG3#ozRyQxcW4=EE;E)wcZ&zUG*5elg;{9!j}I z9slay#_bb<)N!IKO16`n3^@w=Y%duKA-{8q``*!w9SW|SRbxcNl50{k&CsV@b`5Xg zWGZ1lX)zs_M65Yt&lO%mG0^IFxzE_CL_6$rDFc&#xX5EXEKbV8E2FOAt>Ka@e0aHQ zMBf>J$FLrCGL@$VgPKSbRkkqo>sOXmU!Yx+Dp7E3SRfT`v~!mjU3qj-*!!YjgI*^) z+*05x78FVnVwSGKr^A|FW*0B|HYgc{c;e3Ld}z4rMI7hVBKaiJRL_e$rxDW^8!nGLdJ<7ex9dFoyj|EkODflJ#Xl`j&bTO%=$v)c+gJsLK_%H3}A_} z6%rfG?a7+k7Bl(HW;wQ7BwY=YFMSR3J43?!;#~E&)-RV_L!|S%XEPYl&#`s!LcF>l zn&K8eemu&CJp2hOHJKaYU#hxEutr+O161ze&=j3w12)UKS%+LAwbjqR8sDoZHnD=m0(p62!zg zxt!Sj65S?6WPmm zL&U9c`6G}T`irf=NcOiZ!V)qhnvMNOPjVkyO2^CGJ+dKTnNAPa?!AxZEpO7yL_LkB zWpolpaDfSaO-&Uv=dj7`03^BT3_HJOAjn~X;wz-}03kNs@D^()_{*BD|0mII!J>5p z1h06PTyM#3BWzAz1FPewjtrQfvecWhkRR=^gKeFDe$rmaYAo!np6iuio3>$w?az$E zwGH|zy@OgvuXok}C)o1_&N6B3P7ZX&-yimXc1hAbXr!K&vclCL%hjVF$yHpK6i_Wa z*CMg1RAH1(EuuA01@lA$sMfe*s@9- z$jNWqM;a%d3?(>Hzp*MiOUM*?8eJ$=(0fYFis!YA;0m8s^Q=M0Hx4ai3eLn%CBm14 zOb8lfI!^UAu_RkuHmKA-8gx8Z;##oCpZV{{NlNSe<i;9!MfIN!&;JI-{|n{(A19|s z9oiGesENcLf@NN^9R0uIrgg(46r%kjR{0SbnjBqPq()wDJ@LC2{kUu_j$VR=l`#RdaRe zxx;b7bu+@IntWaV$si1_nrQpo*IWGLBhhMS13qH zTy4NpK<-3aVc;M)5v(8JeksSAGQJ%6(PXGnQ-g^GQPh|xCop?zVXlFz>42%rbP@jg z)n)% zM9anq5(R=uo4tq~W7wES$g|Ko z1iNIw@-{x@xKxSXAuTx@SEcw(%E49+JJCpT(y=d+n9PO0Gv1SmHkYbcxPgDHF}4iY zkXU4rkqkwVBz<{mcv~A0K|{zpX}aJcty9s(u-$je2&=1u(e#Q~UA{gA!f;0EAaDzdQ=}x7g(9gWrWYe~ zV98=VkHbI!5Rr;+SM;*#tOgYNlfr7;nLU~MD^jSdSpn@gYOa$TQPv+e8DyJ&>aInB zDk>JmjH=}<4H4N4z&QeFx>1VPY8GU&^1c&71T*@2#dINft%ibtY(bAm%<2YwPL?J0Mt{ z7l7BR718o5=v|jB!<7PDBafdL>?cCdVmKC;)MCOobo5edt%RTWiReAMaIU5X9h`@El0sR&Z z7Ed+FiyA+QAyWn zf7=%(8XpcS*C4^-L24TBUu%0;@s!Nzy{e95qjgkzElf0#ou`sYng<}wG1M|L? zKl6ITA1X9mt6o@S(#R3B{uwJI8O$&<3{+A?T~t>Kapx6#QJDol6%?i-{b1aRu?&9B z*W@$T*o&IQ&5Kc*4LK_)MK-f&Ys^OJ9FfE?0SDbAPd(RB)Oju#S(LK)?EVandS1qb#KR;OP|86J?;TqI%E8`vszd&-kS%&~;1Als=NaLzRNnj4q=+ zu5H#z)BDKHo1EJTC?Cd_oq0qEqNAF8PwU7fK!-WwVEp4~4g z3SEmE3-$ddli))xY9KN$lxEIfyLzup@utHn=Q{OCoz9?>u%L^JjClW$M8OB`txg4r6Q-6UlVx3tR%%Z!VMb6#|BKRL`I))#g zij8#9gk|p&Iwv+4s+=XRDW7VQrI(+9>DikEq!_6vIX8$>poDjSYIPcju%=qluSS&j zI-~+ztl1f71O-B+s7Hf>AZ#}DNSf`7C7*)%(Xzf|ps6Dr7IOGSR417xsU=Rxb z1pgk9vv${17h7mZ{)*R{mc%R=!i}8EFV9pl8V=nXCZruBff`$cqN3tpB&RK^$yH!A8RL zJ5KltH$&5%xC7pLZD}6wjD2-uq3&XL8CM$@V9jqalF{mvZ)c4Vn?xXbvkB(q%xbSdjoXJXanVN@I;8I`)XlBX@6BjuQKD28Jrg05} z^ImmK-Ux*QMn_A|1ionE#AurP8Vi?x)7jG?v#YyVe_9^up@6^t_Zy^T1yKW*t* z&Z0+0Eo(==98ig=^`he&G^K$I!F~1l~gq}%o5#pR6?T+ zLmZu&_ekx%^nys<^tC@)s$kD`^r8)1^tUazRkWEYPw0P)=%cqnyeFo3nW zyV$^0DXPKn5^QiOtOi4MIX^#3wBPJjenU#2OIAgCHPKXv$OY=e;yf7+_vI7KcjKq% z?RVzC24ekYp2lEhIE^J$l&wNX0<}1Poir8PjM`m#zwk-AL0w6WvltT}*JN8WFmtP_ z6#rK7$6S!nS!}PSFTG6AF7giGJw5%A%14ECde3x95(%>&W3zUF!8x5%*h-zk8b@Bz zh`7@ixoCVCZ&$$*YUJpur90Yg0X-P82>c~NMzDy7@Ed|6(#`;{)%t7#Yb>*DBiXC3 zUFq(UDFjrgOsc%0KJ_L;WQKF0q!MINpQzSsqwv?#Wg+-NO; z84#4nk$+3C{2f#}TrRhin=Erdfs77TqBSvmxm0P?01Tn@V(}gI_ltHRzQKPyvQ2=M zX#i1-a(>FPaESNx+wZ6J{^m_q3i})1n~JG80c<%-Ky!ZdTs8cn{qWY%x%X^27-Or_ z`KjiUE$OG9K4lWS16+?aak__C*)XA{ z6HmS*8#t_3dl}4;7ZZgn4|Tyy1lOEM1~6Qgl(|BgfQF{Mfjktch zB5kc~4NeehRYO%)3Z!FFHhUVVcV@uEX$eft5Qn&V3g;}hScW_d)K_h5i)vxjKCxcf zL>XlZ^*pQNuX*RJQn)b6;blT3<7@Ap)55)aK3n-H08GIx65W zO9B%gE%`!fyT`)hKjm-&=on)l&!i-QH+mXQ&lbXg0d|F{Ac#U;6b$pqQcpqWSgAPo zmr$gOoE*0r#7J=cu1$5YZE%uylM!i3L{;GW{ae9uy)+EaV>GqW6QJ)*B2)-W`|kLL z)EeeBtpgm;79U_1;Ni5!c^0RbG8yZ0W98JiG~TC8rjFRjGc6Zi8BtoC);q1@8h7UV zFa&LRzYsq%6d!o5-yrqyjXi>jg&c8bu}{Bz9F2D(B%nnuVAz74zmBGv)PAdFXS2(A z=Z?uupM2f-ar0!A)C6l2o8a|+uT*~huH)!h3i!&$ zr>76mt|lwexD(W_+5R{e@2SwR15lGxsnEy|gbS-s5?U}l*kcfQlfnQKo5=LZXizrL zM=0ty+$#f_qGGri-*t@LfGS?%7&LigUIU#JXvwEdJZvIgPCWFBTPT`@Re5z%%tRDO zkMlJCoqf2A=hkU7Ih=IxmPF~fEL90)u76nfFRQwe{m7b&Ww$pnk~$4Lx#s9|($Cvt ze|p{Xozhb^g1MNh-PqS_dLY|Fex4|rhM#lmzq&mhebD$5P>M$eqLoV|z=VQY{)7&sR#tW zl(S1i!!Rrg7kv+V@EL51PGpm511he%MbX2-Jl+DtyYA(0gZyZQjPZP@`SAH{n&25@ zd)emg(p2T3$A!Nmzo|%=z%AhLX)W4hsZNFhmd4<1l6?b3&Fg)G(Zh%J{Cf8Q;?_++ zgO7O<(-)H|Es@QqUgcXNJEfC-BCB~#dhi6ADVZtL!)Mx|u7>ukD052z!QZ5UC-+rd zYXWNRpCmdM{&?M9OMa;OiN{Y#0+F>lBQ=W@M;OXq;-7v3niC$pM8p!agNmq7F04;| z@s-_98JJB&s`Pr6o$KZ=8}qO*7m6SMp7kVmmh$jfnG{r@O(auI7Z^jj!x}NTLS9>k zdo}&Qc2m4Ws3)5qFw#<$h=g%+QUKiYog33bE)e4*H~6tfd42q+|FT5+vmr6Y$6HGC zV!!q>B`1Ho|6E|D<2tYE;4`8WRfm2#AVBBn%_W)mi(~x@g;uyQV3_)~!#A6kmFy0p zY~#!R1%h5E{5;rehP%-#kjMLt*{g((o@0-9*8lKVu+t~CtnOxuaMgo2ssI6@kX09{ zkn~q8Gx<6T)l}7tWYS#q0&~x|-3ho@l}qIr79qOJQcm&Kfr7H54=BQto0)vd1A_*V z)8b2{xa5O^u95~TS=HcJF5b9gMV%&M6uaj<>E zPNM~qGjJ~xbg%QTy#(hPtfc46^nN=Y_GmPYY_hTL{q`W3NedZyRL^kgU@Q$_KMAjEzz*eip`3u6AhPDcWXzR=Io5EtZRPme>#K9 z4lN&87i%YYjoCKN_z9YK+{fJu{yrriba#oGM|2l$ir017UH86Eoig3x+;bz32R*;n zt)Eyg#PhQbbGr^naCv0?H<=@+Poz)Xw*3Gn00qdSL|zGiyYKOA0CP%qk=rBAlt~hr zEvd3Z4nfW%g|c`_sfK$z8fWsXTQm@@eI-FpLGrW<^PIjYw)XC-xFk+M<6>MfG;WJr zuN}7b;p^`uc0j(73^=XJcw;|D4B(`)Flm|qEbB?>qBBv2V?`mWA?Q3yRdLkK7b}y& z+!3!JBI{+&`~;%Pj#n&&y+<;IQzw5SvqlbC+V=kLZLAHOQb zS{{8E&JXy1p|B&$K!T*GKtSV^{|Uk;`oE*F;?@q1dX|>|KWb@|Dy*lbGV0Gx;gpA$ z*N16`v*gQ?6Skw(f^|SL;;^ox6jf2AQ$Zl?gvEV&H|-ep*hIS@0TmGu1X1ZmEPY&f zKCrV{UgRAiNU*=+Uw%gjIQhTAC@67m)6(_D+N>)(^gK74F%M2NUpWpho}aq|Kxh$3 zz#DWOmQV4Lg&}`XTU41Z|P~5;wN2c?2L{a=)Xi~!m#*=22c~&AW zgG#yc!_p##fI&E{xQD9l#^x|9`wSyCMxXe<3^kDIkS0N>=oAz7b`@M>aT?e$IGZR; zS;I{gnr4cS^u$#>D(sjkh^T6_$s=*o%vNLC5+6J=HA$&0v6(Y1lm|RDn&v|^CTV{= zjVrg_S}WZ|k=zzp>DX08AtfT@LhW&}!rv^);ds7|mKc5^zge_Li>FTNFoA8dbk@K$ zuuzmDQRL1leikp%m}2_`A7*7=1p2!HBlj0KjPC|WT?5{_aa%}rQ+9MqcfXI0NtjvXz1U)|H>0{6^JpHspI4MfXjV%1Tc1O!tdvd{!IpO+@ z!nh()i-J3`AXow^MP!oVLVhVW&!CDaQxlD9b|Zsc%IzsZ@d~OfMvTFXoEQg9Nj|_L zI+^=(GK9!FGck+y8!KF!nzw8ZCX>?kQr=p@7EL_^;2Mlu1e7@ixfZQ#pqpyCJ```(m;la2NpJNoLQR};i4E;hd+|QBL@GdQy(Cc zTSgZ)4O~hXj86x<7&ho5ePzDrVD`XL7{7PjjNM1|6d5>*1hFPY!E(XDMA+AS;_%E~ z(dOs)vy29&I`5_yEw0x{8Adg%wvmoW&Q;x?5`HJFB@KtmS+o0ZFkE@f)v>YYh-z&m z#>ze?@JK4oE7kFRFD%MPC@x$^p{aW}*CH9Y_(oJ~St#(2)4e-b34D>VG6giMGFA83 zpZTHM2I*c8HE}5G;?Y7RXMA2k{Y?RxHb2 zZFQv?!*Kr_q;jt3`{?B5Wf}_a7`roT&m1BN9{;5Vqo6JPh*gnN(gj}#=A$-F(SRJj zUih_ce0f%K19VLXi5(VBGOFbc(YF zLvvOJl+W<}>_6_4O?LhD>MRGlrk;~J{S#Q;Q9F^;Cu@>EgZAH=-5fp02(VND(v#7n zK-`CfxEdonk!!65?3Ry(s$=|CvNV}u$5YpUf?9kZl8h@M!AMR7RG<9#=`_@qF@})d ztJDH>=F!5I+h!4#^DN6C$pd6^)_;0Bz7|#^edb9_qFg&eI}x{Roovml5^Yf5;=ehZ zGqz-x{I`J$ejkmGTFipKrUbv-+1S_Yga=)I2ZsO16_ye@!%&Op^6;#*Bm;=I^#F;? z27Sz-pXm4x-ykSW*3`)y4$89wy6dNOP$(@VYuPfb97XPDTY2FE{Z+{6=}LLA23mAc zskjZJ05>b)I7^SfVc)LnKW(&*(kP*jBnj>jtph`ZD@&30362cnQpZW8juUWcDnghc zy|tN1T6m?R7E8iyrL%)53`ymXX~_;#r${G`4Q(&7=m7b#jN%wdLlS0lb~r9RMdSuU zJ{~>>zGA5N`^QmrzaqDJ(=9y*?@HZyE!yLFONJO!8q5Up#2v>fR6CkquE$PEcvw5q zC8FZX!15JgSn{Gqft&>A9r0e#be^C<%)psE*nyW^e>tsc8s4Q}OIm})rOhuc{3o)g1r>Q^w5mas) zDlZQyjQefhl0PmH%cK05*&v{-M1QCiK=rAP%c#pdCq_StgDW}mmw$S&K6ASE=`u4+ z5wcmtrP27nAlQCc4qazffZoFV7*l2=Va}SVJD6CgRY^=5Ul=VYLGqR7H^LHA;H^1g}ekn=4K8SPRCT+pel*@jUXnLz+AIePjz@mUsslCN2 z({jl?BWf&DS+FlE5Xwp%5zXC7{!C=k9oQLP5B;sLQxd`pg+B@qPRqZ6FU(k~QkQu{ zF~5P=kLhs+D}8qqa|CQo2=cv$wkqAzBRmz_HL9(HRBj&73T@+B{(zZahlkkJ>EQmQ zenp59dy+L;sSWYde!z_W+I~-+2Xnm;c;wI_wH=RTgxpMlCW@;Us*0}L74J#E z8XbDWJGpBscw?W$&ZxZNxUq(*DKDwNzW7_}AIw$HF6Ix|;AJ3t6lN=v(c9=?n9;Y0 zK9A0uW4Ib9|Mp-itnzS#5in=Ny+XhGO8#(1_H4%Z6yEBciBiHfn*h;^r9gWb^$UB4 zJtN8^++GfT`1!WfQt#3sXGi-p<~gIVdMM<#ZZ0e_kdPG%Q5s20NNt3Jj^t$(?5cJ$ zGZ#FT(Lt>-0fP4b5V3az4_byF12k%}Spc$WsRydi&H|9H5u1RbfPC#lq=z#a9W(r1 z!*}KST!Yhsem0tO#r!z`znSL-=NnP~f(pw-sE+Z$e7i7t9nBP^5ts1~WFmW+j+<@7 zIh@^zKO{1%Lpx^$w8-S+T_59v;%N;EZtJzcfN%&@(Ux5 z@YzX^MwbbXESD*d(&qT7-eOHD6iaH-^N>p2sVdq&(`C$;?#mgBANIc5$r| z^A$r)@c{Z}N%sbfo?T`tTHz9-YpiMW?6>kr&W9t$Cuk{q^g1<$I~L zo++o2!!$;|U93cI#p4hyc!_Mv2QKXxv419}Ej#w#%N+YIBDdnn8;35!f2QZkUG?8O zpP47Wf9rnoI^^!9!dy~XsZ&!DU4bVTAi3Fc<9$_krGR&3TI=Az9uMgYU5dd~ksx+} zP+bs9y+NgEL>c@l>H1R%@>5SWg2k&@QZL(qNUI4XwDl6(=!Q^U%o984{|0e|mR$p+ z9BcwttR#7?As?@Q{+j?K6H7R71PuiA^Dl$=f47nUKL|koCwutc_P<-m{|Al3C~o7w z=4S=}s5LcJFT1zjS)+10X_r$74`K78pz!nGGH%JV%w75!YSIt#hT7}}K>+@{{a+Im z5p#6%^X*txY?}|T17xWW*sa^?G2QHt#@tlcw0GIcy;|NR2vaCBDvn=`h)1il7E5Rx z%)mA4$`$OZx)NF5vXZnaJ1)*cA6ryx6Ll~t!LzhxvcTedxT;>JS&e=?-&DXUPaQ2~ zH*69ezE`hgV{K-|0z|m~ld}=X^-Ob={wpex&}*+Rz{gx)G}gn!C_VN{UN=>^EV=Xc zr$-HO09cW&p4^M}V3yBjTP_xrVcc8iU_^Y-JD~(bgw*@GXGB1gYKz5DWO+O`>})|N zWrC)MR93yA)3{&27-M)TJB6Ml3~?zZg#mYsF=#OSTaw&K z@hBftpt+2l@)YK@|3DvTjl(8wZtpLp9Ik!6G$CSL_idZ$Ti?R)4toe8bb)l|)lNb}?K;O2K9vyn1QG zd=v#y-Ld49UVkmfRU>Egc+(Y$^-;6vW;3Lcu*6~etz}0|@+b|+!UCal)DEYGLbHWJ zll5Wi^$Y<6@S%^y%hdjRh6&{!z1Py|lZ|q&Wub3l41uN2zEF8E&5H5?PL*&V}?*a}Lp% zCYi{ghjpRNT^^B+_U59No50Ghih5qn(W5`RkrsDWr{~A1dgtv{sRkH4RU2^A{jb&0 zxVRnrm|u<;$iI;M6A>$POP)TWGU-gSjAERk*EGmVT(aw$!XUSe~7Ql-oRA54^4V(JWS6Q1mG?!vZ zx+pE!FEtvqr|Xrcb3oR`%LHFLmU_&{=p%mGy6MRe2Yz_5WJ8p@IgU2 zdVvvhhQtiQkChK%*&PsiPCBL9oDOoJX8!$S(V>R}+1M}wzK*U*A{KJ`r=lM;mPrKU zQDqqN(W*u-5-?$(SIk<6A0E}34y&@-IVC%S!a1F4kz<3bIKjlyD)ooO_7ftl%S_(6w`!vX&1PZ!K`@D@L6JR)6zO@Dl!YF{RY}d3HZ7?Q5E>w=$ ze)H_)48Ds*Ov4?zoGb2fe3}{!5Ooc|KCIni1o)(Gj+CO?`*7jsV`hIv@8J(22o4Q? zu?Bvi)zDG(me?7XKeL|iF9ZRgZdT*}Ffsl62Cu;{Gv9j6dO zPt*H2GqC)-C`V`ceuu=tM{7!2yTEj=*5+T~5DYiZ)Hy)*PARYI6R2lZXoOj;v8M4W z*O-NX(7_~Q&A3>Oaw&1lBH_H%SwmISX-i3)HfHvBOeVwTT{LUM3}ZuZmg<(>)KE;d zbs2!0v6>J;1nQ0UJkUxnkE@Ibi~Q}M=-=Rk;hcOnxO$luOKEVxZc|!XECgex(2`}T z3Y;Q_6rL)e+SrOZhQj5_e}Lv>w7n*Pep$yWZNQl>ubBgb_NIWWDn3kNpn+MPQXV;8 zV|_Ba5jsQ(w&Ey^IM|@|y!AqcJ#3m0#Q6_qvgCG~eoF#mnGmbO(;DP+bW%_aOs1R_ z@9p#7X2UA^--#Nwx_Hvk2l1`eO{P*#j@q2UELtH|Uh6hxR`h_847wIJo0=5CQQ`6it|%a-I$^&a@we1rc&*;QIu5Ck^?) zx*5eSd*mG#=6Hi(5!;5uUi&{HfnT1S8X-)?gE5CZ6KWoqM5|CyrULmuFBKOU8SOp* z{IB1$OCcq`S-k*xs;4fmhKsIGZ;GYAY*%(@875NxhMq|j*m4CNLI(Vho|N|F);!E0cS5y^$H^Izje?z}oTgyr`9x9G&rlJZw&uqIoBMtz zzhU0(9;w02?m#0!)cFi*r+8YvooQ;(s2lLVvyLqAE%Xqe!vtWbIs!l1Bpp(FIht-Z zPn#CN-2C|J*GhA2fuHqYQ2mJiXlGTzD}mkr2;ia8Wp}h^;OS7+N^Mw|en!1${vN6 z-x{8N*4UekA~`IV2&K-GzhAqau|}d*pEQ$1MH$cFi03OG^1NetZ_jW^STaEzr&Xho zB452St%v3ez2#TFm~`gZh$vi=in+y2d!z<{OZ~Kty-5bQ;0O=k_ESi8Nx9{*T`LJy6jqR>&|+>OZ;+=0hA04 zE25t^sE9HG)3^KKR_A5WDkqispweP9!I-@dCO&N!JrD@i{WBHnfQ z95o8;d$`AFnca3;N-0iX-CmbbAp5yQ!GoH;h7Cn?m{ammZJI8igP{U73lFnl2&gCs zqJ4(Vo~^j`{zOAzScL5B_Sm?Mjtek1d(A6X5ObcZi$;aOYy|g$}BY z$GEP3#i60Ju_&3SHzryH!gUFwC9-295u??cf+aYRQ1$+!rc#42YNattd6mZEFI@?C zqFM>6+zxEunIHDZ>{Z15u##>N(28Dw!>G(k*dB{NHvip@aP}f`@=Q;!o;zRMWo{Cx zo?kyzh8n7#f1g0&g>Cd>O-2g?uPwy8sy8hZbHSsXPmU;@l=HL=zm7mN(=@*|D$i+u zs~TllkCTvD$f&-#b9B?}#Lg*-ibK13R_a$RyoN3m5`10tdhAq{+VW)K#Bht-ra1*J z+n$N%V>u0rVtx`aKJDwXXrxaD7nS<>$=c82v7@KVx^S@vT;h=SZE37K>iahpx3;VDzEr9GY=2(%uaqM;^76eSP0QLzo4sI z>p_Eei*T$K;|qK`sq;?Hesp}(@VvX2Q4sAMYAJ}b&d$htDMC{FG-$o4k9ApECi1$a zXdamjiOGKHBh(4M<3(2x6n-CrmZMCknkQxdSS!qlis#I}btfX;J`JU3RlvtLdrymP zG0ZzrsGXVFiq+Wk1=BFay&9ZiCE#(`h~CL+c-Hs@iGTU@YxM%vlg;)`Tf~IknA^02 zXkN#Txo6aR{j$wP5T#|UH#5AP2{rSY8p?jKFv zG3kn3y`FaV!*Jq%m39_TQEhD>M@l*bhEPGe1{ft3q#K5AknT=F2_=T^l#ou5ln@D# z5Tzs(kRG@qNDa~HLNvfv7Z0g=bSlb?`QAx|Gfoni|iHJ%K0cy z;~Nsaa+{8HP_qrb{nj+xzkdYhSI@W4N_1`z(eSGIkbDP)!Ko|M%}Rqp(~KI2hl~eE zvJ!j4m6iwMgKy>fkCLC)`M$z9EV}B+sq1}}kVf$(ig0pWTY?rHz1Sm=4srTGNb^JG z=2$9wz-C@aZZZ2!HY#HNejqZRmE=pN(D$Kui$NpfhU`!y_s{@MIxiJdHb1|{6xb`> zE74_@QtgtG{4=3P1$^vn&m}7Aw8!1DnT$2thO#~44wl(N#ao8S0@t@m+Z!KD2CfK; z)n5DAPKV_etmH1aLDK$?`;sL91iVt$D z*SG}=-LIAg(*+JON!-5ivqOMQ1S!OQUgHglDsKik&Mwg;vva523`JwQH6SRz9eTY# zTIi23145~kc3r1mSWC_RzD%hs$S#!pkI9!BU80jJCJcwo*FZolQG$q`8C1d9pP@ND zG^&-ZraIvhg_FDVSfKGwkcI=avIan%2sK4coUs~Nr8jC*&!G0#?}_^s3r-c}-uAqi zM-Lw>Y}I``T;IS%Y|qH;s{F*ZefM!4{I5awr!K+T@uPd*Vu*iPWI}>(-D{zxsN>LG z=@747a_Rb2>q?y8xYf?dq2HM5tFO8Y5e4N;Y=xy8yAhI zsm>oy%R5;7)7T3V_b2%`aH^tNlsQpFxIFW#iV#8?{6{^cGr{A0@1bA)|K z>MMTuZD(pd2t|7vmHtywGXb%%=)S<`OG~}U+jm#xd%H8 z$v8-C%F?ah3$;hn?{G3(LT!SgvCVi$vwsZssAQvUwT`Q%qSw!LSd!(I!64w1=%Sc1Mck)q1@pZ@)=SY zoX}d+L3-RA|c?G3_BQNm&( z!i$AZ7cI(z7q|e9VM##6T3Xorj1JG(9os$;(I$y%mBy(#8{|3l4|x*oBAQL^XhZ0g zy1FR1teRrpKq{uLAibTLx#n({qwjlkOvR{OdSAeT5ah4-sNN)n4Clg1T9lzF)&yj; zyal1%+s4n1IG;^VPWJ;#olpk8Z42Gj-tjFeQ&PlxB)`oCNoUYKj4U$AeG8rYiD{pK zndDf&2;2;)D|KvOZP+e7fcPU9k4M2sfhr@vC~Ly0?S-4dz)ZGAYpCsAhChgbxLd4g zhTrbIPkO5SEp_kD>Ha0m12h5n3s;mE8kn515&nzSf+^D= zyE{JnJ;43l&BH55CL<=W%CF;6iUI)V5C*6!`**KqvzR2=Fj*3Y4`HYwx}TYD445(K z-QtXwtL?m*(F=LVH*H4oM>dXHBW=38q_dZ-_Vr&qpEPxd9Fs95P5W~@Z|Rt+WZP6l zPSQ}~Dh4V?Pp1g&Hk*Px?lm16C@X6M29Vrk%Rw@E||E-v~$ zb_E~{z<}#8i`Mx9mkqtd#Z1lZ-E_J8I+2oumc#x1)jdvh{W76NKm6x-RYpM~v!P8$ zw3e|YVf|}Hse9~oC@N7^j}Fi$hNpyaYnu1}bdXsD=^oI*%WKvbme|BI}$G3>smu#6y)ls|j? zF7Bhu9Z)j)C;3cZb+I>0stSK^WLOYV^U{pUYkgv>?+Nt^5j*CUB=eGw-CvU&40>y~ zGoHLXxY^7k5Xgv62{iQy|5jJQuq0|LU`}lE@flQ2Z*Zn*VWcQjm4FTb>LSVox^S4q zLn`LfS@mrjKCmg$nb^af?d?0&$aX6#2u(JyzIJvuJ*lwPrh|0~aEnSACCTezSdG%h zmSQg`17j@$Iq)r1&?+eR@1nlX|H`<}_!?BQSF&N+QQnvEAqZe+mIFui!0V49R?|9*$ zv!K1A01{8xq;L()Tv*Qk0-$Oj6+vCT*TUD{HvxO@3JjxBwM!4g3ydy&eaJw4CoQBF zJtULJ!YxgNR7_Ls%LmogyI7uIs=!B&?=MYY^yX+v;j@D_xGeZg>eZk0C;4e|HRNSi z6KlD9>q=3v-$4Zik&^ZDhNm1X)+7LCH1k!s+T3tn zUn@={1U&NJLq@K?~w|(=Y<4W{ucX}FdRr6pLw(l2$iK)At%t3gYBMlJz#(K0Nqm;=KAML!&MMSNz=%k=j*zh77r34Rs37iCY` z=_kva_41bdrj(b=4Wc5MO0~q^z#pIWJ>)vDSgIQF=3JVJe1iDy%h)8oNy{s_r&;m` zL{DYKSB_5xRb9xKNOS{qAY3qv5sSXVrrf%~*q5HO|CQ&lbKMePa$M5D{vlJcoGrCZ zD?fKbZN$6rWwz)w7`9h4DAmh1ij2}EO|bO#A9L0_RW6l*$sPPUJrUbhLC75L9%W5iO$Iw5~Yut-qBeu~hF|xD7-eQ%l z412vpq_;t%^F*pYDk%Q35c-erK|6Ve=FxQbAv~ikZ4c9$Y4;ee#ciOD9{yRqf55Qk zumv}#+JciT|Gj$uFOxBUze)=?l{B}qaC0_7m`t82<$K53!4Xvi9Tr)ADp3Off?O8o zVDG0Yx|tfn@r((m?Nxrh(b0DGjg)$;DfO&$6uY;4&F!4jnxkhP}Y3x zS?WFFt>=HWzqlQhffVfvM$Ta8Sg*r3j!Eo&rUOW7SCL2~lG7<+XZ;+{&8h5g8ElI+P>>yR2U%S93NN!Xhm|C682t6ysH-=o1=Bd*N*VlnG%l+KZFtjG`UkL;%65qn0UYQ`h zh0{9jDQx(`aBe7J0Aj3Z)4}`A|4OMM0a;?{j}qkYwi)~O8$9D}ITiMH2buiU>ixYp zhL${nwj6X($*OwmpVG`y5b6v45tX*J8?og}Qju6eJ9H}`X87iEd%BUo7<`2q(HJx+ zMR}d-J4oAf{V1W^a2~`M-YAdZ81dd4o6NPO{cmZaAS@RS4ir#Sr zfFZO-VIL|VN<%nEXr2` z$0FK2L#8O_f1w~c@G70JrB@N}r(gJ!Vmkk6{r68w!o$qO?HrFcjeU0_3F5;*!E2%( zTx>4?gP8w z1B?3UVZmz^%d_dIps>>0{cB~mp3{9UoPR6uQFecVq&} zY{ebB?AlPAD_}(ll{fK99;Wh1cgRbnw)maD^F>*J!R}eHM*W0VYN1TADWMy9H=$00 z5bHY${oDgwX7(W9LZw?}{!8(_{JB~Xkje6{0x4fgC4kUmpfJ+LT1DYD*TWu4#h{Y7 zFLronmc=hS=W=j1ar3r1JNjQoWo2hMWsqW*e?TF%#&{GpsaLp}iN~$)ar+7Ti}E&X z-nq~+Gkp(`qF0F_4A22>VZn-x>I$?PDZSeG8h_ifoWf^DxIb5%T7UytYo3}F|4#RC zUHpg$=)qVqD~=m(!~?XwocuxU1u}9qhhM7d^eqmJPi_e-!IO`*{u7A zbu*?L$Mbj-X9n3G2>+Kc#l`@d8}Xb9{l*IN{#M*d;s+3Pdr8FO$EBELR=8{ zd?LJbSv9fI`{OqTH)5{b?WulgMb)psp+W|@cSp=jtl-&5C}9lw@*0H+gEW(}mAWNz zf{~U;;N}|wdSaphgqnH{FWUy!{y3^=AC*c?RJ5Eb<^ zCgH_v7^axIUVmHSFL^zlj2R$zow$|y#7>%#U7d#Vp_ezcp3lefMyd5ES=q$>4pWyA zp_Zso^^NP~lu2=S6nD(3Z5u=Uy&B&F1i$J*3;3KhEkD_lgscHGR*;T;U!9vgQa(hI}oh9IzEf_PU_8F+i77t-~gDX z490Sb)LyVZmf18N6w{+37$aO<2!Av0 ztLaPOv^J<2@p{WnMiDudoghX_`luFZt_4eNU}*~cF5i%eEcNLs;D>QVIwr8mH;=dc z09`}JV;aaF;13@&iS(w>Jc=k~|d_1hcpM(l|O zu>!@}me%isTT$xT#hNUvh(ATd0wT4fbv=6htcHNEZIw9%E6wlYmwfu2{j0kh1y=$;Yf!|NldgB9ul zB{dbE&LfRnr8ITm@;-68wo#VV?8lG3ed&9k1}QBS3}WGV9%26?A1rBkkDR9Z3o+g+ z)eQg8BY3y(Dh5&z?VLLNdDV`C=muUvCPpGg!oYxIgOI3^%4>5d7jTh~ni!Fg2;fhx z(*c%H6Je84kmQh;5tC3*l~7khLxK-e|Cz?FLh!yYe7g|*LwqU?2wv^_ZyKT$fYVkGJo@AK0$+ml?}zJeB~deT2WL1vz}dxB z)y??t!}%M@)u$_IyW~)6u1SttJ!awd6N5lx|xBrmyrBh>tb&D*=C+Z3nPfq$1%WgY0bY*?PZ#Hk|=xn zGM#0*w4CaB^y0G(J4q=;5NeM@m-P}#mv7QZNF)M!dK^w{mk_!n0`+Y3PQutu-%NBt zzgPXug?JLEbUL{e_dk;Vd896&yPe(hliVK!lj%5+@BKdcrEZ2Nc_*i@ve*2lB>u~{ zFozd2FM|_0+nAGR4TLNHanQn_Oeb!JrUcvzJ?7p9TTNB}ocO3j$7ij!li8#k6 z@2tSd1>K03K9A#_-MIq)S;T#oE^;>U$)&}okIvDf3lm?kI{d80$>~xKUoS!%q1Pi?WpsUUt(tI ztjNjY*y&Rm9(S(DC2GuPHBJs@5M{RGm`c1z<6nwyN^)rMo-AS{M2$oM9|y%fM|}G~ DHx0+F literal 60756 zcmb5WV{~QRw(p$^Dz@00IL3?^hro$gg*4VI_WAaTyVM5Foj~O|-84 z$;06hMwt*rV;^8iB z1~&0XWpYJmG?Ts^K9PC62H*`G}xom%S%yq|xvG~FIfP=9*f zZoDRJBm*Y0aId=qJ?7dyb)6)JGWGwe)MHeNSzhi)Ko6J<-m@v=a%NsP537lHe0R* z`If4$aaBA#S=w!2z&m>{lpTy^Lm^mg*3?M&7HFv}7K6x*cukLIGX;bQG|QWdn{%_6 zHnwBKr84#B7Z+AnBXa16a?or^R?+>$4`}{*a_>IhbjvyTtWkHw)|ay)ahWUd-qq$~ zMbh6roVsj;_qnC-R{G+Cy6bApVOinSU-;(DxUEl!i2)1EeQ9`hrfqj(nKI7?Z>Xur zoJz-a`PxkYit1HEbv|jy%~DO^13J-ut986EEG=66S}D3!L}Efp;Bez~7tNq{QsUMm zh9~(HYg1pA*=37C0}n4g&bFbQ+?-h-W}onYeE{q;cIy%eZK9wZjSwGvT+&Cgv z?~{9p(;bY_1+k|wkt_|N!@J~aoY@|U_RGoWX<;p{Nu*D*&_phw`8jYkMNpRTWx1H* z>J-Mi_!`M468#5Aix$$u1M@rJEIOc?k^QBc?T(#=n&*5eS#u*Y)?L8Ha$9wRWdH^3D4|Ps)Y?m0q~SiKiSfEkJ!=^`lJ(%W3o|CZ zSrZL-Xxc{OrmsQD&s~zPfNJOpSZUl%V8tdG%ei}lQkM+z@-4etFPR>GOH9+Y_F<3=~SXln9Kb-o~f>2a6Xz@AS3cn^;c_>lUwlK(n>z?A>NbC z`Ud8^aQy>wy=$)w;JZzA)_*Y$Z5hU=KAG&htLw1Uh00yE!|Nu{EZkch zY9O6x7Y??>!7pUNME*d!=R#s)ghr|R#41l!c?~=3CS8&zr6*aA7n9*)*PWBV2w+&I zpW1-9fr3j{VTcls1>ua}F*bbju_Xq%^v;-W~paSqlf zolj*dt`BBjHI)H9{zrkBo=B%>8}4jeBO~kWqO!~Thi!I1H(in=n^fS%nuL=X2+s!p}HfTU#NBGiwEBF^^tKU zbhhv+0dE-sbK$>J#t-J!B$TMgN@Wh5wTtK2BG}4BGfsZOoRUS#G8Cxv|6EI*n&Xxq zt{&OxCC+BNqz$9b0WM7_PyBJEVObHFh%%`~!@MNZlo*oXDCwDcFwT~Rls!aApL<)^ zbBftGKKBRhB!{?fX@l2_y~%ygNFfF(XJzHh#?`WlSL{1lKT*gJM zs>bd^H9NCxqxn(IOky5k-wALFowQr(gw%|`0991u#9jXQh?4l|l>pd6a&rx|v=fPJ z1mutj{YzpJ_gsClbWFk(G}bSlFi-6@mwoQh-XeD*j@~huW4(8ub%^I|azA)h2t#yG z7e_V_<4jlM3D(I+qX}yEtqj)cpzN*oCdYHa!nm%0t^wHm)EmFP*|FMw!tb@&`G-u~ zK)=Sf6z+BiTAI}}i{*_Ac$ffr*Wrv$F7_0gJkjx;@)XjYSh`RjAgrCck`x!zP>Ifu z&%he4P|S)H*(9oB4uvH67^0}I-_ye_!w)u3v2+EY>eD3#8QR24<;7?*hj8k~rS)~7 zSXs5ww)T(0eHSp$hEIBnW|Iun<_i`}VE0Nc$|-R}wlSIs5pV{g_Dar(Zz<4X3`W?K z6&CAIl4U(Qk-tTcK{|zYF6QG5ArrEB!;5s?tW7 zrE3hcFY&k)+)e{+YOJ0X2uDE_hd2{|m_dC}kgEKqiE9Q^A-+>2UonB+L@v3$9?AYw zVQv?X*pK;X4Ovc6Ev5Gbg{{Eu*7{N3#0@9oMI~}KnObQE#Y{&3mM4`w%wN+xrKYgD zB-ay0Q}m{QI;iY`s1Z^NqIkjrTlf`B)B#MajZ#9u41oRBC1oM1vq0i|F59> z#StM@bHt|#`2)cpl_rWB($DNJ3Lap}QM-+A$3pe}NyP(@+i1>o^fe-oxX#Bt`mcQc zb?pD4W%#ep|3%CHAYnr*^M6Czg>~L4?l16H1OozM{P*en298b+`i4$|w$|4AHbzqB zHpYUsHZET$Z0ztC;U+0*+amF!@PI%^oUIZy{`L{%O^i{Xk}X0&nl)n~tVEpcAJSJ} zverw15zP1P-O8h9nd!&hj$zuwjg?DoxYIw{jWM zW5_pj+wFy8Tsa9g<7Qa21WaV&;ejoYflRKcz?#fSH_)@*QVlN2l4(QNk| z4aPnv&mrS&0|6NHq05XQw$J^RR9T{3SOcMKCXIR1iSf+xJ0E_Wv?jEc*I#ZPzyJN2 zUG0UOXHl+PikM*&g$U@g+KbG-RY>uaIl&DEtw_Q=FYq?etc!;hEC_}UX{eyh%dw2V zTTSlap&5>PY{6I#(6`j-9`D&I#|YPP8a;(sOzgeKDWsLa!i-$frD>zr-oid!Hf&yS z!i^cr&7tN}OOGmX2)`8k?Tn!!4=tz~3hCTq_9CdiV!NIblUDxHh(FJ$zs)B2(t5@u z-`^RA1ShrLCkg0)OhfoM;4Z{&oZmAec$qV@ zGQ(7(!CBk<5;Ar%DLJ0p0!ResC#U<+3i<|vib1?{5gCebG7$F7URKZXuX-2WgF>YJ^i zMhHDBsh9PDU8dlZ$yJKtc6JA#y!y$57%sE>4Nt+wF1lfNIWyA`=hF=9Gj%sRwi@vd z%2eVV3y&dvAgyuJ=eNJR+*080dbO_t@BFJO<@&#yqTK&+xc|FRR;p;KVk@J3$S{p` zGaMj6isho#%m)?pOG^G0mzOAw0z?!AEMsv=0T>WWcE>??WS=fII$t$(^PDPMU(P>o z_*0s^W#|x)%tx8jIgZY~A2yG;US0m2ZOQt6yJqW@XNY_>_R7(Nxb8Ged6BdYW6{prd!|zuX$@Q2o6Ona8zzYC1u!+2!Y$Jc9a;wy+pXt}o6~Bu1oF1c zp7Y|SBTNi@=I(K%A60PMjM#sfH$y*c{xUgeSpi#HB`?|`!Tb&-qJ3;vxS!TIzuTZs-&%#bAkAyw9m4PJgvey zM5?up*b}eDEY+#@tKec)-c(#QF0P?MRlD1+7%Yk*jW;)`f;0a-ZJ6CQA?E%>i2Dt7T9?s|9ZF|KP4;CNWvaVKZ+Qeut;Jith_y{v*Ny6Co6!8MZx;Wgo z=qAi%&S;8J{iyD&>3CLCQdTX*$+Rx1AwA*D_J^0>suTgBMBb=*hefV+Ars#mmr+YsI3#!F@Xc1t4F-gB@6aoyT+5O(qMz*zG<9Qq*f0w^V!03rpr*-WLH}; zfM{xSPJeu6D(%8HU%0GEa%waFHE$G?FH^kMS-&I3)ycx|iv{T6Wx}9$$D&6{%1N_8 z_CLw)_9+O4&u94##vI9b-HHm_95m)fa??q07`DniVjAy`t7;)4NpeyAY(aAk(+T_O z1om+b5K2g_B&b2DCTK<>SE$Ode1DopAi)xaJjU>**AJK3hZrnhEQ9E`2=|HHe<^tv z63e(bn#fMWuz>4erc47}!J>U58%<&N<6AOAewyzNTqi7hJc|X{782&cM zHZYclNbBwU6673=!ClmxMfkC$(CykGR@10F!zN1Se83LR&a~$Ht&>~43OX22mt7tcZUpa;9@q}KDX3O&Ugp6< zLZLfIMO5;pTee1vNyVC$FGxzK2f>0Z-6hM82zKg44nWo|n}$Zk6&;5ry3`(JFEX$q zK&KivAe${e^5ZGc3a9hOt|!UOE&OocpVryE$Y4sPcs4rJ>>Kbi2_subQ9($2VN(3o zb~tEzMsHaBmBtaHAyES+d3A(qURgiskSSwUc9CfJ@99&MKp2sooSYZu+-0t0+L*!I zYagjOlPgx|lep9tiU%ts&McF6b0VE57%E0Ho%2oi?=Ks+5%aj#au^OBwNwhec zta6QAeQI^V!dF1C)>RHAmB`HnxyqWx?td@4sd15zPd*Fc9hpDXP23kbBenBxGeD$k z;%0VBQEJ-C)&dTAw_yW@k0u?IUk*NrkJ)(XEeI z9Y>6Vel>#s_v@=@0<{4A{pl=9cQ&Iah0iD0H`q)7NeCIRz8zx;! z^OO;1+IqoQNak&pV`qKW+K0^Hqp!~gSohcyS)?^P`JNZXw@gc6{A3OLZ?@1Uc^I2v z+X!^R*HCm3{7JPq{8*Tn>5;B|X7n4QQ0Bs79uTU%nbqOJh`nX(BVj!#f;#J+WZxx4 z_yM&1Y`2XzhfqkIMO7tB3raJKQS+H5F%o83bM+hxbQ zeeJm=Dvix$2j|b4?mDacb67v-1^lTp${z=jc1=j~QD>7c*@+1?py>%Kj%Ejp7Y-!? z8iYRUlGVrQPandAaxFfks53@2EC#0)%mrnmGRn&>=$H$S8q|kE_iWko4`^vCS2aWg z#!`RHUGyOt*k?bBYu3*j3u0gB#v(3tsije zgIuNNWNtrOkx@Pzs;A9un+2LX!zw+p3_NX^Sh09HZAf>m8l@O*rXy_82aWT$Q>iyy zqO7Of)D=wcSn!0+467&!Hl))eff=$aneB?R!YykdKW@k^_uR!+Q1tR)+IJb`-6=jj zymzA>Sv4>Z&g&WWu#|~GcP7qP&m*w-S$)7Xr;(duqCTe7p8H3k5>Y-n8438+%^9~K z3r^LIT_K{i7DgEJjIocw_6d0!<;wKT`X;&vv+&msmhAAnIe!OTdybPctzcEzBy88_ zWO{6i4YT%e4^WQZB)KHCvA(0tS zHu_Bg+6Ko%a9~$EjRB90`P(2~6uI@SFibxct{H#o&y40MdiXblu@VFXbhz>Nko;7R z70Ntmm-FePqhb%9gL+7U8@(ch|JfH5Fm)5${8|`Lef>LttM_iww6LW2X61ldBmG0z zax3y)njFe>j*T{i0s8D4=L>X^j0)({R5lMGVS#7(2C9@AxL&C-lZQx~czI7Iv+{%1 z2hEG>RzX4S8x3v#9sgGAnPzptM)g&LB}@%E>fy0vGSa(&q0ch|=ncKjNrK z`jA~jObJhrJ^ri|-)J^HUyeZXz~XkBp$VhcTEcTdc#a2EUOGVX?@mYx#Vy*!qO$Jv zQ4rgOJ~M*o-_Wptam=~krnmG*p^j!JAqoQ%+YsDFW7Cc9M%YPiBOrVcD^RY>m9Pd< zu}#9M?K{+;UIO!D9qOpq9yxUquQRmQNMo0pT`@$pVt=rMvyX)ph(-CCJLvUJy71DI zBk7oc7)-%ngdj~s@76Yse3L^gV0 z2==qfp&Q~L(+%RHP0n}+xH#k(hPRx(!AdBM$JCfJ5*C=K3ts>P?@@SZ_+{U2qFZb>4kZ{Go37{# zSQc+-dq*a-Vy4?taS&{Ht|MLRiS)Sn14JOONyXqPNnpq&2y~)6wEG0oNy>qvod$FF z`9o&?&6uZjhZ4_*5qWVrEfu(>_n2Xi2{@Gz9MZ8!YmjYvIMasE9yVQL10NBrTCczq zcTY1q^PF2l!Eraguf{+PtHV3=2A?Cu&NN&a8V(y;q(^_mFc6)%Yfn&X&~Pq zU1?qCj^LF(EQB1F`8NxNjyV%fde}dEa(Hx=r7$~ts2dzDwyi6ByBAIx$NllB4%K=O z$AHz1<2bTUb>(MCVPpK(E9wlLElo(aSd(Os)^Raum`d(g9Vd_+Bf&V;l=@mM=cC>) z)9b0enb)u_7V!!E_bl>u5nf&Rl|2r=2F3rHMdb7y9E}}F82^$Rf+P8%dKnOeKh1vs zhH^P*4Ydr^$)$h@4KVzxrHyy#cKmWEa9P5DJ|- zG;!Qi35Tp7XNj60=$!S6U#!(${6hyh7d4q=pF{`0t|N^|L^d8pD{O9@tF~W;#Je*P z&ah%W!KOIN;SyAEhAeTafJ4uEL`(RtnovM+cb(O#>xQnk?dzAjG^~4$dFn^<@-Na3 z395;wBnS{t*H;Jef2eE!2}u5Ns{AHj>WYZDgQJt8v%x?9{MXqJsGP|l%OiZqQ1aB! z%E=*Ig`(!tHh>}4_z5IMpg{49UvD*Pp9!pxt_gdAW%sIf3k6CTycOT1McPl=_#0?8 zVjz8Hj*Vy9c5-krd-{BQ{6Xy|P$6LJvMuX$* zA+@I_66_ET5l2&gk9n4$1M3LN8(yEViRx&mtd#LD}AqEs?RW=xKC(OCWH;~>(X6h!uDxXIPH06xh z*`F4cVlbDP`A)-fzf>MuScYsmq&1LUMGaQ3bRm6i7OsJ|%uhTDT zlvZA1M}nz*SalJWNT|`dBm1$xlaA>CCiQ zK`xD-RuEn>-`Z?M{1%@wewf#8?F|(@1e0+T4>nmlSRrNK5f)BJ2H*$q(H>zGD0>eL zQ!tl_Wk)k*e6v^m*{~A;@6+JGeWU-q9>?+L_#UNT%G?4&BnOgvm9@o7l?ov~XL+et zbGT)|G7)KAeqb=wHSPk+J1bdg7N3$vp(ekjI1D9V$G5Cj!=R2w=3*4!z*J-r-cyeb zd(i2KmX!|Lhey!snRw z?#$Gu%S^SQEKt&kep)up#j&9}e+3=JJBS(s>MH+|=R(`8xK{mmndWo_r`-w1#SeRD&YtAJ#GiVI*TkQZ}&aq<+bU2+coU3!jCI6E+Ad_xFW*ghnZ$q zAoF*i&3n1j#?B8x;kjSJD${1jdRB;)R*)Ao!9bd|C7{;iqDo|T&>KSh6*hCD!rwv= zyK#F@2+cv3=|S1Kef(E6Niv8kyLVLX&e=U;{0x{$tDfShqkjUME>f8d(5nzSkY6@! z^-0>DM)wa&%m#UF1F?zR`8Y3X#tA!*7Q$P3lZJ%*KNlrk_uaPkxw~ zxZ1qlE;Zo;nb@!SMazSjM>;34ROOoygo%SF);LL>rRonWwR>bmSd1XD^~sGSu$Gg# zFZ`|yKU0%!v07dz^v(tY%;So(e`o{ZYTX`hm;@b0%8|H>VW`*cr8R%3n|ehw2`(9B+V72`>SY}9^8oh$En80mZK9T4abVG*to;E z1_S6bgDOW?!Oy1LwYy=w3q~KKdbNtyH#d24PFjX)KYMY93{3-mPP-H>@M-_>N~DDu zENh~reh?JBAK=TFN-SfDfT^=+{w4ea2KNWXq2Y<;?(gf(FgVp8Zp-oEjKzB%2Iqj;48GmY3h=bcdYJ}~&4tS`Q1sb=^emaW$IC$|R+r-8V- zf0$gGE(CS_n4s>oicVk)MfvVg#I>iDvf~Ov8bk}sSxluG!6#^Z_zhB&U^`eIi1@j( z^CK$z^stBHtaDDHxn+R;3u+>Lil^}fj?7eaGB z&5nl^STqcaBxI@v>%zG|j))G(rVa4aY=B@^2{TFkW~YP!8!9TG#(-nOf^^X-%m9{Z zCC?iC`G-^RcBSCuk=Z`(FaUUe?hf3{0C>>$?Vs z`2Uud9M+T&KB6o4o9kvdi^Q=Bw!asPdxbe#W-Oaa#_NP(qpyF@bVxv5D5))srkU#m zj_KA+#7sqDn*Ipf!F5Byco4HOSd!Ui$l94|IbW%Ny(s1>f4|Mv^#NfB31N~kya9!k zWCGL-$0ZQztBate^fd>R!hXY_N9ZjYp3V~4_V z#eB)Kjr8yW=+oG)BuNdZG?jaZlw+l_ma8aET(s+-x+=F-t#Qoiuu1i`^x8Sj>b^U} zs^z<()YMFP7CmjUC@M=&lA5W7t&cxTlzJAts*%PBDAPuqcV5o7HEnqjif_7xGt)F% zGx2b4w{@!tE)$p=l3&?Bf#`+!-RLOleeRk3 z7#pF|w@6_sBmn1nECqdunmG^}pr5(ZJQVvAt$6p3H(16~;vO>?sTE`Y+mq5YP&PBo zvq!7#W$Gewy`;%6o^!Dtjz~x)T}Bdk*BS#=EY=ODD&B=V6TD2z^hj1m5^d6s)D*wk zu$z~D7QuZ2b?5`p)E8e2_L38v3WE{V`bVk;6fl#o2`) z99JsWhh?$oVRn@$S#)uK&8DL8>An0&S<%V8hnGD7Z^;Y(%6;^9!7kDQ5bjR_V+~wp zfx4m3z6CWmmZ<8gDGUyg3>t8wgJ5NkkiEm^(sedCicP^&3D%}6LtIUq>mXCAt{9eF zNXL$kGcoUTf_Lhm`t;hD-SE)m=iBnxRU(NyL}f6~1uH)`K!hmYZjLI%H}AmEF5RZt z06$wn63GHnApHXZZJ}s^s)j9(BM6e*7IBK6Bq(!)d~zR#rbxK9NVIlgquoMq z=eGZ9NR!SEqP6=9UQg#@!rtbbSBUM#ynF);zKX+|!Zm}*{H z+j=d?aZ2!?@EL7C~%B?6ouCKLnO$uWn;Y6Xz zX8dSwj732u(o*U3F$F=7xwxm>E-B+SVZH;O-4XPuPkLSt_?S0)lb7EEg)Mglk0#eS z9@jl(OnH4juMxY+*r03VDfPx_IM!Lmc(5hOI;`?d37f>jPP$?9jQQIQU@i4vuG6MagEoJrQ=RD7xt@8E;c zeGV*+Pt+t$@pt!|McETOE$9k=_C!70uhwRS9X#b%ZK z%q(TIUXSS^F0`4Cx?Rk07C6wI4!UVPeI~-fxY6`YH$kABdOuiRtl73MqG|~AzZ@iL&^s?24iS;RK_pdlWkhcF z@Wv-Om(Aealfg)D^adlXh9Nvf~Uf@y;g3Y)i(YP zEXDnb1V}1pJT5ZWyw=1i+0fni9yINurD=EqH^ciOwLUGi)C%Da)tyt=zq2P7pV5-G zR7!oq28-Fgn5pW|nlu^b!S1Z#r7!Wtr{5J5PQ>pd+2P7RSD?>(U7-|Y z7ZQ5lhYIl_IF<9?T9^IPK<(Hp;l5bl5tF9>X-zG14_7PfsA>6<$~A338iYRT{a@r_ zuXBaT=`T5x3=s&3=RYx6NgG>No4?5KFBVjE(swfcivcIpPQFx5l+O;fiGsOrl5teR z_Cm+;PW}O0Dwe_(4Z@XZ)O0W-v2X><&L*<~*q3dg;bQW3g7)a#3KiQP>+qj|qo*Hk z?57>f2?f@`=Fj^nkDKeRkN2d$Z@2eNKpHo}ksj-$`QKb6n?*$^*%Fb3_Kbf1(*W9K>{L$mud2WHJ=j0^=g30Xhg8$#g^?36`p1fm;;1@0Lrx+8t`?vN0ZorM zSW?rhjCE8$C|@p^sXdx z|NOHHg+fL;HIlqyLp~SSdIF`TnSHehNCU9t89yr@)FY<~hu+X`tjg(aSVae$wDG*C zq$nY(Y494R)hD!i1|IIyP*&PD_c2FPgeY)&mX1qujB1VHPG9`yFQpLFVQ0>EKS@Bp zAfP5`C(sWGLI?AC{XEjLKR4FVNw(4+9b?kba95ukgR1H?w<8F7)G+6&(zUhIE5Ef% z=fFkL3QKA~M@h{nzjRq!Y_t!%U66#L8!(2-GgFxkD1=JRRqk=n%G(yHKn%^&$dW>; zSjAcjETMz1%205se$iH_)ZCpfg_LwvnsZQAUCS#^FExp8O4CrJb6>JquNV@qPq~3A zZ<6dOU#6|8+fcgiA#~MDmcpIEaUO02L5#T$HV0$EMD94HT_eXLZ2Zi&(! z&5E>%&|FZ`)CN10tM%tLSPD*~r#--K(H-CZqIOb99_;m|D5wdgJ<1iOJz@h2Zkq?} z%8_KXb&hf=2Wza(Wgc;3v3TN*;HTU*q2?#z&tLn_U0Nt!y>Oo>+2T)He6%XuP;fgn z-G!#h$Y2`9>Jtf}hbVrm6D70|ERzLAU>3zoWhJmjWfgM^))T+2u$~5>HF9jQDkrXR z=IzX36)V75PrFjkQ%TO+iqKGCQ-DDXbaE;C#}!-CoWQx&v*vHfyI>$HNRbpvm<`O( zlx9NBWD6_e&J%Ous4yp~s6)Ghni!I6)0W;9(9$y1wWu`$gs<$9Mcf$L*piP zPR0Av*2%ul`W;?-1_-5Zy0~}?`e@Y5A&0H!^ApyVTT}BiOm4GeFo$_oPlDEyeGBbh z1h3q&Dx~GmUS|3@4V36&$2uO8!Yp&^pD7J5&TN{?xphf*-js1fP?B|`>p_K>lh{ij zP(?H%e}AIP?_i^f&Li=FDSQ`2_NWxL+BB=nQr=$ zHojMlXNGauvvwPU>ZLq!`bX-5F4jBJ&So{kE5+ms9UEYD{66!|k~3vsP+mE}x!>%P za98bAU0!h0&ka4EoiDvBM#CP#dRNdXJcb*(%=<(g+M@<)DZ!@v1V>;54En?igcHR2 zhubQMq}VSOK)onqHfczM7YA@s=9*ow;k;8)&?J3@0JiGcP! zP#00KZ1t)GyZeRJ=f0^gc+58lc4Qh*S7RqPIC6GugG1gXe$LIQMRCo8cHf^qXgAa2 z`}t>u2Cq1CbSEpLr~E=c7~=Qkc9-vLE%(v9N*&HF`(d~(0`iukl5aQ9u4rUvc8%m) zr2GwZN4!s;{SB87lJB;veebPmqE}tSpT>+`t?<457Q9iV$th%i__Z1kOMAswFldD6 ztbOvO337S5o#ZZgN2G99_AVqPv!?Gmt3pzgD+Hp3QPQ`9qJ(g=kjvD+fUSS3upJn! zqoG7acIKEFRX~S}3|{EWT$kdz#zrDlJU(rPkxjws_iyLKU8+v|*oS_W*-guAb&Pj1 z35Z`3z<&Jb@2Mwz=KXucNYdY#SNO$tcVFr9KdKm|%^e-TXzs6M`PBper%ajkrIyUe zp$vVxVs9*>Vp4_1NC~Zg)WOCPmOxI1V34QlG4!aSFOH{QqSVq1^1)- z0P!Z?tT&E-ll(pwf0?=F=yOzik=@nh1Clxr9}Vij89z)ePDSCYAqw?lVI?v?+&*zH z)p$CScFI8rrwId~`}9YWPFu0cW1Sf@vRELs&cbntRU6QfPK-SO*mqu|u~}8AJ!Q$z znzu}50O=YbjwKCuSVBs6&CZR#0FTu)3{}qJJYX(>QPr4$RqWiwX3NT~;>cLn*_&1H zaKpIW)JVJ>b{uo2oq>oQt3y=zJjb%fU@wLqM{SyaC6x2snMx-}ivfU<1- znu1Lh;i$3Tf$Kh5Uk))G!D1UhE8pvx&nO~w^fG)BC&L!_hQk%^p`Kp@F{cz>80W&T ziOK=Sq3fdRu*V0=S53rcIfWFazI}Twj63CG(jOB;$*b`*#B9uEnBM`hDk*EwSRdwP8?5T?xGUKs=5N83XsR*)a4|ijz|c{4tIU+4j^A5C<#5 z*$c_d=5ml~%pGxw#?*q9N7aRwPux5EyqHVkdJO=5J>84!X6P>DS8PTTz>7C#FO?k#edkntG+fJk8ZMn?pmJSO@`x-QHq;7^h6GEXLXo1TCNhH z8ZDH{*NLAjo3WM`xeb=X{((uv3H(8&r8fJJg_uSs_%hOH%JDD?hu*2NvWGYD+j)&` zz#_1%O1wF^o5ryt?O0n;`lHbzp0wQ?rcbW(F1+h7_EZZ9{>rePvLAPVZ_R|n@;b$;UchU=0j<6k8G9QuQf@76oiE*4 zXOLQ&n3$NR#p4<5NJMVC*S);5x2)eRbaAM%VxWu9ohlT;pGEk7;002enCbQ>2r-us z3#bpXP9g|mE`65VrN`+3mC)M(eMj~~eOf)do<@l+fMiTR)XO}422*1SL{wyY(%oMpBgJagtiDf zz>O6(m;};>Hi=t8o{DVC@YigqS(Qh+ix3Rwa9aliH}a}IlOCW1@?%h_bRbq-W{KHF z%Vo?-j@{Xi@=~Lz5uZP27==UGE15|g^0gzD|3x)SCEXrx`*MP^FDLl%pOi~~Il;dc z^hrwp9sYeT7iZ)-ajKy@{a`kr0-5*_!XfBpXwEcFGJ;%kV$0Nx;apKrur zJN2J~CAv{Zjj%FolyurtW8RaFmpn&zKJWL>(0;;+q(%(Hx!GMW4AcfP0YJ*Vz!F4g z!ZhMyj$BdXL@MlF%KeInmPCt~9&A!;cRw)W!Hi@0DY(GD_f?jeV{=s=cJ6e}JktJw zQORnxxj3mBxfrH=x{`_^Z1ddDh}L#V7i}$njUFRVwOX?qOTKjfPMBO4y(WiU<)epb zvB9L=%jW#*SL|Nd_G?E*_h1^M-$PG6Pc_&QqF0O-FIOpa4)PAEPsyvB)GKasmBoEt z?_Q2~QCYGH+hW31x-B=@5_AN870vY#KB~3a*&{I=f);3Kv7q4Q7s)0)gVYx2#Iz9g(F2;=+Iy4 z6KI^8GJ6D@%tpS^8boU}zpi=+(5GfIR)35PzrbuXeL1Y1N%JK7PG|^2k3qIqHfX;G zQ}~JZ-UWx|60P5?d1e;AHx!_;#PG%d=^X(AR%i`l0jSpYOpXoKFW~7ip7|xvN;2^? zsYC9fanpO7rO=V7+KXqVc;Q5z%Bj})xHVrgoR04sA2 zl~DAwv=!(()DvH*=lyhIlU^hBkA0$e*7&fJpB0|oB7)rqGK#5##2T`@_I^|O2x4GO z;xh6ROcV<9>?e0)MI(y++$-ksV;G;Xe`lh76T#Htuia+(UrIXrf9?

L(tZ$0BqX1>24?V$S+&kLZ`AodQ4_)P#Q3*4xg8}lMV-FLwC*cN$< zt65Rf%7z41u^i=P*qO8>JqXPrinQFapR7qHAtp~&RZ85$>ob|Js;GS^y;S{XnGiBc zGa4IGvDl?x%gY`vNhv8wgZnP#UYI-w*^4YCZnxkF85@ldepk$&$#3EAhrJY0U)lR{F6sM3SONV^+$;Zx8BD&Eku3K zKNLZyBni3)pGzU0;n(X@1fX8wYGKYMpLmCu{N5-}epPDxClPFK#A@02WM3!myN%bkF z|GJ4GZ}3sL{3{qXemy+#Uk{4>Kf8v11;f8I&c76+B&AQ8udd<8gU7+BeWC`akUU~U zgXoxie>MS@rBoyY8O8Tc&8id!w+_ooxcr!1?#rc$-|SBBtH6S?)1e#P#S?jFZ8u-Bs&k`yLqW|{j+%c#A4AQ>+tj$Y z^CZajspu$F%73E68Lw5q7IVREED9r1Ijsg#@DzH>wKseye>hjsk^{n0g?3+gs@7`i zHx+-!sjLx^fS;fY!ERBU+Q zVJ!e0hJH%P)z!y%1^ZyG0>PN@5W~SV%f>}c?$H8r;Sy-ui>aruVTY=bHe}$e zi&Q4&XK!qT7-XjCrDaufT@>ieQ&4G(SShUob0Q>Gznep9fR783jGuUynAqc6$pYX; z7*O@@JW>O6lKIk0G00xsm|=*UVTQBB`u1f=6wGAj%nHK_;Aqmfa!eAykDmi-@u%6~ z;*c!pS1@V8r@IX9j&rW&d*}wpNs96O2Ute>%yt{yv>k!6zfT6pru{F1M3P z2WN1JDYqoTB#(`kE{H676QOoX`cnqHl1Yaru)>8Ky~VU{)r#{&s86Vz5X)v15ULHA zAZDb{99+s~qI6;-dQ5DBjHJP@GYTwn;Dv&9kE<0R!d z8tf1oq$kO`_sV(NHOSbMwr=To4r^X$`sBW4$gWUov|WY?xccQJN}1DOL|GEaD_!@& z15p?Pj+>7d`@LvNIu9*^hPN)pwcv|akvYYq)ks%`G>!+!pW{-iXPZsRp8 z35LR;DhseQKWYSD`%gO&k$Dj6_6q#vjWA}rZcWtQr=Xn*)kJ9kacA=esi*I<)1>w^ zO_+E>QvjP)qiSZg9M|GNeLtO2D7xT6vsj`88sd!94j^AqxFLi}@w9!Y*?nwWARE0P znuI_7A-saQ+%?MFA$gttMV-NAR^#tjl_e{R$N8t2NbOlX373>e7Ox=l=;y#;M7asp zRCz*CLnrm$esvSb5{T<$6CjY zmZ(i{Rs_<#pWW>(HPaaYj`%YqBra=Ey3R21O7vUbzOkJJO?V`4-D*u4$Me0Bx$K(lYo`JO}gnC zx`V}a7m-hLU9Xvb@K2ymioF)vj12<*^oAqRuG_4u%(ah?+go%$kOpfb`T96P+L$4> zQ#S+sA%VbH&mD1k5Ak7^^dZoC>`1L%i>ZXmooA!%GI)b+$D&ziKrb)a=-ds9xk#~& z7)3iem6I|r5+ZrTRe_W861x8JpD`DDIYZNm{$baw+$)X^Jtjnl0xlBgdnNY}x%5za zkQ8E6T<^$sKBPtL4(1zi_Rd(tVth*3Xs!ulflX+70?gb&jRTnI8l+*Aj9{|d%qLZ+ z>~V9Z;)`8-lds*Zgs~z1?Fg?Po7|FDl(Ce<*c^2=lFQ~ahwh6rqSjtM5+$GT>3WZW zj;u~w9xwAhOc<kF}~`CJ68 z?(S5vNJa;kriPlim33{N5`C{9?NWhzsna_~^|K2k4xz1`xcui*LXL-1#Y}Hi9`Oo!zQ>x-kgAX4LrPz63uZ+?uG*84@PKq-KgQlMNRwz=6Yes) zY}>YN+qP}nwr$(CZQFjUOI=-6J$2^XGvC~EZ+vrqWaOXB$k?%Suf5k=4>AveC1aJ! ziaW4IS%F$_Babi)kA8Y&u4F7E%99OPtm=vzw$$ zEz#9rvn`Iot_z-r3MtV>k)YvErZ<^Oa${`2>MYYODSr6?QZu+be-~MBjwPGdMvGd!b!elsdi4% z`37W*8+OGulab8YM?`KjJ8e+jM(tqLKSS@=jimq3)Ea2EB%88L8CaM+aG7;27b?5` z4zuUWBr)f)k2o&xg{iZ$IQkJ+SK>lpq4GEacu~eOW4yNFLU!Kgc{w4&D$4ecm0f}~ zTTzquRW@`f0}|IILl`!1P+;69g^upiPA6F{)U8)muWHzexRenBU$E^9X-uIY2%&1w z_=#5*(nmxJ9zF%styBwivi)?#KMG96-H@hD-H_&EZiRNsfk7mjBq{L%!E;Sqn!mVX*}kXhwH6eh;b42eD!*~upVG@ z#smUqz$ICm!Y8wY53gJeS|Iuard0=;k5i5Z_hSIs6tr)R4n*r*rE`>38Pw&lkv{_r!jNN=;#?WbMj|l>cU(9trCq; z%nN~r^y7!kH^GPOf3R}?dDhO=v^3BeP5hF|%4GNQYBSwz;x({21i4OQY->1G=KFyu z&6d`f2tT9Yl_Z8YACZaJ#v#-(gcyeqXMhYGXb=t>)M@fFa8tHp2x;ODX=Ap@a5I=U z0G80^$N0G4=U(>W%mrrThl0DjyQ-_I>+1Tdd_AuB3qpYAqY54upwa3}owa|x5iQ^1 zEf|iTZxKNGRpI>34EwkIQ2zHDEZ=(J@lRaOH>F|2Z%V_t56Km$PUYu^xA5#5Uj4I4RGqHD56xT%H{+P8Ag>e_3pN$4m8n>i%OyJFPNWaEnJ4McUZPa1QmOh?t8~n& z&RulPCors8wUaqMHECG=IhB(-tU2XvHP6#NrLVyKG%Ee*mQ5Ps%wW?mcnriTVRc4J`2YVM>$ixSF2Xi+Wn(RUZnV?mJ?GRdw%lhZ+t&3s7g!~g{%m&i<6 z5{ib-<==DYG93I(yhyv4jp*y3#*WNuDUf6`vTM%c&hiayf(%=x@4$kJ!W4MtYcE#1 zHM?3xw63;L%x3drtd?jot!8u3qeqctceX3m;tWetK+>~q7Be$h>n6riK(5@ujLgRS zvOym)k+VAtyV^mF)$29Y`nw&ijdg~jYpkx%*^ z8dz`C*g=I?;clyi5|!27e2AuSa$&%UyR(J3W!A=ZgHF9OuKA34I-1U~pyD!KuRkjA zbkN!?MfQOeN>DUPBxoy5IX}@vw`EEB->q!)8fRl_mqUVuRu|C@KD-;yl=yKc=ZT0% zB$fMwcC|HE*0f8+PVlWHi>M`zfsA(NQFET?LrM^pPcw`cK+Mo0%8*x8@65=CS_^$cG{GZQ#xv($7J z??R$P)nPLodI;P!IC3eEYEHh7TV@opr#*)6A-;EU2XuogHvC;;k1aI8asq7ovoP!* z?x%UoPrZjj<&&aWpsbr>J$Er-7!E(BmOyEv!-mbGQGeJm-U2J>74>o5x`1l;)+P&~ z>}f^=Rx(ZQ2bm+YE0u=ZYrAV@apyt=v1wb?R@`i_g64YyAwcOUl=C!i>=Lzb$`tjv zOO-P#A+)t-JbbotGMT}arNhJmmGl-lyUpMn=2UacVZxmiG!s!6H39@~&uVokS zG=5qWhfW-WOI9g4!R$n7!|ViL!|v3G?GN6HR0Pt_L5*>D#FEj5wM1DScz4Jv@Sxnl zB@MPPmdI{(2D?;*wd>3#tjAirmUnQoZrVv`xM3hARuJksF(Q)wd4P$88fGYOT1p6U z`AHSN!`St}}UMBT9o7i|G`r$ zrB=s$qV3d6$W9@?L!pl0lf%)xs%1ko^=QY$ty-57=55PvP(^6E7cc zGJ*>m2=;fOj?F~yBf@K@9qwX0hA803Xw+b0m}+#a(>RyR8}*Y<4b+kpp|OS+!whP( zH`v{%s>jsQI9rd$*vm)EkwOm#W_-rLTHcZRek)>AtF+~<(did)*oR1|&~1|e36d-d zgtm5cv1O0oqgWC%Et@P4Vhm}Ndl(Y#C^MD03g#PH-TFy+7!Osv1z^UWS9@%JhswEq~6kSr2DITo59+; ze=ZC}i2Q?CJ~Iyu?vn|=9iKV>4j8KbxhE4&!@SQ^dVa-gK@YfS9xT(0kpW*EDjYUkoj! zE49{7H&E}k%5(>sM4uGY)Q*&3>{aitqdNnRJkbOmD5Mp5rv-hxzOn80QsG=HJ_atI-EaP69cacR)Uvh{G5dTpYG7d zbtmRMq@Sexey)||UpnZ?;g_KMZq4IDCy5}@u!5&B^-=6yyY{}e4Hh3ee!ZWtL*s?G zxG(A!<9o!CL+q?u_utltPMk+hn?N2@?}xU0KlYg?Jco{Yf@|mSGC<(Zj^yHCvhmyx z?OxOYoxbptDK()tsJ42VzXdINAMWL$0Gcw?G(g8TMB)Khw_|v9`_ql#pRd2i*?CZl z7k1b!jQB=9-V@h%;Cnl7EKi;Y^&NhU0mWEcj8B|3L30Ku#-9389Q+(Yet0r$F=+3p z6AKOMAIi|OHyzlHZtOm73}|ntKtFaXF2Fy|M!gOh^L4^62kGUoWS1i{9gsds_GWBc zLw|TaLP64z3z9?=R2|T6Xh2W4_F*$cq>MtXMOy&=IPIJ`;!Tw?PqvI2b*U1)25^<2 zU_ZPoxg_V0tngA0J+mm?3;OYw{i2Zb4x}NedZug!>EoN3DC{1i)Z{Z4m*(y{ov2%- zk(w>+scOO}MN!exSc`TN)!B=NUX`zThWO~M*ohqq;J2hx9h9}|s#?@eR!=F{QTrq~ zTcY|>azkCe$|Q0XFUdpFT=lTcyW##i;-e{}ORB4D?t@SfqGo_cS z->?^rh$<&n9DL!CF+h?LMZRi)qju!meugvxX*&jfD!^1XB3?E?HnwHP8$;uX{Rvp# zh|)hM>XDv$ZGg=$1{+_bA~u-vXqlw6NH=nkpyWE0u}LQjF-3NhATL@9rRxMnpO%f7 z)EhZf{PF|mKIMFxnC?*78(}{Y)}iztV12}_OXffJ;ta!fcFIVjdchyHxH=t%ci`Xd zX2AUB?%?poD6Zv*&BA!6c5S#|xn~DK01#XvjT!w!;&`lDXSJT4_j$}!qSPrb37vc{ z9^NfC%QvPu@vlxaZ;mIbn-VHA6miwi8qJ~V;pTZkKqqOii<1Cs}0i?uUIss;hM4dKq^1O35y?Yp=l4i zf{M!@QHH~rJ&X~8uATV><23zZUbs-J^3}$IvV_ANLS08>k`Td7aU_S1sLsfi*C-m1 z-e#S%UGs4E!;CeBT@9}aaI)qR-6NU@kvS#0r`g&UWg?fC7|b^_HyCE!8}nyh^~o@< zpm7PDFs9yxp+byMS(JWm$NeL?DNrMCNE!I^ko-*csB+dsf4GAq{=6sfyf4wb>?v1v zmb`F*bN1KUx-`ra1+TJ37bXNP%`-Fd`vVQFTwWpX@;s(%nDQa#oWhgk#mYlY*!d>( zE&!|ySF!mIyfING+#%RDY3IBH_fW$}6~1%!G`suHub1kP@&DoAd5~7J55;5_noPI6eLf{t;@9Kf<{aO0`1WNKd?<)C-|?C?)3s z>wEq@8=I$Wc~Mt$o;g++5qR+(6wt9GI~pyrDJ%c?gPZe)owvy^J2S=+M^ z&WhIE`g;;J^xQLVeCtf7b%Dg#Z2gq9hp_%g)-%_`y*zb; zn9`f`mUPN-Ts&fFo(aNTsXPA|J!TJ{0hZp0^;MYHLOcD=r_~~^ymS8KLCSeU3;^QzJNqS z5{5rEAv#l(X?bvwxpU;2%pQftF`YFgrD1jt2^~Mt^~G>T*}A$yZc@(k9orlCGv&|1 zWWvVgiJsCAtamuAYT~nzs?TQFt<1LSEx!@e0~@yd6$b5!Zm(FpBl;(Cn>2vF?k zOm#TTjFwd2D-CyA!mqR^?#Uwm{NBemP>(pHmM}9;;8`c&+_o3#E5m)JzfwN?(f-a4 zyd%xZc^oQx3XT?vcCqCX&Qrk~nu;fxs@JUoyVoi5fqpi&bUhQ2y!Ok2pzsFR(M(|U zw3E+kH_zmTRQ9dUMZWRE%Zakiwc+lgv7Z%|YO9YxAy`y28`Aw;WU6HXBgU7fl@dnt z-fFBV)}H-gqP!1;V@Je$WcbYre|dRdp{xt!7sL3Eoa%IA`5CAA%;Wq8PktwPdULo! z8!sB}Qt8#jH9Sh}QiUtEPZ6H0b*7qEKGJ%ITZ|vH)5Q^2m<7o3#Z>AKc%z7_u`rXA zqrCy{-{8;9>dfllLu$^M5L z-hXs))h*qz%~ActwkIA(qOVBZl2v4lwbM>9l70Y`+T*elINFqt#>OaVWoja8RMsep z6Or3f=oBnA3vDbn*+HNZP?8LsH2MY)x%c13@(XfuGR}R?Nu<|07{$+Lc3$Uv^I!MQ z>6qWgd-=aG2Y^24g4{Bw9ueOR)(9h`scImD=86dD+MnSN4$6 z^U*o_mE-6Rk~Dp!ANp#5RE9n*LG(Vg`1)g6!(XtDzsov$Dvz|Gv1WU68J$CkshQhS zCrc|cdkW~UK}5NeaWj^F4MSgFM+@fJd{|LLM)}_O<{rj z+?*Lm?owq?IzC%U%9EBga~h-cJbIu=#C}XuWN>OLrc%M@Gu~kFEYUi4EC6l#PR2JS zQUkGKrrS#6H7}2l0F@S11DP`@pih0WRkRJl#F;u{c&ZC{^$Z+_*lB)r)-bPgRFE;* zl)@hK4`tEP=P=il02x7-C7p%l=B`vkYjw?YhdJU9!P!jcmY$OtC^12w?vy3<<=tlY zUwHJ_0lgWN9vf>1%WACBD{UT)1qHQSE2%z|JHvP{#INr13jM}oYv_5#xsnv9`)UAO zuwgyV4YZ;O)eSc3(mka6=aRohi!HH@I#xq7kng?Acdg7S4vDJb6cI5fw?2z%3yR+| zU5v@Hm}vy;${cBp&@D=HQ9j7NcFaOYL zj-wV=eYF{|XTkFNM2uz&T8uH~;)^Zo!=KP)EVyH6s9l1~4m}N%XzPpduPg|h-&lL` zAXspR0YMOKd2yO)eMFFJ4?sQ&!`dF&!|niH*!^*Ml##o0M(0*uK9&yzekFi$+mP9s z>W9d%Jb)PtVi&-Ha!o~Iyh@KRuKpQ@)I~L*d`{O8!kRObjO7=n+Gp36fe!66neh+7 zW*l^0tTKjLLzr`x4`_8&on?mjW-PzheTNox8Hg7Nt@*SbE-%kP2hWYmHu#Fn@Q^J(SsPUz*|EgOoZ6byg3ew88UGdZ>9B2Tq=jF72ZaR=4u%1A6Vm{O#?@dD!(#tmR;eP(Fu z{$0O%=Vmua7=Gjr8nY%>ul?w=FJ76O2js&17W_iq2*tb!i{pt#`qZB#im9Rl>?t?0c zicIC}et_4d+CpVPx)i4~$u6N-QX3H77ez z?ZdvXifFk|*F8~L(W$OWM~r`pSk5}#F?j_5u$Obu9lDWIknO^AGu+Blk7!9Sb;NjS zncZA?qtASdNtzQ>z7N871IsPAk^CC?iIL}+{K|F@BuG2>qQ;_RUYV#>hHO(HUPpk@ z(bn~4|F_jiZi}Sad;_7`#4}EmD<1EiIxa48QjUuR?rC}^HRocq`OQPM@aHVKP9E#q zy%6bmHygCpIddPjE}q_DPC`VH_2m;Eey&ZH)E6xGeStOK7H)#+9y!%-Hm|QF6w#A( zIC0Yw%9j$s-#odxG~C*^MZ?M<+&WJ+@?B_QPUyTg9DJGtQN#NIC&-XddRsf3n^AL6 zT@P|H;PvN;ZpL0iv$bRb7|J{0o!Hq+S>_NrH4@coZtBJu#g8#CbR7|#?6uxi8d+$g z87apN>EciJZ`%Zv2**_uiET9Vk{pny&My;+WfGDw4EVL#B!Wiw&M|A8f1A@ z(yFQS6jfbH{b8Z-S7D2?Ixl`j0{+ZnpT=;KzVMLW{B$`N?Gw^Fl0H6lT61%T2AU**!sX0u?|I(yoy&Xveg7XBL&+>n6jd1##6d>TxE*Vj=8lWiG$4=u{1UbAa5QD>5_ z;Te^42v7K6Mmu4IWT6Rnm>oxrl~b<~^e3vbj-GCdHLIB_>59}Ya+~OF68NiH=?}2o zP(X7EN=quQn&)fK>M&kqF|<_*H`}c zk=+x)GU>{Af#vx&s?`UKUsz})g^Pc&?Ka@t5$n$bqf6{r1>#mWx6Ep>9|A}VmWRnowVo`OyCr^fHsf# zQjQ3Ttp7y#iQY8l`zEUW)(@gGQdt(~rkxlkefskT(t%@i8=|p1Y9Dc5bc+z#n$s13 zGJk|V0+&Ekh(F};PJzQKKo+FG@KV8a<$gmNSD;7rd_nRdc%?9)p!|B-@P~kxQG}~B zi|{0}@}zKC(rlFUYp*dO1RuvPC^DQOkX4<+EwvBAC{IZQdYxoq1Za!MW7%p7gGr=j zzWnAq%)^O2$eItftC#TTSArUyL$U54-O7e|)4_7%Q^2tZ^0-d&3J1}qCzR4dWX!)4 zzIEKjgnYgMus^>6uw4Jm8ga6>GBtMjpNRJ6CP~W=37~||gMo_p@GA@#-3)+cVYnU> zE5=Y4kzl+EbEh%dhQokB{gqNDqx%5*qBusWV%!iprn$S!;oN_6E3?0+umADVs4ako z?P+t?m?};gev9JXQ#Q&KBpzkHPde_CGu-y z<{}RRAx=xlv#mVi+Ibrgx~ujW$h{?zPfhz)Kp7kmYS&_|97b&H&1;J-mzrBWAvY} zh8-I8hl_RK2+nnf&}!W0P+>5?#?7>npshe<1~&l_xqKd0_>dl_^RMRq@-Myz&|TKZBj1=Q()) zF{dBjv5)h=&Z)Aevx}+i|7=R9rG^Di!sa)sZCl&ctX4&LScQ-kMncgO(9o6W6)yd< z@Rk!vkja*X_N3H=BavGoR0@u0<}m-7|2v!0+2h~S2Q&a=lTH91OJsvms2MT~ zY=c@LO5i`mLpBd(vh|)I&^A3TQLtr>w=zoyzTd=^f@TPu&+*2MtqE$Avf>l>}V|3-8Fp2hzo3y<)hr_|NO(&oSD z!vEjTWBxbKTiShVl-U{n*B3#)3a8$`{~Pk}J@elZ=>Pqp|MQ}jrGv7KrNcjW%TN_< zZz8kG{#}XoeWf7qY?D)L)8?Q-b@Na&>i=)(@uNo zr;cH98T3$Iau8Hn*@vXi{A@YehxDE2zX~o+RY`)6-X{8~hMpc#C`|8y> zU8Mnv5A0dNCf{Ims*|l-^ z(MRp{qoGohB34|ggDI*p!Aw|MFyJ|v+<+E3brfrI)|+l3W~CQLPbnF@G0)P~Ly!1TJLp}xh8uW`Q+RB-v`MRYZ9Gam3cM%{ zb4Cb*f)0deR~wtNb*8w-LlIF>kc7DAv>T0D(a3@l`k4TFnrO+g9XH7;nYOHxjc4lq zMmaW6qpgAgy)MckYMhl?>sq;-1E)-1llUneeA!ya9KM$)DaNGu57Z5aE>=VST$#vb zFo=uRHr$0M{-ha>h(D_boS4zId;3B|Tpqo|?B?Z@I?G(?&Iei+-{9L_A9=h=Qfn-U z1wIUnQe9!z%_j$F_{rf&`ZFSott09gY~qrf@g3O=Y>vzAnXCyL!@(BqWa)Zqt!#_k zfZHuwS52|&&)aK;CHq9V-t9qt0au{$#6c*R#e5n3rje0hic7c7m{kW$p(_`wB=Gw7 z4k`1Hi;Mc@yA7dp@r~?@rfw)TkjAW++|pkfOG}0N|2guek}j8Zen(!+@7?qt_7ndX zB=BG6WJ31#F3#Vk3=aQr8T)3`{=p9nBHlKzE0I@v`{vJ}h8pd6vby&VgFhzH|q;=aonunAXL6G2y(X^CtAhWr*jI zGjpY@raZDQkg*aMq}Ni6cRF z{oWv}5`nhSAv>usX}m^GHt`f(t8@zHc?K|y5Zi=4G*UG1Sza{$Dpj%X8 zzEXaKT5N6F5j4J|w#qlZP!zS7BT)9b+!ZSJdToqJts1c!)fwih4d31vfb{}W)EgcA zH2pZ^8_k$9+WD2n`6q5XbOy8>3pcYH9 z07eUB+p}YD@AH!}p!iKv><2QF-Y^&xx^PAc1F13A{nUeCDg&{hnix#FiO!fe(^&%Qcux!h znu*S!s$&nnkeotYsDthh1dq(iQrE|#f_=xVgfiiL&-5eAcC-> z5L0l|DVEM$#ulf{bj+Y~7iD)j<~O8CYM8GW)dQGq)!mck)FqoL^X zwNdZb3->hFrbHFm?hLvut-*uK?zXn3q1z|UX{RZ;-WiLoOjnle!xs+W0-8D)kjU#R z+S|A^HkRg$Ij%N4v~k`jyHffKaC~=wg=9)V5h=|kLQ@;^W!o2^K+xG&2n`XCd>OY5Ydi= zgHH=lgy++erK8&+YeTl7VNyVm9-GfONlSlVb3)V9NW5tT!cJ8d7X)!b-$fb!s76{t z@d=Vg-5K_sqHA@Zx-L_}wVnc@L@GL9_K~Zl(h5@AR#FAiKad8~KeWCo@mgXIQ#~u{ zgYFwNz}2b6Vu@CP0XoqJ+dm8px(5W5-Jpis97F`+KM)TuP*X8H@zwiVKDKGVp59pI zifNHZr|B+PG|7|Y<*tqap0CvG7tbR1R>jn70t1X`XJixiMVcHf%Ez*=xm1(CrTSDt z0cle!+{8*Ja&EOZ4@$qhBuKQ$U95Q%rc7tg$VRhk?3=pE&n+T3upZg^ZJc9~c2es% zh7>+|mrmA-p&v}|OtxqmHIBgUxL~^0+cpfkSK2mhh+4b=^F1Xgd2)}U*Yp+H?ls#z zrLxWg_hm}AfK2XYWr!rzW4g;+^^&bW%LmbtRai9f3PjU${r@n`JThy-cphbcwn)rq9{A$Ht`lmYKxOacy z6v2R(?gHhD5@&kB-Eg?4!hAoD7~(h>(R!s1c1Hx#s9vGPePUR|of32bS`J5U5w{F) z>0<^ktO2UHg<0{oxkdOQ;}coZDQph8p6ruj*_?uqURCMTac;>T#v+l1Tc~%^k-Vd@ zkc5y35jVNc49vZpZx;gG$h{%yslDI%Lqga1&&;mN{Ush1c7p>7e-(zp}6E7f-XmJb4nhk zb8zS+{IVbL$QVF8pf8}~kQ|dHJAEATmmnrb_wLG}-yHe>W|A&Y|;muy-d^t^<&)g5SJfaTH@P1%euONny=mxo+C z4N&w#biWY41r8k~468tvuYVh&XN&d#%QtIf9;iVXfWY)#j=l`&B~lqDT@28+Y!0E+MkfC}}H*#(WKKdJJq=O$vNYCb(ZG@p{fJgu;h z21oHQ(14?LeT>n5)s;uD@5&ohU!@wX8w*lB6i@GEH0pM>YTG+RAIWZD;4#F1&F%Jp zXZUml2sH0!lYJT?&sA!qwez6cXzJEd(1ZC~kT5kZSp7(@=H2$Azb_*W&6aA|9iwCL zdX7Q=42;@dspHDwYE?miGX#L^3xD&%BI&fN9^;`v4OjQXPBaBmOF1;#C)8XA(WFlH zycro;DS2?(G&6wkr6rqC>rqDv3nfGw3hmN_9Al>TgvmGsL8_hXx09};l9Ow@)F5@y z#VH5WigLDwZE4nh^7&@g{1FV^UZ%_LJ-s<{HN*2R$OPg@R~Z`c-ET*2}XB@9xvAjrK&hS=f|R8Gr9 zr|0TGOsI7RD+4+2{ZiwdVD@2zmg~g@^D--YL;6UYGSM8i$NbQr4!c7T9rg!8;TM0E zT#@?&S=t>GQm)*ua|?TLT2ktj#`|R<_*FAkOu2Pz$wEc%-=Y9V*$&dg+wIei3b*O8 z2|m$!jJG!J!ZGbbIa!(Af~oSyZV+~M1qGvelMzPNE_%5?c2>;MeeG2^N?JDKjFYCy z7SbPWH-$cWF9~fX%9~v99L!G(wi!PFp>rB!9xj7=Cv|F+7CsGNwY0Q_J%FID%C^CBZQfJ9K(HK%k31j~e#&?hQ zNuD6gRkVckU)v+53-fc} z7ZCzYN-5RG4H7;>>Hg?LU9&5_aua?A0)0dpew1#MMlu)LHe(M;OHjHIUl7|%%)YPo z0cBk;AOY00%Fe6heoN*$(b<)Cd#^8Iu;-2v@>cE-OB$icUF9EEoaC&q8z9}jMTT2I z8`9;jT%z0;dy4!8U;GW{i`)3!c6&oWY`J3669C!tM<5nQFFrFRglU8f)5Op$GtR-3 zn!+SPCw|04sv?%YZ(a7#L?vsdr7ss@WKAw&A*}-1S|9~cL%uA+E~>N6QklFE>8W|% zyX-qAUGTY1hQ-+um`2|&ji0cY*(qN!zp{YpDO-r>jPk*yuVSay<)cUt`t@&FPF_&$ zcHwu1(SQ`I-l8~vYyUxm@D1UEdFJ$f5Sw^HPH7b!9 zzYT3gKMF((N(v0#4f_jPfVZ=ApN^jQJe-X$`A?X+vWjLn_%31KXE*}5_}d8 zw_B1+a#6T1?>M{ronLbHIlEsMf93muJ7AH5h%;i99<~JX^;EAgEB1uHralD*!aJ@F zV2ruuFe9i2Q1C?^^kmVy921eb=tLDD43@-AgL^rQ3IO9%+vi_&R2^dpr}x{bCVPej z7G0-0o64uyWNtr*loIvslyo0%)KSDDKjfThe0hcqs)(C-MH1>bNGBDRTW~scy_{w} zp^aq8Qb!h9Lwielq%C1b8=?Z=&U)ST&PHbS)8Xzjh2DF?d{iAv)Eh)wsUnf>UtXN( zL7=$%YrZ#|^c{MYmhn!zV#t*(jdmYdCpwqpZ{v&L8KIuKn`@IIZfp!uo}c;7J57N` zAxyZ-uA4=Gzl~Ovycz%MW9ZL7N+nRo&1cfNn9(1H5eM;V_4Z_qVann7F>5f>%{rf= zPBZFaV@_Sobl?Fy&KXyzFDV*FIdhS5`Uc~S^Gjo)aiTHgn#<0C=9o-a-}@}xDor;D zZyZ|fvf;+=3MZd>SR1F^F`RJEZo+|MdyJYQAEauKu%WDol~ayrGU3zzbHKsnHKZ*z zFiwUkL@DZ>!*x05ql&EBq@_Vqv83&?@~q5?lVmffQZ+V-=qL+!u4Xs2Z2zdCQ3U7B&QR9_Iggy} z(om{Y9eU;IPe`+p1ifLx-XWh?wI)xU9ik+m#g&pGdB5Bi<`PR*?92lE0+TkRuXI)z z5LP!N2+tTc%cB6B1F-!fj#}>S!vnpgVU~3!*U1ej^)vjUH4s-bd^%B=ItQqDCGbrEzNQi(dJ`J}-U=2{7-d zK8k^Rlq2N#0G?9&1?HSle2vlkj^KWSBYTwx`2?9TU_DX#J+f+qLiZCqY1TXHFxXZqYMuD@RU$TgcnCC{_(vwZ-*uX)~go#%PK z@}2Km_5aQ~(<3cXeJN6|F8X_1@L%@xTzs}$_*E|a^_URF_qcF;Pfhoe?FTFwvjm1o z8onf@OY@jC2tVcMaZS;|T!Ks(wOgPpRzRnFS-^RZ4E!9dsnj9sFt609a|jJbb1Dt@ z<=Gal2jDEupxUSwWu6zp<<&RnAA;d&4gKVG0iu6g(DsST(4)z6R)zDpfaQ}v{5ARt zyhwvMtF%b-YazR5XLz+oh=mn;y-Mf2a8>7?2v8qX;19y?b>Z5laGHvzH;Nu9S`B8} zI)qN$GbXIQ1VL3lnof^6TS~rvPVg4V?Dl2Bb*K2z4E{5vy<(@@K_cN@U>R!>aUIRnb zL*)=787*cs#zb31zBC49x$`=fkQbMAef)L2$dR{)6BAz!t5U_B#1zZG`^neKSS22oJ#5B=gl%U=WeqL9REF2g zZnfCb0?quf?Ztj$VXvDSWoK`0L=Zxem2q}!XWLoT-kYMOx)!7fcgT35uC~0pySEme z`{wGWTkGr7>+Kb^n;W?BZH6ZP(9tQX%-7zF>vc2}LuWDI(9kh1G#7B99r4x6;_-V+k&c{nPUrR zAXJGRiMe~aup{0qzmLNjS_BC4cB#sXjckx{%_c&^xy{M61xEb>KW_AG5VFXUOjAG4 z^>Qlm9A#1N{4snY=(AmWzatb!ngqiqPbBZ7>Uhb3)dTkSGcL#&SH>iMO-IJBPua`u zo)LWZ>=NZLr758j{%(|uQuZ)pXq_4c!!>s|aDM9#`~1bzK3J1^^D#<2bNCccH7~-X}Ggi!pIIF>uFx%aPARGQsnC8ZQc8lrQ5o~smqOg>Ti^GNme94*w z)JZy{_{#$jxGQ&`M z!OMvZMHR>8*^>eS%o*6hJwn!l8VOOjZQJvh)@tnHVW&*GYPuxqXw}%M!(f-SQf`=L z5;=5w2;%82VMH6Xi&-K3W)o&K^+vJCepWZ-rW%+Dc6X3(){z$@4zjYxQ|}8UIojeC zYZpQ1dU{fy=oTr<4VX?$q)LP}IUmpiez^O&N3E_qPpchGTi5ZM6-2ScWlQq%V&R2Euz zO|Q0Hx>lY1Q1cW5xHv5!0OGU~PVEqSuy#fD72d#O`N!C;o=m+YioGu-wH2k6!t<~K zSr`E=W9)!g==~x9VV~-8{4ZN9{~-A9zJpRe%NGg$+MDuI-dH|b@BD)~>pPCGUNNzY zMDg||0@XGQgw`YCt5C&A{_+J}mvV9Wg{6V%2n#YSRN{AP#PY?1FF1#|vO_%e+#`|2*~wGAJaeRX6=IzFNeWhz6gJc8+(03Ph4y6ELAm=AkN7TOgMUEw*N{= z_)EIDQx5q22oUR+_b*tazu9+pX|n1c*IB-}{DqIj z-?E|ks{o3AGRNb;+iKcHkZvYJvFsW&83RAPs1Oh@IWy%l#5x2oUP6ZCtv+b|q>jsf zZ_9XO;V!>n`UxH1LvH8)L4?8raIvasEhkpQoJ`%!5rBs!0Tu(s_D{`4opB;57)pkX z4$A^8CsD3U5*!|bHIEqsn~{q+Ddj$ME@Gq4JXtgVz&7l{Ok!@?EA{B3P~NAqb9)4? zkQo30A^EbHfQ@87G5&EQTd`frrwL)&Yw?%-W@uy^Gn23%j?Y!Iea2xw<-f;esq zf%w5WN@E1}zyXtYv}}`U^B>W`>XPmdLj%4{P298|SisrE;7HvXX;A}Ffi8B#3Lr;1 zHt6zVb`8{#+e$*k?w8|O{Uh|&AG}|DG1PFo1i?Y*cQm$ZwtGcVgMwtBUDa{~L1KT-{jET4w60>{KZ27vXrHJ;fW{6| z=|Y4!&UX020wU1>1iRgB@Q#m~1^Z^9CG1LqDhYBrnx%IEdIty z!46iOoKlKs)c}newDG)rWUikD%j`)p z_w9Ph&e40=(2eBy;T!}*1p1f1SAUDP9iWy^u^Ubdj21Kn{46;GR+hwLO=4D11@c~V zI8x&(D({K~Df2E)Nx_yQvYfh4;MbMJ@Z}=Dt3_>iim~QZ*hZIlEs0mEb z_54+&*?wMD`2#vsQRN3KvoT>hWofI_Vf(^C1ff-Ike@h@saEf7g}<9T`W;HAne-Nd z>RR+&SP35w)xKn8^U$7))PsM!jKwYZ*RzEcG-OlTrX3}9a{q%#Un5E5W{{hp>w~;` zGky+3(vJvQyGwBo`tCpmo0mo((?nM8vf9aXrrY1Ve}~TuVkB(zeds^jEfI}xGBCM2 zL1|#tycSaWCurP+0MiActG3LCas@_@tao@(R1ANlwB$4K53egNE_;!&(%@Qo$>h`^1S_!hN6 z)vZtG$8fN!|BXBJ=SI>e(LAU(y(i*PHvgQ2llulxS8>qsimv7yL}0q_E5WiAz7)(f zC(ahFvG8&HN9+6^jGyLHM~$)7auppeWh_^zKk&C_MQ~8;N??OlyH~azgz5fe^>~7F zl3HnPN3z-kN)I$4@`CLCMQx3sG~V8hPS^}XDXZrQA>}mQPw%7&!sd(Pp^P=tgp-s^ zjl}1-KRPNWXgV_K^HkP__SR`S-|OF0bR-N5>I%ODj&1JUeAQ3$9i;B~$S6}*^tK?= z**%aCiH7y?xdY?{LgVP}S0HOh%0%LI$wRx;$T|~Y8R)Vdwa}kGWv8?SJVm^>r6+%I z#lj1aR94{@MP;t-scEYQWc#xFA30^}?|BeX*W#9OL;Q9#WqaaM546j5j29((^_8Nu z4uq}ESLr~r*O7E7$D{!k9W>`!SLoyA53i9QwRB{!pHe8um|aDE`Cg0O*{jmor)^t)3`>V>SWN-2VJcFmj^1?~tT=JrP`fVh*t zXHarp=8HEcR#vFe+1a%XXuK+)oFs`GDD}#Z+TJ}Ri`FvKO@ek2ayn}yaOi%(8p%2$ zpEu)v0Jym@f}U|-;}CbR=9{#<^z28PzkkTNvyKvJDZe+^VS2bES3N@Jq!-*}{oQlz z@8bgC_KnDnT4}d#&Cpr!%Yb?E!brx0!eVOw~;lLwUoz#Np%d$o%9scc3&zPm`%G((Le|6o1 zM(VhOw)!f84zG^)tZ1?Egv)d8cdNi+T${=5kV+j;Wf%2{3g@FHp^Gf*qO0q!u$=m9 zCaY`4mRqJ;FTH5`a$affE5dJrk~k`HTP_7nGTY@B9o9vvnbytaID;^b=Tzp7Q#DmD zC(XEN)Ktn39z5|G!wsVNnHi) z%^q94!lL|hF`IijA^9NR0F$@h7k5R^ljOW(;Td9grRN0Mb)l_l7##{2nPQ@?;VjXv zaLZG}yuf$r$<79rVPpXg?6iiieX|r#&`p#Con2i%S8*8F}(E) zI5E6c3tG*<;m~6>!&H!GJ6zEuhH7mkAzovdhLy;)q z{H2*8I^Pb}xC4s^6Y}6bJvMu=8>g&I)7!N!5QG$xseeU#CC?ZM-TbjsHwHgDGrsD= z{%f;@Sod+Ch66Ko2WF~;Ty)v>&x^aovCbCbD7>qF*!?BXmOV3(s|nxsb*Lx_2lpB7 zokUnzrk;P=T-&kUHO}td+Zdj!3n&NR?K~cRU zAXU!DCp?51{J4w^`cV#ye}(`SQhGQkkMu}O3M*BWt4UsC^jCFUy;wTINYmhD$AT;4 z?Xd{HaJjP`raZ39qAm;%beDbrLpbRf(mkKbANan7XsL>_pE2oo^$TgdidjRP!5-`% zv0d!|iKN$c0(T|L0C~XD0aS8t{*&#LnhE;1Kb<9&=c2B+9JeLvJr*AyyRh%@jHej=AetOMSlz^=!kxX>>B{2B1uIrQyfd8KjJ+DBy!h)~*(!|&L4^Q_07SQ~E zcemVP`{9CwFvPFu7pyVGCLhH?LhEVb2{7U+Z_>o25#+3<|8%1T^5dh}*4(kfJGry} zm%r#hU+__Z;;*4fMrX=Bkc@7|v^*B;HAl0((IBPPii%X9+u3DDF6%bI&6?Eu$8&aWVqHIM7mK6?Uvq$1|(-T|)IV<>e?!(rY zqkmO1MRaLeTR=)io(0GVtQT@s6rN%C6;nS3@eu;P#ry4q;^O@1ZKCJyp_Jo)Ty^QW z+vweTx_DLm{P-XSBj~Sl<%_b^$=}odJ!S2wAcxenmzFGX1t&Qp8Vxz2VT`uQsQYtdn&_0xVivIcxZ_hnrRtwq4cZSj1c-SG9 z7vHBCA=fd0O1<4*=lu$6pn~_pVKyL@ztw1swbZi0B?spLo56ZKu5;7ZeUml1Ws1?u zqMf1p{5myAzeX$lAi{jIUqo1g4!zWLMm9cfWcnw`k6*BR^?$2(&yW?>w;G$EmTA@a z6?y#K$C~ZT8+v{87n5Dm&H6Pb_EQ@V0IWmG9cG=O;(;5aMWWrIPzz4Q`mhK;qQp~a z+BbQrEQ+w{SeiuG-~Po5f=^EvlouB@_|4xQXH@A~KgpFHrwu%dwuCR)=B&C(y6J4J zvoGk9;lLs9%iA-IJGU#RgnZZR+@{5lYl8(e1h6&>Vc_mvg0d@);X zji4T|n#lB!>pfL|8tQYkw?U2bD`W{na&;*|znjmalA&f;*U++_aBYerq;&C8Kw7mI z7tsG*?7*5j&dU)Lje;^{D_h`%(dK|pB*A*1(Jj)w^mZ9HB|vGLkF1GEFhu&rH=r=8 zMxO42e{Si6$m+Zj`_mXb&w5Q(i|Yxyg?juUrY}78uo@~3v84|8dfgbPd0iQJRdMj< zncCNGdMEcsxu#o#B5+XD{tsg*;j-eF8`mp~K8O1J!Z0+>0=7O=4M}E?)H)ENE;P*F z$Ox?ril_^p0g7xhDUf(q652l|562VFlC8^r8?lQv;TMvn+*8I}&+hIQYh2 z1}uQQaag&!-+DZ@|C+C$bN6W;S-Z@)d1|en+XGvjbOxCa-qAF*LA=6s(Jg+g;82f$ z(Vb)8I)AH@cdjGFAR5Rqd0wiNCu!xtqWbcTx&5kslzTb^7A78~Xzw1($UV6S^VWiP zFd{Rimd-0CZC_Bu(WxBFW7+k{cOW7DxBBkJdJ;VsJ4Z@lERQr%3eVv&$%)b%<~ zCl^Y4NgO}js@u{|o~KTgH}>!* z_iDNqX2(As7T0xivMH|3SC1ivm8Q}6Ffcd7owUKN5lHAtzMM4<0v+ykUT!QiowO;`@%JGv+K$bBx@*S7C8GJVqQ_K>12}M`f_Ys=S zKFh}HM9#6Izb$Y{wYzItTy+l5U2oL%boCJn?R3?jP@n$zSIwlmyGq30Cw4QBO|14` zW5c);AN*J3&eMFAk$SR~2k|&+&Bc$e>s%c{`?d~85S-UWjA>DS5+;UKZ}5oVa5O(N zqqc@>)nee)+4MUjH?FGv%hm2{IlIF-QX}ym-7ok4Z9{V+ZHVZQl$A*x!(q%<2~iVv znUa+BX35&lCb#9VE-~Y^W_f;Xhl%vgjwdjzMy$FsSIj&ok}L+X`4>J=9BkN&nu^E*gbhj3(+D>C4E z@Fwq_=N)^bKFSHTzZk?-gNU$@l}r}dwGyh_fNi=9b|n}J>&;G!lzilbWF4B}BBq4f zYIOl?b)PSh#XTPp4IS5ZR_2C!E)Z`zH0OW%4;&~z7UAyA-X|sh9@~>cQW^COA9hV4 zXcA6qUo9P{bW1_2`eo6%hgbN%(G-F1xTvq!sc?4wN6Q4`e9Hku zFwvlAcRY?6h^Fj$R8zCNEDq8`=uZB8D-xn)tA<^bFFy}4$vA}Xq0jAsv1&5!h!yRA zU()KLJya5MQ`q&LKdH#fwq&(bNFS{sKlEh_{N%{XCGO+po#(+WCLmKW6&5iOHny>g z3*VFN?mx!16V5{zyuMWDVP8U*|BGT$(%IO|)?EF|OI*sq&RovH!N%=>i_c?K*A>>k zyg1+~++zY4Q)J;VWN0axhoIKx;l&G$gvj(#go^pZskEVj8^}is3Jw26LzYYVos0HX zRPvmK$dVxM8(Tc?pHFe0Z3uq){{#OK3i-ra#@+;*=ui8)y6hsRv z4Fxx1c1+fr!VI{L3DFMwXKrfl#Q8hfP@ajgEau&QMCxd{g#!T^;ATXW)nUg&$-n25 zruy3V!!;{?OTobo|0GAxe`Acn3GV@W=&n;~&9 zQM>NWW~R@OYORkJAo+eq1!4vzmf9K%plR4(tB@TR&FSbDoRgJ8qVcH#;7lQub*nq&?Z>7WM=oeEVjkaG zT#f)=o!M2DO5hLR+op>t0CixJCIeXH*+z{-XS|%jx)y(j&}Wo|3!l7{o)HU3m7LYyhv*xF&tq z%IN7N;D4raue&&hm0xM=`qv`+TK@;_xAcGKuK(2|75~ar2Yw)geNLSmVxV@x89bQu zpViVKKnlkwjS&&c|-X6`~xdnh}Ps)Hs z4VbUL^{XNLf7_|Oi>tA%?SG5zax}esF*FH3d(JH^Gvr7Rp*n=t7frH!U;!y1gJB^i zY_M$KL_}mW&XKaDEi9K-wZR|q*L32&m+2n_8lq$xRznJ7p8}V>w+d@?uB!eS3#u<} zIaqi!b!w}a2;_BfUUhGMy#4dPx>)_>yZ`ai?Rk`}d0>~ce-PfY-b?Csd(28yX22L% zI7XI>OjIHYTk_@Xk;Gu^F52^Gn6E1&+?4MxDS2G_#PQ&yXPXP^<-p|2nLTb@AAQEY zI*UQ9Pmm{Kat}wuazpjSyXCdnrD&|C1c5DIb1TnzF}f4KIV6D)CJ!?&l&{T)e4U%3HTSYqsQ zo@zWB1o}ceQSV)<4G<)jM|@@YpL+XHuWsr5AYh^Q{K=wSV99D~4RRU52FufmMBMmd z_H}L#qe(}|I9ZyPRD6kT>Ivj&2Y?qVZq<4bG_co_DP`sE*_Xw8D;+7QR$Uq(rr+u> z8bHUWbV19i#)@@G4bCco@Xb<8u~wVDz9S`#k@ciJtlu@uP1U0X?yov8v9U3VOig2t zL9?n$P3=1U_Emi$#slR>N5wH-=J&T=EdUHA}_Z zZIl3nvMP*AZS9{cDqFanrA~S5BqxtNm9tlu;^`)3X&V4tMAkJ4gEIPl= zoV!Gyx0N{3DpD@)pv^iS*dl2FwANu;1;%EDl}JQ7MbxLMAp>)UwNwe{=V}O-5C*>F zu?Ny+F64jZn<+fKjF01}8h5H_3pey|;%bI;SFg$w8;IC<8l|3#Lz2;mNNik6sVTG3 z+Su^rIE#40C4a-587$U~%KedEEw1%r6wdvoMwpmlXH$xPnNQN#f%Z7|p)nC>WsuO= z4zyqapLS<8(UJ~Qi9d|dQijb_xhA2)v>la)<1md5s^R1N&PiuA$^k|A<+2C?OiHbj z>Bn$~t)>Y(Zb`8hW7q9xQ=s>Rv81V+UiuZJc<23HplI88isqRCId89fb`Kt|CxVIg znWcwprwXnotO>3s&Oypkte^9yJjlUVVxSe%_xlzmje|mYOVPH^vjA=?6xd0vaj0Oz zwJ4OJNiFdnHJX3rw&inskjryukl`*fRQ#SMod5J|KroJRsVXa5_$q7whSQ{gOi*s0 z1LeCy|JBWRsDPn7jCb4s(p|JZiZ8+*ExC@Vj)MF|*Vp{B(ziccSn`G1Br9bV(v!C2 z6#?eqpJBc9o@lJ#^p-`-=`4i&wFe>2)nlPK1p9yPFzJCzBQbpkcR>={YtamIw)3nt z(QEF;+)4`>8^_LU)_Q3 zC5_7lgi_6y>U%m)m@}Ku4C}=l^J=<<7c;99ec3p{aR+v=diuJR7uZi%aQv$oP?dn?@6Yu_+*^>T0ptf(oobdL;6)N-I!TO`zg^Xbv3#L0I~sn@WGk-^SmPh5>W+LB<+1PU}AKa?FCWF|qMNELOgdxR{ zbqE7@jVe+FklzdcD$!(A$&}}H*HQFTJ+AOrJYnhh}Yvta(B zQ_bW4Rr;R~&6PAKwgLWXS{Bnln(vUI+~g#kl{r+_zbngT`Y3`^Qf=!PxN4IYX#iW4 zucW7@LLJA9Zh3(rj~&SyN_pjO8H&)|(v%!BnMWySBJV=eSkB3YSTCyIeJ{i;(oc%_hk{$_l;v>nWSB)oVeg+blh=HB5JSlG_r7@P z3q;aFoZjD_qS@zygYqCn=;Zxjo!?NK!%J$ z52lOP`8G3feEj+HTp@Tnn9X~nG=;tS+z}u{mQX_J0kxtr)O30YD%oo)L@wy`jpQYM z@M>Me=95k1p*FW~rHiV1CIfVc{K8r|#Kt(ApkXKsDG$_>76UGNhHExFCw#Ky9*B-z zNq2ga*xax!HMf_|Vp-86r{;~YgQKqu7%szk8$hpvi_2I`OVbG1doP(`gn}=W<8%Gn z%81#&WjkH4GV;4u43EtSW>K_Ta3Zj!XF?;SO3V#q=<=>Tc^@?A`i;&`-cYj|;^ zEo#Jl5zSr~_V-4}y8pnufXLa80vZY4z2ko7fj>DR)#z=wWuS1$$W!L?(y}YC+yQ|G z@L&`2upy3f>~*IquAjkVNU>}c10(fq#HdbK$~Q3l6|=@-eBbo>B9(6xV`*)sae58*f zym~RRVx;xoCG3`JV`xo z!lFw)=t2Hy)e!IFs?0~7osWk(d%^wxq&>_XD4+U#y&-VF%4z?XH^i4w`TxpF{`XhZ z%G}iEzf!T(l>g;W9<~K+)$g!{UvhW{E0Lis(S^%I8OF&%kr!gJ&fMOpM=&=Aj@wuL zBX?*6i51Qb$uhkwkFYkaD_UDE+)rh1c;(&Y=B$3)J&iJfQSx!1NGgPtK!$c9OtJuu zX(pV$bfuJpRR|K(dp@^j}i&HeJOh@|7lWo8^$*o~Xqo z5Sb+!EtJ&e@6F+h&+_1ETbg7LfP5GZjvIUIN3ibCOldAv z)>YdO|NH$x7AC8dr=<2ekiY1%fN*r~e5h6Yaw<{XIErujKV~tiyrvV_DV0AzEknC- zR^xKM3i<1UkvqBj3C{wDvytOd+YtDSGu!gEMg+!&|8BQrT*|p)(dwQLEy+ zMtMzij3zo40)CA!BKZF~yWg?#lWhqD3@qR)gh~D{uZaJO;{OWV8XZ_)J@r3=)T|kt zUS1pXr6-`!Z}w2QR7nP%d?ecf90;K_7C3d!UZ`N(TZoWNN^Q~RjVhQG{Y<%E1PpV^4 z-m-K+$A~-+VDABs^Q@U*)YvhY4Znn2^w>732H?NRK(5QSS$V@D7yz2BVX4)f5A04~$WbxGOam22>t&uD)JB8-~yiQW6ik;FGblY_I>SvB_z2?PS z*Qm&qbKI{H1V@YGWzpx`!v)WeLT02};JJo*#f$a*FH?IIad-^(;9XC#YTWN6;Z6+S zm4O1KH=#V@FJw7Pha0!9Vb%ZIM$)a`VRMoiN&C|$YA3~ZC*8ayZRY^fyuP6$n%2IU z$#XceYZeqLTXw(m$_z|33I$B4k~NZO>pP6)H_}R{E$i%USGy{l{-jOE;%CloYPEU+ zRFxOn4;7lIOh!7abb23YKD+_-?O z0FP9otcAh+oSj;=f#$&*ExUHpd&e#bSF%#8*&ItcL2H$Sa)?pt0Xtf+t)z$_u^wZi z44oE}r4kIZGy3!Mc8q$B&6JqtnHZ>Znn!Zh@6rgIu|yU+zG8q`q9%B18|T|oN3zMq z`l&D;U!OL~%>vo&q0>Y==~zLiCZk4v%s_7!9DxQ~id1LLE93gf*gg&2$|hB#j8;?3 z5v4S;oM6rT{Y;I+#FdmNw z){d%tNM<<#GN%n9ox7B=3#;u7unZ~tLB_vRZ52a&2=IM)2VkXm=L+Iqq~uk#Dug|x z>S84e+A7EiOY5lj*!q?6HDkNh~0g;0Jy(al!ZHHDtur9T$y-~)94HelX1NHjXWIM7UAe}$?jiz z9?P4`I0JM=G5K{3_%2jPLC^_Mlw?-kYYgb7`qGa3@dn|^1fRMwiyM@Ch z;CB&o7&&?c5e>h`IM;Wnha0QKnEp=$hA8TJgR-07N~U5(>9vJzeoFsSRBkDq=x(YgEMpb=l4TDD`2 zwVJpWGTA_u7}?ecW7s6%rUs&NXD3+n;jB86`X?8(l3MBo6)PdakI6V6a}22{)8ilT zM~T*mU}__xSy|6XSrJ^%lDAR3Lft%+yxC|ZUvSO_nqMX!_ul3;R#*{~4DA=h$bP)%8Yv9X zyp><|e8=_ttI}ZAwOd#dlnSjck#6%273{E$kJuCGu=I@O)&6ID{nWF5@gLb16sj|&Sb~+du4e4O_%_o`Ix4NRrAsyr1_}MuP94s>de8cH-OUkVPk3+K z&jW)It9QiU-ti~AuJkL`XMca8Oh4$SyJ=`-5WU<{cIh+XVH#e4d&zive_UHC!pN>W z3TB;Mn5i)9Qn)#6@lo4QpI3jFYc0~+jS)4AFz8fVC;lD^+idw^S~Qhq>Tg(!3$yLD zzktzoFrU@6s4wwCMz}edpF5i5Q1IMmEJQHzp(LAt)pgN3&O!&d?3W@6U4)I^2V{;- z6A(?zd93hS*uQmnh4T)nHnE{wVhh(=MMD(h(P4+^p83Om6t<*cUW>l(qJzr%5vp@K zN27ka(L{JX=1~e2^)F^i=TYj&;<7jyUUR2Bek^A8+3Up*&Xwc{)1nRR5CT8vG>ExV zHnF3UqXJOAno_?bnhCX-&kwI~Ti8t4`n0%Up>!U`ZvK^w2+0Cs-b9%w%4`$+To|k= zKtgc&l}P`*8IS>8DOe?EB84^kx4BQp3<7P{Pq}&p%xF_81pg!l2|u=&I{AuUgmF5n zJQCTLv}%}xbFGYtKfbba{CBo)lWW%Z>i(_NvLhoQZ*5-@2l&x>e+I~0Nld3UI9tdL zRzu8}i;X!h8LHVvN?C+|M81e>Jr38%&*9LYQec9Ax>?NN+9(_>XSRv&6hlCYB`>Qm z1&ygi{Y()OU4@D_jd_-7vDILR{>o|7-k)Sjdxkjgvi{@S>6GqiF|o`*Otr;P)kLHN zZkpts;0zw_6;?f(@4S1FN=m!4^mv~W+lJA`&7RH%2$)49z0A+8@0BCHtj|yH--AEL z0tW6G%X-+J+5a{5*WKaM0QDznf;V?L5&uQw+yegDNDP`hA;0XPYc6e0;Xv6|i|^F2WB)Z$LR|HR4 zTQsRAby9(^Z@yATyOgcfQw7cKyr^3Tz7lc7+JEwwzA7)|2x+PtEb>nD(tpxJQm)Kn zW9K_*r!L%~N*vS8<5T=iv|o!zTe9k_2jC_j*7ik^M_ zaf%k{WX{-;0*`t`G!&`eW;gChVXnJ-Rn)To8vW-?>>a%QU1v`ZC=U)f8iA@%JG0mZ zDqH;~mgBnrCP~1II<=V9;EBL)J+xzCoiRBaeH&J6rL!{4zIY8tZka?_FBeQeNO3q6 zyG_alW54Ba&wQf{&F1v-r1R6ID)PTsqjIBc+5MHkcW5Fnvi~{-FjKe)t1bl}Y;z@< z=!%zvpRua>>t_x}^}z0<7MI!H2v6|XAyR9!t50q-A)xk0nflgF4*OQlCGK==4S|wc zRMsSscNhRzHMBU8TdcHN!q^I}x0iXJ%uehac|Zs_B$p@CnF)HeXPpB_Za}F{<@6-4 zl%kml@}kHQ(ypD8FsPJ2=14xXJE|b20RUIgs!2|R3>LUMGF6X*B_I|$`Qg=;zm7C z{mEDy9dTmPbued7mlO@phdmAmJ7p@GR1bjCkMw6*G7#4+`k>fk1czdJUB!e@Q(~6# zwo%@p@V5RL0ABU2LH7Asq^quDUho@H>eTZH9f*no9fY0T zD_-9px3e}A!>>kv5wk91%C9R1J_Nh!*&Kk$J3KNxC}c_@zlgpJZ+5L)Nw|^p=2ue}CJtm;uj*Iqr)K})kA$xtNUEvX;4!Px*^&9T_`IN{D z{6~QY=Nau6EzpvufB^hflc#XIsSq0Y9(nf$d~6ZwK}fal92)fr%T3=q{0mP-EyP_G z)UR5h@IX}3Qll2b0oCAcBF>b*@Etu*aTLPU<%C>KoOrk=x?pN!#f_Og-w+;xbFgjQ zXp`et%lDBBh~OcFnMKMUoox0YwBNy`N0q~bSPh@+enQ=4RUw1) zpovN`QoV>vZ#5LvC;cl|6jPr}O5tu!Ipoyib8iXqy}TeJ;4+_7r<1kV0v5?Kv>fYp zg>9L`;XwXa&W7-jf|9~uP2iyF5`5AJ`Q~p4eBU$MCC00`rcSF>`&0fbd^_eqR+}mK z4n*PMMa&FOcc)vTUR zlDUAn-mh`ahi_`f`=39JYTNVjsTa_Y3b1GOIi)6dY)D}xeshB0T8Eov5%UhWd1)u}kjEQ|LDo{tqKKrYIfVz~@dp!! zMOnah@vp)%_-jDTUG09l+;{CkDCH|Q{NqX*uHa1YxFShy*1+;J`gywKaz|2Q{lG8x zP?KBur`}r`!WLKXY_K;C8$EWG>jY3UIh{+BLv0=2)KH%P}6xE2kg)%(-uA6lC?u8}{K(#P*c zE9C8t*u%j2r_{;Rpe1A{9nNXU;b_N0vNgyK!EZVut~}+R2rcbsHilqsOviYh-pYX= zHw@53nlmwYI5W5KP>&`dBZe0Jn?nAdC^HY1wlR6$u^PbpB#AS&5L6zqrXN&7*N2Q` z+Rae1EwS)H=aVSIkr8Ek^1jy2iS2o7mqm~Mr&g5=jjt7VxwglQ^`h#Mx+x2v|9ZAwE$i_9918MjJxTMr?n!bZ6n$}y11u8I9COTU`Z$Fi z!AeAQLMw^gp_{+0QTEJrhL424pVDp%wpku~XRlD3iv{vQ!lAf!_jyqd_h}+Tr1XG| z`*FT*NbPqvHCUsYAkFnM`@l4u_QH&bszpUK#M~XLJt{%?00GXY?u_{gj3Hvs!=N(I z(=AuWPijyoU!r?aFTsa8pLB&cx}$*%;K$e*XqF{~*rA-qn)h^!(-;e}O#B$|S~c+U zN4vyOK0vmtx$5K!?g*+J@G1NmlEI=pyZXZ69tAv=@`t%ag_Hk{LP~OH9iE)I= zaJ69b4kuCkV0V zo(M0#>phpQ_)@j;h%m{-a*LGi(72TP)ws2w*@4|C-3+;=5DmC4s7Lp95%n%@Ko zfdr3-a7m*dys9iIci$A=4NPJ`HfJ;hujLgU)ZRuJI`n;Pw|yksu!#LQnJ#dJysgNb z@@qwR^wrk(jbq4H?d!lNyy72~Dnn87KxsgQ!)|*m(DRM+eC$wh7KnS-mho3|KE)7h zK3k;qZ;K1Lj6uEXLYUYi)1FN}F@-xJ z@@3Hb84sl|j{4$3J}aTY@cbX@pzB_qM~APljrjju6P0tY{C@ zpUCOz_NFmALMv1*blCcwUD3?U6tYs+N%cmJ98D%3)%)Xu^uvzF zS5O!sc#X6?EwsYkvPo6A%O8&y8sCCQH<%f2togVwW&{M;PR!a(ZT_A+jVAbf{@5kL zB@Z(hb$3U{T_}SKA_CoQVU-;j>2J=L#lZ~aQCFg-d<9rzs$_gO&d5N6eFSc z1ml8)P*FSi+k@!^M9nDWR5e@ATD8oxtDu=36Iv2!;dZzidIS(PCtEuXAtlBb1;H%Z zwnC^Ek*D)EX4#Q>R$$WA2sxC_t(!!6Tr?C#@{3}n{<^o;9id1RA&-Pig1e-2B1XpG zliNjgmd3c&%A}s>qf{_j#!Z`fu0xIwm4L0)OF=u(OEmp;bLCIaZX$&J_^Z%4Sq4GZ zPn6sV_#+6pJmDN_lx@1;Zw6Md_p0w9h6mHtzpuIEwNn>OnuRSC2=>fP^Hqgc)xu^4 z<3!s`cORHJh#?!nKI`Et7{3C27+EuH)Gw1f)aoP|B3y?fuVfvpYYmmukx0ya-)TQX zR{ggy5cNf4X|g)nl#jC9p>7|09_S7>1D2GTRBUTW zAkQ=JMRogZqG#v;^=11O6@rPPwvJkr{bW-Qg8`q8GoD#K`&Y+S#%&B>SGRL>;ZunM@49!}Uy zN|bBCJ%sO;@3wl0>0gbl3L@1^O60ONObz8ZI7nder>(udj-jt`;yj^nTQ$L9`OU9W zX4alF#$|GiR47%x@s&LV>2Sz2R6?;2R~5k6V>)nz!o_*1Y!$p>BC5&?hJg_MiE6UBy>RkVZj`9UWbRkN-Hk!S`=BS3t3uyX6)7SF#)71*}`~Ogz z1rap5H6~dhBJ83;q-Y<5V35C2&F^JI-it(=5D#v!fAi9p#UwV~2tZQI+W(Dv?1t9? zfh*xpxxO{-(VGB>!Q&0%^YW_F!@aZS#ucP|YaD#>wd1Fv&Z*SR&mc;asi}1G) z_H>`!akh-Zxq9#io(7%;a$)w+{QH)Y$?UK1Dt^4)up!Szcxnu}kn$0afcfJL#IL+S z5gF_Y30j;{lNrG6m~$Ay?)*V9fZuU@3=kd40=LhazjFrau>(Y>SJNtOz>8x_X-BlA zIpl{i>OarVGj1v(4?^1`R}aQB&WCRQzS~;7R{tDZG=HhgrW@B`W|#cdyj%YBky)P= zpxuOZkW>S6%q7U{VsB#G(^FMsH5QuGXhb(sY+!-R8Bmv6Sx3WzSW<1MPPN1!&PurYky(@`bP9tz z52}LH9Q?+FF5jR6-;|+GVdRA!qtd;}*-h&iIw3Tq3qF9sDIb1FFxGbo&fbG5n8$3F zyY&PWL{ys^dTO}oZ#@sIX^BKW*bon=;te9j5k+T%wJ zNJtoN1~YVj4~YRrlZl)b&kJqp+Z`DqT!la$x&&IxgOQw#yZd-nBP3!7FijBXD|IsU8Zl^ zc6?MKpJQ+7ka|tZQLfchD$PD|;K(9FiLE|eUZX#EZxhG!S-63C$jWX1Yd!6-Yxi-u zjULIr|0-Q%D9jz}IF~S%>0(jOqZ(Ln<$9PxiySr&2Oic7vb<8q=46)Ln%Z|<*z5&> z3f~Zw@m;vR(bESB<=Jqkxn(=#hQw42l(7)h`vMQQTttz9XW6^|^8EK7qhju4r_c*b zJIi`)MB$w@9epwdIfnEBR+?~);yd6C(LeMC& zn&&N*?-g&BBJcV;8&UoZi4Lmxcj16ojlxR~zMrf=O_^i1wGb9X-0@6_rpjPYemIin zmJb+;lHe;Yp=8G)Q(L1bzH*}I>}uAqhj4;g)PlvD9_e_ScR{Ipq|$8NvAvLD8MYr}xl=bU~)f%B3E>r3Bu9_t|ThF3C5~BdOve zEbk^r&r#PT&?^V1cb{72yEWH}TXEE}w>t!cY~rA+hNOTK8FAtIEoszp!qqptS&;r$ zaYV-NX96-h$6aR@1xz6_E0^N49mU)-v#bwtGJm)ibygzJ8!7|WIrcb`$XH~^!a#s& z{Db-0IOTFq#9!^j!n_F}#Z_nX{YzBK8XLPVmc&X`fT7!@$U-@2KM9soGbmOSAmqV z{nr$L^MBo_u^Joyf0E^=eo{Rt0{{e$IFA(#*kP@SQd6lWT2-#>` zP1)7_@IO!9lk>Zt?#CU?cuhiLF&)+XEM9B)cS(gvQT!X3`wL*{fArTS;Ak`J<84du zALKPz4}3nlG8Fo^MH0L|oK2-4xIY!~Oux~1sw!+It)&D3p;+N8AgqKI`ld6v71wy8I!eP0o~=RVcFQR2Gr(eP_JbSytoQ$Yt}l*4r@A8Me94y z8cTDWhqlq^qoAhbOzGBXv^Wa4vUz$(7B!mX`T=x_ueKRRDfg&Uc-e1+z4x$jyW_Pm zp?U;-R#xt^Z8Ev~`m`iL4*c#65Nn)q#=Y0l1AuD&+{|8-Gsij3LUZXpM0Bx0u7WWm zH|%yE@-#XEph2}-$-thl+S;__ciBxSSzHveP%~v}5I%u!z_l_KoW{KRx2=eB33umE zIYFtu^5=wGU`Jab8#}cnYry@9p5UE#U|VVvx_4l49JQ;jQdp(uw=$^A$EA$LM%vmE zvdEOaIcp5qX8wX{mYf0;#51~imYYPn4=k&#DsKTxo{_Mg*;S495?OBY?#gv=edYC* z^O@-sd-qa+U24xvcbL0@C7_6o!$`)sVr-jSJE4XQUQ$?L7}2(}Eixqv;L8AdJAVqc zq}RPgpnDb@E_;?6K58r3h4-!4rT4Ab#rLHLX?eMOfluJk=3i1@Gt1i#iA=O`M0@x! z(HtJP9BMHXEzuD93m|B&woj0g6T?f#^)>J>|I4C5?Gam>n9!8CT%~aT;=oco5d6U8 zMXl(=W;$ND_8+DD*?|5bJ!;8ebESXMUKBAf7YBwNVJibGaJ*(2G`F%wx)grqVPjudiaq^Kl&g$8A2 zWMxMr@_$c}d+;_B`#kUX-t|4VKH&_f^^EP0&=DPLW)H)UzBG%%Tra*5 z%$kyZe3I&S#gfie^z5)!twG={3Cuh)FdeA!Kj<-9** zvT*5%Tb`|QbE!iW-XcOuy39>D3oe6x{>&<#E$o8Ac|j)wq#kQzz|ATd=Z0K!p2$QE zPu?jL8Lb^y3_CQE{*}sTDe!2!dtlFjq&YLY@2#4>XS`}v#PLrpvc4*@q^O{mmnr5D zmyJq~t?8>FWU5vZdE(%4cuZuao0GNjp3~Dt*SLaxI#g_u>hu@k&9Ho*#CZP~lFJHj z(e!SYlLigyc?&5-YxlE{uuk$9b&l6d`uIlpg_z15dPo*iU&|Khx2*A5Fp;8iK_bdP z?T6|^7@lcx2j0T@x>X7|kuuBSB7<^zeY~R~4McconTxA2flHC0_jFxmSTv-~?zVT| zG_|yDqa9lkF*B6_{j=T>=M8r<0s;@z#h)3BQ4NLl@`Xr__o7;~M&dL3J8fP&zLfDfy z);ckcTev{@OUlZ`bCo(-3? z1u1xD`PKgSg?RqeVVsF<1SLF;XYA@Bsa&cY!I48ZJn1V<3d!?s=St?TLo zC0cNr`qD*M#s6f~X>SCNVkva^9A2ZP>CoJ9bvgXe_c}WdX-)pHM5m7O zrHt#g$F0AO+nGA;7dSJ?)|Mo~cf{z2L)Rz!`fpi73Zv)H=a5K)*$5sf_IZypi($P5 zsPwUc4~P-J1@^3C6-r9{V-u0Z&Sl7vNfmuMY4yy*cL>_)BmQF!8Om9Dej%cHxbIzA zhtV0d{=%cr?;bpBPjt@4w=#<>k5ee=TiWAXM2~tUGfm z$s&!Dm0R^V$}fOR*B^kGaipi~rx~A2cS0;t&khV1a4u38*XRUP~f za!rZMtay8bsLt6yFYl@>-y^31(*P!L^^s@mslZy(SMsv9bVoX`O#yBgEcjCmGpyc* zeH$Dw6vB5P*;jor+JOX@;6K#+xc)Z9B8M=x2a@Wx-{snPGpRmOC$zpsqW*JCh@M2Y z#K+M(>=#d^>Of9C`))h<=Bsy)6zaMJ&x-t%&+UcpLjV`jo4R2025 zXaG8EA!0lQa)|dx-@{O)qP6`$rhCkoQqZ`^SW8g-kOwrwsK8 z3ms*AIcyj}-1x&A&vSq{r=QMyp3CHdWH35!sad#!Sm>^|-|afB+Q;|Iq@LFgqIp#Z zD1%H+3I?6RGnk&IFo|u+E0dCxXz4yI^1i!QTu7uvIEH>i3rR{srcST`LIRwdV1P;W z+%AN1NIf@xxvVLiSX`8ILA8MzNqE&7>%jMzGt9wm78bo9<;h*W84i29^w!>V>{N+S zd`5Zmz^G;f=icvoOZfK5#1ctx*~UwD=ab4DGQXehQ!XYnak*dee%YN$_ZPL%KZuz$ zD;$PpT;HM^$KwtQm@7uvT`i6>Hae1CoRVM2)NL<2-k2PiX=eAx+-6j#JI?M}(tuBW zkF%jjLR)O`gI2fcPBxF^HeI|DWwQWHVR!;;{BXXHskxh8F@BMDn`oEi-NHt;CLymW z=KSv5)3dyzec0T5B*`g-MQ<;gz=nIWKUi9ko<|4I(-E0k$QncH>E4l z**1w&#={&zv4Tvhgz#c29`m|;lU-jmaXFMC11 z*dlXDMEOG>VoLMc>!rApwOu2prKSi*!w%`yzGmS+k(zm*CsLK*wv{S_0WX^8A-rKy zbk^Gf_92^7iB_uUF)EE+ET4d|X|>d&mdN?x@vxKAQk`O+r4Qdu>XGy(a(19g;=jU} zFX{O*_NG>!$@jh!U369Lnc+D~qch3uT+_Amyi}*k#LAAwh}k8IPK5a-WZ81ufD>l> z$4cF}GSz>ce`3FAic}6W4Z7m9KGO?(eWqi@L|5Hq0@L|&2flN1PVl}XgQ2q*_n2s3 zt5KtowNkTYB5b;SVuoXA@i5irXO)A&%7?V`1@HGCB&)Wgk+l|^XXChq;u(nyPB}b3 zY>m5jkxpZgi)zfbgv&ec4Zqdvm+D<?Im*mXweS9H+V>)zF#Zp3)bhl$PbISY{5=_z!8&*Jv~NYtI-g!>fDs zmvL5O^U%!^VaKA9gvKw|5?-jk>~%CVGvctKmP$kpnpfN{D8@X*Aazi$txfa%vd-|E z>kYmV66W!lNekJPom29LdZ%(I+ZLZYTXzTg*to~m?7vp%{V<~>H+2}PQ?PPAq`36R z<%wR8v6UkS>Wt#hzGk#44W<%9S=nBfB);6clKwnxY}T*w21Qc3_?IJ@4gYzC7s;WP zVQNI(M=S=JT#xsZy7G`cR(BP9*je0bfeN8JN5~zY(DDs0t{LpHOIbN);?T-69Pf3R zSNe*&p2%AwXHL>__g+xd4Hlc_vu<25H?(`nafS%)3UPP7_4;gk-9ckt8SJRTv5v0M z_Hww`qPudL?ajIR&X*;$y-`<)6dxx1U~5eGS13CB!lX;3w7n&lDDiArbAhSycd}+b zya_3p@A`$kQy;|NJZ~s44Hqo7Hwt}X86NK=(ey>lgWTtGL6k@Gy;PbO!M%1~Wcn2k zUFP|*5d>t-X*RU8g%>|(wwj*~#l4z^Aatf^DWd1Wj#Q*AY0D^V@sC`M zjJc6qXu0I7Y*2;;gGu!plAFzG=J;1%eIOdn zQA>J&e05UN*7I5@yRhK|lbBSfJ+5Uq;!&HV@xfPZrgD}kE*1DSq^=%{o%|LChhl#0 zlMb<^a6ixzpd{kNZr|3jTGeEzuo}-eLT-)Q$#b{!vKx8Tg}swCni>{#%vDY$Ww$84 zew3c9BBovqb}_&BRo#^!G(1Eg((BScRZ}C)Oz?y`T5wOrv);)b^4XR8 zhJo7+<^7)qB>I;46!GySzdneZ>n_E1oWZY;kf94#)s)kWjuJN1c+wbVoNQcmnv}{> zN0pF+Sl3E}UQ$}slSZeLJrwT>Sr}#V(dVaezCQl2|4LN`7L7v&siYR|r7M(*JYfR$ zst3=YaDw$FSc{g}KHO&QiKxuhEzF{f%RJLKe3p*7=oo`WNP)M(9X1zIQPP0XHhY3c znrP{$4#Ol$A0s|4S7Gx2L23dv*Gv2o;h((XVn+9+$qvm}s%zi6nI-_s6?mG! zj{DV;qesJb&owKeEK?=J>UcAlYckA7Sl+I&IN=yasrZOkejir*kE@SN`fk<8Fgx*$ zy&fE6?}G)d_N`){P~U@1jRVA|2*69)KSe_}!~?+`Yb{Y=O~_+@!j<&oVQQMnhoIRU zA0CyF1OFfkK44n*JD~!2!SCPM;PRSk%1XL=0&rz00wxPs&-_eapJy#$h!eqY%nS0{ z!aGg58JIJPF3_ci%n)QSVpa2H`vIe$RD43;#IRfDV&Ibit z+?>HW4{2wOfC6Fw)}4x}i1maDxcE1qi@BS*qcxD2gE@h3#4cgU*D-&3z7D|tVZWt= z-Cy2+*Cm@P4GN_TPUtaVyVesbVDazF@)j8VJ4>XZv!f%}&eO1SvIgr}4`A*3#vat< z_MoByL(qW6L7SFZ#|Gc1fFN)L2PxY+{B8tJp+pxRyz*87)vXR}*=&ahXjBlQKguuf zX6x<<6fQulE^C*KH8~W%ptpaC0l?b=_{~*U4?5Vt;dgM4t_{&UZ1C2j?b>b+5}{IF_CUyvz-@QZPMlJ)r_tS$9kH%RPv#2_nMb zRLj5;chJ72*U`Z@Dqt4$@_+k$%|8m(HqLG!qT4P^DdfvGf&){gKnGCX#H0!;W=AGP zbA&Z`-__a)VTS}kKFjWGk z%|>yE?t*EJ!qeQ%dPk$;xIQ+P0;()PCBDgjJm6Buj{f^awNoVx+9<|lg3%-$G(*f) zll6oOkN|yamn1uyl2*N-lnqRI1cvs_JxLTeahEK=THV$Sz*gQhKNb*p0fNoda#-&F zB-qJgW^g}!TtM|0bS2QZekW7_tKu%GcJ!4?lObt0z_$mZ4rbQ0o=^curCs3bJK6sq z9fu-aW-l#>z~ca(B;4yv;2RZ?tGYAU)^)Kz{L|4oPj zdOf_?de|#yS)p2v8-N||+XL=O*%3+y)oI(HbM)Ds?q8~HPzIP(vs*G`iddbWq}! z(2!VjP&{Z1w+%eUq^ /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +133,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,11 +200,15 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/gradlew.bat b/gradlew.bat index f127cfd4..9b42019c 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,91 +1,94 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega From 4745bc3107f1a589a7e1235e668bcee1e67b7797 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sun, 30 Mar 2025 00:17:49 +0900 Subject: [PATCH 205/399] =?UTF-8?q?hotfix:=20main=20=EB=B8=8C=EB=9E=9C?= =?UTF-8?q?=EC=B9=98=20hibernate=EC=84=A4=EC=A0=95=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 -- 1 file changed, 2 deletions(-) diff --git a/build.gradle b/build.gradle index 98d5af20..0c38d4e1 100644 --- a/build.gradle +++ b/build.gradle @@ -42,8 +42,6 @@ dependencies { testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' - implementation 'com.h2database:h2' - //openApi implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' From 261e3bc8164e5fffca9b0374dffb0d50965d0884 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sun, 30 Mar 2025 00:23:14 +0900 Subject: [PATCH 206/399] =?UTF-8?q?hotfix:=20gradle.yml=20YML=5FPROD?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/gradle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 688f934e..54c18ebf 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -45,7 +45,7 @@ jobs: run: | cd ./src/main/resources touch ./application.yml - echo "${{ secrets.YML }}" > ./application.yml + echo "${{ secrets.YML_PROD }}" > ./application.yml shell: bash # gradle chmod From 240a8ef05bb259f96d361f2bab39ee4cf184458b Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sun, 30 Mar 2025 00:26:06 +0900 Subject: [PATCH 207/399] =?UTF-8?q?hotfix:=209000=EB=B2=88=20=ED=8F=AC?= =?UTF-8?q?=ED=8A=B8=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/gradle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 54c18ebf..bd91efab 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -91,7 +91,7 @@ jobs: sudo docker ps sudo docker rm -f $(docker ps -qa) sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-prod - sudo docker run -d -p 8080:8080 ${{ secrets.DOCKER_REPO }}/eatssu-prod + sudo docker run -d -p 9000:9000 ${{ secrets.DOCKER_REPO }}/eatssu-prod sudo docker image prune -f From 7d0ed9f2df9075108930a93421678393ee95758f Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Wed, 9 Apr 2025 06:33:36 +0900 Subject: [PATCH 208/399] =?UTF-8?q?hotfix:=20prod=20=EC=84=9C=EB=B2=84=20?= =?UTF-8?q?=ED=8F=AC=ED=8A=B8=209000=EC=9C=BC=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/gradle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 0c984f63..2b713aa4 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -91,7 +91,7 @@ jobs: sudo docker ps sudo docker rm -f $(docker ps -qa) sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-prod - sudo docker run -d -p 8080:8080 ${{ secrets.DOCKER_REPO }}/eatssu-prod + sudo docker run -d -p 9000:9000 ${{ secrets.DOCKER_REPO }}/eatssu-prod sudo docker image prune -f ## deploy to develop From 36e4aa888f5b8e473a0046531ea65706fbb08dfe Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Thu, 10 Apr 2025 21:42:42 +0900 Subject: [PATCH 209/399] =?UTF-8?q?feat:=20=ED=86=A0=ED=81=B0=20=EC=9C=A0?= =?UTF-8?q?=ED=9A=A8=EC=84=B1=20=EA=B2=80=EC=82=AC=20API=20=EA=B0=9C?= =?UTF-8?q?=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/auth/dto/ValidRequest.java | 13 ++++ .../auth/presentation/OAuthController.java | 16 +++++ .../auth/security/JwtTokenProvider.java | 4 +- .../domain/auth/service/OAuthService.java | 27 +++++++ .../domain/auth/service/OauthServiceTest.java | 71 +++++-------------- 5 files changed, 76 insertions(+), 55 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/auth/dto/ValidRequest.java diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/ValidRequest.java b/src/main/java/ssu/eatssu/domain/auth/dto/ValidRequest.java new file mode 100644 index 00000000..e2f85ce2 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/auth/dto/ValidRequest.java @@ -0,0 +1,13 @@ +package ssu.eatssu.domain.auth.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; + +@Schema(title = "유효한 토큰 확인") +public record ValidRequest( + @NotBlank(message = "토큰을 입력해주세요") + @Schema(description = "토큰", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjcsXCJlbWFpbFwiOlwidGVzdEBlbWFpbC5jb21cIixcInJvbGVcIjpcIlJPTEVfVVNFUlwifSIsImF1dGgiOiJST0xFX1VTRVIiLCJleHAiOjE3NDQzNzQ0MjB9.mhIWYX_Vj3xW1eXuVflbzpH6vLTcC9b1twbIcqovVjDVnS7tjegu3nQHGXUsUa_WG2DIAtJMFZT_Q1XcVq1jPw") + String token +) { + +} diff --git a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java index dba5ce6f..9b4c810b 100644 --- a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java @@ -2,6 +2,11 @@ import static ssu.eatssu.domain.auth.infrastructure.SecurityUtil.*; +import java.net.http.HttpRequest; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -18,6 +23,7 @@ import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; +import ssu.eatssu.domain.auth.dto.ValidRequest; import ssu.eatssu.domain.auth.service.OAuthService; import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.global.handler.response.BaseResponse; @@ -68,4 +74,14 @@ public BaseResponse refreshToken() { return BaseResponse.success(tokens); } + @Operation(summary = "유효한 토큰 확인", description = "해당 토큰이 유효하면 true 반환하는, 유효하지 않은 false 반환하는 API 입니다") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유효한 토큰인지 확인 성공") + }) + @GetMapping("/valid/token") + public BaseResponse validToken(@Valid @RequestBody ValidRequest request) { + Boolean response = oauthService.validToken(request); + return BaseResponse.success(response); + } + } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java index b667f8ee..924b9cc1 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java @@ -163,10 +163,10 @@ private Claims getClaims(String token) { public boolean validateToken(String token) throws BaseException { try { Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token); + return true; } catch (Exception e) { + log.warn("토큰 유효성 검증 실패: {}", e.getMessage()); return false; } - return true; } - } diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java index 370c26cf..fda3e301 100644 --- a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java @@ -1,18 +1,25 @@ package ssu.eatssu.domain.auth.service; import static ssu.eatssu.domain.auth.entity.OAuthProvider.*; +import static ssu.eatssu.domain.auth.security.JwtAuthenticationFilter.*; + +import java.net.http.HttpRequest; + +import javax.servlet.http.HttpServletRequest; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.auth.dto.OAuthInfo; +import ssu.eatssu.domain.auth.dto.ValidRequest; import ssu.eatssu.domain.auth.entity.AppleAuthenticator; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.JwtTokenProvider; @@ -20,6 +27,7 @@ import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.user.service.UserService; +import ssu.eatssu.global.handler.response.BaseException; @Slf4j @Service @@ -33,6 +41,10 @@ public class OAuthService { private final AuthenticationManagerBuilder authenticationManagerBuilder; private final JwtTokenProvider jwtTokenProvider; + private static final String AUTHORIZATION_HEADER = "Authorization"; + + private static final String BEARER_TYPE = "Bearer"; + public Tokens kakaoLogin(KakaoLoginRequest request) { User user = userRepository.findByProviderId(request.providerId()) .orElseGet( @@ -71,6 +83,21 @@ private void updateAppleUserEmail(User user, String email) { } } + /** + * 유효한 토큰인지 확인 + */ + + public Boolean validToken(ValidRequest request){ + String token = request.token(); + + try { + return jwtTokenProvider.validateToken(token); + } catch (BaseException e) { + log.warn("토큰 유효성 검사 중 예외 발생: {}", e.getMessage()); + return false; + } + } + private boolean isHideEmail(String email) { if (email.length() > 25) { return email.startsWith("@privaterelay.appleid.com", email.length() - 25); diff --git a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java b/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java index 0d61eecf..5ce77db1 100644 --- a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java @@ -1,78 +1,43 @@ package ssu.eatssu.domain.auth.service; -import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import ssu.eatssu.domain.auth.dto.AppleLoginRequest; -import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; -import ssu.eatssu.domain.auth.infrastructure.TestAppleAuthenticator; +import ssu.eatssu.domain.auth.dto.ValidRequest; import ssu.eatssu.domain.auth.security.JwtTokenProvider; +import ssu.eatssu.domain.auth.service.OAuthService; import ssu.eatssu.domain.review.repository.ReviewRepository; -import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.user.service.UserService; -@SpringBootTest +@ExtendWith(MockitoExtension.class) class OauthServiceTest { - @Autowired + @InjectMocks private OAuthService oauthService; - @Autowired - private UserService userService; - - @Autowired - private UserRepository userRepository; - - @Autowired - private AuthenticationManagerBuilder authenticationManagerBuilder; - - @Autowired + @Mock private JwtTokenProvider jwtTokenProvider; - @Autowired - private ReviewRepository reviewRepository; - - @BeforeEach - void setUp() { - reviewRepository.deleteAll(); - userRepository.deleteAll(); - oauthService = new OAuthService(userService, userRepository, - new TestAppleAuthenticator(), authenticationManagerBuilder, jwtTokenProvider); - } - - @Test - void 카카오로_회원가입을_한다() { - // given - KakaoLoginRequest request = new KakaoLoginRequest("test@email.com", "10378247832195"); - - // when - oauthService.kakaoLogin(request); - - // then - User user = userRepository.findByProviderId(request.providerId()).get(); - assertThat(userRepository.findAll()).hasSize(1); - assertThat(user.getEmail()).isEqualTo(request.email()); - assertThat(user.getProviderId()).isEqualTo(request.providerId()); - } - @Test - void 애플로_회원가입을_한다() { + void 토큰_유효성_검사() { // given - AppleLoginRequest request = new AppleLoginRequest("eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi"); + String token = "eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi"; + ValidRequest request = new ValidRequest(token); + Mockito.when(jwtTokenProvider.validateToken(token)).thenReturn(true); // when - oauthService.appleLogin(request); + Boolean result = oauthService.validToken(request); // then - User user = userRepository.findByProviderId("1234567890").get(); - assertThat(userRepository.findAll()).hasSize(1); - assertThat(user.getEmail()).isEqualTo("test@test.com"); - assertThat(user.getProviderId()).isEqualTo("1234567890"); + assertTrue(result); } -} \ No newline at end of file +} From ad52a27a7a07b935930f23b05fad40d2a3278864 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Thu, 10 Apr 2025 21:57:26 +0900 Subject: [PATCH 210/399] =?UTF-8?q?refactor:=20access=20token=20=EC=97=86?= =?UTF-8?q?=EC=9D=B4=20=ED=86=A0=ED=81=B0=20=EC=9D=B8=EC=A6=9D=ED=95=A0?= =?UTF-8?q?=EC=88=98=20=EC=9E=88=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java | 2 +- .../ssu/eatssu/domain/auth/presentation/OAuthController.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 42c42a55..2797aa4e 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -23,7 +23,7 @@ @RequiredArgsConstructor public class SecurityConfig { private static final String[] RESOURCE_LIST = { - "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**", "/admin/img/**", "/css/**", "/js/**", + "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**","/oauths/valid/token", "/admin/img/**", "/css/**", "/js/**", "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" }; diff --git a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java index 9b4c810b..28d3025b 100644 --- a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java @@ -74,7 +74,7 @@ public BaseResponse refreshToken() { return BaseResponse.success(tokens); } - @Operation(summary = "유효한 토큰 확인", description = "해당 토큰이 유효하면 true 반환하는, 유효하지 않은 false 반환하는 API 입니다") + @Operation(summary = "유효한 토큰 확인 [인증 토큰 필요 X]", description = "해당 토큰이 유효하면 true 반환하는, 유효하지 않은 false 반환하는 API 입니다") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "유효한 토큰인지 확인 성공") }) From eaa46594268feefe660da69aff7b5576902d89a3 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Thu, 10 Apr 2025 22:03:43 +0900 Subject: [PATCH 211/399] =?UTF-8?q?hotfix:=20=ED=86=A0=ED=81=B0=20?= =?UTF-8?q?=EC=9C=A0=ED=9A=A8=20API=20http=20method=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/auth/presentation/OAuthController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java index 28d3025b..060b9829 100644 --- a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java @@ -78,7 +78,7 @@ public BaseResponse refreshToken() { @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "유효한 토큰인지 확인 성공") }) - @GetMapping("/valid/token") + @PostMapping("/valid/token") public BaseResponse validToken(@Valid @RequestBody ValidRequest request) { Boolean response = oauthService.validToken(request); return BaseResponse.success(response); From 01a9d7444938a073715f3e9ca33ae841f748c62e Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sun, 27 Apr 2025 16:16:34 +0900 Subject: [PATCH 212/399] =?UTF-8?q?hotfix:=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=97=85=EB=A1=9C=EB=93=9C=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/review/service/ReviewService.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index 5f199b43..b9502371 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -10,6 +10,7 @@ import org.springframework.web.multipart.MultipartFile; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -33,6 +34,7 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.util.S3Uploader; +@Slf4j @RequiredArgsConstructor @Service @Transactional @@ -89,8 +91,11 @@ private void addReviewImage(Review review, MultipartFile image) { public SavedReviewImage uploadImage(MultipartFile image) { try { String imageUrl = s3Uploader.upload(image, "reviewImg"); - return new SavedReviewImage(imageUrl); + SavedReviewImage savedReviewImage = new SavedReviewImage(imageUrl); + log.info("[리뷰 이미지 업로드 완료] 업로드된 URL = {}", savedReviewImage.getUrl()); + return savedReviewImage; } catch (IOException e) { + log.error("[리뷰 이미지 업로드 실패]", e); throw new BaseException(FAIL_IMAGE_UPLOAD); } } From 343c14b89f3172589d7907e9450c73537f07f209 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sun, 27 Apr 2025 23:09:32 +0900 Subject: [PATCH 213/399] =?UTF-8?q?feat:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=EC=8B=9C=20Warmup=20Runner=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/presentation/OAuthController.java | 5 +++ .../eatssu/global/runner/WarmUpRunner.java | 32 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/main/java/ssu/eatssu/global/runner/WarmUpRunner.java diff --git a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java index 060b9829..c7b19817 100644 --- a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java @@ -46,7 +46,12 @@ public class OAuthController { }) @PostMapping("/kakao") public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest request) { + long startTime = System.currentTimeMillis(); Tokens tokens = oauthService.kakaoLogin(request); + long endTime = System.currentTimeMillis(); + long duration = endTime - startTime; + log.info("OAuthWarmupRunner 완료 - 소요 시간: {} ms", duration); + return BaseResponse.success(tokens); } diff --git a/src/main/java/ssu/eatssu/global/runner/WarmUpRunner.java b/src/main/java/ssu/eatssu/global/runner/WarmUpRunner.java new file mode 100644 index 00000000..d31f7542 --- /dev/null +++ b/src/main/java/ssu/eatssu/global/runner/WarmUpRunner.java @@ -0,0 +1,32 @@ +package ssu.eatssu.global.runner; + +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +import lombok.RequiredArgsConstructor; +import ssu.eatssu.domain.auth.dto.AppleLoginRequest; +import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; +import ssu.eatssu.domain.auth.service.OAuthService; + +@Component +@RequiredArgsConstructor +public class WarmUpRunner implements ApplicationRunner { + + private final OAuthService oAuthService; + + @Override + public void run(ApplicationArguments args) throws Exception { + try{ + KakaoLoginRequest kakaoRequest = new KakaoLoginRequest("",""); + oAuthService.kakaoLogin(kakaoRequest); + + AppleLoginRequest appleLoginRequest = new AppleLoginRequest(""); + oAuthService.appleLogin(appleLoginRequest); + + }catch (Exception e){ + + } + + } +} From 281b9497e3c207f2473ab4d40ba69745394080a0 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sun, 18 May 2025 21:36:02 +0900 Subject: [PATCH 214/399] =?UTF-8?q?feat:=20=EB=A6=AC=EB=B7=B0=20v2=20mealI?= =?UTF-8?q?d,=20menuId=EB=B3=84=20=EB=A6=AC=EB=B7=B0,=20=ED=8F=89=EC=A0=90?= =?UTF-8?q?=20=EC=A1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/infrastructure/SecurityConfig.java | 2 +- .../presentation/MealReviewController.java | 42 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 2797aa4e..f93cb4ef 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -30,7 +30,7 @@ public class SecurityConfig { private static final String[] AUTH_WHITELIST = { "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics", "/v2/reviews", - "/partnerships/**" + "/partnerships/**","/v2/reviews/menus/**","/v2/reviews/meals/**" }; private static final String[] ADMIN_PAGE_LIST = { diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java index 9e5f7002..0305657f 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java @@ -27,9 +27,12 @@ import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; import ssu.eatssu.domain.review.dto.MealReviewResponse; +import ssu.eatssu.domain.review.dto.MealReviewsResponse; +import ssu.eatssu.domain.review.dto.MenuReviewResponse; import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; import ssu.eatssu.domain.review.service.MealReviewService; +import ssu.eatssu.domain.review.service.ReviewService; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.global.handler.response.BaseResponse; @@ -40,6 +43,8 @@ public class MealReviewController { private final MealReviewService mealReviewService; + private final ReviewService reviewService; + @Operation(summary = "리뷰 작성", description = "리뷰를 작성하는 API 입니다.") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), @@ -144,4 +149,41 @@ public BaseResponse toggleReviewLike( mealReviewService.toggleReviewLike(customUserDetails, reviewId); return BaseResponse.success(); } + + @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ + 식단 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/meals/{mealId}") + public BaseResponse getMealReviews( + @Parameter(description = "mealId") + @PathVariable(value = "mealId") Long mealId) { + return BaseResponse.success(reviewService.findMealReviews(mealId)); + } + + @Operation(summary = "고정 메뉴 리뷰 정보 조회(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ + 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/menus/{menuId}") + public BaseResponse getMainReviews( + @Parameter(description = "menuId") + @PathVariable(value = "menuId") Long menuId) { + return BaseResponse.success(reviewService.findMenuReviews(menuId)); + } + } From eedd7babec8c7436e382c881aee0c5eb2bb0720b Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sun, 18 May 2025 21:46:04 +0900 Subject: [PATCH 215/399] =?UTF-8?q?docs:=20pr=20template=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 --- .github/PULL_REQUEST_TEMPLATE.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..bca24322 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,20 @@ +## #️⃣ Issue Number + + + +## 📝 요약(Summary) + + + +## 💬 공유사항 to 리뷰어 + + + + + +## ✅ PR Checklist + +PR이 다음 요구 사항을 충족하는지 확인하세요. + +- [ ] 커밋 메시지 컨벤션에 맞게 작성했습니다. +- [ ] 변경 사항에 대한 테스트를 했습니다.(버그 수정/기능에 대한 테스트). From bdae98a343bcdab5eda862d52deb6c3902816b06 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sun, 18 May 2025 22:18:48 +0900 Subject: [PATCH 216/399] =?UTF-8?q?feat:=20=EC=9D=98=EC=A1=B4=EC=84=B1=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80,=20management=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 7 +++++++ .../eatssu/domain/auth/infrastructure/SecurityConfig.java | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 0c38d4e1..5094e40a 100644 --- a/build.gradle +++ b/build.gradle @@ -68,6 +68,13 @@ dependencies { implementation("com.slack.api:bolt-servlet:1.35.0") implementation("com.slack.api:bolt-jetty:1.35.0") implementation("org.slf4j:slf4j-simple:1.7.36") + + + // Spring Actuator + implementation 'org.springframework.boot:spring-boot-starter-actuator' + + // Prometheus + runtimeOnly 'io.micrometer:micrometer-registry-prometheus' } tasks.named('test') { diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index f93cb4ef..8827919a 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -30,7 +30,7 @@ public class SecurityConfig { private static final String[] AUTH_WHITELIST = { "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics", "/v2/reviews", - "/partnerships/**","/v2/reviews/menus/**","/v2/reviews/meals/**" + "/partnerships/**","/v2/reviews/menus/**","/v2/reviews/meals/**","/actuator/**" }; private static final String[] ADMIN_PAGE_LIST = { From 3f2fa4794c83498ec06197fa7094c729dcf36510 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Tue, 27 May 2025 21:28:56 +0900 Subject: [PATCH 217/399] =?UTF-8?q?hotfix:=20=EC=A2=8B=EC=95=84=EC=9A=94,?= =?UTF-8?q?=20=EC=8B=AB=EC=96=B4=EC=9A=94=20=EC=B4=88=EA=B8=B0=20null?= =?UTF-8?q?=EA=B0=92=EC=97=90=20=EC=97=B0=EC=82=B0=EC=9E=90=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=EC=8B=9C,=20500=EC=97=90=EB=9F=AC=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 --- .../ssu/eatssu/domain/menu/entity/Menu.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index 7462e912..d02ed5be 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -97,19 +97,32 @@ public boolean isContinued() { return !this.isDiscontinued; } - public void increaseLikeCount() { - likeCount++; + public void increaseLikeCount() + { + if(this.likeCount==null){ + this.likeCount=0; + } + this.likeCount++; } public void increaseUnlikeCount() { - unlikeCount++; + if(this.unlikeCount==null){ + this.unlikeCount=0; + } + this.unlikeCount++; } public void decreaseLikeCount() { - likeCount--; + if(this.likeCount==null){ + this.likeCount=0; + } + this.likeCount--; } public void decreaseUnlikeCount() { + if(this.unlikeCount==null){ + this.unlikeCount=0; + } unlikeCount--; } From f1a4850149df2b51b153d0495da2f8b83772f29f Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Tue, 27 May 2025 21:36:39 +0900 Subject: [PATCH 218/399] =?UTF-8?q?hotfix:=20review=20v2=20=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=EC=8B=9C,=20UserAliasUtil=EC=97=90=EC=84=9C=20getRating=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=EA=B0=80=20NPE=20=EB=B0=9C=EC=83=9D=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/user/util/UserAliasUtil.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java b/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java index 56dbfecb..b02c9efa 100644 --- a/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java +++ b/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.user.util; import java.util.List; +import java.util.Objects; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; @@ -11,9 +12,12 @@ public static String getUserAlias(User user, List reviews) { return "미슈테리 미식가"; } double avg = reviews.stream() - .mapToInt(Review::getRating) - .average() - .orElse(0.0); + .map(Review::getRating) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + int avgRating = (int)Math.round(avg); switch (avgRating) { case 1: From fac0b679a325961d1ea24eb82b08859c32bf3874 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sat, 31 May 2025 19:56:49 +0900 Subject: [PATCH 219/399] =?UTF-8?q?fix:=20statics=20API=20npe=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/service/MealReviewService.java | 42 +++++++++++++------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java index bbf1584b..b2a4f5d2 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java @@ -2,8 +2,10 @@ import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; +import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; @@ -79,18 +81,34 @@ public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { List reviews = reviewRepository.findByMealIn(meals); List

menus = mealMenuRepository.findMenusByMeals(meals); - Double averageRating = reviews.stream() - .mapToInt(Review::getRating) - .average() - .orElse(0.0); - - Integer likeCount = menus.stream() - .mapToInt(Menu::getLikeCount) - .sum(); - - Integer unlikeCount = menus.stream() - .mapToInt(Menu::getUnlikeCount) - .sum(); + Double averageRating = Optional.ofNullable(reviews) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Review::getRating) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + + Integer likeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getLikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + + Integer unlikeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getUnlikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); From a36d2a1635a954d949a31edc6192bda43d92c348 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sun, 1 Jun 2025 06:53:57 +0900 Subject: [PATCH 220/399] =?UTF-8?q?fix:=20mealId,=20menuId=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=9C=20review=20=EB=B0=8F=20=ED=8F=89=EC=A0=90=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EC=8B=9C,=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=20=EC=8B=AB=EC=96=B4=EC=9A=94=20=EA=B0=9C=EC=88=98=EB=8F=84=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EB=90=A0=20=EC=88=98=20=EC=9E=88=EA=B2=8C=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 --- .../menu/persistence/MealMenuRepository.java | 3 + .../review/dto/MealReviewsV2Response.java | 44 ++++++++++ .../review/dto/MenuReviewsV2Response.java | 47 ++++++++++ ...ontroller.java => ReviewControllerV2.java} | 37 ++++---- .../review/repository/ReviewRepository.java | 2 + ...eviewService.java => ReviewServiceV2.java} | 85 ++++++++++++++++++- .../user/presentation/UserController.java | 4 +- 7 files changed, 201 insertions(+), 21 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java create mode 100644 src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java rename src/main/java/ssu/eatssu/domain/review/presentation/{MealReviewController.java => ReviewControllerV2.java} (86%) rename src/main/java/ssu/eatssu/domain/review/service/{MealReviewService.java => ReviewServiceV2.java} (77%) diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java index 21c93a8a..dc2999b2 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java @@ -19,4 +19,7 @@ public interface MealMenuRepository extends JpaRepository { @Query("SELECT DISTINCT mm.meal.id FROM MealMenu mm WHERE mm.menu.id IN :menuIds") List findMealIdsByMenuIds(@Param("menuIds") List menuIds); + + @Query("SELECT mm.menu FROM MealMenu mm WHERE mm.meal = :meal") + List findMenusByMeal(Meal meal); } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java new file mode 100644 index 00000000..ff19e98c --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java @@ -0,0 +1,44 @@ +package ssu.eatssu.domain.review.dto; + +import java.util.List; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import ssu.eatssu.domain.menu.entity.Meal; + +@Schema(title = "식단 리뷰 정보V2(평점 등등)") +@Getter +@AllArgsConstructor +@Builder +public class MealReviewsV2Response implements ReviewInformationResponse{ + @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") + private List menuNames; + + @Schema(description = "리뷰 개수", example = "15") + private Long totalReviewCount; + + @Schema(description = "평점-메인", example = "4.4") + private Double mainRating; + + @Schema(description = "좋아요 개수", example = "4.4") + private Integer likeCount; + + @Schema(description = "싫어요 개수", example = "4.4") + private Integer unlikeCount; + + @Schema(description = "평점 별 갯수") + private ReviewRatingCount reviewRatingCount; + + public static MealReviewsV2Response of(Long totalReviewCount, List menuNames, + RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { + + return MealReviewsV2Response.builder() + .menuNames(menuNames) + .mainRating(ratingAverages.mainRating()) + .totalReviewCount(totalReviewCount) + .reviewRatingCount(reviewRatingCount) + .build(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java new file mode 100644 index 00000000..15c753a8 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java @@ -0,0 +1,47 @@ +package ssu.eatssu.domain.review.dto; + +import java.util.List; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import ssu.eatssu.domain.menu.entity.Meal; +import ssu.eatssu.domain.menu.entity.Menu; + +@Schema(title = "메뉴 리뷰 정보V2(평점 등등)") +@Getter +@AllArgsConstructor +@Builder +public class MenuReviewsV2Response implements ReviewInformationResponse { + @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") + private List menuNames; + + @Schema(description = "리뷰 개수", example = "15") + private Long totalReviewCount; + + @Schema(description = "평점-메인", example = "4.4") + private Double mainRating; + + @Schema(description = "좋아요 개수", example = "4.4") + private Integer likeCount; + + @Schema(description = "싫어요 개수", example = "4.4") + private Integer unlikeCount; + + @Schema(description = "평점 별 갯수") + private ReviewRatingCount reviewRatingCount; + + public static MenuReviewsV2Response of(Long totalReviewCount, List menuNames, + RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount,Menu menu) { + + return MenuReviewsV2Response.builder() + .menuNames(menuNames) + .mainRating(ratingAverages.mainRating()) + .likeCount(menu.getLikeCount()) + .unlikeCount(menu.getUnlikeCount()) + .totalReviewCount(totalReviewCount) + .reviewRatingCount(reviewRatingCount) + .build(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java similarity index 86% rename from src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java rename to src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java index 0305657f..da44bb5f 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/MealReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java @@ -27,11 +27,12 @@ import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; import ssu.eatssu.domain.review.dto.MealReviewResponse; -import ssu.eatssu.domain.review.dto.MealReviewsResponse; +import ssu.eatssu.domain.review.dto.MealReviewsV2Response; import ssu.eatssu.domain.review.dto.MenuReviewResponse; +import ssu.eatssu.domain.review.dto.MenuReviewsV2Response; import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; -import ssu.eatssu.domain.review.service.MealReviewService; +import ssu.eatssu.domain.review.service.ReviewServiceV2; import ssu.eatssu.domain.review.service.ReviewService; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.global.handler.response.BaseResponse; @@ -40,8 +41,8 @@ @RequiredArgsConstructor @RequestMapping("/v2/reviews") @Tag(name = "Review V2", description = "리뷰 V2 API") -public class MealReviewController { - private final MealReviewService mealReviewService; +public class ReviewControllerV2 { + private final ReviewServiceV2 reviewServiceV2; private final ReviewService reviewService; @@ -56,7 +57,7 @@ public class MealReviewController { public BaseResponse createReview( @RequestBody CreateMealReviewRequest createMealReviewRequest, @AuthenticationPrincipal CustomUserDetails customUserDetails) { - mealReviewService.createReview(customUserDetails, createMealReviewRequest); + reviewServiceV2.createReview(customUserDetails, createMealReviewRequest); return BaseResponse.success(); } @@ -74,7 +75,7 @@ public BaseResponse getRestaurantReviews( @Parameter(description = "restaurant") @RequestParam Restaurant restaurant ) { - return BaseResponse.success(mealReviewService.findRestaurantReviews(restaurant)); + return BaseResponse.success(reviewServiceV2.findRestaurantReviews(restaurant)); } @Operation(summary = "리뷰 리스트 조회", description = """ @@ -94,7 +95,7 @@ public BaseResponse> getReviews( @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, @AuthenticationPrincipal CustomUserDetails customUserDetails) { Pageable pageable = PageRequest.of(0, 20, Sort.by(Sort.Direction.DESC, "id")); - SliceResponse myReviews = mealReviewService.findReviews(mealId, lastReviewId, pageable, + SliceResponse myReviews = reviewServiceV2.findReviews(mealId, lastReviewId, pageable, customUserDetails); return BaseResponse.success(myReviews); } @@ -117,7 +118,7 @@ public BaseResponse updateReview(@Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, @RequestBody UpdateMealReviewRequest request, @AuthenticationPrincipal CustomUserDetails customUserDetails) { - mealReviewService.updateReview(customUserDetails, reviewId, request); + reviewServiceV2.updateReview(customUserDetails, reviewId, request); return BaseResponse.success(); } @@ -132,7 +133,7 @@ public BaseResponse updateReview(@Parameter(description = "reviewId") public BaseResponse deleteReview( @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, @AuthenticationPrincipal CustomUserDetails customUserDetails) { - mealReviewService.deleteReview(customUserDetails, reviewId); + reviewServiceV2.deleteReview(customUserDetails, reviewId); return BaseResponse.success(); } @@ -146,13 +147,13 @@ public BaseResponse deleteReview( public BaseResponse toggleReviewLike( @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, @AuthenticationPrincipal CustomUserDetails customUserDetails) { - mealReviewService.toggleReviewLike(customUserDetails, reviewId); + reviewServiceV2.toggleReviewLike(customUserDetails, reviewId); return BaseResponse.success(); } - @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ + @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회 V2(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ 식단 리뷰 정보를 조회하는 API 입니다.

- 메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. + 메뉴명 리스트, 리뷰 수, 메인 평점, 좋아요 개수, 싫어요 개수, 각 평점의 개수를 조회합니다. """) @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), @@ -162,15 +163,15 @@ public BaseResponse toggleReviewLike( @Schema(implementation = BaseResponse.class))) }) @GetMapping("/meals/{mealId}") - public BaseResponse getMealReviews( + public BaseResponse getMealReviews( @Parameter(description = "mealId") @PathVariable(value = "mealId") Long mealId) { - return BaseResponse.success(reviewService.findMealReviews(mealId)); + return BaseResponse.success(reviewServiceV2.findMealReviews(mealId)); } - @Operation(summary = "고정 메뉴 리뷰 정보 조회(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ + @Operation(summary = "고정 메뉴 리뷰 정보 조회 V2(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

- 메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. + 메뉴명, 리뷰 수, 메인 평점, 좋아요 개수, 싫어요 개수, 각 평점의 개수를 조회합니다. """) @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), @@ -180,10 +181,10 @@ public BaseResponse getMealReviews( @Schema(implementation = BaseResponse.class))) }) @GetMapping("/menus/{menuId}") - public BaseResponse getMainReviews( + public BaseResponse getMainReviews( @Parameter(description = "menuId") @PathVariable(value = "menuId") Long menuId) { - return BaseResponse.success(reviewService.findMenuReviews(menuId)); + return BaseResponse.success(reviewServiceV2.findMenuReviews(menuId)); } } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java index fe3473ed..21aceef7 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java @@ -17,6 +17,8 @@ public interface ReviewRepository extends JpaRepository, ReviewRep List findAllByMenu(Menu menu); + List findAllByMeal(Meal meal); + /** * dto projection */ diff --git a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java similarity index 77% rename from src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java rename to src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index b2a4f5d2..36ac0359 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/MealReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -25,7 +25,9 @@ import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; import ssu.eatssu.domain.review.dto.MealReviewResponse; +import ssu.eatssu.domain.review.dto.MealReviewsV2Response; import ssu.eatssu.domain.review.dto.MenuLikeRequest; +import ssu.eatssu.domain.review.dto.MenuReviewsV2Response; import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; import ssu.eatssu.domain.review.dto.ReviewRatingCount; import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; @@ -41,7 +43,7 @@ @RequiredArgsConstructor @Service -public class MealReviewService { +public class ReviewServiceV2 { private final UserRepository userRepository; private final ReviewRepository reviewRepository; private final MenuRepository menuRepository; @@ -154,6 +156,87 @@ public SliceResponse findReviews(Long mealId, Long lastRevie .build(); } + /** + * 특정 Menu 리뷰 조회 + */ + public MenuReviewsV2Response findMenuReviews(Long menuId) { + Menu menu = menuRepository.findById(menuId).orElseThrow(()-> new BaseException(NOT_FOUND_MENU)); + List reviews = reviewRepository.findAllByMenu(menu); + + Double averageRating = Optional.ofNullable(reviews) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Review::getRating) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + + Integer likeCount = menu.getLikeCount(); + + + Integer unlikeCount = menu.getUnlikeCount(); + + ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); + + return MenuReviewsV2Response.builder() + .totalReviewCount((long)reviews.size()) + .reviewRatingCount(reviewRatingCount) + .mainRating(Math.round(averageRating * 10) / 10.0) + .likeCount(likeCount) + .unlikeCount(unlikeCount) + .build(); + } + + /** + * 특정 Meal 리뷰 조회 + */ + public MealReviewsV2Response findMealReviews(Long mealId) { + Meal meal = mealRepository.findById(mealId).orElseThrow(()-> new BaseException(NOT_FOUND_MEAL)); + List reviews = reviewRepository.findAllByMeal(meal); + List menus = mealMenuRepository.findMenusByMeal(meal); + + Double averageRating = Optional.ofNullable(reviews) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Review::getRating) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + + Integer likeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getLikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + + Integer unlikeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getUnlikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); + + return MealReviewsV2Response.builder() + .totalReviewCount((long)reviews.size()) + .reviewRatingCount(reviewRatingCount) + .mainRating(Math.round(averageRating * 10) / 10.0) + .likeCount(likeCount) + .unlikeCount(unlikeCount) + .build(); + } + /** * 리뷰 수정 */ diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index d0726302..77d58615 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -30,7 +30,7 @@ import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.PartnershipResponse; import ssu.eatssu.domain.partnership.service.PartnershipService; -import ssu.eatssu.domain.review.service.MealReviewService; +import ssu.eatssu.domain.review.service.ReviewServiceV2; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.domain.slice.service.SliceService; import ssu.eatssu.domain.user.dto.DepartmentResponse; @@ -50,7 +50,7 @@ public class UserController { private final UserService userService; private final SliceService sliceService; - private final MealReviewService mealReviewService; + private final ReviewServiceV2 mealReviewService; private final PartnershipService partnershipService; @Operation(summary = "이메일 중복 체크", description = """ From 0e0b5444ab483ad99f8e9ffa080dabf6f985bb35 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Thu, 19 Jun 2025 12:24:41 +0900 Subject: [PATCH 221/399] =?UTF-8?q?hotfix:=20oom=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=82=B4=EB=A0=A4=EA=B0=84=20=EB=8F=84=EC=BB=A4=20=EC=BB=A8?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EB=84=88=20=EC=9E=AC=EB=B0=B0=ED=8F=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- a.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 a.txt diff --git a/a.txt b/a.txt new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/a.txt @@ -0,0 +1 @@ + From cf400a88c7879b11b0076aba2fe1c428b8debeeb Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Thu, 19 Jun 2025 20:54:49 +0900 Subject: [PATCH 222/399] =?UTF-8?q?hotfix:=20OOM=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=84=9C=EB=B2=84=20=EB=82=B4=EB=A0=A4=EA=B0=84=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- a.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 a.txt diff --git a/a.txt b/a.txt deleted file mode 100644 index 8b137891..00000000 --- a/a.txt +++ /dev/null @@ -1 +0,0 @@ - From a996b47c6db65546d0e6ad98e3a7253d0298a24c Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Sun, 22 Jun 2025 23:10:27 +0900 Subject: [PATCH 223/399] =?UTF-8?q?feat:=20500=EC=97=90=EB=9F=AC,=20400?= =?UTF-8?q?=EC=97=90=EB=9F=AC=20#=EC=84=9C=EB=B2=84-=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=B1=84=EB=84=90=EC=97=90=20=EC=8A=AC=EB=9E=AB=EB=B4=87=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC=20=EC=B6=94=EA=B0=80=20(#157)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 슬랙 서버-에러 채널에 400,500 에러 전송 기능 개발 * chore: test controller 삭제 --- .../domain/slack/entity/SlackChannel.java | 3 +- .../slack/entity/SlackMessageFormat.java | 20 +++++++++ .../domain/slack/service/SlackService.java | 1 + .../handler/GlobalExceptionHandler.java | 44 +++++++++++++++++++ 4 files changed, 67 insertions(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java index 7f327996..ce6f562a 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java @@ -7,7 +7,8 @@ public enum SlackChannel { REPORT_CHANNEL("#신고"), ADDMENU_CHANNEL("#메뉴_추가"), ERROR_CHANNEL("#장애"), - USER_INQUIRY_CHANNEL("#유저-문의"); + USER_INQUIRY_CHANNEL("#유저-문의"), + SERVER_ERROR("C092J4J6F0U"); @Getter private String krName; diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java index 05616c0b..38e19159 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java @@ -63,4 +63,24 @@ public static String sendUserInquiry(Inquiry inquiry) { , inquiry.getCreatedDate(), inquiry.getContent()}; return messageFormat.format(args); } + + + public static String sendServerError(Exception ex) { + MessageFormat messageFormat = new MessageFormat( + """ + =================== + *서버 에러 발생* + - 예외 클래스: {0} + - 예외 메시지: {1} + - 원인: {2} + =================== + """ + ); + Object[] args = { + ex.getClass().getName(), + ex.getMessage(), + ex.getCause() != null ? ex.getCause().toString() : "없음" + }; + return messageFormat.format(args); + } } diff --git a/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java b/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java index e3ed2b86..33a5a5d4 100644 --- a/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java +++ b/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java @@ -9,6 +9,7 @@ import com.slack.api.methods.MethodsClient; import com.slack.api.methods.SlackApiException; import com.slack.api.methods.request.chat.ChatPostMessageRequest; +import com.slack.api.methods.response.chat.ChatPostMessageResponse; import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.slack.entity.SlackChannel; diff --git a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java index 6a0df601..0e7b2c71 100644 --- a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java @@ -23,7 +23,10 @@ import org.springframework.web.servlet.NoHandlerFoundException; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import ssu.eatssu.domain.slack.entity.SlackMessageFormat; +import ssu.eatssu.domain.slack.service.SlackService; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.global.handler.response.BaseResponseStatus; @@ -33,7 +36,9 @@ */ @Slf4j @RestControllerAdvice +@RequiredArgsConstructor public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { + private final SlackService slackService; /** * BaseException 처리 @@ -41,8 +46,16 @@ public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { @ExceptionHandler(BaseException.class) public ResponseEntity> handleBaseException(BaseException e) { log.info(e.getStatus().toString()); + sendErrorToSlack(e); return ResponseEntity.status(e.getStatus().getHttpStatus()).body(BaseResponse.fail(e.getStatus())); } + @ExceptionHandler(Exception.class) + public ResponseEntity> handleAllUnhandledException(Exception ex) { + sendErrorToSlack(ex); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); + } + /** * 경로는 있으나 지원하지 않는 http method로 요청 시 @@ -215,4 +228,35 @@ protected ResponseEntity handleHttpMessageNotWritable( .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); } + @Override + protected ResponseEntity handleExceptionInternal( + @NonNull Exception ex, + Object body, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode statusCode, + @NonNull WebRequest request) { + + HttpStatus status = HttpStatus.valueOf(statusCode.value()); + + if (status.is4xxClientError() || status.is5xxServerError()) { + sendErrorToSlack(ex); + } + + BaseResponseStatus responseStatus = status.is4xxClientError() + ? BaseResponseStatus.BAD_REQUEST + : BaseResponseStatus.INTERNAL_SERVER_ERROR; + + return ResponseEntity.status(status).body(BaseResponse.fail(responseStatus)); + } + + private void sendErrorToSlack(Exception ex) { + try { + String message = SlackMessageFormat.sendServerError(ex); + slackService.sendSlackMessage(message, ssu.eatssu.domain.slack.entity.SlackChannel.SERVER_ERROR); + } catch (Exception slackEx) { + log.warn("슬랙 전송 실패: {}", slackEx.getMessage()); + } + } + + } From 7d8e9a9c53c204720038677589ea76a6c7bb0a02 Mon Sep 17 00:00:00 2001 From: Jiwoong CHOI Date: Mon, 23 Jun 2025 13:46:26 +0900 Subject: [PATCH 224/399] =?UTF-8?q?chore:=20AI=20=EA=B0=80=EC=9D=B4?= =?UTF-8?q?=EB=93=9C=EB=9D=BC=EC=9D=B8=20=EC=A0=9C=EA=B1=B0=20(#158)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Junie, Cursor, GitHub Copilot 가이드라인을 추적하지 않도록 설정 --- .gitignore | 11 +++- .junie/guidelines.md | 130 ------------------------------------------- 2 files changed, 10 insertions(+), 131 deletions(-) delete mode 100644 .junie/guidelines.md diff --git a/.gitignore b/.gitignore index 1399cc26..a64042c7 100644 --- a/.gitignore +++ b/.gitignore @@ -51,4 +51,13 @@ application-prod.yml /eat-ssu.tar ### SDKMAN ### -.sdkmanrc \ No newline at end of file +.sdkmanrc + +### Junie guideline ### +.junie + +### Cursor guideline ### +eatssu-server-rule.mdc + +### Copilot guildline ### +copilot-instructions.md \ No newline at end of file diff --git a/.junie/guidelines.md b/.junie/guidelines.md deleted file mode 100644 index efe7ac65..00000000 --- a/.junie/guidelines.md +++ /dev/null @@ -1,130 +0,0 @@ -# EAT-SSU 프로젝트 가이드라인 - -## 프로젝트 개요 - -<<<<<<< HEAD -EAT-SSU는 숭실대학교 학생들이 캠퍼스 내 식당 메뉴를 리뷰하고 비교할 수 있는 모바일 애플리케이션입니다. 이 앱은 메뉴 리뷰, 운영 시간, 위치 등 다양한 식사 옵션에 대한 종합적인 정보를 제공하여 식사 경험을 향상시키는 것을 목표로 합니다. -======= -EAT-SSU는 숭실대학교 학생들이 캠퍼스 내 식당 메뉴를 리뷰하고 비교할 수 있는 모바일 애플리케이션입니다. 이 앱은 메뉴 리뷰, 운영 시간, 위치 등 다양한 식사 옵션에 대한 종합적인 정보를 제공하여 식사 경험을 -향상시키는 것을 목표로 합니다. ->>>>>>> bbb0601 (docs: Java SDK 17 명세) - -### 주요 기능 - -- 캠퍼스 내 모든 식당 시설의 메뉴 보기 및 비교: -<<<<<<< HEAD - - 학생식당 - - 도담식당 - - 푸드코트 - - 스낵코너 - - 기숙사 식당 -======= - - 학생식당 - - 도담식당 - - 푸드코트 - - 스낵코너 - - 기숙사 식당 ->>>>>>> bbb0601 (docs: Java SDK 17 명세) -- 식사에 대한 리뷰 작성 및 읽기 -- 식당 운영 시간 및 위치 확인 -- 사용자 인증 시스템 - -## 기술 스택 - -### 백엔드 -<<<<<<< HEAD -======= - ->>>>>>> bbb0601 (docs: Java SDK 17 명세) -- **프레임워크**: Spring Boot 3.0.4 -- **언어**: Java 17 -- **데이터베이스**: MySQL (프로덕션), H2 (테스팅) -- **ORM**: Spring Data JPA와 QueryDSL -- **보안**: Spring Security와 JWT -- **API 문서화**: OpenAPI (Springdoc) -- **빌드 도구**: Gradle -- **클라우드 스토리지**: AWS S3 -- **알림**: Slack API 통합 - -### 모바일 애플리케이션 -<<<<<<< HEAD -======= - ->>>>>>> bbb0601 (docs: Java SDK 17 명세) -- iOS(App Store)와 Android(Play Store) 모두에서 이용 가능 - -## 프로젝트 구조 - -이 프로젝트는 다음과 같은 구조로 도메인 주도 설계 접근 방식을 따릅니다: - -``` -src/main/java/ssu/eatssu/ -├── domain/ -│ ├── menu/ -│ │ ├── entity/ -│ │ ├── persistence/ -│ │ ├── presentation/ -│ │ │ ├── dto/ -│ │ │ ├── rest/ -│ │ └── service/ -│ ├── restaurant/ -│ │ ├── entity/ -│ │ ├── persistence/ -│ │ ├── presentation/ -│ │ └── service/ -│ └── [기타 도메인] -├── global/ -│ ├── config/ -│ ├── error/ -│ └── security/ -└── [기타 패키지] -``` - -## 개발 가이드라인 - -### 코드 스타일 -<<<<<<< HEAD -======= - ->>>>>>> bbb0601 (docs: Java SDK 17 명세) -- Java 코딩 규칙 준수 -- 의미 있는 변수 및 메소드 이름 사용 -- 복잡한 로직에 대한 포괄적인 주석 작성 -- 모든 새로운 기능에 대한 단위 테스트 작성 - -### Git 워크플로우 -<<<<<<< HEAD -======= - ->>>>>>> bbb0601 (docs: Java SDK 17 명세) -- 메인 브랜치에서 기능 브랜치 생성 -- 설명적인 커밋 메시지 사용 -- 병합 전 코드 리뷰를 위한 풀 리퀘스트 제출 -- 커밋을 집중적이고 원자적으로 유지 - -### 보안 -<<<<<<< HEAD -======= - ->>>>>>> bbb0601 (docs: Java SDK 17 명세) -- 민감한 정보(API 키, 자격 증명)를 절대 커밋하지 않음 -- `application.yml` 파일은 팀 내에서만 공유 -- 항상 사용자 입력 검증 -- 최소 권한 원칙 준수 - -### 테스팅 -<<<<<<< HEAD -======= - ->>>>>>> bbb0601 (docs: Java SDK 17 명세) -- 모든 서비스에 대한 단위 테스트 작성 -- API 엔드포인트에 대한 통합 테스트 사용 -- 중요 구성 요소에 대한 테스트 커버리지 유지 - -## 배포 - -애플리케이션은 Docker 컨테이너로 배포됩니다. 빌드 프로세스는 `eat-ssu.jar`라는 JAR 파일을 생성합니다. - -## 연락처 - -프로젝트에 대한 자세한 정보는 [프로젝트 페이지](https://hi-jin-1514.notion.site/EAT-SSU-b04aaec9b7814a628c6ef6b3e08c74a3)를 방문하세요. \ No newline at end of file From a6fd8ada490bd6216436ca4fe14b9b1e2d8da6cc Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Mon, 23 Jun 2025 22:34:30 +0900 Subject: [PATCH 225/399] =?UTF-8?q?feat:=20=EC=84=9C=EB=B2=84=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20=EC=8A=AC=EB=9E=99=EB=B4=87=20=EC=9A=B4=EC=98=81?= =?UTF-8?q?=ED=99=98=EA=B2=BD=20=EC=B6=94=EA=B0=80=20(#162)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 슬랙 서버-에러 채널에 400,500 에러 전송 기능 개발 * chore: test controller 삭제 * feat: 개발/운영서버에서 발생한 것인지 명시 * chore: 운영환경 표시를 yml 파일에서 하는 것으로 변경 --- .../domain/auth/infrastructure/SecurityConfig.java | 2 +- .../domain/slack/entity/SlackMessageFormat.java | 10 +++++++--- .../eatssu/global/handler/ErrorTestController.java | 12 ++++++++++++ 3 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 src/main/java/ssu/eatssu/global/handler/ErrorTestController.java diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 8827919a..56e667b6 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -30,7 +30,7 @@ public class SecurityConfig { private static final String[] AUTH_WHITELIST = { "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics", "/v2/reviews", - "/partnerships/**","/v2/reviews/menus/**","/v2/reviews/meals/**","/actuator/**" + "/partnerships/**","/v2/reviews/menus/**","/v2/reviews/meals/**","/actuator/**","/error-test/**" }; private static final String[] ADMIN_PAGE_LIST = { diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java index 38e19159..81cabe99 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java @@ -2,6 +2,7 @@ import java.text.MessageFormat; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import ssu.eatssu.domain.inquiry.entity.Inquiry; @@ -12,7 +13,10 @@ @Component public class SlackMessageFormat { - private SlackMessageFormat() { + private static String serverEnv; + + private SlackMessageFormat(@Value("${server.env:unknown}") String serverEnvValue) { + SlackMessageFormat.serverEnv = serverEnvValue; } public static String sendReport(Report report) { @@ -72,14 +76,14 @@ public static String sendServerError(Exception ex) { *서버 에러 발생* - 예외 클래스: {0} - 예외 메시지: {1} - - 원인: {2} + - 개발환경: {2} =================== """ ); Object[] args = { ex.getClass().getName(), ex.getMessage(), - ex.getCause() != null ? ex.getCause().toString() : "없음" + serverEnv, }; return messageFormat.format(args); } diff --git a/src/main/java/ssu/eatssu/global/handler/ErrorTestController.java b/src/main/java/ssu/eatssu/global/handler/ErrorTestController.java new file mode 100644 index 00000000..e4cfd34d --- /dev/null +++ b/src/main/java/ssu/eatssu/global/handler/ErrorTestController.java @@ -0,0 +1,12 @@ +package ssu.eatssu.global.handler; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class ErrorTestController { + @GetMapping("/error-test") + public String triggerError() { + throw new RuntimeException("임의로 발생시킨 런타임 에러입니다!"); + } +} From e619c3ef20836e56ab40c9fe47c8e4c27c474da6 Mon Sep 17 00:00:00 2001 From: Jiwoong CHOI Date: Tue, 24 Jun 2025 21:41:51 +0900 Subject: [PATCH 226/399] =?UTF-8?q?refactor:=20application=20=EC=B6=94?= =?UTF-8?q?=EC=A0=81=EC=97=90=20=EB=8B=A4=EB=A5=B8=20CICD=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=B4=ED=94=84=EB=9D=BC=EC=9D=B8=20=EC=88=98=EC=A0=95=20&?= =?UTF-8?q?=20JWT=20=ED=86=A0=ED=81=B0=20=EA=B0=9C=EB=B3=84=ED=99=94?= =?UTF-8?q?=EB=A1=9C=20=ED=81=B4=EB=9D=BC=EC=9D=B4=EC=96=B8=ED=8A=B8=20?= =?UTF-8?q?=EC=A0=91=EA=B7=BC=20=EB=B0=A9=EC=A7=80=20(#163)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 애플리케이션 환경 설정 파일 추가 및 .gitignore 수정 - application-dev.yml, application-local.yml, application-prod.yml, application-test.yml 파일 추가 - .gitignore에서 애플리케이션 파일 관련 항목 제거 * feat: Swagger UI 경로 수정 - Swagger UI의 경로를 "/swagger-ui.html"로 변경하여 리소스 접근을 개선함. * feat: 개별 배포 테스트를 위한 GitHub Actions 워크플로우 추가 - 새로운 워크플로우 파일인 individual-deploy-test.yml을 추가하여 pull request 시 자동으로 배포 테스트를 수행하도록 설정. - 개발 환경에 맞춘 JDK 설정, Gradle 캐싱, Docker 빌드 및 배포 스크립트를 포함함. - application-dev.yml, application-local.yml, application-prod.yml 파일에서 JWT 비밀 키를 환경별로 수정함. * feat: GitHub Actions 워크플로우에서 브랜치 이름 수정 및 환경별 설정 개선 - dev 브랜치 이름을 'develop'으로 변경 - dev 및 prod 프로파일 활성화 시 환경별 application.yml 파일 생성 방식 개선 - Docker 실행 시 환경 변수 추가로 보안 및 설정 강화 * refactor: 개발 및 운영 서버 배포를 위한 GitHub Actions 워크플로우 추가 - 새로운 워크플로우 파일을 추가하여 main 및 develop 브랜치에 대한 CI/CD 파이프라인을 설정. - 환경별 application.yml 파일을 자동으로 생성하도록 구성. - Docker 이미지 빌드 및 푸시, 서버 배포를 위한 단계 포함. --- .github/workflows/deploy-test.yml | 78 ++++++++++++ .github/workflows/deploy.yml | 118 ++++++++++++++++++ .github/workflows/gradle.yml | 112 ----------------- .gitignore | 8 -- .../auth/infrastructure/SecurityConfig.java | 2 +- src/main/resources/application-dev.yml | 99 +++++++++++++++ src/main/resources/application-local.yml | 96 ++++++++++++++ src/main/resources/application-prod.yml | 106 ++++++++++++++++ src/main/resources/application-test.yml | 74 +++++++++++ src/main/resources/application.yml | 6 + 10 files changed, 578 insertions(+), 121 deletions(-) create mode 100644 .github/workflows/deploy-test.yml create mode 100644 .github/workflows/deploy.yml delete mode 100644 .github/workflows/gradle.yml create mode 100644 src/main/resources/application-dev.yml create mode 100644 src/main/resources/application-local.yml create mode 100644 src/main/resources/application-prod.yml create mode 100644 src/main/resources/application-test.yml create mode 100644 src/main/resources/application.yml diff --git a/.github/workflows/deploy-test.yml b/.github/workflows/deploy-test.yml new file mode 100644 index 00000000..509be4c4 --- /dev/null +++ b/.github/workflows/deploy-test.yml @@ -0,0 +1,78 @@ +name: Develop 브랜치 CI/CD 테스트 + +on: + pull_request: + branches: [ "develop" ] + +permissions: + contents: read + +jobs: + test-develop-cicd: + runs-on: ubuntu-latest + steps: + - name: 소스 코드 체크아웃 + uses: actions/checkout@v3 + + - name: JDK 17 설정 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + + - name: Gradle 캐싱 + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: application.yml 생성 + run: | + echo "spring: + profiles: + include: dev" > ./src/main/resources/application.yml + shell: bash + + - name: gradlew 실행 권한 부여 + run: chmod +x gradlew + + - name: Gradle 빌드 + run: ./gradlew clean build -x test + + - name: Docker Hub 로그인 + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Docker 이미지 빌드 및 푸시 + run: | + docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev . + docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev + + - name: 개발 서버에 배포 + uses: appleboy/ssh-action@master + id: deploy-dev + with: + host: ${{ secrets.HOST_DEV }} + username: ${{ secrets.USERNAME }} + port: 22 + key: ${{ secrets.DEV_PRIVATE_KEY }} + script: | + sudo docker ps + sudo docker rm -f $(docker ps -qa) + sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev + sudo docker run -d -p 9000:9000 \ + -e EATSSU_DB_URL_DEV="${{ secrets.EATSSU_DB_URL_DEV }}" \ + -e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \ + -e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \ + -e EATSSU_JWT_SECRET_DEV="${{ secrets.EATSSU_JWT_SECRET_DEV }}" \ + -e EATSSU_AWS_ACCESS_KEY_DEV="${{ secrets.EATSSU_AWS_ACCESS_KEY_DEV }}" \ + -e EATSSU_AWS_SECRET_KEY_DEV="${{ secrets.EATSSU_AWS_SECRET_KEY_DEV }}" \ + -e EATSSU_SLACK_TOKEN="${{ secrets.EATSSU_SLACK_TOKEN }}" \ + ${{ secrets.DOCKER_REPO }}/eatssu-dev + sudo docker image prune -f diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..a34b0285 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,118 @@ +name: EAT-SSU Server 개발 & 운영 서버 배포 파이프라인 + +on: + push: + branches: [ "main", "develop" ] + +permissions: + contents: read + +jobs: + CI-CD: + name: CI/CD + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: JDK 17 설치 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + + - name: Gradle 캐싱 + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: dev 프로필 설정 + if: contains(github.ref, 'dev') + run: | + echo "spring: + profiles: + include: dev" > ./src/main/resources/application.yml + shell: bash + + - name: prod 프로필 설정 + if: contains(github.ref, 'main') + run: | + echo "spring: + profiles: + include: prod" > ./src/main/resources/application.yml + shell: bash + + - name: gradlew 실행 권한 부여 + run: chmod +x gradlew + + - name: Gradle로 빌드 + run: ./gradlew clean build -x test + + - name: Docker Hub 로그인 + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: prod 용 Docker 빌드 및 푸시 + if: contains(github.ref, 'main') + run: | + docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-prod . + docker push ${{ secrets.DOCKER_REPO }}/eatssu-prod + + - name: dev 서버 용 Docker 빌드 및 푸시 + if: contains(github.ref, 'dev') + run: | + docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev . + docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev + + - name: prod에 배포 + uses: appleboy/ssh-action@master + id: deploy-prod + if: contains(github.ref, 'main') + with: + host: ${{ secrets.HOST_PROD }} + username: ubuntu + key: ${{ secrets.PROD_PRIVATE_KEY }} + envs: GITHUB_SHA + script: | + sudo docker ps + sudo docker rm -f $(docker ps -qa) + sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-prod + sudo docker run -d -p 9000:9000 \ + -e EATSSU_DB_URL_PROD="${{ secrets.EATSSU_DB_URL_PROD }}" \ + -e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \ + -e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \ + -e EATSSU_JWT_SECRET_PROD="${{ secrets.EATSSU_JWT_SECRET_PROD }}" \ + -e EATSSU_AWS_ACCESS_KEY_PROD="${{ secrets.EATSSU_AWS_ACCESS_KEY_PROD }}" \ + -e EATSSU_AWS_SECRET_KEY_PROD="${{ secrets.EATSSU_AWS_SECRET_KEY_PROD }}" \ + -e EATSSU_SLACK_TOKEN="${{ secrets.EATSSU_SLACK_TOKEN }}" \ + ${{ secrets.DOCKER_REPO }}/eatssu-prod + sudo docker image prune -f + + - name: dev 서버에 배포 + uses: appleboy/ssh-action@master + id: deploy-dev + if: contains(github.ref, 'dev') + with: + host: ${{ secrets.HOST_DEV }} + username: ${{ secrets.USERNAME }} + port: 22 + key: ${{ secrets.DEV_PRIVATE_KEY }} + script: | + sudo docker ps + sudo docker rm -f $(docker ps -qa) + sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev + sudo docker run -d -p 9000:9000 \ + -e EATSSU_DB_URL_DEV="${{ secrets.EATSSU_DB_URL_DEV }}" \ + -e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \ + -e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \ + -e EATSSU_JWT_SECRET_DEV="${{ secrets.EATSSU_JWT_SECRET_DEV }}" \ + -e EATSSU_AWS_ACCESS_KEY_DEV="${{ secrets.EATSSU_AWS_ACCESS_KEY_DEV }}" \ + -e EATSSU_AWS_SECRET_KEY_DEV="${{ secrets.EATSSU_AWS_SECRET_KEY_DEV }}" \ + -e EATSSU_SLACK_TOKEN="${{ secrets.EATSSU_SLACK_TOKEN }}" \ + ${{ secrets.DOCKER_REPO }}/eatssu-dev + sudo docker image prune -f diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml deleted file mode 100644 index ed350a06..00000000 --- a/.github/workflows/gradle.yml +++ /dev/null @@ -1,112 +0,0 @@ -name: CI/CD github Actions & Docker - -on: - push: - branches: [ "main", "dev" ] - -permissions: - contents: read - -jobs: - CI-CD: - runs-on: ubuntu-latest - steps: - # JDK setting - github actions에서 사용할 JDK 설정 (aws 과 project의 java 버전과 별도로 관리) - - uses: actions/checkout@v3 - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - java-version: '17' - distribution: 'temurin' - - ## gradle caching (빌드 시간 줄이기) - - name: Gradle Caching - uses: actions/cache@v3 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- - - # 환경별 yml 파일 생성(1) - dev - - name: make dev server application.yml - if: contains(github.ref, 'dev') - run: | - cd ./src/main/resources - touch ./application.yml - echo "${{ secrets.YML_DEV }}" > ./application.yml - shell: bash - - # 환경별 yml 파일 생성(2) - prod - - name: make prod server application.yml - if: contains(github.ref, 'main') - run: | - cd ./src/main/resources - touch ./application.yml - echo "${{ secrets.YML_PROD }}" > ./application.yml - shell: bash - - # gradle chmod - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - # gradle build - - name: Build with Gradle - run: ./gradlew clean build -x test - - # docker login - - name: Docker Hub Login - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - # docker build & push to production - - name: Docker build & push to prod - if: contains(github.ref, 'main') - run: | - docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-prod . - docker push ${{ secrets.DOCKER_REPO }}/eatssu-prod - - # docker build & push to develop - - name: Docker build & push to dev server - if: contains(github.ref, 'dev') - run: | - docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev . - docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev - - ## deploy to production - - name: Deploy to prod - uses: appleboy/ssh-action@master - id: deploy-prod - if: contains(github.ref, 'main') - with: - host: ${{ secrets.HOST_PROD }} # EC2 퍼블릭 IPv4 DNS - username: ubuntu - key: ${{ secrets.PROD_PRIVATE_KEY }} - envs: GITHUB_SHA - script: | - sudo docker ps - sudo docker rm -f $(docker ps -qa) - sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-prod - sudo docker run -d -p 9000:9000 ${{ secrets.DOCKER_REPO }}/eatssu-prod - sudo docker image prune -f - - ## deploy to develop - - name: Deploy to dev server - uses: appleboy/ssh-action@master - id: deploy-dev - if: contains(github.ref, 'dev') - with: - host: ${{ secrets.HOST_DEV }} # EC2 퍼블릭 IPv4 DNS - username: ${{ secrets.USERNAME }} # ubuntu - port: 22 - key: ${{ secrets.DEV_PRIVATE_KEY }} - script: | - sudo docker ps - sudo docker rm -f $(docker ps -qa) - sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev - sudo docker run -d -p 9000:9000 ${{ secrets.DOCKER_REPO }}/eatssu-dev - sudo docker image prune -f diff --git a/.gitignore b/.gitignore index a64042c7..4ec9ead9 100644 --- a/.gitignore +++ b/.gitignore @@ -36,14 +36,6 @@ out/ ### VS Code ### .vscode/ -### application files ### -application.yml -application-local.yml -application-dev.yml -application-test.yml -application-prod.yml - - ### Generated files ### /src/main/generated/ diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 56e667b6..3804b923 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -23,7 +23,7 @@ @RequiredArgsConstructor public class SecurityConfig { private static final String[] RESOURCE_LIST = { - "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**","/oauths/valid/token", "/admin/img/**", "/css/**", "/js/**", + "/swagger-ui.html", "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**","/oauths/valid/token", "/admin/img/**", "/css/**", "/js/**", "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" }; diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 00000000..73e0008b --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,99 @@ +## port number +server: + port: 9000 + env: dev + + +spring: + ## Database + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${EATSSU_DB_URL_DEV} + username: ${EATSSU_DB_USERNAME} + password: ${EATSSU_DB_PASSWORD} + hikari: + maximum-pool-size: 200 + minimum-idle: 10 + connection-timeout: 2500 + connection-init-sql: SELECT 1 + validation-timeout: 2000 + idle-timeout: 600000 + max-lifetime: 1800000 + + ## JPA + jpa: + hibernate: + ddl-auto: none + properties: + hibernate: + jdbc: + lob: + non_contextual_creation: true + format_sql: false + show_sql: true + + servlet: + multipart: + max-file-size: 20MB + max-request-size: 20MB + +## Auth +jwt: + secret: + key: ${EATSSU_JWT_SECRET_DEV} + token-validity-in-seconds: 86400 + refresh-token-validity-in-seconds: 604800 + +#S3 +cloud: + aws: + credentials: + accessKey: ${EATSSU_AWS_ACCESS_KEY_DEV} + secretKey: ${EATSSU_AWS_SECRET_KEY_DEV} + s3: + bucket: eatssu-bucket + region: + static: ap-northeast-2 + stack: + auto: false + +#Slack +slack: + token: ${EATSSU_SLACK_TOKEN} + +#Swagger +swagger: + url: https://dev.eat-ssu.store + description: Test Server Swagger API + +springdoc: + swagger-ui: + path: /swagger-ui.html + groups-order: DESC + operationsSorter: method + disable-swagger-default-url: true + display-request-duration: true + api-docs: + path: /v3/api-docs + show-actuator: true + default-consumes-media-type: application/json + default-produces-media-type: application/json + paths-to-match: + - /** + +logging: + level: + root: INFO + com.zaxxer.hikari: INFO + +management: + endpoint: + metrics: + enabled: true + prometheus: + enabled: true + + endpoints: + web: + exposure: + include: health, info, metrics, prometheus diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml new file mode 100644 index 00000000..1a4ffcd6 --- /dev/null +++ b/src/main/resources/application-local.yml @@ -0,0 +1,96 @@ +## port number +server: + port: 9000 + env: local + + +spring: + ## Database + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${EATSSU_DB_URL_DEV} + username: ${EATSSU_DB_USERNAME} + password: ${EATSSU_DB_PASSWORD} + + ## JPA + jpa: + hibernate: + ddl-auto: none + properties: + hibernate: + jdbc: + lob: + non_contextual_creation: true + format_sql: true + show_sql: false + + servlet: + multipart: + max-file-size: 20MB + max-request-size: 20MB + +## Auth +jwt: + secret: + key: ${EATSSU_JWT_SECRET_LOCAL} + token-validity-in-seconds: 86400 + refresh-token-validity-in-seconds: 259200 + +#S3 +cloud: + aws: + credentials: + accessKey: ${EATSSU_AWS_ACCESS_KEY_DEV} + secretKey: ${EATSSU_AWS_SECRET_KEY_DEV} + s3: + bucket: eatssu-bucket + region: + static: ap-northeast-2 + stack: + auto: false + +#Slack +slack: + token: ${EATSSU_SLACK_TOKEN} + +#Swagger +swagger: + url: http://localhost:9000 + description: Test Server Swagger API + +springdoc: + swagger-ui: + # Swagger UI + path: /swagger-ui.html + # Group + groups-order: DESC + # API + operationsSorter: method + # Swagger UI + disable-swagger-default-url: true + # API + display-request-duration: true + api-docs: + path: /v3/api-docs + show-actuator: true + default-consumes-media-type: application/json + default-produces-media-type: application/json + paths-to-match: + - /** + +logging: + level: + root: INFO + com.zaxxer.hikari: INFO + +management: + endpoint: + metrics: + enabled: true + prometheus: + enabled: true + + endpoints: + web: + exposure: + include: health, info, metrics, prometheus diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml new file mode 100644 index 00000000..29d82927 --- /dev/null +++ b/src/main/resources/application-prod.yml @@ -0,0 +1,106 @@ +## port number +server: + port: 9000 + env: prod + + +spring: + ## Database + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${EATSSU_DB_URL_PROD} + username: ${EATSSU_DB_USERNAME} + password: ${EATSSU_DB_PASSWORD} + hikari: + maximum-pool-size: 200 + minimum-idle: 20 + connection-timeout: 2500 + connection-init-sql: SELECT 1 + validation-timeout: 2000 + idle-timeout: 600000 + max-lifetime: 1500000 + + ## JPA + jpa: + hibernate: + ddl-auto: none + properties: + hibernate: + jdbc: + lob: + non_contextual_creation: true + format_sql: true + show_sql: false + + servlet: + multipart: + max-file-size: 20MB + max-request-size: 20MB + +## Auth +jwt: + secret: + key: ${EATSSU_JWT_SECRET_PROD} + token-validity-in-seconds: 86400 + refresh-token-validity-in-seconds: 604800 + +#S3 +cloud: + aws: + credentials: + accessKey: ${EATSSU_AWS_ACCESS_KEY_PROD} + secretKey: ${EATSSU_AWS_SECRET_KEY_PROD} + s3: + bucket: eatssu-prod-bucket + region: + static: ap-northeast-2 + stack: + auto: false + +#Slack +slack: + token: ${EATSSU_SLACK_TOKEN} + +#Swagger +swagger: + url: https://eat-ssu.store + description: Prod-Server url + +springdoc: + swagger-ui: + # Swagger UI + path: /swagger-ui.html + # Group + groups-order: DESC + # API + operationsSorter: method + # Swagger UI + disable-swagger-default-url: true + # API + display-request-duration: true + api-docs: + path: /v3/api-docs + show-actuator: true + default-consumes-media-type: application/json + default-produces-media-type: application/json + paths-to-match: + - /** + +logging: + level: + root: INFO + com.zaxxer.hikari: INFO + + +management: + endpoint: + metrics: + enabled: true + prometheus: + enabled: true + + endpoints: + web: + exposure: + include: health, info, metrics, prometheus + diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml new file mode 100644 index 00000000..e6835a44 --- /dev/null +++ b/src/main/resources/application-test.yml @@ -0,0 +1,74 @@ +## port number +server: + port: 9000 + + +spring: + ## Database + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${EATSSU_DB_URL_TEST} + username: ${EATSSU_DB_USERNAME_TEST} + password: ${EATSSU_DB_PASSWORD_TEST} + + ## JPA + jpa: + hibernate: + ddl-auto: update + properties: + hibernate: +# jdbc: + lob: + non_contextual_creation: true + format_sql: true + show_sql: true + dialect: org.hibernate.dialect.MySQLDialect + + servlet: + multipart: + max-file-size: 20MB + max-request-size: 20MB + +## Auth +jwt: + secret: + key: ${EATSSU_JWT_SECRET_TEST} + token-validity-in-seconds: 86400 + refresh-token-validity-in-seconds: 259200 + +#S3 +cloud: + aws: + credentials: + accessKey: ${EATSSU_AWS_ACCESS_KEY_PROD} + secretKey: ${EATSSU_AWS_SECRET_KEY_PROD} + s3: + bucket: eatssu-dev-bucket + region: + static: ap-northeast-2 + stack: + auto: false + +#Slack +slack: + token: ${EATSSU_SLACK_TOKEN} + +#Swagger +swagger: + url: http://localhost:9000 + description: Test Server Swagger API + +springdoc: + swagger-ui: + path: /swagger-ui.html + groups-order: DESC + operationsSorter: method + disable-swagger-default-url: true + display-request-duration: true + api-docs: + path: /v3/api-docs + show-actuator: true + default-consumes-media-type: application/json + default-produces-media-type: application/json + paths-to-match: + - /** \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 00000000..fc14e1c2 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,6 @@ +spring: + profiles: +# include : prod +# include : dev + include : local +# include: test From 8240d16032d66ffe6d51e7926e2066b68490d606 Mon Sep 17 00:00:00 2001 From: Jiwoong CHOI Date: Wed, 25 Jun 2025 09:26:24 +0900 Subject: [PATCH 227/399] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EB=8B=89=EB=84=A4=EC=9E=84=20=EC=A0=9C=ED=95=9C=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80=20(#165)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - UserProperties 클래스를 생성하여 금지된 닉네임 목록을 관리. - UserService에서 닉네임 중복 및 금지된 닉네임 검증 로직 추가. - application.yml 파일에 금지된 닉네임 설정 추가. --- .../domain/user/config/UserProperties.java | 19 +++++++++++++++++++ .../domain/user/service/UserService.java | 14 ++++++++++++++ src/main/resources/application.yml | 13 +++++++++---- 3 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/user/config/UserProperties.java diff --git a/src/main/java/ssu/eatssu/domain/user/config/UserProperties.java b/src/main/java/ssu/eatssu/domain/user/config/UserProperties.java new file mode 100644 index 00000000..182ef04e --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/user/config/UserProperties.java @@ -0,0 +1,19 @@ +package ssu.eatssu.domain.user.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +@Getter +@Setter +@Component +@ConfigurationProperties(prefix = "user") +public class UserProperties { + + private List forbiddenNicknames = new ArrayList<>(); + +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index 8b96eede..cd9c4dd4 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -14,6 +14,7 @@ import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.user.config.UserProperties; import ssu.eatssu.domain.user.department.entity.Department; import ssu.eatssu.domain.user.department.persistence.DepartmentRepository; import ssu.eatssu.domain.user.dto.DepartmentResponse; @@ -34,6 +35,7 @@ public class UserService { private final UserRepository userRepository; private final PasswordEncoder passwordEncoder; private final DepartmentRepository departmentRepository; + private final UserProperties userProperties; public User join(String email, OAuthProvider provider, String providerId) { String credentials = createCredentials(provider, providerId); @@ -46,6 +48,10 @@ public void updateNickname(CustomUserDetails userDetails, NicknameUpdateRequest User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + if (isForbiddenNickname(request.nickname()) || userRepository.existsByNickname(request.nickname())) { + throw new BaseException(DUPLICATE_NICKNAME); + } + user.updateNickname(request.nickname()); } @@ -71,6 +77,9 @@ public Boolean validateDuplicatedEmail(String email) { } public Boolean validateDuplicatedNickname(String nickname) { + if (isForbiddenNickname(nickname)) { + return false; + } return !userRepository.existsByNickname(nickname); } @@ -109,4 +118,9 @@ public DepartmentResponse getDepartment(CustomUserDetails userDetails) { } return new DepartmentResponse(department.getName()); } + + private boolean isForbiddenNickname(String nickname) { + return userProperties.getForbiddenNicknames().stream() + .anyMatch(forbidden -> forbidden.equalsIgnoreCase(nickname)); + } } \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index fc14e1c2..d2133024 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,6 +1,11 @@ spring: profiles: -# include : prod -# include : dev - include : local -# include: test + # include : prod + # include : dev + include : local + # include: test + +user: + forbidden-nicknames: + - EAT-SSU + - EATSSU From a19d8afa476bf6e82b59de1516e55b8550a87027 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Wed, 25 Jun 2025 09:36:05 +0900 Subject: [PATCH 228/399] =?UTF-8?q?chore:=20deploy-test.yml=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy-test.yml | 78 ------------------------------- 1 file changed, 78 deletions(-) delete mode 100644 .github/workflows/deploy-test.yml diff --git a/.github/workflows/deploy-test.yml b/.github/workflows/deploy-test.yml deleted file mode 100644 index 509be4c4..00000000 --- a/.github/workflows/deploy-test.yml +++ /dev/null @@ -1,78 +0,0 @@ -name: Develop 브랜치 CI/CD 테스트 - -on: - pull_request: - branches: [ "develop" ] - -permissions: - contents: read - -jobs: - test-develop-cicd: - runs-on: ubuntu-latest - steps: - - name: 소스 코드 체크아웃 - uses: actions/checkout@v3 - - - name: JDK 17 설정 - uses: actions/setup-java@v3 - with: - java-version: '17' - distribution: 'temurin' - - - name: Gradle 캐싱 - uses: actions/cache@v3 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- - - - name: application.yml 생성 - run: | - echo "spring: - profiles: - include: dev" > ./src/main/resources/application.yml - shell: bash - - - name: gradlew 실행 권한 부여 - run: chmod +x gradlew - - - name: Gradle 빌드 - run: ./gradlew clean build -x test - - - name: Docker Hub 로그인 - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Docker 이미지 빌드 및 푸시 - run: | - docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev . - docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev - - - name: 개발 서버에 배포 - uses: appleboy/ssh-action@master - id: deploy-dev - with: - host: ${{ secrets.HOST_DEV }} - username: ${{ secrets.USERNAME }} - port: 22 - key: ${{ secrets.DEV_PRIVATE_KEY }} - script: | - sudo docker ps - sudo docker rm -f $(docker ps -qa) - sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev - sudo docker run -d -p 9000:9000 \ - -e EATSSU_DB_URL_DEV="${{ secrets.EATSSU_DB_URL_DEV }}" \ - -e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \ - -e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \ - -e EATSSU_JWT_SECRET_DEV="${{ secrets.EATSSU_JWT_SECRET_DEV }}" \ - -e EATSSU_AWS_ACCESS_KEY_DEV="${{ secrets.EATSSU_AWS_ACCESS_KEY_DEV }}" \ - -e EATSSU_AWS_SECRET_KEY_DEV="${{ secrets.EATSSU_AWS_SECRET_KEY_DEV }}" \ - -e EATSSU_SLACK_TOKEN="${{ secrets.EATSSU_SLACK_TOKEN }}" \ - ${{ secrets.DOCKER_REPO }}/eatssu-dev - sudo docker image prune -f From 1d6c116a82af64186fcf66ce7e586689b539a380 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Wed, 25 Jun 2025 10:58:40 +0900 Subject: [PATCH 229/399] =?UTF-8?q?feat:=20GitHub=20Actions=20=EC=9B=8C?= =?UTF-8?q?=ED=81=AC=ED=94=8C=EB=A1=9C=EC=9A=B0=EC=97=90=20hotfix=20?= =?UTF-8?q?=EB=B8=8C=EB=9E=9C=EC=B9=98=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 배포 파이프라인에 'hotfix/deploy-prod-fail' 브랜치 추가 - dev 및 prod 프로필 설정 조건을 github.ref_name으로 변경하여 가독성 향상 --- .github/workflows/deploy.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a34b0285..a0f5f5ca 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -2,7 +2,7 @@ name: EAT-SSU Server 개발 & 운영 서버 배포 파이프라인 on: push: - branches: [ "main", "develop" ] + branches: [ "main", "develop", "hotfix/deploy-prod-fail" ] permissions: contents: read @@ -30,7 +30,7 @@ jobs: ${{ runner.os }}-gradle- - name: dev 프로필 설정 - if: contains(github.ref, 'dev') + if: github.ref_name == 'develop' run: | echo "spring: profiles: @@ -38,7 +38,7 @@ jobs: shell: bash - name: prod 프로필 설정 - if: contains(github.ref, 'main') + if: github.ref_name == 'main' || github.ref_name == 'hotfix/deploy-prod-fail' run: | echo "spring: profiles: @@ -58,13 +58,13 @@ jobs: password: ${{ secrets.DOCKER_PASSWORD }} - name: prod 용 Docker 빌드 및 푸시 - if: contains(github.ref, 'main') + if: github.ref_name == 'main' || github.ref_name == 'hotfix/deploy-prod-fail' run: | docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-prod . docker push ${{ secrets.DOCKER_REPO }}/eatssu-prod - name: dev 서버 용 Docker 빌드 및 푸시 - if: contains(github.ref, 'dev') + if: github.ref_name == 'develop' run: | docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev . docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev @@ -72,12 +72,12 @@ jobs: - name: prod에 배포 uses: appleboy/ssh-action@master id: deploy-prod - if: contains(github.ref, 'main') + if: github.ref_name == 'main' || github.ref_name == 'hotfix/deploy-prod-fail' with: host: ${{ secrets.HOST_PROD }} - username: ubuntu + username: ${{ secrets.USERNAME }} key: ${{ secrets.PROD_PRIVATE_KEY }} - envs: GITHUB_SHA + port: 22 script: | sudo docker ps sudo docker rm -f $(docker ps -qa) @@ -96,7 +96,7 @@ jobs: - name: dev 서버에 배포 uses: appleboy/ssh-action@master id: deploy-dev - if: contains(github.ref, 'dev') + if: github.ref_name == 'develop' with: host: ${{ secrets.HOST_DEV }} username: ${{ secrets.USERNAME }} From f8beaac791e65a79ebe2350b1619aa290103de20 Mon Sep 17 00:00:00 2001 From: Jiwoong Date: Wed, 25 Jun 2025 11:12:09 +0900 Subject: [PATCH 230/399] =?UTF-8?q?feat:=20=EA=B0=9C=EB=B0=9C=20=EC=84=9C?= =?UTF-8?q?=EB=B2=84=20CD=20=ED=8C=8C=EC=9D=B4=ED=94=84=EB=9D=BC=EC=9D=B8?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EB=B8=8C=EB=9E=9C=EC=B9=98=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a0f5f5ca..28b48599 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -2,7 +2,7 @@ name: EAT-SSU Server 개발 & 운영 서버 배포 파이프라인 on: push: - branches: [ "main", "develop", "hotfix/deploy-prod-fail" ] + branches: [ "main", "develop", "hotfix/deploy-prod-fail", "hotfix/deploy-dev-fail" ] permissions: contents: read @@ -30,7 +30,7 @@ jobs: ${{ runner.os }}-gradle- - name: dev 프로필 설정 - if: github.ref_name == 'develop' + if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' run: | echo "spring: profiles: @@ -64,7 +64,7 @@ jobs: docker push ${{ secrets.DOCKER_REPO }}/eatssu-prod - name: dev 서버 용 Docker 빌드 및 푸시 - if: github.ref_name == 'develop' + if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' run: | docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev . docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev @@ -96,7 +96,7 @@ jobs: - name: dev 서버에 배포 uses: appleboy/ssh-action@master id: deploy-dev - if: github.ref_name == 'develop' + if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' with: host: ${{ secrets.HOST_DEV }} username: ${{ secrets.USERNAME }} From c10eb5832163190dd743e0ecbcf02e32b3dff088 Mon Sep 17 00:00:00 2001 From: Jiwoong CHOI Date: Wed, 25 Jun 2025 20:47:14 +0900 Subject: [PATCH 231/399] =?UTF-8?q?feat:=20=EB=8B=A4=EC=96=91=ED=95=9C=20?= =?UTF-8?q?=EB=8F=84=EB=A9=94=EC=9D=B8=20=EB=B0=8F=20=EC=84=9C=EB=B9=84?= =?UTF-8?q?=EC=8A=A4=EC=97=90=20=EB=8C=80=ED=95=9C=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=88=98=EC=A0=95=20(#170)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ssu/eatssu/EatSsuApplication.java | 6 +- .../controller/AuthenticationController.java | 17 +- .../controller/ManageCategoryController.java | 19 +- .../controller/ManageFixMenuController.java | 67 +- .../controller/ManageInquiryController.java | 43 +- .../controller/ManageMealController.java | 65 +- .../controller/ManageReportController.java | 31 +- .../controller/ManageReviewController.java | 17 +- .../eatssu/domain/admin/dto/InquiryLine.java | 10 +- .../ssu/eatssu/domain/admin/dto/MealInfo.java | 4 +- .../eatssu/domain/admin/dto/MealSection.java | 20 +- .../eatssu/domain/admin/dto/MenuBoard.java | 12 +- .../eatssu/domain/admin/dto/MenuBoards.java | 12 +- .../eatssu/domain/admin/dto/MenuSection.java | 18 +- .../eatssu/domain/admin/dto/PageWrapper.java | 16 +- .../domain/admin/dto/RegisterMealRequest.java | 6 +- .../eatssu/domain/admin/dto/ReportLine.java | 12 +- .../domain/admin/dto/SectionInBoard.java | 2 +- .../AdminAuthConfigurationProperties.java | 5 +- .../infrastructure/AdminConfiguration.java | 9 +- .../admin/listener/ReportEventListener.java | 13 +- .../persistence/LoadCategoryRepository.java | 22 +- .../persistence/LoadFixMenuRepository.java | 118 ++-- .../persistence/LoadInquiryRepository.java | 84 ++- .../admin/persistence/LoadMealRepository.java | 204 +++--- .../persistence/LoadReportRepository.java | 78 ++- .../persistence/ManageCategoryRepository.java | 1 - .../persistence/ManageInquiryRepository.java | 1 - .../persistence/ManageMealMenuRepository.java | 1 - .../persistence/ManageMealRepository.java | 1 - .../persistence/ManageMenuRepository.java | 7 +- .../persistence/ManageReportRepository.java | 1 - .../persistence/ManageReviewRepository.java | 1 - .../persistence/MenuRatingRepository.java | 36 +- .../admin/service/AuthenticationService.java | 35 +- .../admin/service/ManageCategoryService.java | 29 +- .../admin/service/ManageFixMenuService.java | 165 +++-- .../admin/service/ManageInquiryService.java | 35 +- .../admin/service/ManageMealService.java | 217 ++++--- .../admin/service/ManageReportService.java | 33 +- .../admin/service/ManageReviewService.java | 19 +- .../ssu/eatssu/domain/auth/dto/AppleKeys.java | 38 +- .../domain/auth/dto/AppleLoginRequest.java | 4 +- .../domain/auth/dto/KakaoLoginRequest.java | 12 +- .../eatssu/domain/auth/dto/ValidRequest.java | 6 +- .../auth/entity/AppleAuthenticator.java | 2 +- .../domain/auth/entity/OAuthProvider.java | 2 +- .../auth/entity/SystemAppleAuthenticator.java | 234 ++++--- .../auth/infrastructure/OAuthConfig.java | 16 +- .../auth/infrastructure/SecurityConfig.java | 103 ++- .../auth/infrastructure/SecurityUtil.java | 39 +- .../auth/presentation/OAuthController.java | 114 ++-- .../auth/security/CustomUserDetails.java | 91 ++- .../security/CustomUserDetailsService.java | 19 +- .../security/JwtAuthenticationFilter.java | 75 ++- .../auth/security/JwtTokenProvider.java | 302 +++++---- .../security/UserAuthenticationProvider.java | 21 +- .../auth/security/UserPrincipalDto.java | 20 +- .../domain/auth/service/OAuthService.java | 202 +++--- .../inquiry/dto/CreateInquiryRequest.java | 8 +- .../inquiry/dto/InquiryDetailResponse.java | 32 +- .../eatssu/domain/inquiry/entity/Inquiry.java | 46 +- .../domain/inquiry/entity/InquiryStatus.java | 2 +- .../presentation/InquiryController.java | 41 +- .../inquiry/repository/InquiryRepository.java | 1 - .../inquiry/service/InquiryService.java | 23 +- .../ssu/eatssu/domain/menu/entity/Meal.java | 75 ++- .../eatssu/domain/menu/entity/MealMenu.java | 20 +- .../ssu/eatssu/domain/menu/entity/Menu.java | 235 ++++--- .../domain/menu/entity/MenuCategory.java | 14 +- .../menu/entity/constants/MenuType.java | 49 +- .../menu/entity/constants/TimePart.java | 33 +- .../persistence/MealMenuQueryRepository.java | 34 +- .../menu/persistence/MealMenuRepository.java | 21 +- .../menu/persistence/MealRepository.java | 11 +- .../persistence/MenuCategoryRepository.java | 7 +- .../menu/persistence/MenuRepository.java | 15 +- .../QuerydslMealRatingCalculator.java | 100 ++- .../QuerydslMealRatingCounter.java | 84 ++- .../QuerydslMenuRatingCalculator.java | 84 ++- .../QuerydslMenuRatingCounter.java | 62 +- .../dto/request/CreateMealRequest.java | 8 +- .../request/MealCreateWithPriceRequest.java | 12 +- .../dto/response/BriefMenuResponse.java | 16 +- .../response/CategoryWithMenusResponse.java | 26 +- .../dto/response/MealDetailResponse.java | 44 +- .../dto/response/MenuResponse.java | 22 +- .../dto/response/MenuRestaurantResponse.java | 30 +- .../dto/response/MenusInMealResponse.java | 22 +- .../presentation/rest/MealController.java | 207 +++--- .../presentation/rest/MenuController.java | 45 +- .../menu/service/MealRatingService.java | 11 +- .../domain/menu/service/MealService.java | 255 ++++---- .../menu/service/MenuRatingService.java | 11 +- .../domain/menu/service/MenuService.java | 129 ++-- .../QuerydslMenuRatingCountProvider.java | 44 +- .../dto/CreatePartnershipRequest.java | 68 +- .../dto/PartnershipDetailResponse.java | 80 +-- .../partnership/dto/PartnershipResponse.java | 72 +-- .../partnership/entity/Partnership.java | 73 ++- .../entity/PartnershipCollege.java | 28 +- .../entity/PartnershipDepartment.java | 28 +- .../partnership/entity/PartnershipLike.java | 28 +- .../partnership/entity/PartnershipType.java | 16 +- .../partnership/entity/RestaurantType.java | 12 +- .../PartnershipLikeRepository.java | 11 +- .../persistence/PartnershipRepository.java | 21 +- .../presentation/PartnershipController.java | 117 ++-- .../service/PartnershipService.java | 208 +++--- .../JpaLoadCollectionRatingCalculator.java | 240 +++---- .../entity/JpaProjectionRatingCalculator.java | 116 ++-- .../rating/entity/RatingCalculator.java | 64 +- .../domain/rating/entity/RatingCountMap.java | 54 +- .../eatssu/domain/rating/entity/Ratings.java | 28 +- .../domain/rating/entity/ReviewRating.java | 100 +-- .../report/dto/ReportCreateRequest.java | 12 +- .../report/dto/ReportTypeInformation.java | 16 +- .../domain/report/dto/ReportTypeList.java | 26 +- .../domain/report/entity/ReportStatus.java | 37 +- .../domain/report/entity/ReportType.java | 33 +- .../report/presentation/ReportController.java | 61 +- .../report/repository/ReportRepository.java | 1 - .../domain/report/service/ReportService.java | 36 +- .../domain/restaurant/entity/Restaurant.java | 47 +- .../restaurant/entity/RestaurantType.java | 32 +- .../review/dto/CreateMealReviewRequest.java | 50 +- .../domain/review/dto/MealReviewResponse.java | 173 ++--- .../review/dto/MealReviewsResponse.java | 50 +- .../review/dto/MealReviewsV2Response.java | 49 +- .../domain/review/dto/MenuLikeRequest.java | 8 +- .../domain/review/dto/MenuReviewResponse.java | 60 +- .../review/dto/MenuReviewsV2Response.java | 68 +- .../domain/review/dto/RatingAverages.java | 6 +- .../eatssu/domain/review/dto/RatingsDto.java | 18 +- .../review/dto/RestaurantReviewResponse.java | 20 +- .../review/dto/ReviewCreateRequest.java | 69 +- .../domain/review/dto/ReviewDetail.java | 146 ++--- .../domain/review/dto/ReviewRatingCount.java | 37 +- .../review/dto/ReviewUpdateRequest.java | 18 +- .../domain/review/dto/SavedReviewImage.java | 4 +- .../review/dto/UpdateMealReviewRequest.java | 16 +- .../review/dto/UploadReviewRequest.java | 75 ++- .../eatssu/domain/review/entity/Report.java | 62 +- .../eatssu/domain/review/entity/Review.java | 228 +++---- .../domain/review/entity/ReviewImage.java | 24 +- .../domain/review/entity/ReviewLike.java | 26 +- .../domain/review/entity/ReviewMenuLike.java | 62 +- .../eatssu/domain/review/entity/Reviews.java | 72 +-- .../review/presentation/ReviewController.java | 315 +++++----- .../presentation/ReviewControllerV2.java | 292 +++++---- .../repository/ReviewImageRepository.java | 1 - .../repository/ReviewLikeRepository.java | 7 +- .../repository/ReviewMenuLikeRepository.java | 7 +- .../review/repository/ReviewRepository.java | 31 +- .../repository/ReviewRepositoryCustom.java | 21 +- .../repository/ReviewRepositoryImpl.java | 212 ++++--- .../review/service/ReviewRatingService.java | 109 ++-- .../domain/review/service/ReviewService.java | 278 ++++---- .../review/service/ReviewServiceV2.java | 592 +++++++++--------- .../domain/slack/entity/SlackChannel.java | 20 +- .../slack/entity/SlackMessageFormat.java | 143 +++-- .../domain/slack/service/SlackService.java | 43 +- .../domain/slice/dto/SliceResponse.java | 24 +- .../domain/slice/service/SliceService.java | 150 ++--- .../user/department/entity/College.java | 26 +- .../user/department/entity/Department.java | 28 +- .../persistence/CollegeRepository.java | 7 +- .../persistence/DepartmentRepository.java | 7 +- .../domain/user/dto/DepartmentResponse.java | 2 +- .../domain/user/dto/MyMealReviewResponse.java | 50 +- .../domain/user/dto/MyPageResponse.java | 8 +- .../domain/user/dto/MyReviewDetail.java | 68 +- .../user/dto/NicknameUpdateRequest.java | 2 +- .../ssu/eatssu/domain/user/dto/Tokens.java | 18 +- .../user/dto/UpdateDepartmentRequest.java | 4 +- .../domain/user/entity/BaseTimeEntity.java | 23 +- .../ssu/eatssu/domain/user/entity/Role.java | 27 +- .../ssu/eatssu/domain/user/entity/User.java | 183 +++--- .../eatssu/domain/user/entity/UserStatus.java | 2 +- .../user/presentation/UserController.java | 349 +++++------ .../user/repository/UserRepository.java | 13 +- .../domain/user/service/UserService.java | 200 +++--- .../domain/user/util/UserAliasUtil.java | 58 +- .../eatssu/global/config/QueryDslConfig.java | 18 +- .../ssu/eatssu/global/config/S3Config.java | 37 +- .../eatssu/global/config/SwaggerConfig.java | 77 ++- .../global/handler/ErrorTestController.java | 8 +- .../handler/GlobalExceptionHandler.java | 402 ++++++------ .../handler/JwtAccessDeniedHandler.java | 40 +- .../handler/JwtAuthenticationEntryPoint.java | 40 +- .../handler/response/BaseException.java | 2 +- .../global/handler/response/BaseResponse.java | 85 ++- .../handler/response/BaseResponseStatus.java | 193 +++--- .../eatssu/global/runner/WarmUpRunner.java | 25 +- .../ssu/eatssu/global/util/S3Uploader.java | 96 ++- src/main/resources/application-dev.yml | 18 +- src/main/resources/application-local.yml | 18 +- src/main/resources/application-prod.yml | 18 +- src/main/resources/application-test.yml | 20 +- src/main/resources/application.yml | 2 +- .../ssu/eatssu/EatSsuApplicationTests.java | 6 +- .../TestAppleAuthenticator.java | 8 +- .../domain/auth/service/OauthServiceTest.java | 41 +- .../domain/menu/service/MealServiceTest.java | 143 +++-- .../domain/menu/service/MenuServiceTest.java | 67 +- .../report/service/ReportServiceTest.java | 89 ++- .../review/service/ReviewServiceTest.java | 175 +++--- .../domain/user/service/UserServiceTest.java | 143 +++-- 208 files changed, 6322 insertions(+), 6446 deletions(-) diff --git a/src/main/java/ssu/eatssu/EatSsuApplication.java b/src/main/java/ssu/eatssu/EatSsuApplication.java index 36cb653b..aa937ee8 100644 --- a/src/main/java/ssu/eatssu/EatSsuApplication.java +++ b/src/main/java/ssu/eatssu/EatSsuApplication.java @@ -8,8 +8,8 @@ @SpringBootApplication public class EatSsuApplication { - public static void main(String[] args) { - SpringApplication.run(EatSsuApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(EatSsuApplication.class, args); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java b/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java index 20c8b38a..8291506c 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java @@ -1,13 +1,12 @@ package ssu.eatssu.domain.admin.controller; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.admin.dto.LoginRequest; import ssu.eatssu.domain.admin.service.AuthenticationService; import ssu.eatssu.domain.user.dto.Tokens; @@ -19,12 +18,12 @@ @RequiredArgsConstructor public class AuthenticationController { - private final AuthenticationService authenticationService; + private final AuthenticationService authenticationService; - @ResponseBody - @PostMapping("/login") - public BaseResponse login(@RequestBody LoginRequest request) { - return BaseResponse.success(authenticationService.login(request)); - } + @ResponseBody + @PostMapping("/login") + public BaseResponse login(@RequestBody LoginRequest request) { + return BaseResponse.success(authenticationService.login(request)); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java index c8b99234..66836d02 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java @@ -1,13 +1,12 @@ package ssu.eatssu.domain.admin.controller; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.RegisterCategoryRequest; import ssu.eatssu.domain.admin.service.ManageCategoryService; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -18,13 +17,13 @@ @RequiredArgsConstructor public class ManageCategoryController { - private final ManageCategoryService manageCategoryService; + private final ManageCategoryService manageCategoryService; - @ResponseBody - @PostMapping("/") - public BaseResponse register(@RequestParam Restaurant restaurant, - @RequestBody RegisterCategoryRequest request) { - manageCategoryService.register(restaurant, request); - return BaseResponse.success(); - } + @ResponseBody + @PostMapping("/") + public BaseResponse register(@RequestParam Restaurant restaurant, + @RequestBody RegisterCategoryRequest request) { + manageCategoryService.register(restaurant, request); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java index 5acefb1d..8b2ac2aa 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java @@ -1,5 +1,6 @@ package ssu.eatssu.domain.admin.controller; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -10,8 +11,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.MenuBoards; import ssu.eatssu.domain.admin.dto.RegisterFixMenuRequest; import ssu.eatssu.domain.admin.dto.UpdateFixMenuRequest; @@ -24,42 +23,42 @@ @RequiredArgsConstructor public class ManageFixMenuController { - private final ManageFixMenuService manageFixMenuService; + private final ManageFixMenuService manageFixMenuService; - @ResponseBody - @GetMapping("") - public BaseResponse fixMenuPage() { - MenuBoards menuBoards = manageFixMenuService.getMenuBoards(); - return BaseResponse.success(menuBoards); - } + @ResponseBody + @GetMapping("") + public BaseResponse fixMenuPage() { + MenuBoards menuBoards = manageFixMenuService.getMenuBoards(); + return BaseResponse.success(menuBoards); + } - @ResponseBody - @PostMapping("") - public BaseResponse register(@RequestParam Restaurant restaurant, - @RequestBody RegisterFixMenuRequest request) { - manageFixMenuService.register(restaurant, request); - return BaseResponse.success(); - } + @ResponseBody + @PostMapping("") + public BaseResponse register(@RequestParam Restaurant restaurant, + @RequestBody RegisterFixMenuRequest request) { + manageFixMenuService.register(restaurant, request); + return BaseResponse.success(); + } - @ResponseBody - @PatchMapping("/{menuId}") - public BaseResponse update(@PathVariable Long menuId, - @RequestBody UpdateFixMenuRequest request) { - manageFixMenuService.updateMenu(menuId, request); - return BaseResponse.success(); - } + @ResponseBody + @PatchMapping("/{menuId}") + public BaseResponse update(@PathVariable Long menuId, + @RequestBody UpdateFixMenuRequest request) { + manageFixMenuService.updateMenu(menuId, request); + return BaseResponse.success(); + } - @ResponseBody - @DeleteMapping("/{menuId}") - public BaseResponse delete(@PathVariable Long menuId) { - manageFixMenuService.delete(menuId); - return BaseResponse.success(); - } + @ResponseBody + @DeleteMapping("/{menuId}") + public BaseResponse delete(@PathVariable Long menuId) { + manageFixMenuService.delete(menuId); + return BaseResponse.success(); + } - @ResponseBody - @PatchMapping("/{menuId}/discontinued-status") - public BaseResponse toggleDiscontinuedStatus(@PathVariable Long menuId) { - return BaseResponse.success(manageFixMenuService.changeDiscontinuedStatus(menuId)); - } + @ResponseBody + @PatchMapping("/{menuId}/discontinued-status") + public BaseResponse toggleDiscontinuedStatus(@PathVariable Long menuId) { + return BaseResponse.success(manageFixMenuService.changeDiscontinuedStatus(menuId)); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java index fe15516d..f12c4be3 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java @@ -1,5 +1,6 @@ package ssu.eatssu.domain.admin.controller; +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.stereotype.Controller; @@ -11,8 +12,6 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.InquiryLine; import ssu.eatssu.domain.admin.dto.PageWrapper; import ssu.eatssu.domain.admin.dto.UpdateStatusRequest; @@ -23,27 +22,27 @@ @RequestMapping("/admin/inquiries") @RequiredArgsConstructor public class ManageInquiryController { - private final ManageInquiryService manageInquiryService; + private final ManageInquiryService manageInquiryService; - @ResponseBody - @GetMapping("") - public BaseResponse> inquiryPage(@PageableDefault(size = 20) Pageable pageable, - Model model) { - PageWrapper inquiryLinePage = manageInquiryService.getInquiryBoard(pageable); - return BaseResponse.success(inquiryLinePage); - } + @ResponseBody + @GetMapping("") + public BaseResponse> inquiryPage(@PageableDefault(size = 20) Pageable pageable, + Model model) { + PageWrapper inquiryLinePage = manageInquiryService.getInquiryBoard(pageable); + return BaseResponse.success(inquiryLinePage); + } - @ResponseBody - @PatchMapping("{inquiryId}/status") - public BaseResponse updateStatus(@PathVariable Long inquiryId, @RequestBody UpdateStatusRequest request) { - manageInquiryService.updateStatus(inquiryId, request); - return BaseResponse.success(); - } + @ResponseBody + @PatchMapping("{inquiryId}/status") + public BaseResponse updateStatus(@PathVariable Long inquiryId, @RequestBody UpdateStatusRequest request) { + manageInquiryService.updateStatus(inquiryId, request); + return BaseResponse.success(); + } - @ResponseBody - @DeleteMapping("{inquiryId}") - public BaseResponse delete(@PathVariable Long inquiryId) { - manageInquiryService.delete(inquiryId); - return BaseResponse.success(); - } + @ResponseBody + @DeleteMapping("{inquiryId}") + public BaseResponse delete(@PathVariable Long inquiryId) { + manageInquiryService.delete(inquiryId); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java index e2b57669..943929eb 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.admin.controller; -import java.util.Date; - +import lombok.RequiredArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -13,8 +12,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.MealInfo; import ssu.eatssu.domain.admin.dto.MenuBoards; import ssu.eatssu.domain.admin.dto.RegisterMealRequest; @@ -23,39 +20,41 @@ import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.global.handler.response.BaseResponse; +import java.util.Date; + @Controller @RequestMapping("/admin/meals") @RequiredArgsConstructor public class ManageMealController { - private final ManageMealService manageMealService; - - @ResponseBody - @GetMapping("") - public BaseResponse mealPage(@RequestParam @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @RequestParam TimePart timePart, - Model model) { - MenuBoards menuBoards = manageMealService.getMenuBoards(date, timePart); - return BaseResponse.success(menuBoards); - } - - @ResponseBody - @PostMapping("") - public BaseResponse register(@RequestParam Restaurant restaurant, - @RequestParam @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @RequestParam TimePart timePart, - @RequestBody RegisterMealRequest request, - Model model) { - MealInfo mealInfo = new MealInfo(restaurant, date, timePart); - manageMealService.register(mealInfo, request); - return BaseResponse.success(); - } - - @ResponseBody - @DeleteMapping("/{mealId}") - public BaseResponse delete(@PathVariable Long mealId) { - manageMealService.delete(mealId); - return BaseResponse.success(); - } + private final ManageMealService manageMealService; + + @ResponseBody + @GetMapping("") + public BaseResponse mealPage(@RequestParam @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @RequestParam TimePart timePart, + Model model) { + MenuBoards menuBoards = manageMealService.getMenuBoards(date, timePart); + return BaseResponse.success(menuBoards); + } + + @ResponseBody + @PostMapping("") + public BaseResponse register(@RequestParam Restaurant restaurant, + @RequestParam @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @RequestParam TimePart timePart, + @RequestBody RegisterMealRequest request, + Model model) { + MealInfo mealInfo = new MealInfo(restaurant, date, timePart); + manageMealService.register(mealInfo, request); + return BaseResponse.success(); + } + + @ResponseBody + @DeleteMapping("/{mealId}") + public BaseResponse delete(@PathVariable Long mealId) { + manageMealService.delete(mealId); + return BaseResponse.success(); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java index 4e04532e..5b870491 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java @@ -1,5 +1,6 @@ package ssu.eatssu.domain.admin.controller; +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.stereotype.Controller; @@ -9,8 +10,6 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.PageWrapper; import ssu.eatssu.domain.admin.dto.ReportLine; import ssu.eatssu.domain.admin.service.ManageReportService; @@ -20,21 +19,21 @@ @RequestMapping("/admin/reports") @RequiredArgsConstructor public class ManageReportController { - private final ManageReportService manageReportService; + private final ManageReportService manageReportService; - @ResponseBody - @GetMapping("") - public BaseResponse> reportPage(@PageableDefault(size = 20) Pageable pageable, - Model model) { - PageWrapper reportLinePage = manageReportService.getReportBoard(pageable); - return BaseResponse.success(reportLinePage); - } + @ResponseBody + @GetMapping("") + public BaseResponse> reportPage(@PageableDefault(size = 20) Pageable pageable, + Model model) { + PageWrapper reportLinePage = manageReportService.getReportBoard(pageable); + return BaseResponse.success(reportLinePage); + } - @ResponseBody - @DeleteMapping("/{reportId}") - public BaseResponse delete(@PathVariable Long reportId) { - manageReportService.delete(reportId); - return BaseResponse.success(); - } + @ResponseBody + @DeleteMapping("/{reportId}") + public BaseResponse delete(@PathVariable Long reportId) { + manageReportService.delete(reportId); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java index 612fcc3d..b0aa1c05 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java @@ -1,12 +1,11 @@ package ssu.eatssu.domain.admin.controller; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.service.ManageReviewService; import ssu.eatssu.global.handler.response.BaseResponse; @@ -14,12 +13,12 @@ @RequestMapping("/admin/reviews") @RequiredArgsConstructor public class ManageReviewController { - private final ManageReviewService manageReviewService; + private final ManageReviewService manageReviewService; - @ResponseBody - @DeleteMapping("/{reviewId}") - public BaseResponse delete(@PathVariable Long reviewId) { - manageReviewService.delete(reviewId); - return BaseResponse.success(); - } + @ResponseBody + @DeleteMapping("/{reviewId}") + public BaseResponse delete(@PathVariable Long reviewId) { + manageReviewService.delete(reviewId); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java b/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java index 93bbc9d6..34158f29 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java @@ -1,12 +1,12 @@ package ssu.eatssu.domain.admin.dto; -import java.time.LocalDateTime; - import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.inquiry.entity.InquiryStatus; +import java.time.LocalDateTime; + public record InquiryLine(Long inquiryId, LocalDateTime date, String email, String content, InquiryStatus status) { - public InquiryLine(Inquiry inquiry) { - this(inquiry.getId(), inquiry.getCreatedDate(), inquiry.getEmail(), inquiry.getContent(), inquiry.getStatus()); - } + public InquiryLine(Inquiry inquiry) { + this(inquiry.getId(), inquiry.getCreatedDate(), inquiry.getEmail(), inquiry.getContent(), inquiry.getStatus()); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java b/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java index d6a015fc..56cc82b3 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java @@ -1,9 +1,9 @@ package ssu.eatssu.domain.admin.dto; -import java.util.Date; - import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.util.Date; + public record MealInfo(Restaurant restaurant, Date date, TimePart timePart) { } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MealSection.java b/src/main/java/ssu/eatssu/domain/admin/dto/MealSection.java index 44647533..b0095afd 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MealSection.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MealSection.java @@ -5,16 +5,16 @@ public record MealSection(Long mealId, String title, List menuLines) implements SectionInBoard { - public MealSection(Long mealId, String title) { - this(mealId, title, new ArrayList<>()); - } + public MealSection(Long mealId, String title) { + this(mealId, title, new ArrayList<>()); + } - public MealSection(Long mealId) { - this(mealId, null, new ArrayList<>()); - } + public MealSection(Long mealId) { + this(mealId, null, new ArrayList<>()); + } - @Override - public void addMenuLine(MenuLine menuLine) { - menuLines.add(menuLine); - } + @Override + public void addMenuLine(MenuLine menuLine) { + menuLines.add(menuLine); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java index 2d25bc3d..af033a63 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java @@ -4,11 +4,11 @@ import java.util.List; public record MenuBoard(String restaurantName, List sections) { - public MenuBoard(String restaurantName) { - this(restaurantName, new ArrayList<>()); - } + public MenuBoard(String restaurantName) { + this(restaurantName, new ArrayList<>()); + } - public void addSection(SectionInBoard section) { - sections.add(section); - } + public void addSection(SectionInBoard section) { + sections.add(section); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java index b4f95f19..8a65cecc 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java @@ -4,11 +4,11 @@ import java.util.List; public record MenuBoards(List menuBoards) { - public MenuBoards() { - this(new ArrayList<>()); - } + public MenuBoards() { + this(new ArrayList<>()); + } - public void add(MenuBoard menuBoard) { - menuBoards.add(menuBoard); - } + public void add(MenuBoard menuBoard) { + menuBoards.add(menuBoard); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java index c080b7b7..48aeaad0 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java @@ -1,17 +1,17 @@ package ssu.eatssu.domain.admin.dto; +import ssu.eatssu.domain.menu.entity.MenuCategory; + import java.util.ArrayList; import java.util.List; -import ssu.eatssu.domain.menu.entity.MenuCategory; - public record MenuSection(Long categoryId, String categoryName, List menuLines) implements SectionInBoard { - public MenuSection(MenuCategory category) { - this(category.getId(), category.getName(), new ArrayList<>()); - } + public MenuSection(MenuCategory category) { + this(category.getId(), category.getName(), new ArrayList<>()); + } - @Override - public void addMenuLine(MenuLine menuLine) { - menuLines.add(menuLine); - } + @Override + public void addMenuLine(MenuLine menuLine) { + menuLines.add(menuLine); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java b/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java index 5fa7d3a7..b4898ef6 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java @@ -1,14 +1,14 @@ package ssu.eatssu.domain.admin.dto; -import java.util.List; - import org.springframework.data.domain.Page; +import java.util.List; + public record PageWrapper(List content, int totalPages, long totalElements, int number, int size, - int numberOfElements, - boolean isFirst, boolean isLast) { - public PageWrapper(Page page) { - this(page.getContent(), page.getTotalPages(), page.getTotalElements(), page.getNumber(), page.getSize(), - page.getNumberOfElements(), page.isFirst(), page.isLast()); - } + int numberOfElements, + boolean isFirst, boolean isLast) { + public PageWrapper(Page page) { + this(page.getContent(), page.getTotalPages(), page.getTotalElements(), page.getNumber(), page.getSize(), + page.getNumberOfElements(), page.isFirst(), page.isLast()); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMealRequest.java b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMealRequest.java index 4147cc02..efd33a83 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMealRequest.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMealRequest.java @@ -3,7 +3,7 @@ import java.util.List; public record RegisterMealRequest(List menuNames) { - public RegisterMealRequest { - menuNames.sort(String::compareTo); - } + public RegisterMealRequest { + menuNames.sort(String::compareTo); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java b/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java index 8948d13d..5fcd7831 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java @@ -1,13 +1,13 @@ package ssu.eatssu.domain.admin.dto; -import java.time.LocalDateTime; - import ssu.eatssu.domain.review.entity.Report; import ssu.eatssu.domain.review.entity.Review; +import java.time.LocalDateTime; + public record ReportLine(Long reportId, LocalDateTime date, String type, Long reviewId, String reviewText) { - public ReportLine(Report report, Review review) { - this(report.getId(), report.getCreatedDate(), report.getReportType().getDescription(), - review.getId(), review.getContent()); - } + public ReportLine(Report report, Review review) { + this(report.getId(), report.getCreatedDate(), report.getReportType().getDescription(), + review.getId(), review.getContent()); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/SectionInBoard.java b/src/main/java/ssu/eatssu/domain/admin/dto/SectionInBoard.java index aa3f566c..54eb1600 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/SectionInBoard.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/SectionInBoard.java @@ -1,5 +1,5 @@ package ssu.eatssu.domain.admin.dto; public interface SectionInBoard { - void addMenuLine(MenuLine menuLine); + void addMenuLine(MenuLine menuLine); } diff --git a/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java b/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java index 4c2f7ea0..29cca058 100644 --- a/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java +++ b/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java @@ -1,11 +1,10 @@ package ssu.eatssu.domain.admin.infrastructure; -import org.springframework.boot.context.properties.ConfigurationProperties; - import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; @Data @ConfigurationProperties(prefix = "admin") public class AdminAuthConfigurationProperties { - private String loginId; + private String loginId; } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminConfiguration.java b/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminConfiguration.java index 0eb3ea08..01309549 100644 --- a/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminConfiguration.java +++ b/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminConfiguration.java @@ -3,15 +3,14 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; - import ssu.eatssu.domain.admin.controller.AdminAuth; @Configuration @EnableConfigurationProperties(AdminAuthConfigurationProperties.class) public class AdminConfiguration { - @Bean - public AdminAuth adminAuthConfigurationProperties(AdminAuthConfigurationProperties properties) { - return new AdminAuth(properties.getLoginId()); - } + @Bean + public AdminAuth adminAuthConfigurationProperties(AdminAuthConfigurationProperties properties) { + return new AdminAuth(properties.getLoginId()); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java b/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java index 5219f6ae..d357cdc9 100644 --- a/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java +++ b/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java @@ -1,9 +1,8 @@ package ssu.eatssu.domain.admin.listener; +import lombok.RequiredArgsConstructor; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.event.ReviewDeleteEvent; import ssu.eatssu.domain.admin.service.ManageReportService; @@ -11,10 +10,10 @@ @RequiredArgsConstructor public class ReportEventListener { - private final ManageReportService manageReportService; + private final ManageReportService manageReportService; - @EventListener - public void deleteReport(ReviewDeleteEvent event) { - manageReportService.deleteAllByReviewId(event.reviewId()); - } + @EventListener + public void deleteReport(ReviewDeleteEvent event) { + manageReportService.deleteAllByReviewId(event.reviewId()); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java index 7ae755f2..102f5114 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java @@ -1,10 +1,8 @@ package ssu.eatssu.domain.admin.persistence; -import org.springframework.stereotype.Repository; - import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.menu.entity.QMenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -12,14 +10,14 @@ @RequiredArgsConstructor public class LoadCategoryRepository { - private final JPAQueryFactory queryFactory; - private final QMenuCategory category = QMenuCategory.menuCategory; + private final JPAQueryFactory queryFactory; + private final QMenuCategory category = QMenuCategory.menuCategory; - public boolean existsCategory(Restaurant restaurant, String name) { - return queryFactory.select(category.id) - .from(category) - .where(category.name.eq(name), - category.restaurant.eq(restaurant)) - .fetchFirst() != null; - } + public boolean existsCategory(Restaurant restaurant, String name) { + return queryFactory.select(category.id) + .from(category) + .where(category.name.eq(name), + category.restaurant.eq(restaurant)) + .fetchFirst() != null; + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java index 470d76f4..217f7578 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java @@ -1,85 +1,83 @@ package ssu.eatssu.domain.admin.persistence; -import java.util.List; - -import org.springframework.stereotype.Repository; - import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.admin.dto.BriefMenu; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.menu.entity.QMenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.util.List; + @Repository @RequiredArgsConstructor public class LoadFixMenuRepository { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - private final QMenuCategory category = QMenuCategory.menuCategory; + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QMenuCategory category = QMenuCategory.menuCategory; - public List findBriefMenusByCategoryId(Long categoryId) { - return queryFactory - .select(Projections.constructor(BriefMenu.class, - menu.id, - menu.name, - menu.price)) - .from(menu) - .join(menu.category, category) - .where( - menuCategoryIdEq(categoryId) - ) - .orderBy(menu.name.asc()) - .fetch(); - } + public List findBriefMenusByCategoryId(Long categoryId) { + return queryFactory + .select(Projections.constructor(BriefMenu.class, + menu.id, + menu.name, + menu.price)) + .from(menu) + .join(menu.category, category) + .where( + menuCategoryIdEq(categoryId) + ) + .orderBy(menu.name.asc()) + .fetch(); + } - public boolean existsMenu(String name, Restaurant restaurant) { - return queryFactory - .select(menu.id) - .from(menu) - .where( - menuNameEq(name), - restaurantNameEq(restaurant) - ) - .fetchFirst() != null; - } + public boolean existsMenu(String name, Restaurant restaurant) { + return queryFactory + .select(menu.id) + .from(menu) + .where( + menuNameEq(name), + restaurantNameEq(restaurant) + ) + .fetchFirst() != null; + } - public Restaurant getRestaurant(Long menuId) { - return queryFactory - .select(menu.restaurant) - .from(menu) - .where( - menu.id.eq(menuId) - ) - .fetchFirst(); - } + public Restaurant getRestaurant(Long menuId) { + return queryFactory + .select(menu.restaurant) + .from(menu) + .where( + menu.id.eq(menuId) + ) + .fetchFirst(); + } - public List findMenuCategoriesByRestaurant(Restaurant restaurant) { - return queryFactory - .selectFrom(category) - .where( - categoryRestaurantNameEq(restaurant) - ).fetch(); - } + public List findMenuCategoriesByRestaurant(Restaurant restaurant) { + return queryFactory + .selectFrom(category) + .where( + categoryRestaurantNameEq(restaurant) + ).fetch(); + } - private BooleanExpression menuNameEq(String menuName) { - return menu.name.eq(menuName); - } + private BooleanExpression menuNameEq(String menuName) { + return menu.name.eq(menuName); + } - private BooleanExpression restaurantNameEq(Restaurant restaurant) { - return menu.restaurant.eq(restaurant); - } + private BooleanExpression restaurantNameEq(Restaurant restaurant) { + return menu.restaurant.eq(restaurant); + } - private BooleanExpression categoryRestaurantNameEq(Restaurant restaurant) { - return category.restaurant.eq(restaurant); - } + private BooleanExpression categoryRestaurantNameEq(Restaurant restaurant) { + return category.restaurant.eq(restaurant); + } - private BooleanExpression menuCategoryIdEq(Long categoryId) { - return category.id.eq(categoryId); - } + private BooleanExpression menuCategoryIdEq(Long categoryId) { + return category.id.eq(categoryId); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java index ccc0b3c2..361ff218 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java @@ -1,58 +1,56 @@ package ssu.eatssu.domain.admin.persistence; -import java.util.List; - -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.support.PageableExecutionUtils; -import org.springframework.stereotype.Repository; - import com.querydsl.core.types.dsl.CaseBuilder; import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.support.PageableExecutionUtils; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.inquiry.entity.InquiryStatus; import ssu.eatssu.domain.inquiry.entity.QInquiry; +import java.util.List; + @RequiredArgsConstructor @Repository public class LoadInquiryRepository { - private final JPAQueryFactory queryFactory; - - private final QInquiry inquiry = QInquiry.inquiry; - - public Page findAllInquiries(Pageable pageable) { - return PageableExecutionUtils.getPage(fetchInquiries(pageable), pageable, () -> countInquiries().fetchOne()); - } - - private JPAQuery countInquiries() { - return queryFactory - .select(inquiry.count()) - .from(inquiry); - } - - private List fetchInquiries(Pageable pageable) { - return queryFactory - .selectFrom(inquiry) - .orderBy(statusPath().asc(), inquiry.createdDate.desc()) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .fetch(); - } - - private NumberExpression statusPath() { - - /** - * Inquiry Status 에 따라 정렬 - * WAITING -> HOLD -> ANSWERED - */ - return new CaseBuilder() - .when(inquiry.status.eq(InquiryStatus.WAITING)).then(1) - .when(inquiry.status.eq(InquiryStatus.HOLD)).then(2) - .when(inquiry.status.eq(InquiryStatus.ANSWERED)).then(3) - .otherwise(4); - } + private final JPAQueryFactory queryFactory; + + private final QInquiry inquiry = QInquiry.inquiry; + + public Page findAllInquiries(Pageable pageable) { + return PageableExecutionUtils.getPage(fetchInquiries(pageable), pageable, () -> countInquiries().fetchOne()); + } + + private JPAQuery countInquiries() { + return queryFactory + .select(inquiry.count()) + .from(inquiry); + } + + private List fetchInquiries(Pageable pageable) { + return queryFactory + .selectFrom(inquiry) + .orderBy(statusPath().asc(), inquiry.createdDate.desc()) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .fetch(); + } + + private NumberExpression statusPath() { + + /** + * Inquiry Status 에 따라 정렬 + * WAITING -> HOLD -> ANSWERED + */ + return new CaseBuilder() + .when(inquiry.status.eq(InquiryStatus.WAITING)).then(1) + .when(inquiry.status.eq(InquiryStatus.HOLD)).then(2) + .when(inquiry.status.eq(InquiryStatus.ANSWERED)).then(3) + .otherwise(4); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java index 73f6e7d0..feb3e9fe 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java @@ -1,15 +1,10 @@ package ssu.eatssu.domain.admin.persistence; -import java.util.Date; -import java.util.List; - -import org.springframework.stereotype.Repository; - import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.admin.dto.BriefMenu; import ssu.eatssu.domain.admin.dto.MealInfo; import ssu.eatssu.domain.menu.entity.Menu; @@ -19,104 +14,107 @@ import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.util.Date; +import java.util.List; + @Repository @RequiredArgsConstructor public class LoadMealRepository { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - private final QMeal meal = QMeal.meal; - private final QMealMenu mealMenu = QMealMenu.mealMenu; - - public List existsMeal(MealInfo query) { - return queryFactory.select(meal.id) - .from(meal) - .where( - mealRestaurantEq(query.restaurant()), - mealDateEq(query.date()), - mealTimePartEq(query.timePart()) - ) - .fetch(); - } - - public List findMenuNamesByMealId(Long mealId) { - return queryFactory - .select(menu.name) - .from(mealMenu) - .join(mealMenu.meal, meal) - .on(mealIdEq(mealId)) - .join(mealMenu.menu, menu) - .orderBy(menu.name.asc()) - .fetch(); - } - - public List getAllMealIdsByInfo(MealInfo query) { - return queryFactory.select(meal.id) - .from(meal) - .where( - mealRestaurantEq(query.restaurant()), - mealDateEq(query.date()), - mealTimePartEq(query.timePart()) - ) - .fetch(); - } - - public List findBriefMenusByMealId(Long mealId) { - return queryFactory - .select(Projections.constructor(BriefMenu.class, - menu.id, - menu.name, - menu.price)) - .from(mealMenu) - .join(mealMenu.meal, meal) - .on(mealIdEq(mealId)) - .join(mealMenu.menu, menu) - .orderBy(menu.name.asc()) - .fetch(); - } - - public Menu findMenu(String menuName, Restaurant restaurant) { - return queryFactory.selectFrom(menu) - .where( - menuNameEq(menuName), - menuRestaurantEq(restaurant) - ) - .fetchFirst(); - } - - public List getAllMenuIds(Long mealId) { - return queryFactory.select(mealMenu.menu.id) - .from(mealMenu) - .where(mealIdEq(mealId)) - .fetch(); - } - - private BooleanExpression mealIdEq(Long mealId) { - return meal.id.eq(mealId); - } - - private BooleanExpression mealTimePartEq(TimePart timePart) { - return meal.timePart.eq(timePart); - } - - private BooleanExpression mealDateEq(Date date) { - return meal.date.eq(date); - } - - private BooleanExpression mealRestaurantEq(Restaurant restaurant) { - return meal.restaurant.eq(restaurant); - } - - private BooleanExpression menuRestaurantEq(Restaurant restaurant) { - return menu.restaurant.eq(restaurant); - } - - private BooleanExpression menuNameEq(String menuName) { - return menu.name.eq(menuName); - } - - public int countMealMenuByMenuId(Long menuId) { - return (int)queryFactory.selectFrom(mealMenu) - .where(mealMenu.menu.id.eq(menuId)) - .fetchCount(); - } + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QMeal meal = QMeal.meal; + private final QMealMenu mealMenu = QMealMenu.mealMenu; + + public List existsMeal(MealInfo query) { + return queryFactory.select(meal.id) + .from(meal) + .where( + mealRestaurantEq(query.restaurant()), + mealDateEq(query.date()), + mealTimePartEq(query.timePart()) + ) + .fetch(); + } + + public List findMenuNamesByMealId(Long mealId) { + return queryFactory + .select(menu.name) + .from(mealMenu) + .join(mealMenu.meal, meal) + .on(mealIdEq(mealId)) + .join(mealMenu.menu, menu) + .orderBy(menu.name.asc()) + .fetch(); + } + + public List getAllMealIdsByInfo(MealInfo query) { + return queryFactory.select(meal.id) + .from(meal) + .where( + mealRestaurantEq(query.restaurant()), + mealDateEq(query.date()), + mealTimePartEq(query.timePart()) + ) + .fetch(); + } + + public List findBriefMenusByMealId(Long mealId) { + return queryFactory + .select(Projections.constructor(BriefMenu.class, + menu.id, + menu.name, + menu.price)) + .from(mealMenu) + .join(mealMenu.meal, meal) + .on(mealIdEq(mealId)) + .join(mealMenu.menu, menu) + .orderBy(menu.name.asc()) + .fetch(); + } + + public Menu findMenu(String menuName, Restaurant restaurant) { + return queryFactory.selectFrom(menu) + .where( + menuNameEq(menuName), + menuRestaurantEq(restaurant) + ) + .fetchFirst(); + } + + public List getAllMenuIds(Long mealId) { + return queryFactory.select(mealMenu.menu.id) + .from(mealMenu) + .where(mealIdEq(mealId)) + .fetch(); + } + + private BooleanExpression mealIdEq(Long mealId) { + return meal.id.eq(mealId); + } + + private BooleanExpression mealTimePartEq(TimePart timePart) { + return meal.timePart.eq(timePart); + } + + private BooleanExpression mealDateEq(Date date) { + return meal.date.eq(date); + } + + private BooleanExpression mealRestaurantEq(Restaurant restaurant) { + return meal.restaurant.eq(restaurant); + } + + private BooleanExpression menuRestaurantEq(Restaurant restaurant) { + return menu.restaurant.eq(restaurant); + } + + private BooleanExpression menuNameEq(String menuName) { + return menu.name.eq(menuName); + } + + public int countMealMenuByMenuId(Long menuId) { + return (int) queryFactory.selectFrom(mealMenu) + .where(mealMenu.menu.id.eq(menuId)) + .fetchCount(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java index 6bfde01f..0e3c3491 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java @@ -1,54 +1,52 @@ package ssu.eatssu.domain.admin.persistence; -import java.util.List; - -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.support.PageableExecutionUtils; -import org.springframework.stereotype.Repository; - import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.support.PageableExecutionUtils; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.admin.dto.ReportLine; import ssu.eatssu.domain.review.entity.QReport; import ssu.eatssu.domain.review.entity.QReview; +import java.util.List; + @Repository @RequiredArgsConstructor public class LoadReportRepository { - private final JPAQueryFactory queryFactory; - private final QReport report = QReport.report; - private final QReview review = QReview.review; - - public Page findAll(Pageable pageable) { - return PageableExecutionUtils.getPage(fetchReportLines(pageable), pageable, () -> countReports().fetchOne()); - } - - private JPAQuery countReports() { - return queryFactory - .select(report.count()) - .from(report); - } - - private List fetchReportLines(Pageable pageable) { - return queryFactory - .select(Projections.constructor(ReportLine.class, report, review)) - .from(report) - .join(report.review, review) - .orderBy(report.createdDate.desc()) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .fetch(); - } - - public List findAllByReviewId(Long reviewId) { - return queryFactory - .select(report.id) - .from(report) - .where(report.review.id.eq(reviewId)) - .fetch(); - } + private final JPAQueryFactory queryFactory; + private final QReport report = QReport.report; + private final QReview review = QReview.review; + + public Page findAll(Pageable pageable) { + return PageableExecutionUtils.getPage(fetchReportLines(pageable), pageable, () -> countReports().fetchOne()); + } + + private JPAQuery countReports() { + return queryFactory + .select(report.count()) + .from(report); + } + + private List fetchReportLines(Pageable pageable) { + return queryFactory + .select(Projections.constructor(ReportLine.class, report, review)) + .from(report) + .join(report.review, review) + .orderBy(report.createdDate.desc()) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .fetch(); + } + + public List findAllByReviewId(Long reviewId) { + return queryFactory + .select(report.id) + .from(report) + .where(report.review.id.eq(reviewId)) + .fetch(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageCategoryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageCategoryRepository.java index c25686a9..21847438 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageCategoryRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageCategoryRepository.java @@ -2,7 +2,6 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; - import ssu.eatssu.domain.menu.entity.MenuCategory; @Repository diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageInquiryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageInquiryRepository.java index 1a9adc10..590e2657 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageInquiryRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageInquiryRepository.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.admin.persistence; import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.inquiry.entity.Inquiry; public interface ManageInquiryRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealMenuRepository.java index 3b136e24..4478ea9f 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealMenuRepository.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.admin.persistence; import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.menu.entity.MealMenu; public interface ManageMealMenuRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealRepository.java index 831a89d2..09dd9f84 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealRepository.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.admin.persistence; import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.menu.entity.Meal; public interface ManageMealRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java index 6e7cb30e..25be2987 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java @@ -1,13 +1,12 @@ package ssu.eatssu.domain.admin.persistence; -import java.util.Optional; - import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; - import ssu.eatssu.domain.menu.entity.Menu; +import java.util.Optional; + @Repository public interface ManageMenuRepository extends JpaRepository { - Optional findById(Long id); + Optional findById(Long id); } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReportRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReportRepository.java index f3dce349..9acce379 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReportRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReportRepository.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.admin.persistence; import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.review.entity.Report; public interface ManageReportRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReviewRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReviewRepository.java index ad3b21f2..598c4876 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReviewRepository.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.admin.persistence; import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.review.entity.Review; public interface ManageReviewRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java index e90ff3fb..17c8c020 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java @@ -1,34 +1,32 @@ package ssu.eatssu.domain.admin.persistence; -import org.springframework.stereotype.Repository; - import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; @Repository @RequiredArgsConstructor public class MenuRatingRepository { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - private final QReview review = QReview.review; + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QReview review = QReview.review; - public Double getMainRatingAverage(Long menuId) { - return queryFactory - .select(review.ratings.mainRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId) - ) - .fetchOne(); - } + public Double getMainRatingAverage(Long menuId) { + return queryFactory + .select(review.ratings.mainRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId) + ) + .fetchOne(); + } - private BooleanExpression menuIdEq(Long menuId) { - return menu.id.eq(menuId); - } + private BooleanExpression menuIdEq(Long menuId) { + return menu.id.eq(menuId); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java b/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java index f16bc8c6..a5372fdd 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java @@ -1,9 +1,8 @@ package ssu.eatssu.domain.admin.service; +import lombok.RequiredArgsConstructor; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.controller.AdminAuth; import ssu.eatssu.domain.admin.dto.LoginRequest; import ssu.eatssu.domain.auth.security.JwtTokenProvider; @@ -14,24 +13,24 @@ @RequiredArgsConstructor @Service public class AuthenticationService { - private final JwtTokenProvider tokenProvider; - private final PasswordEncoder passwordEncoder; - private final UserRepository userRepository; - private final AdminAuth adminAuth; + private final JwtTokenProvider tokenProvider; + private final PasswordEncoder passwordEncoder; + private final UserRepository userRepository; + private final AdminAuth adminAuth; - public Tokens login(LoginRequest request) { - return tokenProvider.generateTokens(request.loginId(), request.password()); - } + public Tokens login(LoginRequest request) { + return tokenProvider.generateTokens(request.loginId(), request.password()); + } - private void join(String loginId, String password) { - String credentials = createCredentials(password); + private void join(String loginId, String password) { + String credentials = createCredentials(password); - //회원가입 - User user = User.adminJoin(loginId, credentials); - userRepository.save(user); - } + //회원가입 + User user = User.adminJoin(loginId, credentials); + userRepository.save(user); + } - private String createCredentials(String password) { - return passwordEncoder.encode(password); - } + private String createCredentials(String password) { + return passwordEncoder.encode(password); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java index 249b1a87..a4e5a7f7 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java @@ -1,9 +1,8 @@ package ssu.eatssu.domain.admin.service; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.RegisterCategoryRequest; import ssu.eatssu.domain.admin.persistence.LoadCategoryRepository; import ssu.eatssu.domain.admin.persistence.ManageCategoryRepository; @@ -17,20 +16,20 @@ @RequiredArgsConstructor public class ManageCategoryService { - private final LoadCategoryRepository loadCategoryRepository; - private final ManageCategoryRepository manageCategoryRepository; + private final LoadCategoryRepository loadCategoryRepository; + private final ManageCategoryRepository manageCategoryRepository; - public void register(Restaurant restaurant, RegisterCategoryRequest request) { - // 해당 식당에 이미 존재하는 카테고리인지 확인 - if (loadCategoryRepository.existsCategory(restaurant, request.name())) { - throw new BaseException(BaseResponseStatus.CONFLICT); - } + public void register(Restaurant restaurant, RegisterCategoryRequest request) { + // 해당 식당에 이미 존재하는 카테고리인지 확인 + if (loadCategoryRepository.existsCategory(restaurant, request.name())) { + throw new BaseException(BaseResponseStatus.CONFLICT); + } - MenuCategory category = MenuCategory.builder() - .restaurant(restaurant) - .name(request.name()) - .build(); + MenuCategory category = MenuCategory.builder() + .restaurant(restaurant) + .name(request.name()) + .build(); - manageCategoryRepository.save(category); - } + manageCategoryRepository.save(category); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java index fdfa44aa..542361dc 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java @@ -1,11 +1,8 @@ package ssu.eatssu.domain.admin.service; -import java.util.List; - +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.BriefMenu; import ssu.eatssu.domain.admin.dto.MenuBoard; import ssu.eatssu.domain.admin.dto.MenuBoards; @@ -23,114 +20,116 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.util.List; + @Service @Transactional @RequiredArgsConstructor public class ManageFixMenuService { - private final LoadFixMenuRepository loadMenuRepository; - private final ManageMenuRepository manageMenuRepository; - private final MenuRatingRepository menuRatingRepository; + private final LoadFixMenuRepository loadMenuRepository; + private final ManageMenuRepository manageMenuRepository; + private final MenuRatingRepository menuRatingRepository; - public MenuBoards getMenuBoards() { - MenuBoards menuBoards = new MenuBoards(); + public MenuBoards getMenuBoards() { + MenuBoards menuBoards = new MenuBoards(); - RestaurantType.FIXED.getRestaurants() - .forEach(restaurant -> menuBoards.add(getMenuBoard(restaurant))); + RestaurantType.FIXED.getRestaurants() + .forEach(restaurant -> menuBoards.add(getMenuBoard(restaurant))); - return menuBoards; - } + return menuBoards; + } - private MenuBoard getMenuBoard(Restaurant restaurant) { - MenuBoard menuBoard = new MenuBoard(restaurant.getRestaurantName()); + private MenuBoard getMenuBoard(Restaurant restaurant) { + MenuBoard menuBoard = new MenuBoard(restaurant.getRestaurantName()); - getMenuSections(restaurant).forEach(menuBoard::addSection); + getMenuSections(restaurant).forEach(menuBoard::addSection); - return menuBoard; - } + return menuBoard; + } - private List getMenuSections(Restaurant restaurant) { - List menuCategories = loadMenuRepository.findMenuCategoriesByRestaurant(restaurant); - return menuCategories.stream() - .map(this::getMenuSection) - .toList(); - } + private List getMenuSections(Restaurant restaurant) { + List menuCategories = loadMenuRepository.findMenuCategoriesByRestaurant(restaurant); + return menuCategories.stream() + .map(this::getMenuSection) + .toList(); + } - private MenuSection getMenuSection(MenuCategory category) { - MenuSection menuSection = new MenuSection(category); + private MenuSection getMenuSection(MenuCategory category) { + MenuSection menuSection = new MenuSection(category); - List briefMenus = loadMenuRepository.findBriefMenusByCategoryId(category.getId()); + List briefMenus = loadMenuRepository.findBriefMenusByCategoryId(category.getId()); - briefMenus.forEach(briefMenu -> - menuSection.addMenuLine(new MenuLine( - briefMenu.id(), - briefMenu.name(), - briefMenu.price(), - menuRatingRepository.getMainRatingAverage(briefMenu.id()) - )) - ); - return menuSection; - } + briefMenus.forEach(briefMenu -> + menuSection.addMenuLine(new MenuLine( + briefMenu.id(), + briefMenu.name(), + briefMenu.price(), + menuRatingRepository.getMainRatingAverage(briefMenu.id()) + )) + ); + return menuSection; + } - public void register(Restaurant restaurant, RegisterFixMenuRequest request) { + public void register(Restaurant restaurant, RegisterFixMenuRequest request) { - // 해당 식당에 이미 존재하는 메뉴인지 확인 - if (loadMenuRepository.existsMenu(request.name(), restaurant)) { - throw new BaseException(BaseResponseStatus.CONFLICT); - } + // 해당 식당에 이미 존재하는 메뉴인지 확인 + if (loadMenuRepository.existsMenu(request.name(), restaurant)) { + throw new BaseException(BaseResponseStatus.CONFLICT); + } - // 해당 식당의 메뉴 카테고리들 중에 요청받은 카테고리가 존재하는지 확인 - List menuCategories = loadMenuRepository.findMenuCategoriesByRestaurant(restaurant); - MenuCategory category = menuCategories.stream() - .filter(menuCategory -> menuCategory.getId().equals(request.categoryId())) - .findFirst() - .orElseThrow(() -> new BaseException(BaseResponseStatus.BAD_REQUEST)); + // 해당 식당의 메뉴 카테고리들 중에 요청받은 카테고리가 존재하는지 확인 + List menuCategories = loadMenuRepository.findMenuCategoriesByRestaurant(restaurant); + MenuCategory category = menuCategories.stream() + .filter(menuCategory -> menuCategory.getId().equals(request.categoryId())) + .findFirst() + .orElseThrow(() -> new BaseException(BaseResponseStatus.BAD_REQUEST)); - manageMenuRepository.save(Menu.createFixed(request.name(), restaurant, request.price(), category)); - } + manageMenuRepository.save(Menu.createFixed(request.name(), restaurant, request.price(), category)); + } - public void updateMenu(Long menuId, UpdateFixMenuRequest request) { - if (isFixedMenu(menuId)) { - throw new BaseException(BaseResponseStatus.NOT_SUPPORT_RESTAURANT); - } + public void updateMenu(Long menuId, UpdateFixMenuRequest request) { + if (isFixedMenu(menuId)) { + throw new BaseException(BaseResponseStatus.NOT_SUPPORT_RESTAURANT); + } - Menu menu = manageMenuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + Menu menu = manageMenuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); - // 식당에 같은 이름의 메뉴가 있는 지 확인 - Restaurant restaurant = loadMenuRepository.getRestaurant(menuId); - duplicateCheck(request.name(), restaurant); - menu.update(request.name(), request.price()); + // 식당에 같은 이름의 메뉴가 있는 지 확인 + Restaurant restaurant = loadMenuRepository.getRestaurant(menuId); + duplicateCheck(request.name(), restaurant); + menu.update(request.name(), request.price()); - manageMenuRepository.save(menu); - } + manageMenuRepository.save(menu); + } - private void duplicateCheck(String name, Restaurant restaurant) { - if (loadMenuRepository.existsMenu(name, restaurant)) { - throw new BaseException(BaseResponseStatus.CONFLICT); - } - } + private void duplicateCheck(String name, Restaurant restaurant) { + if (loadMenuRepository.existsMenu(name, restaurant)) { + throw new BaseException(BaseResponseStatus.CONFLICT); + } + } - private boolean isFixedMenu(Long menuId) { - Restaurant restaurant = loadMenuRepository.getRestaurant(menuId); - return RestaurantType.isVariableType(restaurant); - } + private boolean isFixedMenu(Long menuId) { + Restaurant restaurant = loadMenuRepository.getRestaurant(menuId); + return RestaurantType.isVariableType(restaurant); + } - public void delete(Long menuId) { - manageMenuRepository.deleteById(menuId); - } + public void delete(Long menuId) { + manageMenuRepository.deleteById(menuId); + } - public Boolean changeDiscontinuedStatus(Long menuId) { - if (isFixedMenu(menuId)) { - throw new BaseException(BaseResponseStatus.NOT_SUPPORT_RESTAURANT); - } + public Boolean changeDiscontinuedStatus(Long menuId) { + if (isFixedMenu(menuId)) { + throw new BaseException(BaseResponseStatus.NOT_SUPPORT_RESTAURANT); + } - Menu menu = manageMenuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + Menu menu = manageMenuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); - menu.changeDiscontinuedStatus(); + menu.changeDiscontinuedStatus(); - return menu.isDiscontinued(); - } + return menu.isDiscontinued(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java index cf0981da..e9c765b1 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java @@ -1,10 +1,9 @@ package ssu.eatssu.domain.admin.service; +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.InquiryLine; import ssu.eatssu.domain.admin.dto.PageWrapper; import ssu.eatssu.domain.admin.dto.UpdateStatusRequest; @@ -18,23 +17,23 @@ @RequiredArgsConstructor public class ManageInquiryService { - private final LoadInquiryRepository loadInquiryRepository; - private final ManageInquiryRepository manageInquiryRepository; + private final LoadInquiryRepository loadInquiryRepository; + private final ManageInquiryRepository manageInquiryRepository; - public PageWrapper getInquiryBoard(Pageable pageable) { - Page inquiries = loadInquiryRepository.findAllInquiries(pageable); - return new PageWrapper<>(inquiries.map(InquiryLine::new)); - } + public PageWrapper getInquiryBoard(Pageable pageable) { + Page inquiries = loadInquiryRepository.findAllInquiries(pageable); + return new PageWrapper<>(inquiries.map(InquiryLine::new)); + } - public void updateStatus(Long inquiryId, UpdateStatusRequest request) { - Inquiry inquiry = manageInquiryRepository.findById(inquiryId) - .orElseThrow(() -> new BaseException( - BaseResponseStatus.NOT_FOUND_USER_INQUIRY)); - inquiry.updateStatus(request.status()); - manageInquiryRepository.save(inquiry); - } + public void updateStatus(Long inquiryId, UpdateStatusRequest request) { + Inquiry inquiry = manageInquiryRepository.findById(inquiryId) + .orElseThrow(() -> new BaseException( + BaseResponseStatus.NOT_FOUND_USER_INQUIRY)); + inquiry.updateStatus(request.status()); + manageInquiryRepository.save(inquiry); + } - public void delete(Long inquiryId) { - manageInquiryRepository.deleteById(inquiryId); - } + public void delete(Long inquiryId) { + manageInquiryRepository.deleteById(inquiryId); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java index 3a27dc8b..24397d23 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java @@ -1,11 +1,7 @@ package ssu.eatssu.domain.admin.service; -import java.util.Date; -import java.util.List; - -import org.springframework.stereotype.Service; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; import ssu.eatssu.domain.admin.dto.BriefMenu; import ssu.eatssu.domain.admin.dto.MealInfo; import ssu.eatssu.domain.admin.dto.MealSection; @@ -26,112 +22,115 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.util.Date; +import java.util.List; + @RequiredArgsConstructor @Service public class ManageMealService { - private final LoadMealRepository loadMealRepository; - private final MenuRatingRepository menuRatingRepository; - private final ManageMealRepository manageMealRepository; - private final ManageMealMenuRepository manageMealMenuRepository; - private final ManageMenuRepository manageMenuRepository; - - public MenuBoards getMenuBoards(Date date, TimePart timePart) { - MenuBoards menuBoards = new MenuBoards(); - - RestaurantType.VARIABLE.getRestaurants() - .forEach(restaurant -> menuBoards.add( - getMealBoard(new MealInfo(restaurant, date, timePart)))); - - return menuBoards; - } - - private MenuBoard getMealBoard(MealInfo mealInfo) { - MenuBoard menuBoard = new MenuBoard(mealInfo.restaurant().getRestaurantName()); - - getMenuSections(mealInfo).forEach(menuBoard::addSection); - - return menuBoard; - } - - private List getMenuSections(MealInfo mealInfo) { - List mealIds = loadMealRepository.getAllMealIdsByInfo(mealInfo); - - return mealIds.stream().map(this::getMenuSection).toList(); - } - - private MealSection getMenuSection(Long mealId) { - MealSection mealSection = new MealSection(mealId); - - List briefMenus = loadMealRepository.findBriefMenusByMealId(mealId); - - briefMenus.forEach(briefMenu -> - mealSection.addMenuLine(new MenuLine( - briefMenu.id(), - briefMenu.name(), - briefMenu.price(), - menuRatingRepository.getMainRatingAverage(briefMenu.id()) - )) - ); - - return mealSection; - } - - public void register(MealInfo mealInfo, RegisterMealRequest request) { - // 중복 체크 - duplicateCheck(mealInfo, request); - - // 식단 등록 - Meal meal = new Meal(mealInfo.date(), mealInfo.timePart(), mealInfo.restaurant()); - manageMealRepository.save(meal); - - //식단에 메뉴 추가 - addMenusToMeal(meal, request.menuNames()); - - } - - private void addMenusToMeal(Meal meal, List menuNames) { - menuNames.forEach(menuName -> { - Menu menu = loadMealRepository.findMenu(menuName, meal.getRestaurant()); - if (menu == null) { - menu = Menu.createVariable(menuName, meal.getRestaurant()); - manageMenuRepository.save(menu); - } - manageMealMenuRepository.save(MealMenu.builder().meal(meal).menu(menu).build()); - }); - } - - private void duplicateCheck(MealInfo mealInfo, RegisterMealRequest request) { - List mealIds = loadMealRepository.existsMeal(mealInfo); - mealIds.forEach(mealId -> { - if (hasMenus(mealId, request.menuNames())) { - throw new BaseException(BaseResponseStatus.CONFLICT); - } - }); - } - - private boolean hasMenus(Long mealId, List menuNames) { - List menuNamesInMeal = loadMealRepository.findMenuNamesByMealId(mealId); - - /** - * menuNamesInMeal 과 menuNames 는 오름차순 정렬된 상태 - * @see LoadMealRepository#findMenuNamesByMealId(Long) - * @see RegisterMealRequest#RegisterMealRequest - */ - return menuNamesInMeal.equals(menuNames); - } - - public void delete(Long mealId) { - List menuIds = loadMealRepository.getAllMenuIds(mealId); - manageMealRepository.deleteById(mealId); - deleteUnusedMenus(menuIds); - } - - private void deleteUnusedMenus(List menuIds) { - menuIds.forEach(menuId -> { - if (loadMealRepository.countMealMenuByMenuId(menuId) == 0) { - manageMenuRepository.deleteById(menuId); - } - }); - } + private final LoadMealRepository loadMealRepository; + private final MenuRatingRepository menuRatingRepository; + private final ManageMealRepository manageMealRepository; + private final ManageMealMenuRepository manageMealMenuRepository; + private final ManageMenuRepository manageMenuRepository; + + public MenuBoards getMenuBoards(Date date, TimePart timePart) { + MenuBoards menuBoards = new MenuBoards(); + + RestaurantType.VARIABLE.getRestaurants() + .forEach(restaurant -> menuBoards.add( + getMealBoard(new MealInfo(restaurant, date, timePart)))); + + return menuBoards; + } + + private MenuBoard getMealBoard(MealInfo mealInfo) { + MenuBoard menuBoard = new MenuBoard(mealInfo.restaurant().getRestaurantName()); + + getMenuSections(mealInfo).forEach(menuBoard::addSection); + + return menuBoard; + } + + private List getMenuSections(MealInfo mealInfo) { + List mealIds = loadMealRepository.getAllMealIdsByInfo(mealInfo); + + return mealIds.stream().map(this::getMenuSection).toList(); + } + + private MealSection getMenuSection(Long mealId) { + MealSection mealSection = new MealSection(mealId); + + List briefMenus = loadMealRepository.findBriefMenusByMealId(mealId); + + briefMenus.forEach(briefMenu -> + mealSection.addMenuLine(new MenuLine( + briefMenu.id(), + briefMenu.name(), + briefMenu.price(), + menuRatingRepository.getMainRatingAverage(briefMenu.id()) + )) + ); + + return mealSection; + } + + public void register(MealInfo mealInfo, RegisterMealRequest request) { + // 중복 체크 + duplicateCheck(mealInfo, request); + + // 식단 등록 + Meal meal = new Meal(mealInfo.date(), mealInfo.timePart(), mealInfo.restaurant()); + manageMealRepository.save(meal); + + //식단에 메뉴 추가 + addMenusToMeal(meal, request.menuNames()); + + } + + private void addMenusToMeal(Meal meal, List menuNames) { + menuNames.forEach(menuName -> { + Menu menu = loadMealRepository.findMenu(menuName, meal.getRestaurant()); + if (menu == null) { + menu = Menu.createVariable(menuName, meal.getRestaurant()); + manageMenuRepository.save(menu); + } + manageMealMenuRepository.save(MealMenu.builder().meal(meal).menu(menu).build()); + }); + } + + private void duplicateCheck(MealInfo mealInfo, RegisterMealRequest request) { + List mealIds = loadMealRepository.existsMeal(mealInfo); + mealIds.forEach(mealId -> { + if (hasMenus(mealId, request.menuNames())) { + throw new BaseException(BaseResponseStatus.CONFLICT); + } + }); + } + + private boolean hasMenus(Long mealId, List menuNames) { + List menuNamesInMeal = loadMealRepository.findMenuNamesByMealId(mealId); + + /** + * menuNamesInMeal 과 menuNames 는 오름차순 정렬된 상태 + * @see LoadMealRepository#findMenuNamesByMealId(Long) + * @see RegisterMealRequest#RegisterMealRequest + */ + return menuNamesInMeal.equals(menuNames); + } + + public void delete(Long mealId) { + List menuIds = loadMealRepository.getAllMenuIds(mealId); + manageMealRepository.deleteById(mealId); + deleteUnusedMenus(menuIds); + } + + private void deleteUnusedMenus(List menuIds) { + menuIds.forEach(menuId -> { + if (loadMealRepository.countMealMenuByMenuId(menuId) == 0) { + manageMenuRepository.deleteById(menuId); + } + }); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java index 1495698f..dff28a17 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java @@ -1,35 +1,34 @@ package ssu.eatssu.domain.admin.service; -import java.util.List; - +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.PageWrapper; import ssu.eatssu.domain.admin.dto.ReportLine; import ssu.eatssu.domain.admin.persistence.LoadReportRepository; import ssu.eatssu.domain.admin.persistence.ManageReportRepository; +import java.util.List; + @Service @RequiredArgsConstructor public class ManageReportService { - private final LoadReportRepository loadReportRepository; - private final ManageReportRepository manageReportRepository; + private final LoadReportRepository loadReportRepository; + private final ManageReportRepository manageReportRepository; - public PageWrapper getReportBoard(Pageable pageable) { - Page reports = loadReportRepository.findAll(pageable); - return new PageWrapper<>(reports); - } + public PageWrapper getReportBoard(Pageable pageable) { + Page reports = loadReportRepository.findAll(pageable); + return new PageWrapper<>(reports); + } - public void delete(Long reportId) { - manageReportRepository.deleteById(reportId); - } + public void delete(Long reportId) { + manageReportRepository.deleteById(reportId); + } - public void deleteAllByReviewId(Long reviewId) { - List reportIds = loadReportRepository.findAllByReviewId(reviewId); - manageReportRepository.deleteAllByIdInBatch(reportIds); - } + public void deleteAllByReviewId(Long reviewId) { + List reportIds = loadReportRepository.findAllByReviewId(reviewId); + manageReportRepository.deleteAllByIdInBatch(reportIds); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java index 2e158888..fc3b92fb 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java @@ -1,10 +1,9 @@ package ssu.eatssu.domain.admin.service; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.stereotype.Service; - import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Service; import ssu.eatssu.domain.admin.event.ReviewDeleteEvent; import ssu.eatssu.domain.admin.persistence.ManageReviewRepository; @@ -12,13 +11,13 @@ @Transactional @RequiredArgsConstructor public class ManageReviewService { - private final ManageReviewRepository manageReviewRepository; - private final ApplicationEventPublisher publisher; + private final ManageReviewRepository manageReviewRepository; + private final ApplicationEventPublisher publisher; - public void delete(Long reviewId) { - // 리뷰 삭제하기 전에 해당 리뷰를 참조하는 신고들을 모두 삭제한다. - publisher.publishEvent(new ReviewDeleteEvent(reviewId)); + public void delete(Long reviewId) { + // 리뷰 삭제하기 전에 해당 리뷰를 참조하는 신고들을 모두 삭제한다. + publisher.publishEvent(new ReviewDeleteEvent(reviewId)); - manageReviewRepository.deleteById(reviewId); - } + manageReviewRepository.deleteById(reviewId); + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java b/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java index a4a9b42b..57dc09b2 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java @@ -1,31 +1,31 @@ package ssu.eatssu.domain.auth.dto; -import java.util.List; -import java.util.Optional; - import lombok.Getter; import lombok.NoArgsConstructor; +import java.util.List; +import java.util.Optional; + @Getter @NoArgsConstructor public class AppleKeys { - private List keys; + private List keys; - public Optional findKeyBy(String kid, String alg) { - return this.keys.stream() - .filter(key -> key.getKid().equals(kid) && key.getAlg().equals(alg)) - .findFirst(); - } + public Optional findKeyBy(String kid, String alg) { + return this.keys.stream() + .filter(key -> key.getKid().equals(kid) && key.getAlg().equals(alg)) + .findFirst(); + } - @Getter - @NoArgsConstructor - public static class Key { - private String kty; - private String kid; - private String use; - private String alg; - private String n; - private String e; + @Getter + @NoArgsConstructor + public static class Key { + private String kty; + private String kid; + private String use; + private String alg; + private String n; + private String e; - } + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java b/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java index 78beecd1..2d5416ad 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java @@ -4,8 +4,8 @@ @Schema(title = "애플 로그인 및 회원가입") public record AppleLoginRequest( - @Schema(description = "identityToken", example = "eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi...") - String identityToken + @Schema(description = "identityToken", example = "eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi...") + String identityToken ) { } diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java b/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java index 211677b1..eacf8e65 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java @@ -6,13 +6,13 @@ @Schema(title = "카카오 로그인 및 회원가입") public record KakaoLoginRequest( - @NotBlank(message = "이메일을 입력해주세요.") - @Email(message = "올바른 이메일 주소를 입력해주세요.") - @Schema(description = "이메일", example = "test@email.com") - String email, + @NotBlank(message = "이메일을 입력해주세요.") + @Email(message = "올바른 이메일 주소를 입력해주세요.") + @Schema(description = "이메일", example = "test@email.com") + String email, - @Schema(description = "providerId", example = "10378247832195") - String providerId + @Schema(description = "providerId", example = "10378247832195") + String providerId ) { } diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/ValidRequest.java b/src/main/java/ssu/eatssu/domain/auth/dto/ValidRequest.java index e2f85ce2..748028e6 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/ValidRequest.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/ValidRequest.java @@ -5,9 +5,9 @@ @Schema(title = "유효한 토큰 확인") public record ValidRequest( - @NotBlank(message = "토큰을 입력해주세요") - @Schema(description = "토큰", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjcsXCJlbWFpbFwiOlwidGVzdEBlbWFpbC5jb21cIixcInJvbGVcIjpcIlJPTEVfVVNFUlwifSIsImF1dGgiOiJST0xFX1VTRVIiLCJleHAiOjE3NDQzNzQ0MjB9.mhIWYX_Vj3xW1eXuVflbzpH6vLTcC9b1twbIcqovVjDVnS7tjegu3nQHGXUsUa_WG2DIAtJMFZT_Q1XcVq1jPw") - String token + @NotBlank(message = "토큰을 입력해주세요") + @Schema(description = "토큰", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjcsXCJlbWFpbFwiOlwidGVzdEBlbWFpbC5jb21cIixcInJvbGVcIjpcIlJPTEVfVVNFUlwifSIsImF1dGgiOiJST0xFX1VTRVIiLCJleHAiOjE3NDQzNzQ0MjB9.mhIWYX_Vj3xW1eXuVflbzpH6vLTcC9b1twbIcqovVjDVnS7tjegu3nQHGXUsUa_WG2DIAtJMFZT_Q1XcVq1jPw") + String token ) { } diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/AppleAuthenticator.java b/src/main/java/ssu/eatssu/domain/auth/entity/AppleAuthenticator.java index e56acb4f..f150fb37 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/AppleAuthenticator.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/AppleAuthenticator.java @@ -4,5 +4,5 @@ public interface AppleAuthenticator { - OAuthInfo getOAuthInfoByIdentityToken(String identityToken); + OAuthInfo getOAuthInfoByIdentityToken(String identityToken); } diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java b/src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java index 641d1bb3..25a7c25d 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java @@ -1,5 +1,5 @@ package ssu.eatssu.domain.auth.entity; public enum OAuthProvider { - EATSSU, KAKAO, APPLE; + EATSSU, KAKAO, APPLE; } diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java index 34300152..904c99b6 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java @@ -1,6 +1,19 @@ package ssu.eatssu.domain.auth.entity; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.ExpiredJwtException; +import io.jsonwebtoken.Jwts; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; +import ssu.eatssu.domain.auth.dto.AppleKeys; +import ssu.eatssu.domain.auth.dto.OAuthInfo; +import ssu.eatssu.global.handler.response.BaseException; import java.math.BigInteger; import java.net.URI; @@ -12,126 +25,111 @@ import java.util.Base64; import java.util.Map; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Component; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.UriComponentsBuilder; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.jsonwebtoken.Claims; -import io.jsonwebtoken.ExpiredJwtException; -import io.jsonwebtoken.Jwts; -import lombok.RequiredArgsConstructor; -import ssu.eatssu.domain.auth.dto.AppleKeys; -import ssu.eatssu.domain.auth.dto.OAuthInfo; -import ssu.eatssu.global.handler.response.BaseException; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.INVALID_IDENTITY_TOKEN; @Component @RequiredArgsConstructor public class SystemAppleAuthenticator implements AppleAuthenticator { - private final RestTemplate restTemplate; - - public OAuthInfo getOAuthInfoByIdentityToken(String identityToken) { - PublicKey publicKey = generatePublicKey(identityToken); - return getOAuthInfoByPublicKey(identityToken, publicKey); - } - - /** - * 애플 로그인 - PublicKey 를 통해 유저 정보(providerId, email) 조회 - */ - private OAuthInfo getOAuthInfoByPublicKey(String identityToken, PublicKey publicKey) { - // identityToken 에서 publicKey 서명을 통해 Claims 를 추출한다. - Claims claims = Jwts.parserBuilder() - .setSigningKey(publicKey) - .build() - .parseClaimsJws(identityToken) - .getBody(); - - //Claims 에서 email, providerId(사용자 식별값) 를 추출한다. - try { - String email = claims.get("email").toString(); - String providerId = claims.get("sub").toString(); - return new OAuthInfo(email, providerId); - } catch (ExpiredJwtException exception) { - throw new BaseException(INVALID_IDENTITY_TOKEN); - } - } - - private PublicKey generatePublicKey(String identityToken) { - //PublicKey 를 만들기 위한 재료가 되는 후보 Key 목록을 가져온다. - AppleKeys keys = getAppleKeys(); - - //후보 Key 에서 정답 Key 를 찾는다. - AppleKeys.Key matchedKey = selectMatchedKey(identityToken, keys); - - //정답 Key 를 통해 PublicKey 를 생성한다. - return generatePublicKeyWithApplePublicKey(matchedKey); - } - - /** - * 애플 로그인 - 헤더에서 뽑은 정보를 통해 후보 Key 에서 정답 Key 를 찾아서 반환한다. - */ - private AppleKeys.Key selectMatchedKey(String identityToken, AppleKeys candidateKeys) { - - //identity token 에서 header 를 뽑아서 decode 한다. - String header = identityToken.split("\\.")[0]; - String decodedHeader = new String(Base64.getDecoder().decode(header)); - - //decode 된 header 정보를 통해 정답키의 key id, algorithm 정보를 가져온다. - Map headerMap; - try { - headerMap = new ObjectMapper().readValue(decodedHeader, - new TypeReference>() { - }); - } catch (JsonProcessingException e) { - throw new BaseException(INVALID_IDENTITY_TOKEN); - } - - //후보키 중에서 정답키를 찾아서 반환한다. - return candidateKeys.findKeyBy(headerMap.get("kid"), headerMap.get("alg")) - .orElseThrow(() -> new BaseException(INVALID_IDENTITY_TOKEN)); - } - - /** - * 애플 로그인 - 정답 Key 를 통해 PublicKey 를 생성한다. - */ - private PublicKey generatePublicKeyWithApplePublicKey(AppleKeys.Key matchedKey) { - - //정답 키에서 PublicKey 의 재료가 될 n, e 값을 가져온다. - byte[] nBytes = Base64.getUrlDecoder().decode(matchedKey.getN()); - byte[] eBytes = Base64.getUrlDecoder().decode(matchedKey.getE()); - - BigInteger n = new BigInteger(1, nBytes); - BigInteger e = new BigInteger(1, eBytes); - - // n, e 값을 통해 PublicKeySpec 을 세팅한다. - RSAPublicKeySpec publicKeySpec = new RSAPublicKeySpec(n, e); - - //PublicKeySpec 을 통해 PublicKey 를 생성한다. - try { - KeyFactory keyFactory = KeyFactory.getInstance(matchedKey.getKty()); - return keyFactory.generatePublic(publicKeySpec); - } catch (NoSuchAlgorithmException | InvalidKeySpecException ex) { - throw new BaseException(INVALID_IDENTITY_TOKEN); - } - } - - /** - * 애플 로그인 - Apple api 호출을 통해 apple 후보 key 리스트를 받아온다. - */ - private AppleKeys getAppleKeys() { - URI uri = UriComponentsBuilder - .fromUriString("https://appleid.apple.com") - .path("/auth/keys") - .encode() - .build() - .toUri(); - - ResponseEntity response = restTemplate.getForEntity(uri, AppleKeys.class); - return response.getBody(); - } + private final RestTemplate restTemplate; + + public OAuthInfo getOAuthInfoByIdentityToken(String identityToken) { + PublicKey publicKey = generatePublicKey(identityToken); + return getOAuthInfoByPublicKey(identityToken, publicKey); + } + + /** + * 애플 로그인 - PublicKey 를 통해 유저 정보(providerId, email) 조회 + */ + private OAuthInfo getOAuthInfoByPublicKey(String identityToken, PublicKey publicKey) { + // identityToken 에서 publicKey 서명을 통해 Claims 를 추출한다. + Claims claims = Jwts.parserBuilder() + .setSigningKey(publicKey) + .build() + .parseClaimsJws(identityToken) + .getBody(); + + //Claims 에서 email, providerId(사용자 식별값) 를 추출한다. + try { + String email = claims.get("email").toString(); + String providerId = claims.get("sub").toString(); + return new OAuthInfo(email, providerId); + } catch (ExpiredJwtException exception) { + throw new BaseException(INVALID_IDENTITY_TOKEN); + } + } + + private PublicKey generatePublicKey(String identityToken) { + //PublicKey 를 만들기 위한 재료가 되는 후보 Key 목록을 가져온다. + AppleKeys keys = getAppleKeys(); + + //후보 Key 에서 정답 Key 를 찾는다. + AppleKeys.Key matchedKey = selectMatchedKey(identityToken, keys); + + //정답 Key 를 통해 PublicKey 를 생성한다. + return generatePublicKeyWithApplePublicKey(matchedKey); + } + + /** + * 애플 로그인 - 헤더에서 뽑은 정보를 통해 후보 Key 에서 정답 Key 를 찾아서 반환한다. + */ + private AppleKeys.Key selectMatchedKey(String identityToken, AppleKeys candidateKeys) { + + //identity token 에서 header 를 뽑아서 decode 한다. + String header = identityToken.split("\\.")[0]; + String decodedHeader = new String(Base64.getDecoder().decode(header)); + + //decode 된 header 정보를 통해 정답키의 key id, algorithm 정보를 가져온다. + Map headerMap; + try { + headerMap = new ObjectMapper().readValue(decodedHeader, + new TypeReference>() { + }); + } catch (JsonProcessingException e) { + throw new BaseException(INVALID_IDENTITY_TOKEN); + } + + //후보키 중에서 정답키를 찾아서 반환한다. + return candidateKeys.findKeyBy(headerMap.get("kid"), headerMap.get("alg")) + .orElseThrow(() -> new BaseException(INVALID_IDENTITY_TOKEN)); + } + + /** + * 애플 로그인 - 정답 Key 를 통해 PublicKey 를 생성한다. + */ + private PublicKey generatePublicKeyWithApplePublicKey(AppleKeys.Key matchedKey) { + + //정답 키에서 PublicKey 의 재료가 될 n, e 값을 가져온다. + byte[] nBytes = Base64.getUrlDecoder().decode(matchedKey.getN()); + byte[] eBytes = Base64.getUrlDecoder().decode(matchedKey.getE()); + + BigInteger n = new BigInteger(1, nBytes); + BigInteger e = new BigInteger(1, eBytes); + + // n, e 값을 통해 PublicKeySpec 을 세팅한다. + RSAPublicKeySpec publicKeySpec = new RSAPublicKeySpec(n, e); + + //PublicKeySpec 을 통해 PublicKey 를 생성한다. + try { + KeyFactory keyFactory = KeyFactory.getInstance(matchedKey.getKty()); + return keyFactory.generatePublic(publicKeySpec); + } catch (NoSuchAlgorithmException | InvalidKeySpecException ex) { + throw new BaseException(INVALID_IDENTITY_TOKEN); + } + } + + /** + * 애플 로그인 - Apple api 호출을 통해 apple 후보 key 리스트를 받아온다. + */ + private AppleKeys getAppleKeys() { + URI uri = UriComponentsBuilder + .fromUriString("https://appleid.apple.com") + .path("/auth/keys") + .encode() + .build() + .toUri(); + + ResponseEntity response = restTemplate.getForEntity(uri, AppleKeys.class); + return response.getBody(); + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/OAuthConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/OAuthConfig.java index 56674dc6..7e70e0b6 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/OAuthConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/OAuthConfig.java @@ -10,12 +10,12 @@ @Configuration public class OAuthConfig { - @Bean - public RestTemplate restTemplate() { - HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); - CloseableHttpClient client = HttpClientBuilder.create().build(); - factory.setConnectTimeout(3000); //3s - factory.setHttpClient(client); - return new RestTemplate(factory); - } + @Bean + public RestTemplate restTemplate() { + HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); + CloseableHttpClient client = HttpClientBuilder.create().build(); + factory.setConnectTimeout(3000); //3s + factory.setHttpClient(client); + return new RestTemplate(factory); + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 3804b923..4ea22ac4 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -1,5 +1,6 @@ package ssu.eatssu.domain.auth.infrastructure; +import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -11,8 +12,6 @@ import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.JwtAuthenticationFilter; import ssu.eatssu.domain.auth.security.JwtTokenProvider; import ssu.eatssu.global.handler.JwtAccessDeniedHandler; @@ -22,64 +21,64 @@ @Configuration @RequiredArgsConstructor public class SecurityConfig { - private static final String[] RESOURCE_LIST = { - "/swagger-ui.html", "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**","/oauths/valid/token", "/admin/img/**", "/css/**", "/js/**", - "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" - }; + private static final String[] RESOURCE_LIST = { + "/swagger-ui.html", "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**", "/oauths/valid/token", "/admin/img/**", "/css/**", "/js/**", + "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" + }; - private static final String[] AUTH_WHITELIST = { - "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", - "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics", "/v2/reviews", - "/partnerships/**","/v2/reviews/menus/**","/v2/reviews/meals/**","/actuator/**","/error-test/**" - }; + private static final String[] AUTH_WHITELIST = { + "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", + "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics", "/v2/reviews", + "/partnerships/**", "/v2/reviews/menus/**", "/v2/reviews/meals/**", "/actuator/**", "/error-test/**" + }; - private static final String[] ADMIN_PAGE_LIST = { - "/admin/**" - }; + private static final String[] ADMIN_PAGE_LIST = { + "/admin/**" + }; - private final JwtTokenProvider jwtTokenProvider; - private final JwtAccessDeniedHandler jwtAccessDeniedHandler; - private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; + private final JwtTokenProvider jwtTokenProvider; + private final JwtAccessDeniedHandler jwtAccessDeniedHandler; + private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; - @Bean - public PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(); - } + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } - @Bean - protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - http - .csrf().disable() - .authorizeHttpRequests(authorize -> authorize - .shouldFilterAllDispatcherTypes(false) - .requestMatchers("/partnerships/*/like").authenticated() - .requestMatchers(AUTH_WHITELIST).permitAll() - .requestMatchers(RESOURCE_LIST).permitAll() - .requestMatchers(ADMIN_PAGE_LIST).hasRole("ADMIN") - .anyRequest().authenticated() - .and().addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), - UsernamePasswordAuthenticationFilter.class)) - .exceptionHandling() - .accessDeniedHandler(jwtAccessDeniedHandler) - .authenticationEntryPoint(jwtAuthenticationEntryPoint); + @Bean + protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http + .csrf().disable() + .authorizeHttpRequests(authorize -> authorize + .shouldFilterAllDispatcherTypes(false) + .requestMatchers("/partnerships/*/like").authenticated() + .requestMatchers(AUTH_WHITELIST).permitAll() + .requestMatchers(RESOURCE_LIST).permitAll() + .requestMatchers(ADMIN_PAGE_LIST).hasRole("ADMIN") + .anyRequest().authenticated() + .and().addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), + UsernamePasswordAuthenticationFilter.class)) + .exceptionHandling() + .accessDeniedHandler(jwtAccessDeniedHandler) + .authenticationEntryPoint(jwtAuthenticationEntryPoint); - http - .cors().configurationSource(corsConfigurationSource()); - return http.build(); - } + http + .cors().configurationSource(corsConfigurationSource()); + return http.build(); + } - @Bean - public CorsConfigurationSource corsConfigurationSource() { - CorsConfiguration configuration = new CorsConfiguration(); + @Bean + public CorsConfigurationSource corsConfigurationSource() { + CorsConfiguration configuration = new CorsConfiguration(); - configuration.addAllowedOriginPattern("*"); - configuration.addAllowedHeader("*"); - configuration.addAllowedMethod("*"); - configuration.setAllowCredentials(true); + configuration.addAllowedOriginPattern("*"); + configuration.addAllowedHeader("*"); + configuration.addAllowedMethod("*"); + configuration.setAllowCredentials(true); - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - source.registerCorsConfiguration("/**", configuration); - return source; - } + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", configuration); + return source; + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java index 31f6a34f..62e3f845 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java @@ -4,36 +4,35 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Component; - import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.auth.security.UserPrincipalDto; @Component public class SecurityUtil { - public static UserPrincipalDto getLoginUserPrincipal() { - Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - if (principal instanceof UserDetails) { - return toDto(principal); - } else { - return null; - } - } + public static UserPrincipalDto getLoginUserPrincipal() { + Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + if (principal instanceof UserDetails) { + return toDto(principal); + } else { + return null; + } + } - public static Authentication getLoginUser() { - return SecurityContextHolder.getContext().getAuthentication(); - } + public static Authentication getLoginUser() { + return SecurityContextHolder.getContext().getAuthentication(); + } - public static Long getLoginUserId() { - UserPrincipalDto loginUser = getLoginUserPrincipal(); - return loginUser != null ? loginUser.getId() : null; - } + public static Long getLoginUserId() { + UserPrincipalDto loginUser = getLoginUserPrincipal(); + return loginUser != null ? loginUser.getId() : null; + } - private static UserPrincipalDto toDto(Object principal) { - CustomUserDetails user = (CustomUserDetails)principal; + private static UserPrincipalDto toDto(Object principal) { + CustomUserDetails user = (CustomUserDetails) principal; - return UserPrincipalDto.from(user); + return UserPrincipalDto.from(user); - } + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java index c7b19817..d80b88fd 100644 --- a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java @@ -1,17 +1,5 @@ package ssu.eatssu.domain.auth.presentation; -import static ssu.eatssu.domain.auth.infrastructure.SecurityUtil.*; - -import java.net.http.HttpRequest; - -import javax.servlet.http.HttpServletRequest; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -21,6 +9,10 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.auth.dto.ValidRequest; @@ -28,6 +20,8 @@ import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.global.handler.response.BaseResponse; +import static ssu.eatssu.domain.auth.infrastructure.SecurityUtil.getLoginUser; + @Slf4j @RestController @RequestMapping("/oauths") @@ -35,58 +29,58 @@ @Tag(name = "Oauth", description = "Oauth API") public class OAuthController { - private final OAuthService oauthService; + private final OAuthService oauthService; - @Operation(summary = "카카오 회원가입, 로그인 [인증 토큰 필요 X]", description = """ - 카카오 회원가입, 로그인 API 입니다.

- 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "카카오 회원가입/로그인 성공") - }) - @PostMapping("/kakao") - public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest request) { - long startTime = System.currentTimeMillis(); - Tokens tokens = oauthService.kakaoLogin(request); - long endTime = System.currentTimeMillis(); - long duration = endTime - startTime; - log.info("OAuthWarmupRunner 완료 - 소요 시간: {} ms", duration); + @Operation(summary = "카카오 회원가입, 로그인 [인증 토큰 필요 X]", description = """ + 카카오 회원가입, 로그인 API 입니다.

+ 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "카카오 회원가입/로그인 성공") + }) + @PostMapping("/kakao") + public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest request) { + long startTime = System.currentTimeMillis(); + Tokens tokens = oauthService.kakaoLogin(request); + long endTime = System.currentTimeMillis(); + long duration = endTime - startTime; + log.info("OAuthWarmupRunner 완료 - 소요 시간: {} ms", duration); - return BaseResponse.success(tokens); - } + return BaseResponse.success(tokens); + } - @Operation(summary = "애플 회원가입, 로그인 [인증 토큰 필요 X]", description = """ - 애플 로그인, 회원가입 API 입니다.

- 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "애플 회원가입/로그인 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/apple") - public BaseResponse appleLogin(@Valid @RequestBody AppleLoginRequest request) { - Tokens tokens = oauthService.appleLogin(request); - return BaseResponse.success(tokens); - } + @Operation(summary = "애플 회원가입, 로그인 [인증 토큰 필요 X]", description = """ + 애플 로그인, 회원가입 API 입니다.

+ 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "애플 회원가입/로그인 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/apple") + public BaseResponse appleLogin(@Valid @RequestBody AppleLoginRequest request) { + Tokens tokens = oauthService.appleLogin(request); + return BaseResponse.success(tokens); + } - @Operation(summary = "토큰 재발급", description = "accessToken, refreshToken 재발급 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "토큰 재발급 성공") - }) - @PostMapping("/reissue/token") - public BaseResponse refreshToken() { - Tokens tokens = oauthService.refreshTokens(getLoginUser()); - return BaseResponse.success(tokens); - } + @Operation(summary = "토큰 재발급", description = "accessToken, refreshToken 재발급 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "토큰 재발급 성공") + }) + @PostMapping("/reissue/token") + public BaseResponse refreshToken() { + Tokens tokens = oauthService.refreshTokens(getLoginUser()); + return BaseResponse.success(tokens); + } - @Operation(summary = "유효한 토큰 확인 [인증 토큰 필요 X]", description = "해당 토큰이 유효하면 true 반환하는, 유효하지 않은 false 반환하는 API 입니다") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유효한 토큰인지 확인 성공") - }) - @PostMapping("/valid/token") - public BaseResponse validToken(@Valid @RequestBody ValidRequest request) { - Boolean response = oauthService.validToken(request); - return BaseResponse.success(response); - } + @Operation(summary = "유효한 토큰 확인 [인증 토큰 필요 X]", description = "해당 토큰이 유효하면 true 반환하는, 유효하지 않은 false 반환하는 API 입니다") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유효한 토큰인지 확인 성공") + }) + @PostMapping("/valid/token") + public BaseResponse validToken(@Valid @RequestBody ValidRequest request) { + Boolean response = oauthService.validToken(request); + return BaseResponse.success(response); + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java index 285b26a2..eb05c2a5 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java @@ -1,66 +1,65 @@ package ssu.eatssu.domain.auth.security; -import java.util.ArrayList; -import java.util.Collection; - +import lombok.Getter; +import lombok.RequiredArgsConstructor; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.user.entity.User; +import java.util.ArrayList; +import java.util.Collection; + @RequiredArgsConstructor @Getter public class CustomUserDetails implements UserDetails { - private final Long id; - private final String email; - private final String credentials; - private final GrantedAuthority role; + private final Long id; + private final String email; + private final String credentials; + private final GrantedAuthority role; - public CustomUserDetails(User user) { - this.id = user.getId(); - this.email = user.getEmail(); - this.credentials = user.getCredentials(); - this.role = user.getRole(); - } + public CustomUserDetails(User user) { + this.id = user.getId(); + this.email = user.getEmail(); + this.credentials = user.getCredentials(); + this.role = user.getRole(); + } - @Override - public Collection getAuthorities() { - ArrayList authorities = new ArrayList<>(); - authorities.add(new SimpleGrantedAuthority(role.getAuthority())); - return authorities; - } + @Override + public Collection getAuthorities() { + ArrayList authorities = new ArrayList<>(); + authorities.add(new SimpleGrantedAuthority(role.getAuthority())); + return authorities; + } - @Override - public String getPassword() { - return credentials; - } + @Override + public String getPassword() { + return credentials; + } - @Override - public String getUsername() { - return email; - } + @Override + public String getUsername() { + return email; + } - @Override - public boolean isAccountNonExpired() { - return true; - } + @Override + public boolean isAccountNonExpired() { + return true; + } - @Override - public boolean isAccountNonLocked() { - return true; - } + @Override + public boolean isAccountNonLocked() { + return true; + } - @Override - public boolean isCredentialsNonExpired() { - return true; - } + @Override + public boolean isCredentialsNonExpired() { + return true; + } - @Override - public boolean isEnabled() { - return true; - } + @Override + public boolean isEnabled() { + return true; + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java index 0bf9f65e..3e528821 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java @@ -1,11 +1,10 @@ package ssu.eatssu.domain.auth.security; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.stereotype.Component; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; @@ -16,13 +15,13 @@ @RequiredArgsConstructor public class CustomUserDetailsService implements UserDetailsService { - private final UserRepository userRepository; + private final UserRepository userRepository; - @Override - public UserDetails loadUserByUsername(String username) { - User user = userRepository.findByEmail(username) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_USER)); - return new CustomUserDetails(user); - } + @Override + public UserDetails loadUserByUsername(String username) { + User user = userRepository.findByEmail(username) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_USER)); + return new CustomUserDetails(user); + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java index fcbf573e..5b1e5a7f 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java @@ -1,12 +1,5 @@ package ssu.eatssu.domain.auth.security; -import java.io.IOException; - -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.util.StringUtils; -import org.springframework.web.filter.GenericFilterBean; - import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; @@ -14,39 +7,45 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.util.StringUtils; +import org.springframework.web.filter.GenericFilterBean; + +import java.io.IOException; @Slf4j @RequiredArgsConstructor public class JwtAuthenticationFilter extends GenericFilterBean { - private static final String AUTHORIZATION_HEADER = "Authorization"; - private static final String BEARER_TYPE = "Bearer"; - - private final JwtTokenProvider jwtTokenProvider; - - @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws - IOException, - ServletException { - - // 1. Request Header 에서 JWT 토큰 추출 - String token = resolveToken((HttpServletRequest)request); - - // 2. validateToken 으로 토큰 유효성 검사 - if (token != null && jwtTokenProvider.validateToken(token)) { - // 토큰이 유효할 경우 토큰에서 Authentication 객체를 가지고 와서 SecurityContext 에 저장 - Authentication authentication = jwtTokenProvider.getAuthentication(token); - SecurityContextHolder.getContext().setAuthentication(authentication); - } - - chain.doFilter(request, response); - } - - // Request Header 에서 토큰 정보 추출 - private String resolveToken(HttpServletRequest request) { - String bearerToken = request.getHeader(AUTHORIZATION_HEADER); - if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(BEARER_TYPE)) { - return bearerToken.substring(7); - } - return null; - } + private static final String AUTHORIZATION_HEADER = "Authorization"; + private static final String BEARER_TYPE = "Bearer"; + + private final JwtTokenProvider jwtTokenProvider; + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws + IOException, + ServletException { + + // 1. Request Header 에서 JWT 토큰 추출 + String token = resolveToken((HttpServletRequest) request); + + // 2. validateToken 으로 토큰 유효성 검사 + if (token != null && jwtTokenProvider.validateToken(token)) { + // 토큰이 유효할 경우 토큰에서 Authentication 객체를 가지고 와서 SecurityContext 에 저장 + Authentication authentication = jwtTokenProvider.getAuthentication(token); + SecurityContextHolder.getContext().setAuthentication(authentication); + } + + chain.doFilter(request, response); + } + + // Request Header 에서 토큰 정보 추출 + private String resolveToken(HttpServletRequest request) { + String bearerToken = request.getHeader(AUTHORIZATION_HEADER); + if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(BEARER_TYPE)) { + return bearerToken.substring(7); + } + return null; + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java index 924b9cc1..52a7c6c6 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java @@ -1,22 +1,7 @@ package ssu.eatssu.domain.auth.security; -import java.security.Key; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.stereotype.Component; - import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; - import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; @@ -24,149 +9,162 @@ import io.jsonwebtoken.security.Keys; import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.stereotype.Component; import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.security.Key; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + @Slf4j @Component public class JwtTokenProvider { - private static final String AUTHORITIES_KEY = "auth"; - private final String secret; - private final long accessTokenValidityInMilliseconds; - private final long refreshTokenValidityInMilliseconds; - private final ObjectMapper objectMapper = new ObjectMapper(); - private final UserAuthenticationProvider authenticationProvider; - - private Key key; - - @Autowired - public JwtTokenProvider(@Value("${jwt.secret.key}") String secret, - @Value("${jwt.token-validity-in-seconds}") long accessTokenValidityInSeconds, - @Value("${jwt.refresh-token-validity-in-seconds}") long refreshTokenValidityInMilliseconds, - UserAuthenticationProvider authenticationProvider - //RedisTemplate redisTemplate* - ) { - this.secret = secret; - this.accessTokenValidityInMilliseconds = accessTokenValidityInSeconds * 1000; - this.refreshTokenValidityInMilliseconds = refreshTokenValidityInMilliseconds * 1000; - this.authenticationProvider = authenticationProvider; - } - - @PostConstruct - public void setKey() { //jwt.secret을 이요하여 key생성 - byte[] keyBytes = Decoders.BASE64.decode(secret); - this.key = Keys.hmacShaKeyFor(keyBytes); - } - - //토큰 발급 - public Tokens generateTokens(String providerId, String password) { - - Authentication authentication = authenticationProvider.getAuthentication(providerId, password); - - // 권한 가져오기 - String authorities = authentication.getAuthorities().stream() - .map(GrantedAuthority::getAuthority) - .collect(Collectors.joining(",")); - - UserPrincipalDto userPrincipalDto = UserPrincipalDto.from((CustomUserDetails)authentication.getPrincipal()); - - Claims claims = createClaims(userPrincipalDto, authorities); - - return new Tokens(createAccessToken(claims), createRefreshToken(claims)); - } - - //토큰 발급 - public Tokens generateTokens(Authentication authentication) { - - // 권한 가져오기 - String authorities = authentication.getAuthorities().stream() - .map(GrantedAuthority::getAuthority) - .collect(Collectors.joining(",")); - - UserPrincipalDto userPrincipalDto = UserPrincipalDto.from((CustomUserDetails)authentication.getPrincipal()); - - Claims claims = createClaims(userPrincipalDto, authorities); - - return new Tokens(createAccessToken(claims), createRefreshToken(claims)); - } - - private Claims createClaims(UserPrincipalDto userPrincipalDto, String authorities) { - - String subject; - try { - subject = objectMapper.writeValueAsString(userPrincipalDto); - } catch (JsonProcessingException e) { - log.error("Cannot generate JWT Tokens because an error occurred during json parsing."); - log.error("errorTrackStace: {}", (Object)e.getStackTrace()); - throw new BaseException(BaseResponseStatus.INTERNAL_SERVER_ERROR); - } - - Claims claims = Jwts.claims() - .setSubject(subject); - claims.put(AUTHORITIES_KEY, authorities); - - return claims; - } - - //accessToken 생성 - private String createAccessToken(Claims claims) { - long now = new Date().getTime(); //밀리세컨드 - Date accessTokenValidity = new Date(now + this.accessTokenValidityInMilliseconds); - claims.setExpiration(accessTokenValidity); - - return Jwts.builder() - .setClaims(claims) - .signWith(key, SignatureAlgorithm.HS512) - .compact(); - } - - //refreshToken 생성 - private String createRefreshToken(Claims claims) { - long now = new Date().getTime(); //밀리세컨드 - Date refreshTokenValidity = new Date(now + this.refreshTokenValidityInMilliseconds); - claims.setExpiration(refreshTokenValidity); - - return Jwts.builder() - .setClaims(claims) - .signWith(key, SignatureAlgorithm.HS512) - .compact(); - } - - //token 에서 Authentication 추출 - public Authentication getAuthentication(String token) throws JsonProcessingException { - Claims claims = getClaims(token); - - List authorities = - Arrays.stream(claims.get(AUTHORITIES_KEY).toString().split(",")) - .map(SimpleGrantedAuthority::new) - .toList(); - - UserPrincipalDto userPrincipalDto = objectMapper.readValue(claims.getSubject(), UserPrincipalDto.class); - - CustomUserDetails principal = new CustomUserDetails(userPrincipalDto.getId(), userPrincipalDto.getEmail(), "", - authorities.get(0)); - - return new UsernamePasswordAuthenticationToken(principal, token, authorities); - } - - private Claims getClaims(String token) { - return Jwts.parserBuilder() - .setSigningKey(key) - .build() - .parseClaimsJws(token) - .getBody(); - } - - //토큰 유효성 검증 - public boolean validateToken(String token) throws BaseException { - try { - Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token); - return true; - } catch (Exception e) { - log.warn("토큰 유효성 검증 실패: {}", e.getMessage()); - return false; - } - } + private static final String AUTHORITIES_KEY = "auth"; + private final String secret; + private final long accessTokenValidityInMilliseconds; + private final long refreshTokenValidityInMilliseconds; + private final ObjectMapper objectMapper = new ObjectMapper(); + private final UserAuthenticationProvider authenticationProvider; + + private Key key; + + @Autowired + public JwtTokenProvider(@Value("${jwt.secret.key}") String secret, + @Value("${jwt.token-validity-in-seconds}") long accessTokenValidityInSeconds, + @Value("${jwt.refresh-token-validity-in-seconds}") long refreshTokenValidityInMilliseconds, + UserAuthenticationProvider authenticationProvider + //RedisTemplate redisTemplate* + ) { + this.secret = secret; + this.accessTokenValidityInMilliseconds = accessTokenValidityInSeconds * 1000; + this.refreshTokenValidityInMilliseconds = refreshTokenValidityInMilliseconds * 1000; + this.authenticationProvider = authenticationProvider; + } + + @PostConstruct + public void setKey() { //jwt.secret을 이요하여 key생성 + byte[] keyBytes = Decoders.BASE64.decode(secret); + this.key = Keys.hmacShaKeyFor(keyBytes); + } + + //토큰 발급 + public Tokens generateTokens(String providerId, String password) { + + Authentication authentication = authenticationProvider.getAuthentication(providerId, password); + + // 권한 가져오기 + String authorities = authentication.getAuthorities().stream() + .map(GrantedAuthority::getAuthority) + .collect(Collectors.joining(",")); + + UserPrincipalDto userPrincipalDto = UserPrincipalDto.from((CustomUserDetails) authentication.getPrincipal()); + + Claims claims = createClaims(userPrincipalDto, authorities); + + return new Tokens(createAccessToken(claims), createRefreshToken(claims)); + } + + //토큰 발급 + public Tokens generateTokens(Authentication authentication) { + + // 권한 가져오기 + String authorities = authentication.getAuthorities().stream() + .map(GrantedAuthority::getAuthority) + .collect(Collectors.joining(",")); + + UserPrincipalDto userPrincipalDto = UserPrincipalDto.from((CustomUserDetails) authentication.getPrincipal()); + + Claims claims = createClaims(userPrincipalDto, authorities); + + return new Tokens(createAccessToken(claims), createRefreshToken(claims)); + } + + private Claims createClaims(UserPrincipalDto userPrincipalDto, String authorities) { + + String subject; + try { + subject = objectMapper.writeValueAsString(userPrincipalDto); + } catch (JsonProcessingException e) { + log.error("Cannot generate JWT Tokens because an error occurred during json parsing."); + log.error("errorTrackStace: {}", (Object) e.getStackTrace()); + throw new BaseException(BaseResponseStatus.INTERNAL_SERVER_ERROR); + } + + Claims claims = Jwts.claims() + .setSubject(subject); + claims.put(AUTHORITIES_KEY, authorities); + + return claims; + } + + //accessToken 생성 + private String createAccessToken(Claims claims) { + long now = new Date().getTime(); //밀리세컨드 + Date accessTokenValidity = new Date(now + this.accessTokenValidityInMilliseconds); + claims.setExpiration(accessTokenValidity); + + return Jwts.builder() + .setClaims(claims) + .signWith(key, SignatureAlgorithm.HS512) + .compact(); + } + + //refreshToken 생성 + private String createRefreshToken(Claims claims) { + long now = new Date().getTime(); //밀리세컨드 + Date refreshTokenValidity = new Date(now + this.refreshTokenValidityInMilliseconds); + claims.setExpiration(refreshTokenValidity); + + return Jwts.builder() + .setClaims(claims) + .signWith(key, SignatureAlgorithm.HS512) + .compact(); + } + + //token 에서 Authentication 추출 + public Authentication getAuthentication(String token) throws JsonProcessingException { + Claims claims = getClaims(token); + + List authorities = + Arrays.stream(claims.get(AUTHORITIES_KEY).toString().split(",")) + .map(SimpleGrantedAuthority::new) + .toList(); + + UserPrincipalDto userPrincipalDto = objectMapper.readValue(claims.getSubject(), UserPrincipalDto.class); + + CustomUserDetails principal = new CustomUserDetails(userPrincipalDto.getId(), userPrincipalDto.getEmail(), "", + authorities.get(0)); + + return new UsernamePasswordAuthenticationToken(principal, token, authorities); + } + + private Claims getClaims(String token) { + return Jwts.parserBuilder() + .setSigningKey(key) + .build() + .parseClaimsJws(token) + .getBody(); + } + + //토큰 유효성 검증 + public boolean validateToken(String token) throws BaseException { + try { + Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token); + return true; + } catch (Exception e) { + log.warn("토큰 유효성 검증 실패: {}", e.getMessage()); + return false; + } + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java b/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java index 5db0db61..b1bc1832 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java @@ -1,12 +1,11 @@ package ssu.eatssu.domain.auth.security; +import lombok.RequiredArgsConstructor; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Component; -import lombok.RequiredArgsConstructor; - /** * 인증 정보를 바탕으로 Authentication 객체 생성 */ @@ -14,16 +13,16 @@ @Component public class UserAuthenticationProvider { - private final AuthenticationManagerBuilder authenticationManagerBuilder; + private final AuthenticationManagerBuilder authenticationManagerBuilder; - public Authentication getAuthentication(String providerId, String rawPassword) { + public Authentication getAuthentication(String providerId, String rawPassword) { - UsernamePasswordAuthenticationToken authenticationToken = - new UsernamePasswordAuthenticationToken(providerId, rawPassword); + UsernamePasswordAuthenticationToken authenticationToken = + new UsernamePasswordAuthenticationToken(providerId, rawPassword); - return authenticationManagerBuilder - .eraseCredentials(true) - .getObject() - .authenticate(authenticationToken); - } + return authenticationManagerBuilder + .eraseCredentials(true) + .getObject() + .authenticate(authenticationToken); + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java b/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java index 95adeac5..d2d189e6 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java @@ -10,15 +10,15 @@ @NoArgsConstructor @AllArgsConstructor public class UserPrincipalDto { - private Long id; - private String email; - private String role; + private Long id; + private String email; + private String role; - public static UserPrincipalDto from(CustomUserDetails userDetails) { - return UserPrincipalDto.builder() - .id(userDetails.getId()) - .email(userDetails.getEmail()) - .role(userDetails.getRole().getAuthority()) - .build(); - } + public static UserPrincipalDto from(CustomUserDetails userDetails) { + return UserPrincipalDto.builder() + .id(userDetails.getId()) + .email(userDetails.getEmail()) + .role(userDetails.getRole().getAuthority()) + .build(); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java index fda3e301..dbb8d6a1 100644 --- a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java @@ -1,21 +1,12 @@ package ssu.eatssu.domain.auth.service; -import static ssu.eatssu.domain.auth.entity.OAuthProvider.*; -import static ssu.eatssu.domain.auth.security.JwtAuthenticationFilter.*; - -import java.net.http.HttpRequest; - -import javax.servlet.http.HttpServletRequest; - +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.StringUtils; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.auth.dto.OAuthInfo; @@ -29,105 +20,106 @@ import ssu.eatssu.domain.user.service.UserService; import ssu.eatssu.global.handler.response.BaseException; +import static ssu.eatssu.domain.auth.entity.OAuthProvider.APPLE; +import static ssu.eatssu.domain.auth.entity.OAuthProvider.KAKAO; + @Slf4j @Service @Transactional @RequiredArgsConstructor public class OAuthService { - private final UserService userService; - private final UserRepository userRepository; - private final AppleAuthenticator appleAuthenticator; - private final AuthenticationManagerBuilder authenticationManagerBuilder; - private final JwtTokenProvider jwtTokenProvider; - - private static final String AUTHORIZATION_HEADER = "Authorization"; - - private static final String BEARER_TYPE = "Bearer"; - - public Tokens kakaoLogin(KakaoLoginRequest request) { - User user = userRepository.findByProviderId(request.providerId()) - .orElseGet( - () -> userService.join(request.email(), KAKAO, request.providerId())); - - return generateOauthJwtTokens(user.getEmail(), KAKAO, - request.providerId()); - } - - public Tokens appleLogin(AppleLoginRequest request) { - OAuthInfo oAuthInfo = appleAuthenticator.getOAuthInfoByIdentityToken( - request.identityToken()); - - User user = userRepository.findByProviderId(oAuthInfo.providerId()) - .orElseGet(() -> userService.join(oAuthInfo.email(), APPLE, - oAuthInfo.providerId())); - - //todo 이메일 갱신의 이유? - updateAppleUserEmail(user, oAuthInfo.email()); - - return generateOauthJwtTokens(user.getEmail(), APPLE, - oAuthInfo.providerId()); - } - - /** - * JWT 토큰 재발급 - */ - public Tokens refreshTokens(Authentication authentication) { - return jwtTokenProvider.generateTokens(authentication); - } - - private void updateAppleUserEmail(User user, String email) { - if (isHideEmail(user.getEmail()) && !isHideEmail(email)) { - user.updateEmail(email); - userRepository.save(user); - } - } - - /** - * 유효한 토큰인지 확인 - */ - - public Boolean validToken(ValidRequest request){ - String token = request.token(); - - try { - return jwtTokenProvider.validateToken(token); - } catch (BaseException e) { - log.warn("토큰 유효성 검사 중 예외 발생: {}", e.getMessage()); - return false; - } - } - - private boolean isHideEmail(String email) { - if (email.length() > 25) { - return email.startsWith("@privaterelay.appleid.com", email.length() - 25); - } else { - return false; - } - } - - /** - * Oauth 회원 - email, providerId 를 통해 JwtToken 을 생성 - * todo: 같은 이메일로 카카오, 애플 등 여러 회원가입을 한 회원 처리 필요 - */ - private Tokens generateOauthJwtTokens(String email, OAuthProvider provider, String providerId) { - // email, credentials 를 기반으로 Authentication 객체 생성 - // 이때 authentication 은 인증 여부를 확인하는 authenticated 값이 false - UsernamePasswordAuthenticationToken authenticationToken = - new UsernamePasswordAuthenticationToken(email, - makeOauthCredentials(provider, providerId)); - - // 실제 검증 (사용자 비밀번호 체크) - // authenticate 메서드 실행 => CustomUserDetailsService 에서 만든 loadUserByUsername 메서드 실행 - Authentication authentication = authenticationManagerBuilder.getObject() - .authenticate(authenticationToken); - - // 인증 정보를 바탕으로 JWT 토큰 생성 - return jwtTokenProvider.generateTokens(authentication); - } - - private String makeOauthCredentials(OAuthProvider provider, String providerId) { - return provider + providerId; - } + private static final String AUTHORIZATION_HEADER = "Authorization"; + private static final String BEARER_TYPE = "Bearer"; + private final UserService userService; + private final UserRepository userRepository; + private final AppleAuthenticator appleAuthenticator; + private final AuthenticationManagerBuilder authenticationManagerBuilder; + private final JwtTokenProvider jwtTokenProvider; + + public Tokens kakaoLogin(KakaoLoginRequest request) { + User user = userRepository.findByProviderId(request.providerId()) + .orElseGet( + () -> userService.join(request.email(), KAKAO, request.providerId())); + + return generateOauthJwtTokens(user.getEmail(), KAKAO, + request.providerId()); + } + + public Tokens appleLogin(AppleLoginRequest request) { + OAuthInfo oAuthInfo = appleAuthenticator.getOAuthInfoByIdentityToken( + request.identityToken()); + + User user = userRepository.findByProviderId(oAuthInfo.providerId()) + .orElseGet(() -> userService.join(oAuthInfo.email(), APPLE, + oAuthInfo.providerId())); + + //todo 이메일 갱신의 이유? + updateAppleUserEmail(user, oAuthInfo.email()); + + return generateOauthJwtTokens(user.getEmail(), APPLE, + oAuthInfo.providerId()); + } + + /** + * JWT 토큰 재발급 + */ + public Tokens refreshTokens(Authentication authentication) { + return jwtTokenProvider.generateTokens(authentication); + } + + private void updateAppleUserEmail(User user, String email) { + if (isHideEmail(user.getEmail()) && !isHideEmail(email)) { + user.updateEmail(email); + userRepository.save(user); + } + } + + /** + * 유효한 토큰인지 확인 + */ + + public Boolean validToken(ValidRequest request) { + String token = request.token(); + + try { + return jwtTokenProvider.validateToken(token); + } catch (BaseException e) { + log.warn("토큰 유효성 검사 중 예외 발생: {}", e.getMessage()); + return false; + } + } + + private boolean isHideEmail(String email) { + if (email.length() > 25) { + return email.startsWith("@privaterelay.appleid.com", email.length() - 25); + } else { + return false; + } + } + + /** + * Oauth 회원 - email, providerId 를 통해 JwtToken 을 생성 + * todo: 같은 이메일로 카카오, 애플 등 여러 회원가입을 한 회원 처리 필요 + */ + private Tokens generateOauthJwtTokens(String email, OAuthProvider provider, String providerId) { + // email, credentials 를 기반으로 Authentication 객체 생성 + // 이때 authentication 은 인증 여부를 확인하는 authenticated 값이 false + UsernamePasswordAuthenticationToken authenticationToken = + new UsernamePasswordAuthenticationToken(email, + makeOauthCredentials(provider, providerId)); + + // 실제 검증 (사용자 비밀번호 체크) + // authenticate 메서드 실행 => CustomUserDetailsService 에서 만든 loadUserByUsername 메서드 실행 + Authentication authentication = authenticationManagerBuilder.getObject() + .authenticate(authenticationToken); + + // 인증 정보를 바탕으로 JWT 토큰 생성 + return jwtTokenProvider.generateTokens(authentication); + } + + private String makeOauthCredentials(OAuthProvider provider, String providerId) { + return provider + providerId; + } } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java b/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java index 06ecc032..318664e3 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java @@ -9,9 +9,9 @@ @Getter public class CreateInquiryRequest { - @Schema(description = "답장 받을 이메일", example = "sandy1017@gmail.com") - private String email; + @Schema(description = "답장 받을 이메일", example = "sandy1017@gmail.com") + private String email; - @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의 남깁니다") - private String content; + @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의 남깁니다") + private String content; } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/dto/InquiryDetailResponse.java b/src/main/java/ssu/eatssu/domain/inquiry/dto/InquiryDetailResponse.java index 9c3b8fd4..ec56d7a7 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/dto/InquiryDetailResponse.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/dto/InquiryDetailResponse.java @@ -12,24 +12,24 @@ @Getter public class InquiryDetailResponse { - @Schema(description = "문의 작성자 Id", example = "123") - private Long writerId; + @Schema(description = "문의 작성자 Id", example = "123") + private Long writerId; - @Schema(description = "문의 작성자 닉네임", example = "먹짱맨") - private String writerNickName; + @Schema(description = "문의 작성자 닉네임", example = "먹짱맨") + private String writerNickName; - @Schema(description = "문의 작성자 이메일", example = "test@gmail.com") - private String writerEmail; + @Schema(description = "문의 작성자 이메일", example = "test@gmail.com") + private String writerEmail; - @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의드립니다") - private String content; + @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의드립니다") + private String content; - public static InquiryDetailResponse from(Inquiry userInquiry) { - return InquiryDetailResponse.builder() - .writerId(userInquiry.getUser().getId()) - .writerNickName(userInquiry.getUser().getNickname()) - .writerEmail(userInquiry.getUser().getEmail()) - .content(userInquiry.getContent()) - .build(); - } + public static InquiryDetailResponse from(Inquiry userInquiry) { + return InquiryDetailResponse.builder() + .writerId(userInquiry.getUser().getId()) + .writerNickName(userInquiry.getUser().getNickname()) + .writerEmail(userInquiry.getUser().getEmail()) + .content(userInquiry.getContent()) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java b/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java index 9fc8c2a5..aa6643bb 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java @@ -25,34 +25,34 @@ @AllArgsConstructor public class Inquiry extends BaseTimeEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "user_inquiry_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_inquiry_id") + private Long id; - private String content; + private String content; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") - private User user; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; - private String email; + private String email; - @Enumerated(EnumType.STRING) - private InquiryStatus status; + @Enumerated(EnumType.STRING) + private InquiryStatus status; - public Inquiry(String content, User user, String email) { - this.content = content; - this.user = user; - this.email = email; - this.status = InquiryStatus.WAITING; - } + public Inquiry(String content, User user, String email) { + this.content = content; + this.user = user; + this.email = email; + this.status = InquiryStatus.WAITING; + } - public void updateStatus(InquiryStatus status) { - this.status = status; - } + public void updateStatus(InquiryStatus status) { + this.status = status; + } - public void clearUser() { - this.user = null; - } + public void clearUser() { + this.user = null; + } } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java b/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java index 6b8b4bc9..34e04b1e 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java @@ -1,5 +1,5 @@ package ssu.eatssu.domain.inquiry.entity; public enum InquiryStatus { - WAITING, ANSWERED, HOLD; + WAITING, ANSWERED, HOLD; } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java b/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java index 9f09bbc1..b5e346b9 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java @@ -1,11 +1,5 @@ package ssu.eatssu.domain.inquiry.presentation; -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -13,6 +7,11 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.inquiry.dto.CreateInquiryRequest; import ssu.eatssu.domain.inquiry.entity.Inquiry; @@ -28,21 +27,21 @@ @Tag(name = "Inquiry", description = "문의 API") public class InquiryController { - private final SlackService slackService; - private final InquiryService inquiryService; + private final SlackService slackService; + private final InquiryService inquiryService; - @Operation(summary = "문의 작성", description = "문의를 작성하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "문의 작성 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/") - public BaseResponse writeInquiry(@RequestBody CreateInquiryRequest createInquiryRequest, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - Inquiry inquiry = inquiryService.createUserInquiry(customUserDetails, createInquiryRequest); - slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiry(inquiry) - , SlackChannel.USER_INQUIRY_CHANNEL); - return BaseResponse.success(); - } + @Operation(summary = "문의 작성", description = "문의를 작성하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "문의 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/") + public BaseResponse writeInquiry(@RequestBody CreateInquiryRequest createInquiryRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + Inquiry inquiry = inquiryService.createUserInquiry(customUserDetails, createInquiryRequest); + slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiry(inquiry) + , SlackChannel.USER_INQUIRY_CHANNEL); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java b/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java index 2e92023b..8dd6d21f 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.inquiry.repository; import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.inquiry.entity.Inquiry; public interface InquiryRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java index f87b123e..66c7c7c0 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java @@ -1,11 +1,8 @@ package ssu.eatssu.domain.inquiry.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.inquiry.dto.CreateInquiryRequest; import ssu.eatssu.domain.inquiry.entity.Inquiry; @@ -14,21 +11,23 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; + @RequiredArgsConstructor @Service @Transactional public class InquiryService { - private final UserRepository userRepository; - private final InquiryRepository inquiryRepository; + private final UserRepository userRepository; + private final InquiryRepository inquiryRepository; - public Inquiry createUserInquiry(CustomUserDetails userDetails, CreateInquiryRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + public Inquiry createUserInquiry(CustomUserDetails userDetails, CreateInquiryRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Inquiry inquiry = new Inquiry(request.getContent(), user, request.getEmail()); + Inquiry inquiry = new Inquiry(request.getContent(), user, request.getEmail()); - return inquiryRepository.save(inquiry); - } + return inquiryRepository.save(inquiry); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index 953d640f..c1e36486 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -1,11 +1,5 @@ package ssu.eatssu.domain.menu.entity; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import org.springframework.format.annotation.DateTimeFormat; - import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -21,53 +15,58 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Meal { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "meal_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "meal_id") + private Long id; - @DateTimeFormat(pattern = "yyyyMMdd") - @Temporal(TemporalType.DATE) - private Date date; + @DateTimeFormat(pattern = "yyyyMMdd") + @Temporal(TemporalType.DATE) + private Date date; - @Enumerated(EnumType.STRING) - private Restaurant restaurant; + @Enumerated(EnumType.STRING) + private Restaurant restaurant; - @Enumerated(EnumType.STRING) - private TimePart timePart; + @Enumerated(EnumType.STRING) + private TimePart timePart; - private Integer price; + private Integer price; - @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL, fetch = FetchType.LAZY) - private List mealMenus = new ArrayList<>(); + @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private List mealMenus = new ArrayList<>(); - public Meal(Date date, TimePart timePart, Restaurant restaurant) { - this.date = date; - this.timePart = timePart; - this.restaurant = restaurant; - this.price = restaurant.getRestaurantPrice(); - } + public Meal(Date date, TimePart timePart, Restaurant restaurant) { + this.date = date; + this.timePart = timePart; + this.restaurant = restaurant; + this.price = restaurant.getRestaurantPrice(); + } - public Meal(Date date, TimePart timePart, Restaurant restaurant, Integer price) { - this.date = date; - this.timePart = timePart; - this.restaurant = restaurant; - this.price = price; - } + public Meal(Date date, TimePart timePart, Restaurant restaurant, Integer price) { + this.date = date; + this.timePart = timePart; + this.restaurant = restaurant; + this.price = price; + } - public List getMenuNames() { - return mealMenus.stream().map(mealMenu -> mealMenu.getMenu().getName()).toList(); - } + public List getMenuNames() { + return mealMenus.stream().map(mealMenu -> mealMenu.getMenu().getName()).toList(); + } - public void addMealMenu(MealMenu mealMenu) { - mealMenus.add(mealMenu); - } + public void addMealMenu(MealMenu mealMenu) { + mealMenus.add(mealMenu); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java b/src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java index f6518088..2391a332 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java @@ -21,17 +21,17 @@ @Builder public class MealMenu { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "meal_menu_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "meal_menu_id") + private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "menu_id") - private Menu menu; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "menu_id") + private Menu menu; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "meal_id") - private Meal meal; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "meal_id") + private Meal meal; } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index d02ed5be..a015b2b5 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -1,8 +1,5 @@ package ssu.eatssu.domain.menu.entity; -import java.util.ArrayList; -import java.util.List; - import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Embedded; @@ -23,124 +20,126 @@ import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.Reviews; +import java.util.ArrayList; +import java.util.List; + @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Menu { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "menu_id") - private Long id; - - private String name; - - private Integer price; - - @Enumerated(EnumType.STRING) - private Restaurant restaurant; - - // TODO : 삭제되어야 함 - @Embedded - private Reviews reviews = new Reviews(); - - @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) - private List mealMenus = new ArrayList<>(); - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "menu_category_id") - private MenuCategory category; - - private boolean isDiscontinued = false; - - @Column(name = "like_count") - private Integer likeCount = 0; - - @Column(name = "unlike_count") - private Integer unlikeCount = 0; - - private Menu(String name, Restaurant restaurant, Integer price, MenuCategory category) { - this.name = name; - this.restaurant = restaurant; - this.price = price; - this.category = category; - } - - public static Menu createVariable(String name, Restaurant restaurant) { - int price = 0; - return new Menu(name, restaurant, price, null); - } - - public static Menu createFixed(String name, Restaurant restaurant, Integer price, - MenuCategory category) { - return new Menu(name, restaurant, price, category); - } - - public void addReview(Review review) { - reviews.add(review); - } - - public int getTotalReviewCount() { - return reviews.size(); - } - - public void update(String name, Integer price) { - this.name = name; - this.price = price; - } - - public void changeDiscontinuedStatus() { - this.isDiscontinued = !this.isDiscontinued; - } - - public boolean isContinued() { - return !this.isDiscontinued; - } - - public void increaseLikeCount() - { - if(this.likeCount==null){ - this.likeCount=0; - } - this.likeCount++; - } - - public void increaseUnlikeCount() { - if(this.unlikeCount==null){ - this.unlikeCount=0; - } - this.unlikeCount++; - } - - public void decreaseLikeCount() { - if(this.likeCount==null){ - this.likeCount=0; - } - this.likeCount--; - } - - public void decreaseUnlikeCount() { - if(this.unlikeCount==null){ - this.unlikeCount=0; - } - unlikeCount--; - } - - public void changeLikeStatus(Boolean isLike) { - if (isLike) { - decreaseUnlikeCount(); - increaseLikeCount(); - } else { - decreaseLikeCount(); - increaseUnlikeCount(); - } - } - - public void cancelLike(Boolean isLike) { - if (isLike) { - decreaseLikeCount(); - } else { - decreaseUnlikeCount(); - } - } + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "menu_id") + private Long id; + + private String name; + + private Integer price; + + @Enumerated(EnumType.STRING) + private Restaurant restaurant; + + // TODO : 삭제되어야 함 + @Embedded + private Reviews reviews = new Reviews(); + + @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) + private List mealMenus = new ArrayList<>(); + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "menu_category_id") + private MenuCategory category; + + private boolean isDiscontinued = false; + + @Column(name = "like_count") + private Integer likeCount = 0; + + @Column(name = "unlike_count") + private Integer unlikeCount = 0; + + private Menu(String name, Restaurant restaurant, Integer price, MenuCategory category) { + this.name = name; + this.restaurant = restaurant; + this.price = price; + this.category = category; + } + + public static Menu createVariable(String name, Restaurant restaurant) { + int price = 0; + return new Menu(name, restaurant, price, null); + } + + public static Menu createFixed(String name, Restaurant restaurant, Integer price, + MenuCategory category) { + return new Menu(name, restaurant, price, category); + } + + public void addReview(Review review) { + reviews.add(review); + } + + public int getTotalReviewCount() { + return reviews.size(); + } + + public void update(String name, Integer price) { + this.name = name; + this.price = price; + } + + public void changeDiscontinuedStatus() { + this.isDiscontinued = !this.isDiscontinued; + } + + public boolean isContinued() { + return !this.isDiscontinued; + } + + public void increaseLikeCount() { + if (this.likeCount == null) { + this.likeCount = 0; + } + this.likeCount++; + } + + public void increaseUnlikeCount() { + if (this.unlikeCount == null) { + this.unlikeCount = 0; + } + this.unlikeCount++; + } + + public void decreaseLikeCount() { + if (this.likeCount == null) { + this.likeCount = 0; + } + this.likeCount--; + } + + public void decreaseUnlikeCount() { + if (this.unlikeCount == null) { + this.unlikeCount = 0; + } + unlikeCount--; + } + + public void changeLikeStatus(Boolean isLike) { + if (isLike) { + decreaseUnlikeCount(); + increaseLikeCount(); + } else { + decreaseLikeCount(); + increaseUnlikeCount(); + } + } + + public void cancelLike(Boolean isLike) { + if (isLike) { + decreaseLikeCount(); + } else { + decreaseUnlikeCount(); + } + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java b/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java index 400dd8ef..9f1a4ec7 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java @@ -21,14 +21,14 @@ @Builder public class MenuCategory { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "menu_category_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "menu_category_id") + private Long id; - private String name; + private String name; - @Enumerated(EnumType.STRING) - private Restaurant restaurant; + @Enumerated(EnumType.STRING) + private Restaurant restaurant; } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java b/src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java index edc97d96..e53a0845 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java @@ -1,33 +1,36 @@ package ssu.eatssu.domain.menu.entity.constants; -import static ssu.eatssu.domain.restaurant.entity.Restaurant.*; +import com.fasterxml.jackson.annotation.JsonCreator; +import lombok.Getter; +import ssu.eatssu.domain.restaurant.entity.Restaurant; import java.util.Arrays; import java.util.List; -import com.fasterxml.jackson.annotation.JsonCreator; - -import lombok.Getter; -import ssu.eatssu.domain.restaurant.entity.Restaurant; +import static ssu.eatssu.domain.restaurant.entity.Restaurant.DODAM; +import static ssu.eatssu.domain.restaurant.entity.Restaurant.DORMITORY; +import static ssu.eatssu.domain.restaurant.entity.Restaurant.FOOD_COURT; +import static ssu.eatssu.domain.restaurant.entity.Restaurant.HAKSIK; +import static ssu.eatssu.domain.restaurant.entity.Restaurant.SNACK_CORNER; @Getter public enum MenuType { - FIXED("고정 메뉴", Arrays.asList(FOOD_COURT, SNACK_CORNER)), - VARIABLE("변동 메뉴", Arrays.asList(DODAM, DORMITORY, HAKSIK)); - - private final String description; - private final List restaurants; - - MenuType(String description, List restaurants) { - this.description = description; - this.restaurants = restaurants; - } - - @JsonCreator - public static MenuType from(String description) { - return Arrays.stream(MenuType.values()) - .filter(d -> d.getDescription().equals(description)) - .findAny() - .orElseThrow(IllegalArgumentException::new); - } + FIXED("고정 메뉴", Arrays.asList(FOOD_COURT, SNACK_CORNER)), + VARIABLE("변동 메뉴", Arrays.asList(DODAM, DORMITORY, HAKSIK)); + + private final String description; + private final List restaurants; + + MenuType(String description, List restaurants) { + this.description = description; + this.restaurants = restaurants; + } + + @JsonCreator + public static MenuType from(String description) { + return Arrays.stream(MenuType.values()) + .filter(d -> d.getDescription().equals(description)) + .findAny() + .orElseThrow(IllegalArgumentException::new); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java b/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java index 2866bffd..c8326e76 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java @@ -1,28 +1,27 @@ package ssu.eatssu.domain.menu.entity.constants; -import java.util.Arrays; - import com.fasterxml.jackson.annotation.JsonCreator; - import lombok.Getter; +import java.util.Arrays; + @Getter public enum TimePart { - MORNING("조식"), - LUNCH("중식"), - DINNER("석식"); + MORNING("조식"), + LUNCH("중식"), + DINNER("석식"); - private final String description; + private final String description; - TimePart(String description) { - this.description = description; - } + TimePart(String description) { + this.description = description; + } - @JsonCreator - public static TimePart from(String description) { - return Arrays.stream(TimePart.values()) - .filter(d -> d.getDescription().equals(description)) - .findAny() - .orElseThrow(IllegalArgumentException::new); - } + @JsonCreator + public static TimePart from(String description) { + return Arrays.stream(TimePart.values()) + .filter(d -> d.getDescription().equals(description)) + .findAny() + .orElseThrow(IllegalArgumentException::new); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuQueryRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuQueryRepository.java index ffe34ee4..470e16e4 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuQueryRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuQueryRepository.java @@ -1,34 +1,32 @@ package ssu.eatssu.domain.menu.persistence; -import java.util.List; - -import org.springframework.stereotype.Component; - import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; import ssu.eatssu.domain.menu.entity.QMeal; import ssu.eatssu.domain.menu.entity.QMealMenu; import ssu.eatssu.domain.menu.entity.QMenu; +import java.util.List; + @Component @RequiredArgsConstructor public class MealMenuQueryRepository { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; - private final QMeal meal = QMeal.meal; + private final QMeal meal = QMeal.meal; - private final QMealMenu mealMenu = QMealMenu.mealMenu; + private final QMealMenu mealMenu = QMealMenu.mealMenu; - public List getMenuIds(Long mealId) { - return queryFactory - .select(menu.id) - .from(meal) - .join(mealMenu).on(meal.id.eq(mealMenu.meal.id)) - .join(menu).on(mealMenu.menu.id.eq(menu.id)) - .where(meal.id.eq(mealId)) - .fetch(); - } + public List getMenuIds(Long mealId) { + return queryFactory + .select(menu.id) + .from(meal) + .join(mealMenu).on(meal.id.eq(mealMenu.meal.id)) + .join(menu).on(mealMenu.menu.id.eq(menu.id)) + .where(meal.id.eq(mealId)) + .fetch(); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java index dc2999b2..277c073d 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java @@ -1,25 +1,24 @@ package ssu.eatssu.domain.menu.persistence; -import java.util.List; - import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; - import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; +import java.util.List; + public interface MealMenuRepository extends JpaRepository { - @Query("SELECT mm.menu FROM MealMenu mm WHERE mm.meal IN :meals") - List findMenusByMeals(List meals); + @Query("SELECT mm.menu FROM MealMenu mm WHERE mm.meal IN :meals") + List findMenusByMeals(List meals); - @Query("SELECT mm.menu.id FROM MealMenu mm WHERE mm.meal.id = :mealId") - List findMenuIdsByMealId(@Param("mealId") Long mealId); + @Query("SELECT mm.menu.id FROM MealMenu mm WHERE mm.meal.id = :mealId") + List findMenuIdsByMealId(@Param("mealId") Long mealId); - @Query("SELECT DISTINCT mm.meal.id FROM MealMenu mm WHERE mm.menu.id IN :menuIds") - List findMealIdsByMenuIds(@Param("menuIds") List menuIds); + @Query("SELECT DISTINCT mm.meal.id FROM MealMenu mm WHERE mm.menu.id IN :menuIds") + List findMealIdsByMenuIds(@Param("menuIds") List menuIds); - @Query("SELECT mm.menu FROM MealMenu mm WHERE mm.meal = :meal") - List findMenusByMeal(Meal meal); + @Query("SELECT mm.menu FROM MealMenu mm WHERE mm.meal = :meal") + List findMenusByMeal(Meal meal); } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java index dcc471cc..df59f5d7 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java @@ -1,17 +1,16 @@ package ssu.eatssu.domain.menu.persistence; -import java.util.Date; -import java.util.List; - import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.util.Date; +import java.util.List; + public interface MealRepository extends JpaRepository { - List findAllByDateAndTimePartAndRestaurant(Date date, TimePart timePart, Restaurant restaurant); + List findAllByDateAndTimePartAndRestaurant(Date date, TimePart timePart, Restaurant restaurant); - List findByRestaurant(Restaurant restaurant); + List findByRestaurant(Restaurant restaurant); } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java index 5b171e61..ffc0fcdd 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java @@ -1,13 +1,12 @@ package ssu.eatssu.domain.menu.persistence; -import java.util.List; - import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.util.List; + public interface MenuCategoryRepository extends JpaRepository { - List findAllByRestaurant(Restaurant restaurant); + List findAllByRestaurant(Restaurant restaurant); } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java index 19ab9f94..e87ece59 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java @@ -1,20 +1,19 @@ package ssu.eatssu.domain.menu.persistence; -import java.util.List; -import java.util.Optional; - import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.util.List; +import java.util.Optional; + public interface MenuRepository extends JpaRepository { - boolean existsByNameAndRestaurant(String name, Restaurant restaurant); + boolean existsByNameAndRestaurant(String name, Restaurant restaurant); - Optional findByNameAndRestaurant(String name, Restaurant restaurant); + Optional findByNameAndRestaurant(String name, Restaurant restaurant); - List findAllByRestaurantAndCategory(Restaurant restaurant, MenuCategory category); + List findAllByRestaurantAndCategory(Restaurant restaurant, MenuCategory category); - List findAll(); + List findAll(); } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java index f68363ff..482cb4dc 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java @@ -1,64 +1,62 @@ package ssu.eatssu.domain.menu.persistence; -import java.util.List; - -import org.springframework.stereotype.Repository; - import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; +import java.util.List; + @Repository @RequiredArgsConstructor public class QuerydslMealRatingCalculator { - private final MealMenuQueryRepository mealMenuQueryRepository; - - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - - private final QReview review = QReview.review; - - public Double getMainRatingAverage(Long mealId) { - List menuIds = mealMenuQueryRepository.getMenuIds(mealId); - return queryFactory - .select(review.ratings.mainRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdIn(menuIds) - ) - .fetchOne(); - } - - public Double getTasteRatingAverage(Long mealId) { - List menuIds = mealMenuQueryRepository.getMenuIds(mealId); - return queryFactory - .select(review.ratings.tasteRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdIn(menuIds) - ) - .fetchOne(); - } - - public Double getAmountRatingAverage(Long mealId) { - List menuIds = mealMenuQueryRepository.getMenuIds(mealId); - return queryFactory - .select(review.ratings.amountRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdIn(menuIds) - ) - .fetchOne(); - } - - private BooleanExpression menuIdIn(List menuIds) { - return menuIds != null && !menuIds.isEmpty() ? menu.id.in(menuIds) : null; - } + private final MealMenuQueryRepository mealMenuQueryRepository; + + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + + private final QReview review = QReview.review; + + public Double getMainRatingAverage(Long mealId) { + List menuIds = mealMenuQueryRepository.getMenuIds(mealId); + return queryFactory + .select(review.ratings.mainRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdIn(menuIds) + ) + .fetchOne(); + } + + public Double getTasteRatingAverage(Long mealId) { + List menuIds = mealMenuQueryRepository.getMenuIds(mealId); + return queryFactory + .select(review.ratings.tasteRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdIn(menuIds) + ) + .fetchOne(); + } + + public Double getAmountRatingAverage(Long mealId) { + List menuIds = mealMenuQueryRepository.getMenuIds(mealId); + return queryFactory + .select(review.ratings.amountRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdIn(menuIds) + ) + .fetchOne(); + } + + private BooleanExpression menuIdIn(List menuIds) { + return menuIds != null && !menuIds.isEmpty() ? menu.id.in(menuIds) : null; + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java index a4125b0d..0222a171 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java @@ -1,58 +1,56 @@ package ssu.eatssu.domain.menu.persistence; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Repository; - import com.querydsl.core.Tuple; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + @Repository @RequiredArgsConstructor public class QuerydslMealRatingCounter { - private final MealMenuQueryRepository mealMenuQueryRepository; - - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - - private final QReview review = QReview.review; - - public Map getRatingCountMap(Long mealId) { - List tuples = queryFactory.select(review.ratings.mainRating, review.count()) - .from(review) - .join(review.menu, menu) - .groupBy(review.ratings.mainRating) - .where(menuIdIn(mealMenuQueryRepository.getMenuIds(mealId))) - .fetch(); - - Map ratingCountMap = new HashMap<>(); - for (Tuple tuple : tuples) { - Integer rating = tuple.get(review.ratings.mainRating); - Long count = tuple.get(review.count()); - ratingCountMap.put(rating, count); - } - return ratingCountMap; - } - - public Long getTotalRatingCount(Long mealId) { - return queryFactory - .select(review.count()) - .from(review) - .join(review.menu, menu) - .where(menuIdIn(mealMenuQueryRepository.getMenuIds(mealId))) - .fetchOne(); - } - - private BooleanExpression menuIdIn(List menuIds) { - return menuIds != null && !menuIds.isEmpty() ? menu.id.in(menuIds) : null; - } + private final MealMenuQueryRepository mealMenuQueryRepository; + + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + + private final QReview review = QReview.review; + + public Map getRatingCountMap(Long mealId) { + List tuples = queryFactory.select(review.ratings.mainRating, review.count()) + .from(review) + .join(review.menu, menu) + .groupBy(review.ratings.mainRating) + .where(menuIdIn(mealMenuQueryRepository.getMenuIds(mealId))) + .fetch(); + + Map ratingCountMap = new HashMap<>(); + for (Tuple tuple : tuples) { + Integer rating = tuple.get(review.ratings.mainRating); + Long count = tuple.get(review.count()); + ratingCountMap.put(rating, count); + } + return ratingCountMap; + } + + public Long getTotalRatingCount(Long mealId) { + return queryFactory + .select(review.count()) + .from(review) + .join(review.menu, menu) + .where(menuIdIn(mealMenuQueryRepository.getMenuIds(mealId))) + .fetchOne(); + } + + private BooleanExpression menuIdIn(List menuIds) { + return menuIds != null && !menuIds.isEmpty() ? menu.id.in(menuIds) : null; + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java index dcfb2795..97e33f81 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java @@ -1,11 +1,9 @@ package ssu.eatssu.domain.menu.persistence; -import org.springframework.stereotype.Repository; - import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; @@ -13,44 +11,44 @@ @RequiredArgsConstructor public class QuerydslMenuRatingCalculator { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - private final QReview review = QReview.review; - - public Double getMainRatingAverage(Long menuId) { - return queryFactory - .select(review.ratings.mainRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId) - ) - .fetchOne(); - } - - public Double getTasteRatingAverage(Long menuId) { - return queryFactory - .select(review.ratings.tasteRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId) - ) - .fetchOne(); - } - - public Double getAmountRatingAverage(Long menuId) { - return queryFactory - .select(review.ratings.amountRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId) - ) - .fetchOne(); - } - - private BooleanExpression menuIdEq(Long menuId) { - return menu.id.eq(menuId); - } + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QReview review = QReview.review; + + public Double getMainRatingAverage(Long menuId) { + return queryFactory + .select(review.ratings.mainRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId) + ) + .fetchOne(); + } + + public Double getTasteRatingAverage(Long menuId) { + return queryFactory + .select(review.ratings.tasteRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId) + ) + .fetchOne(); + } + + public Double getAmountRatingAverage(Long menuId) { + return queryFactory + .select(review.ratings.amountRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId) + ) + .fetchOne(); + } + + private BooleanExpression menuIdEq(Long menuId) { + return menu.id.eq(menuId); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java index db426a00..e035465d 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java @@ -1,46 +1,44 @@ package ssu.eatssu.domain.menu.persistence; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Repository; - import com.querydsl.core.Tuple; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + @Repository @RequiredArgsConstructor public class QuerydslMenuRatingCounter { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - private final QReview review = QReview.review; - - public Map getRatingCountMap(Long menuId) { - List tuples = queryFactory.select(review.ratings.mainRating, review.count()) - .from(review) - .join(review.menu, menu) - .groupBy(review.ratings.mainRating) - .where(menuIdEq(menuId)) - .fetch(); - - Map ratingCountMap = new HashMap<>(); - - for (Tuple tuple : tuples) { - Integer rating = tuple.get(review.ratings.mainRating); - Long count = tuple.get(review.count()); - ratingCountMap.put(rating, count); - } - return ratingCountMap; - } - - private BooleanExpression menuIdEq(Long menuId) { - return menu.id.eq(menuId); - } + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QReview review = QReview.review; + + public Map getRatingCountMap(Long menuId) { + List tuples = queryFactory.select(review.ratings.mainRating, review.count()) + .from(review) + .join(review.menu, menu) + .groupBy(review.ratings.mainRating) + .where(menuIdEq(menuId)) + .fetch(); + + Map ratingCountMap = new HashMap<>(); + + for (Tuple tuple : tuples) { + Integer rating = tuple.get(review.ratings.mainRating); + Long count = tuple.get(review.count()); + ratingCountMap.put(rating, count); + } + return ratingCountMap; + } + + private BooleanExpression menuIdEq(Long menuId) { + return menu.id.eq(menuId); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java index 6286bc52..a865c887 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java @@ -1,13 +1,13 @@ package ssu.eatssu.domain.menu.presentation.dto.request; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; +import java.util.List; + @Schema(title = "식단 추가") public record CreateMealRequest( - @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") - List menuNames + @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") + List menuNames ) { } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java index 0c5c2bcf..7035d835 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java @@ -1,15 +1,15 @@ package ssu.eatssu.domain.menu.presentation.dto.request; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; +import java.util.List; + @Schema(title = "식단 추가(가격 입력 받는 버전)") public record MealCreateWithPriceRequest( - @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") - List menuNames, - @Schema(description = "식단 가격", example = "3000") - Integer price + @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") + List menuNames, + @Schema(description = "식단 가격", example = "3000") + Integer price ) { } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/BriefMenuResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/BriefMenuResponse.java index 2f0dd1f6..5906c9ab 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/BriefMenuResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/BriefMenuResponse.java @@ -10,14 +10,14 @@ @Schema(title = "메뉴 간단 설명") public class BriefMenuResponse { - @Schema(description = "메뉴 식별자", example = "2") - private Long menuId; + @Schema(description = "메뉴 식별자", example = "2") + private Long menuId; - @Schema(description = "메뉴 이름", example = "돈까스") - private String name; + @Schema(description = "메뉴 이름", example = "돈까스") + private String name; - public BriefMenuResponse(Menu menu) { - this.menuId = menu.getId(); - this.name = menu.getName(); - } + public BriefMenuResponse(Menu menu) { + this.menuId = menu.getId(); + this.name = menu.getName(); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java index 20eee35d..c96c6e19 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java @@ -1,26 +1,26 @@ package ssu.eatssu.domain.menu.presentation.dto.response; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; +import java.util.List; + @Getter @Schema(title = "카테고리 별 메뉴 목록 Response") public class CategoryWithMenusResponse { - @Schema(description = "카테고리명") - private final String category; + @Schema(description = "카테고리명") + private final String category; - @Schema(description = "카테고리의 메뉴 목록") - private final List menus; + @Schema(description = "카테고리의 메뉴 목록") + private final List menus; - public CategoryWithMenusResponse(String category, List menus) { - this.category = category; - this.menus = menus; - } + public CategoryWithMenusResponse(String category, List menus) { + this.category = category; + this.menus = menus; + } - public static CategoryWithMenusResponse of(String category, List menus) { - return new CategoryWithMenusResponse(category, menus); - } + public static CategoryWithMenusResponse of(String category, List menus) { + return new CategoryWithMenusResponse(category, menus); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java index 81544743..afdbd0df 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java @@ -1,7 +1,5 @@ package ssu.eatssu.domain.menu.presentation.dto.response; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; @@ -9,37 +7,39 @@ import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; +import java.util.List; + @Getter @NoArgsConstructor @AllArgsConstructor @Schema(title = "오늘의 식단 리스트 조회 Response") public class MealDetailResponse { - @Schema(description = "식단 식별자 mealId", example = "12") - private Long mealId; + @Schema(description = "식단 식별자 mealId", example = "12") + private Long mealId; - @Schema(description = "가격", example = "5000") - private Integer price; + @Schema(description = "가격", example = "5000") + private Integer price; - @Schema(description = "식단 평점(평점이 없으면 null)", example = "4.4") - private Double rating; + @Schema(description = "식단 평점(평점이 없으면 null)", example = "4.4") + private Double rating; - @Schema(description = "식단 속 메뉴 정보 리스트") - private List briefMenus; + @Schema(description = "식단 속 메뉴 정보 리스트") + private List briefMenus; - public static MealDetailResponse from(Meal meal, Double mainRating) { - List briefMenus = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(BriefMenuResponse::new) - .toList(); + public static MealDetailResponse from(Meal meal, Double mainRating) { + List briefMenus = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(BriefMenuResponse::new) + .toList(); - return new MealDetailResponse( - meal.getId(), - meal.getPrice(), - mainRating, - briefMenus - ); - } + return new MealDetailResponse( + meal.getId(), + meal.getPrice(), + mainRating, + briefMenus + ); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java index 70e3d5de..bd3f6e87 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java @@ -12,19 +12,19 @@ @Schema(title = "고정 메뉴 정보") public class MenuResponse { - @Schema(description = "메뉴 식별자", example = "2") - private Long menuId; + @Schema(description = "메뉴 식별자", example = "2") + private Long menuId; - @Schema(description = "메뉴 이름", example = "돈까스") - private String name; + @Schema(description = "메뉴 이름", example = "돈까스") + private String name; - @Schema(description = "가격", example = "5000") - private Integer price; + @Schema(description = "가격", example = "5000") + private Integer price; - @Schema(description = "메뉴 평점 (평점이 없으면 null) ", example = "4.4") - private Double rating; + @Schema(description = "메뉴 평점 (평점이 없으면 null) ", example = "4.4") + private Double rating; - public static MenuResponse from(Menu menu, Double rating) { - return new MenuResponse(menu.getId(), menu.getName(), menu.getPrice(), rating); - } + public static MenuResponse from(Menu menu, Double rating) { + return new MenuResponse(menu.getId(), menu.getName(), menu.getPrice(), rating); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java index ec1e7a53..8e61d251 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java @@ -1,28 +1,28 @@ package ssu.eatssu.domain.menu.presentation.dto.response; +import lombok.Getter; + import java.util.ArrayList; import java.util.List; -import lombok.Getter; - @Getter public class MenuRestaurantResponse { - private final List categoryMenuListCollection; + private final List categoryMenuListCollection; - private MenuRestaurantResponse(List categoryMenu) { - this.categoryMenuListCollection = categoryMenu; - } + private MenuRestaurantResponse(List categoryMenu) { + this.categoryMenuListCollection = categoryMenu; + } - public static MenuRestaurantResponse init() { - return new MenuRestaurantResponse(new ArrayList<>()); - } + public static MenuRestaurantResponse init() { + return new MenuRestaurantResponse(new ArrayList<>()); + } - public void add(CategoryWithMenusResponse categoryWithMenusResponse) { - this.categoryMenuListCollection.add(categoryWithMenusResponse); - } + public void add(CategoryWithMenusResponse categoryWithMenusResponse) { + this.categoryMenuListCollection.add(categoryWithMenusResponse); + } - public void addAll(List categoryWithMenusResponses) { - this.categoryMenuListCollection.addAll(categoryWithMenusResponses); - } + public void addAll(List categoryWithMenusResponses) { + this.categoryMenuListCollection.addAll(categoryWithMenusResponses); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java index 85480c5d..cc58ea3d 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java @@ -1,7 +1,5 @@ package ssu.eatssu.domain.menu.presentation.dto.response; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; @@ -9,21 +7,23 @@ import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; +import java.util.List; + @Getter @NoArgsConstructor @AllArgsConstructor @Schema(title = "식단 속 메뉴 정보 리스트") public class MenusInMealResponse { - @Schema(description = "식단 속 메뉴 목록", example = "[]") - private List briefMenus; + @Schema(description = "식단 속 메뉴 목록", example = "[]") + private List briefMenus; - public static MenusInMealResponse from(Meal meal) { - List menusInformation = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(BriefMenuResponse::new) - .toList(); + public static MenusInMealResponse from(Meal meal) { + List menusInformation = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(BriefMenuResponse::new) + .toList(); - return new MenusInMealResponse(menusInformation); - } + return new MenusInMealResponse(menusInformation); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java index 04f24f7a..d2206241 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java @@ -1,10 +1,13 @@ package ssu.eatssu.domain.menu.presentation.rest; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - -import java.util.Date; -import java.util.List; - +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -14,15 +17,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.menu.presentation.dto.request.CreateMealRequest; import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateWithPriceRequest; @@ -34,109 +28,114 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponse; +import java.util.Date; +import java.util.List; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; + @RestController @RequiredArgsConstructor @RequestMapping("/meals") @Tag(name = "Meal", description = "식단 API") public class MealController { - private final MealService mealService; + private final MealService mealService; - @Operation(summary = "식단 추가 [인증 토큰 필요 X]", description = """ - 식단을 추가하는 API 입니다.

- 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

- 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 추가 성공"), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("") - public BaseResponse createMeal( - @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, - @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, - @RequestBody CreateMealRequest mealCreateRequest) { - if (RestaurantType.isFixedType(restaurant)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } + @Operation(summary = "식단 추가 [인증 토큰 필요 X]", description = """ + 식단을 추가하는 API 입니다.

+ 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

+ 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 추가 성공"), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("") + public BaseResponse createMeal( + @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, + @RequestBody CreateMealRequest mealCreateRequest) { + if (RestaurantType.isFixedType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } - mealService.createMeal(date, restaurant, timePart, mealCreateRequest); - return BaseResponse.success(); - } + mealService.createMeal(date, restaurant, timePart, mealCreateRequest); + return BaseResponse.success(); + } - @Operation(summary = "식단 추가 [인증 토큰 필요 X]", description = """ - 식단을 추가하는 API 입니다.

- 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

- 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) - 가격을 외부에서 입력받습니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 추가 성공"), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/with-price") - public BaseResponse createMealWithPrice( - @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, - @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, - @RequestBody MealCreateWithPriceRequest request) { - if (RestaurantType.isFixedType(restaurant)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } + @Operation(summary = "식단 추가 [인증 토큰 필요 X]", description = """ + 식단을 추가하는 API 입니다.

+ 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

+ 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) + 가격을 외부에서 입력받습니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 추가 성공"), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/with-price") + public BaseResponse createMealWithPrice( + @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, + @RequestBody MealCreateWithPriceRequest request) { + if (RestaurantType.isFixedType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } - mealService.createMealWithPrice(date, restaurant, timePart, request); - return BaseResponse.success(); - } + mealService.createMealWithPrice(date, restaurant, timePart, request); + return BaseResponse.success(); + } - @Operation(summary = "변동 메뉴 식단 리스트 조회 [인증 토큰 필요 X]", description = """ - 변동 메뉴 식단 리스트를 조회하는 API 입니다. - 변동 메뉴 식당 (학생 식당, 도담, 기숙사 식당) 의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회합니다. - 일반적으로 학생식당과 도담의 경우 식단 여러 개가 조회되고 기숙사식당은 한 개만 조회됩니다.) - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "지원 하지 않는 식당 (고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("") - public BaseResponse> getMealDetail( - @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당 이름") @RequestParam("restaurant") Restaurant restaurant, - @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { + @Operation(summary = "변동 메뉴 식단 리스트 조회 [인증 토큰 필요 X]", description = """ + 변동 메뉴 식단 리스트를 조회하는 API 입니다. + 변동 메뉴 식당 (학생 식당, 도담, 기숙사 식당) 의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회합니다. + 일반적으로 학생식당과 도담의 경우 식단 여러 개가 조회되고 기숙사식당은 한 개만 조회됩니다.) + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "지원 하지 않는 식당 (고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("") + public BaseResponse> getMealDetail( + @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "식당 이름") @RequestParam("restaurant") Restaurant restaurant, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { - return BaseResponse.success( - mealService.getMealDetailsByDateAndRestaurantAndTimePart(date, restaurant, timePart)); - } + return BaseResponse.success( + mealService.getMealDetailsByDateAndRestaurantAndTimePart(date, restaurant, timePart)); + } - @Operation(summary = "식단 삭제 [인증 토큰 필요 X]", description = "식단을 삭제하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 삭제 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("/{mealId}") - public BaseResponse deleteMeal( - @Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { + @Operation(summary = "식단 삭제 [인증 토큰 필요 X]", description = "식단을 삭제하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 삭제 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("/{mealId}") + public BaseResponse deleteMeal( + @Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { - mealService.deleteByMealId(mealId); - return BaseResponse.success(); - } + mealService.deleteByMealId(mealId); + return BaseResponse.success(); + } - @Operation(summary = "메뉴 정보 리스트 조회 [인증 토큰 필요 X]", description = """ - 메뉴 정보 리스트를 조회하는 API 입니다.

- 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/{mealId}/menus-info") - public BaseResponse getMenusInMeal(@Parameter(description = "mealId") - @PathVariable("mealId") Long mealId) { - return BaseResponse.success(mealService.getMenusInMealByMealId(mealId)); - } + @Operation(summary = "메뉴 정보 리스트 조회 [인증 토큰 필요 X]", description = """ + 메뉴 정보 리스트를 조회하는 API 입니다.

+ 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/{mealId}/menus-info") + public BaseResponse getMenusInMeal(@Parameter(description = "mealId") + @PathVariable("mealId") Long mealId) { + return BaseResponse.success(mealService.getMenusInMealByMealId(mealId)); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java index 21abe326..7c125034 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java @@ -1,10 +1,5 @@ package ssu.eatssu.domain.menu.presentation.rest; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -12,6 +7,10 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.menu.presentation.dto.response.MenuRestaurantResponse; import ssu.eatssu.domain.menu.service.MenuService; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -23,24 +22,24 @@ @Tag(name = "Menu", description = "메뉴 API") public class MenuController { - private final MenuService menuService; + private final MenuService menuService; - @Operation(summary = "고정 메뉴 리스트 조회 [인증 토큰 필요 X]", - description = - """ - 고정 메뉴 리스트를 조회하는 API 입니다. - 메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 리스트를 조회합니다. - """ - ) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping - public BaseResponse getMenus( - @RequestParam("restaurant") Restaurant restaurant) { + @Operation(summary = "고정 메뉴 리스트 조회 [인증 토큰 필요 X]", + description = + """ + 고정 메뉴 리스트를 조회하는 API 입니다. + 메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 리스트를 조회합니다. + """ + ) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping + public BaseResponse getMenus( + @RequestParam("restaurant") Restaurant restaurant) { - return BaseResponse.success(menuService.getMenusByRestaurant(restaurant)); - } + return BaseResponse.success(menuService.getMenusByRestaurant(restaurant)); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java b/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java index 4756055c..b338e725 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java @@ -1,18 +1,17 @@ package ssu.eatssu.domain.menu.service; -import org.springframework.stereotype.Service; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; import ssu.eatssu.domain.menu.persistence.QuerydslMealRatingCalculator; @Service @RequiredArgsConstructor public class MealRatingService { - private final QuerydslMealRatingCalculator mealRatingCalculator; + private final QuerydslMealRatingCalculator mealRatingCalculator; - public Double getMainRatingAverage(Long mealId) { - return mealRatingCalculator.getMainRatingAverage(mealId); - } + public Double getMainRatingAverage(Long mealId) { + return mealRatingCalculator.getMainRatingAverage(mealId); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MealService.java b/src/main/java/ssu/eatssu/domain/menu/service/MealService.java index a858543c..4fc0859d 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MealService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MealService.java @@ -1,16 +1,9 @@ package ssu.eatssu.domain.menu.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - -import java.util.Date; -import java.util.List; -import java.util.Optional; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; @@ -26,129 +19,135 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.util.Date; +import java.util.List; +import java.util.Optional; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; + @Slf4j @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class MealService { - private final MealRepository mealRepository; - private final MealMenuRepository mealMenuRepository; - private final MealRatingService mealRatingService; - private final MenuService menuService; - - public MenusInMealResponse getMenusInMealByMealId(Long mealId) { - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); - - return MenusInMealResponse.from(meal); - } - - public List getMealDetailsByDateAndRestaurantAndTimePart( - Date date, Restaurant restaurant, TimePart timePart) { - - validateMealRestaurant(restaurant); - - List meals = findMealsByDateAndTimePartAndRestaurant(date, timePart, restaurant); - - return meals.stream() - .map(meal -> MealDetailResponse.from(meal, - mealRatingService.getMainRatingAverage(meal.getId()))) - .toList(); - } - - private List findMealsByDateAndTimePartAndRestaurant(Date date, TimePart timePart, - Restaurant restaurant) { - return mealRepository.findAllByDateAndTimePartAndRestaurant(date, timePart, restaurant); - } - - private void validateMealRestaurant(Restaurant restaurant) { - if (RestaurantType.isFixedType(restaurant)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } - } - - @Transactional - public Long createMeal(Date date, Restaurant restaurant, TimePart timePart, - CreateMealRequest request) { - return createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), null); - } - - @Transactional - public Long createMealWithPrice(Date date, Restaurant restaurant, TimePart timePart, - MealCreateWithPriceRequest request) { - return createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), request.price()); - } - - private Long createMealWithOptionalPrice(Date date, Restaurant restaurant, TimePart timePart, - List menuNames, Integer price) { - - Optional existingMealId = getExistingMealId(date, timePart, restaurant, menuNames); - if (existingMealId.isPresent()) { - return existingMealId.get(); // 이미 존재하는 식단의 ID를 반환 - } - - Meal meal = new Meal(date, timePart, restaurant, price); - Meal savedMeal = mealRepository.save(meal); - addMenusToMeal(meal, restaurant, menuNames); - - return savedMeal.getId(); - } - - private Optional getExistingMealId(Date date, TimePart timePart, Restaurant restaurant, - List menuNames) { - List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(date, timePart, restaurant); - - List sortedRequestMenuNames = menuNames.stream() - .sorted() - .toList(); - - return meals.stream() - .filter(meal -> { - List sortedMenuNames = meal.getMenuNames().stream() - .sorted() - .toList(); - return sortedMenuNames.equals(sortedRequestMenuNames); - }) - .findFirst() - .map(Meal::getId); - } - - private void addMenusToMeal(Meal meal, Restaurant restaurant, List menuNames) { - for (String menuName : menuNames) { - Menu menu = menuService.createOrGetMenu(menuName, restaurant); - createMealMenu(meal, menu); - } - } - - private void createMealMenu(Meal meal, Menu menu) { - MealMenu mealMenu = MealMenu.builder() - .menu(menu) - .meal(meal) - .build(); - - mealMenuRepository.save(mealMenu); - meal.addMealMenu(mealMenu); - } - - @Transactional - public void deleteByMealId(Long mealId) { - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); - - List menus = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .toList(); - - mealRepository.delete(meal); - mealRepository.flush(); - - deleteUnusedMenus(menus); - } - - private void deleteUnusedMenus(List menus) { - menus.stream() - .filter(menu -> menu.getMealMenus().isEmpty()) - .forEach(menuService::deleteMenu); - } + private final MealRepository mealRepository; + private final MealMenuRepository mealMenuRepository; + private final MealRatingService mealRatingService; + private final MenuService menuService; + + public MenusInMealResponse getMenusInMealByMealId(Long mealId) { + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + + return MenusInMealResponse.from(meal); + } + + public List getMealDetailsByDateAndRestaurantAndTimePart( + Date date, Restaurant restaurant, TimePart timePart) { + + validateMealRestaurant(restaurant); + + List meals = findMealsByDateAndTimePartAndRestaurant(date, timePart, restaurant); + + return meals.stream() + .map(meal -> MealDetailResponse.from(meal, + mealRatingService.getMainRatingAverage(meal.getId()))) + .toList(); + } + + private List findMealsByDateAndTimePartAndRestaurant(Date date, TimePart timePart, + Restaurant restaurant) { + return mealRepository.findAllByDateAndTimePartAndRestaurant(date, timePart, restaurant); + } + + private void validateMealRestaurant(Restaurant restaurant) { + if (RestaurantType.isFixedType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } + } + + @Transactional + public Long createMeal(Date date, Restaurant restaurant, TimePart timePart, + CreateMealRequest request) { + return createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), null); + } + + @Transactional + public Long createMealWithPrice(Date date, Restaurant restaurant, TimePart timePart, + MealCreateWithPriceRequest request) { + return createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), request.price()); + } + + private Long createMealWithOptionalPrice(Date date, Restaurant restaurant, TimePart timePart, + List menuNames, Integer price) { + + Optional existingMealId = getExistingMealId(date, timePart, restaurant, menuNames); + if (existingMealId.isPresent()) { + return existingMealId.get(); // 이미 존재하는 식단의 ID를 반환 + } + + Meal meal = new Meal(date, timePart, restaurant, price); + Meal savedMeal = mealRepository.save(meal); + addMenusToMeal(meal, restaurant, menuNames); + + return savedMeal.getId(); + } + + private Optional getExistingMealId(Date date, TimePart timePart, Restaurant restaurant, + List menuNames) { + List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(date, timePart, restaurant); + + List sortedRequestMenuNames = menuNames.stream() + .sorted() + .toList(); + + return meals.stream() + .filter(meal -> { + List sortedMenuNames = meal.getMenuNames().stream() + .sorted() + .toList(); + return sortedMenuNames.equals(sortedRequestMenuNames); + }) + .findFirst() + .map(Meal::getId); + } + + private void addMenusToMeal(Meal meal, Restaurant restaurant, List menuNames) { + for (String menuName : menuNames) { + Menu menu = menuService.createOrGetMenu(menuName, restaurant); + createMealMenu(meal, menu); + } + } + + private void createMealMenu(Meal meal, Menu menu) { + MealMenu mealMenu = MealMenu.builder() + .menu(menu) + .meal(meal) + .build(); + + mealMenuRepository.save(mealMenu); + meal.addMealMenu(mealMenu); + } + + @Transactional + public void deleteByMealId(Long mealId) { + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + + List menus = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .toList(); + + mealRepository.delete(meal); + mealRepository.flush(); + + deleteUnusedMenus(menus); + } + + private void deleteUnusedMenus(List menus) { + menus.stream() + .filter(menu -> menu.getMealMenus().isEmpty()) + .forEach(menuService::deleteMenu); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java index 454b15de..7a0fb173 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java @@ -1,17 +1,16 @@ package ssu.eatssu.domain.menu.service; -import org.springframework.stereotype.Service; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; import ssu.eatssu.domain.menu.persistence.QuerydslMenuRatingCalculator; @Service @RequiredArgsConstructor public class MenuRatingService { - private final QuerydslMenuRatingCalculator menuRatingCalculator; + private final QuerydslMenuRatingCalculator menuRatingCalculator; - public Double getMainRatingAverage(Long menuId) { - return menuRatingCalculator.getMainRatingAverage(menuId); - } + public Double getMainRatingAverage(Long menuId) { + return menuRatingCalculator.getMainRatingAverage(menuId); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index cd8eb7de..8b6a67e2 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -1,15 +1,10 @@ package ssu.eatssu.domain.menu.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - -import java.util.List; - -import org.jetbrains.annotations.NotNull; -import org.springframework.stereotype.Service; - import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; +import org.springframework.stereotype.Service; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.menu.persistence.MenuCategoryRepository; @@ -22,68 +17,72 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.util.List; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; + @Slf4j @Service @RequiredArgsConstructor @Transactional public class MenuService { - private final MenuRepository menuRepository; - private final MenuCategoryRepository menuCategoryRepository; - private final MenuRatingService menuRatingService; - - private static void validateMenuRestaurant(Restaurant restaurant) { - if (RestaurantType.isVariableType(restaurant)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } - } - - public MenuRestaurantResponse getMenusByRestaurant(Restaurant restaurant) { - validateMenuRestaurant(restaurant); - - List categories = findCategoriesByRestaurant(restaurant); - - MenuRestaurantResponse response = MenuRestaurantResponse.init(); - - for (MenuCategory category : categories) { - List menus = getMenuResponsesByRestaurantAndCategory(restaurant, - category); - response.add(CategoryWithMenusResponse.of(category.getName(), menus)); - } - - return response; - } - - private List findCategoriesByRestaurant(Restaurant restaurant) { - return menuCategoryRepository.findAllByRestaurant(restaurant); - } - - @NotNull - private List getMenuResponsesByRestaurantAndCategory(Restaurant restaurant, - MenuCategory category) { - return menuRepository.findAllByRestaurantAndCategory(restaurant, category) - .stream() - .filter(Menu::isContinued) - .map(menu -> MenuResponse.from(menu, - menuRatingService.getMainRatingAverage(menu.getId()))) - .toList(); - } - - @Transactional - public Menu createOrGetMenu(String menuName, Restaurant restaurant) { - return menuRepository.existsByNameAndRestaurant(menuName, restaurant) ? - findMenu(menuName, restaurant) : - menuRepository.save(Menu.createVariable(menuName, restaurant)); - } - - private Menu findMenu(String addMenuName, Restaurant restaurant) { - Menu menu = menuRepository.findByNameAndRestaurant(addMenuName, restaurant) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); - return menu; - } - - @Transactional - public void deleteMenu(Menu menu) { - menuRepository.delete(menu); - } + private final MenuRepository menuRepository; + private final MenuCategoryRepository menuCategoryRepository; + private final MenuRatingService menuRatingService; + + private static void validateMenuRestaurant(Restaurant restaurant) { + if (RestaurantType.isVariableType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } + } + + public MenuRestaurantResponse getMenusByRestaurant(Restaurant restaurant) { + validateMenuRestaurant(restaurant); + + List categories = findCategoriesByRestaurant(restaurant); + + MenuRestaurantResponse response = MenuRestaurantResponse.init(); + + for (MenuCategory category : categories) { + List menus = getMenuResponsesByRestaurantAndCategory(restaurant, + category); + response.add(CategoryWithMenusResponse.of(category.getName(), menus)); + } + + return response; + } + + private List findCategoriesByRestaurant(Restaurant restaurant) { + return menuCategoryRepository.findAllByRestaurant(restaurant); + } + + @NotNull + private List getMenuResponsesByRestaurantAndCategory(Restaurant restaurant, + MenuCategory category) { + return menuRepository.findAllByRestaurantAndCategory(restaurant, category) + .stream() + .filter(Menu::isContinued) + .map(menu -> MenuResponse.from(menu, + menuRatingService.getMainRatingAverage(menu.getId()))) + .toList(); + } + + @Transactional + public Menu createOrGetMenu(String menuName, Restaurant restaurant) { + return menuRepository.existsByNameAndRestaurant(menuName, restaurant) ? + findMenu(menuName, restaurant) : + menuRepository.save(Menu.createVariable(menuName, restaurant)); + } + + private Menu findMenu(String addMenuName, Restaurant restaurant) { + Menu menu = menuRepository.findByNameAndRestaurant(addMenuName, restaurant) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + return menu; + } + + @Transactional + public void deleteMenu(Menu menu) { + menuRepository.delete(menu); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java b/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java index d8c18dd7..78ff0766 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java @@ -1,38 +1,36 @@ package ssu.eatssu.domain.menu.service; -import org.springframework.stereotype.Repository; - import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; @Repository @RequiredArgsConstructor public class QuerydslMenuRatingCountProvider { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - private final QReview review = QReview.review; + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QReview review = QReview.review; - public Integer getReviewCountByStar(Long menuId, Integer star) { - return queryFactory - .select(review.count()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId), - reviewStarIs(star) - ) - .fetchOne().intValue(); - } + public Integer getReviewCountByStar(Long menuId, Integer star) { + return queryFactory + .select(review.count()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId), + reviewStarIs(star) + ) + .fetchOne().intValue(); + } - private BooleanExpression reviewStarIs(Integer star) { - return review.ratings.mainRating.eq(star); - } + private BooleanExpression reviewStarIs(Integer star) { + return review.ratings.mainRating.eq(star); + } - private BooleanExpression menuIdEq(Long menuId) { - return menu.id.eq(menuId); - } + private BooleanExpression menuIdEq(Long menuId) { + return menu.id.eq(menuId); + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java index cacfb46d..2d7e1957 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java @@ -1,7 +1,5 @@ package ssu.eatssu.domain.partnership.dto; -import java.time.LocalDate; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; @@ -9,41 +7,43 @@ import ssu.eatssu.domain.partnership.entity.PartnershipType; import ssu.eatssu.domain.partnership.entity.RestaurantType; +import java.time.LocalDate; + @Schema(title = "제휴 등록") @Getter @AllArgsConstructor public class CreatePartnershipRequest { - @Schema(description = "제휴 가게 이름", example = "먹돼지") - private String storeName; - @Schema(description = "제휴 종류(DRINK, DISCOUNT, SIDE, OTHER)", example = "DISCOUNT") - private PartnershipType partnershipType; - @Schema(description = "제휴 타겟 종류(college or department)", example = "college") - private String targetType; // college or department - @Schema(description = "제휴 타겟", example = "IT대") - private String targetName; - @Schema(description = "제휴 내용", example = "IT대 학생증은 10% 할인") - private String description; - @Schema(description = "제휴 시작 날짜", example = "2025-03-01") - private LocalDate startDate; - @Schema(description = "제휴 종료 날짜", example = "2025-07-30") - private LocalDate endDate; - @Schema(description = "제휴 가게 종류(RESTAURANT, CAFE)", example = "RESTAURANT") - private RestaurantType restaurantType; - @Schema(description = "경도(x축)", example = "126.9566592") - private Double longitude; - @Schema(description = "위도(y축)", example = "37.4949404") - private Double latitude; + @Schema(description = "제휴 가게 이름", example = "먹돼지") + private String storeName; + @Schema(description = "제휴 종류(DRINK, DISCOUNT, SIDE, OTHER)", example = "DISCOUNT") + private PartnershipType partnershipType; + @Schema(description = "제휴 타겟 종류(college or department)", example = "college") + private String targetType; // college or department + @Schema(description = "제휴 타겟", example = "IT대") + private String targetName; + @Schema(description = "제휴 내용", example = "IT대 학생증은 10% 할인") + private String description; + @Schema(description = "제휴 시작 날짜", example = "2025-03-01") + private LocalDate startDate; + @Schema(description = "제휴 종료 날짜", example = "2025-07-30") + private LocalDate endDate; + @Schema(description = "제휴 가게 종류(RESTAURANT, CAFE)", example = "RESTAURANT") + private RestaurantType restaurantType; + @Schema(description = "경도(x축)", example = "126.9566592") + private Double longitude; + @Schema(description = "위도(y축)", example = "37.4949404") + private Double latitude; - public Partnership toPartnershipEntity() { - return Partnership.builder() - .partnershipType(partnershipType) - .storeName(storeName) - .description(description) - .startDate(startDate) - .endDate(endDate) - .restaurantType(restaurantType) - .longitude(longitude) - .latitude(latitude) - .build(); - } + public Partnership toPartnershipEntity() { + return Partnership.builder() + .partnershipType(partnershipType) + .storeName(storeName) + .description(description) + .startDate(startDate) + .endDate(endDate) + .restaurantType(restaurantType) + .longitude(longitude) + .latitude(latitude) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java index 4e09634a..1931e3ef 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java @@ -1,54 +1,54 @@ package ssu.eatssu.domain.partnership.dto; -import java.time.LocalDate; -import java.util.List; -import java.util.stream.Collectors; - import lombok.AllArgsConstructor; import lombok.Getter; import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipType; import ssu.eatssu.domain.partnership.entity.RestaurantType; +import java.time.LocalDate; +import java.util.List; +import java.util.stream.Collectors; + @Getter @AllArgsConstructor public class PartnershipDetailResponse { - private Long id; - private PartnershipType partnershipType; - private String storeName; - private String description; - private LocalDate startDate; - private LocalDate endDate; - private RestaurantType restaurantType; - private Double longitude; - private Double latitude; - private List collegeNames; - private List departmentNames; - private int partnershipLikeCount; - private boolean likedByUser; + private Long id; + private PartnershipType partnershipType; + private String storeName; + private String description; + private LocalDate startDate; + private LocalDate endDate; + private RestaurantType restaurantType; + private Double longitude; + private Double latitude; + private List collegeNames; + private List departmentNames; + private int partnershipLikeCount; + private boolean likedByUser; - public static PartnershipDetailResponse fromEntity(Partnership partnership, boolean likedByUser) { - List collegeNames = partnership.getPartnershipColleges().stream() - .map(pc -> pc.getCollege().getName()) - .collect(Collectors.toList()); - List departmentNames = partnership.getPartnershipDepartments().stream() - .map(pc -> pc.getDepartment().getName()) - .collect(Collectors.toList()); + public static PartnershipDetailResponse fromEntity(Partnership partnership, boolean likedByUser) { + List collegeNames = partnership.getPartnershipColleges().stream() + .map(pc -> pc.getCollege().getName()) + .collect(Collectors.toList()); + List departmentNames = partnership.getPartnershipDepartments().stream() + .map(pc -> pc.getDepartment().getName()) + .collect(Collectors.toList()); - return new PartnershipDetailResponse( - partnership.getId(), - partnership.getPartnershipType(), - partnership.getStoreName(), - partnership.getDescription(), - partnership.getStartDate(), - partnership.getEndDate(), - partnership.getRestaurantType(), - partnership.getLongitude(), - partnership.getLatitude(), - collegeNames, - departmentNames, - partnership.getLikes().size(), - likedByUser - ); - } + return new PartnershipDetailResponse( + partnership.getId(), + partnership.getPartnershipType(), + partnership.getStoreName(), + partnership.getDescription(), + partnership.getStartDate(), + partnership.getEndDate(), + partnership.getRestaurantType(), + partnership.getLongitude(), + partnership.getLatitude(), + collegeNames, + departmentNames, + partnership.getLikes().size(), + likedByUser + ); + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java index af0d82d5..1f2fa966 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java @@ -1,50 +1,50 @@ package ssu.eatssu.domain.partnership.dto; -import java.time.LocalDate; -import java.util.List; -import java.util.stream.Collectors; - import lombok.AllArgsConstructor; import lombok.Getter; import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipType; import ssu.eatssu.domain.partnership.entity.RestaurantType; +import java.time.LocalDate; +import java.util.List; +import java.util.stream.Collectors; + @Getter @AllArgsConstructor public class PartnershipResponse { - private Long id; - private PartnershipType partnershipType; - private String storeName; - private String description; - private LocalDate startDate; - private LocalDate endDate; - private RestaurantType restaurantType; - private Double longitude; - private Double latitude; - private List collegeNames; - private List departmentNames; + private Long id; + private PartnershipType partnershipType; + private String storeName; + private String description; + private LocalDate startDate; + private LocalDate endDate; + private RestaurantType restaurantType; + private Double longitude; + private Double latitude; + private List collegeNames; + private List departmentNames; - public static PartnershipResponse fromEntity(Partnership partnership) { - List collegeNames = partnership.getPartnershipColleges().stream() - .map(pc -> pc.getCollege().getName()) - .collect(Collectors.toList()); - List departmentNames = partnership.getPartnershipDepartments().stream() - .map(pc -> pc.getDepartment().getName()) - .collect(Collectors.toList()); + public static PartnershipResponse fromEntity(Partnership partnership) { + List collegeNames = partnership.getPartnershipColleges().stream() + .map(pc -> pc.getCollege().getName()) + .collect(Collectors.toList()); + List departmentNames = partnership.getPartnershipDepartments().stream() + .map(pc -> pc.getDepartment().getName()) + .collect(Collectors.toList()); - return new PartnershipResponse( - partnership.getId(), - partnership.getPartnershipType(), - partnership.getStoreName(), - partnership.getDescription(), - partnership.getStartDate(), - partnership.getEndDate(), - partnership.getRestaurantType(), - partnership.getLongitude(), - partnership.getLatitude(), - collegeNames, - departmentNames - ); - } + return new PartnershipResponse( + partnership.getId(), + partnership.getPartnershipType(), + partnership.getStoreName(), + partnership.getDescription(), + partnership.getStartDate(), + partnership.getEndDate(), + partnership.getRestaurantType(), + partnership.getLongitude(), + partnership.getLatitude(), + collegeNames, + departmentNames + ); + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java index 75f037c7..504b5826 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java @@ -1,11 +1,5 @@ package ssu.eatssu.domain.partnership.entity; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.annotations.Where; - import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -20,6 +14,11 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import org.hibernate.annotations.Where; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; @Entity @Getter @@ -28,46 +27,46 @@ @AllArgsConstructor @Where(clause = "end_date >= CURRENT_DATE") public class Partnership { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "partnership_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "partnership_id") + private Long id; - @Enumerated(EnumType.STRING) - @Column(name = "partnership_type", nullable = false) - private PartnershipType partnershipType; + @Enumerated(EnumType.STRING) + @Column(name = "partnership_type", nullable = false) + private PartnershipType partnershipType; - @Column(name = "store_name", nullable = false) - private String storeName; + @Column(name = "store_name", nullable = false) + private String storeName; - @Column(name = "description", nullable = false) - private String description; + @Column(name = "description", nullable = false) + private String description; - @Column(name = "start_date", nullable = false) - private LocalDate startDate; + @Column(name = "start_date", nullable = false) + private LocalDate startDate; - @Column(name = "end_date", nullable = false) - private LocalDate endDate; + @Column(name = "end_date", nullable = false) + private LocalDate endDate; - @Enumerated(EnumType.STRING) - @Column(name = "restaurant_type", nullable = false) - private RestaurantType restaurantType; + @Enumerated(EnumType.STRING) + @Column(name = "restaurant_type", nullable = false) + private RestaurantType restaurantType; - @Column(name = "longitude", nullable = false) - private Double longitude; // 경도 == x축 + @Column(name = "longitude", nullable = false) + private Double longitude; // 경도 == x축 - @Column(name = "latitude", nullable = false) - private Double latitude; // 위도 == y축 + @Column(name = "latitude", nullable = false) + private Double latitude; // 위도 == y축 - @Builder.Default - @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) - private List partnershipColleges = new ArrayList<>(); + @Builder.Default + @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) + private List partnershipColleges = new ArrayList<>(); - @Builder.Default - @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) - private List partnershipDepartments = new ArrayList<>(); + @Builder.Default + @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) + private List partnershipDepartments = new ArrayList<>(); - @Builder.Default - @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) - private List likes = new ArrayList<>(); + @Builder.Default + @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) + private List likes = new ArrayList<>(); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java index eb7de49e..2ba00666 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java @@ -17,21 +17,21 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class PartnershipCollege { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "partnership_college_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "partnership_college_id") + private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "partnership_id") - private Partnership partnership; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "partnership_id") + private Partnership partnership; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "college_id") - private College college; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "college_id") + private College college; - public PartnershipCollege(Partnership partnership, College college) { - this.partnership = partnership; - this.college = college; - } + public PartnershipCollege(Partnership partnership, College college) { + this.partnership = partnership; + this.college = college; + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java index b3bb887b..8b9c243b 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java @@ -17,21 +17,21 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class PartnershipDepartment { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "partnership_college_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "partnership_college_id") + private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "partnership_id") - private Partnership partnership; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "partnership_id") + private Partnership partnership; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "department_id") - private Department department; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "department_id") + private Department department; - public PartnershipDepartment(Partnership partnership, Department department) { - this.partnership = partnership; - this.department = department; - } + public PartnershipDepartment(Partnership partnership, Department department) { + this.partnership = partnership; + this.department = department; + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java index 12283630..210b4ac2 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java @@ -17,21 +17,21 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class PartnershipLike { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "partnership_like_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "partnership_like_id") + private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") - private User user; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "partnership_id") - private Partnership partnership; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "partnership_id") + private Partnership partnership; - public PartnershipLike(User user, Partnership partnership) { - this.user = user; - this.partnership = partnership; - } + public PartnershipLike(User user, Partnership partnership) { + this.user = user; + this.partnership = partnership; + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java index fdf72878..9d91ab0e 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java @@ -4,14 +4,14 @@ @Getter public enum PartnershipType { - DRINK("음료"), - DISCOUNT("할인"), - SIDE("사이드"), - OTHER("기타"); + DRINK("음료"), + DISCOUNT("할인"), + SIDE("사이드"), + OTHER("기타"); - private final String type; + private final String type; - PartnershipType(String type) { - this.type = type; - } + PartnershipType(String type) { + this.type = type; + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java index 0de32722..d849580c 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java @@ -1,12 +1,12 @@ package ssu.eatssu.domain.partnership.entity; public enum RestaurantType { - RESTAURANT("음식점"), - CAFE("카페"); + RESTAURANT("음식점"), + CAFE("카페"); - private final String type; + private final String type; - RestaurantType(String type) { - this.type = type; - } + RestaurantType(String type) { + this.type = type; + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java index f107da58..041de913 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java @@ -1,16 +1,15 @@ package ssu.eatssu.domain.partnership.persistence; -import java.util.List; -import java.util.Optional; - import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipLike; import ssu.eatssu.domain.user.entity.User; +import java.util.List; +import java.util.Optional; + public interface PartnershipLikeRepository extends JpaRepository { - Optional findByUserAndPartnership(User user, Partnership partnership); + Optional findByUserAndPartnership(User user, Partnership partnership); - List findAllByUser(User user); + List findAllByUser(User user); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java index 896eab1d..120c7a24 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java @@ -1,22 +1,21 @@ package ssu.eatssu.domain.partnership.persistence; -import java.util.List; - import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; - import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.user.department.entity.College; import ssu.eatssu.domain.user.department.entity.Department; +import java.util.List; + public interface PartnershipRepository extends JpaRepository { - @Query("SELECT DISTINCT p FROM Partnership p " + - "LEFT JOIN p.partnershipColleges pc " + - "LEFT JOIN pc.college c " + - "LEFT JOIN p.partnershipDepartments pd " + - "LEFT JOIN pd.department d " + - "WHERE (c = :college OR d = :department OR (c IS NOT NULL AND c.name = '총학'))") - List findRelevantPartnerships(@Param("college") College college, - @Param("department") Department department); + @Query("SELECT DISTINCT p FROM Partnership p " + + "LEFT JOIN p.partnershipColleges pc " + + "LEFT JOIN pc.college c " + + "LEFT JOIN p.partnershipDepartments pd " + + "LEFT JOIN pd.department d " + + "WHERE (c = :college OR d = :department OR (c IS NOT NULL AND c.name = '총학'))") + List findRelevantPartnerships(@Param("college") College college, + @Param("department") Department department); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java index a3534c2f..bf9103b9 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java +++ b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java @@ -1,15 +1,5 @@ package ssu.eatssu.domain.partnership.presentation; -import java.util.List; - -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -17,6 +7,13 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.CreatePartnershipRequest; import ssu.eatssu.domain.partnership.dto.PartnershipDetailResponse; @@ -24,62 +21,64 @@ import ssu.eatssu.domain.partnership.service.PartnershipService; import ssu.eatssu.global.handler.response.BaseResponse; +import java.util.List; + @RestController @RequestMapping("/partnerships") @RequiredArgsConstructor @Tag(name = "Partnership", description = "제휴 API") public class PartnershipController { - private final PartnershipService partnershipService; + private final PartnershipService partnershipService; - @Operation(summary = "제휴 등록", description = "제휴를 등록하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "제휴 등록 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 대학", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 학과", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @PostMapping - public BaseResponse createPartnership(@RequestBody CreatePartnershipRequest request) { - partnershipService.createPartnership(request); - return BaseResponse.success(); - } + @Operation(summary = "제휴 등록", description = "제휴를 등록하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "제휴 등록 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 대학", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 학과", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @PostMapping + public BaseResponse createPartnership(@RequestBody CreatePartnershipRequest request) { + partnershipService.createPartnership(request); + return BaseResponse.success(); + } - @Operation(summary = "전체 제휴 조회", description = "전체 제휴를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "제휴 조회 성공"), - }) - @GetMapping - public BaseResponse> getAllPartnerships() { - return BaseResponse.success(partnershipService.getAllPartnerships()); - } + @Operation(summary = "전체 제휴 조회", description = "전체 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "제휴 조회 성공"), + }) + @GetMapping + public BaseResponse> getAllPartnerships() { + return BaseResponse.success(partnershipService.getAllPartnerships()); + } - @Operation(summary = "개별 제휴 조회", description = "개별 제휴를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "제휴 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 제휴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/{partnershipId}") - public BaseResponse getPartnership( - @PathVariable Long partnershipId, - @AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(partnershipService.getPartnership(partnershipId, userDetails)); - } + @Operation(summary = "개별 제휴 조회", description = "개별 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "제휴 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 제휴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + @GetMapping("/{partnershipId}") + public BaseResponse getPartnership( + @PathVariable Long partnershipId, + @AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(partnershipService.getPartnership(partnershipId, userDetails)); + } - @Operation(summary = "제휴 찜 등록하기/취소하기", description = "제휴 찜 등록하기/취소하기(토글) API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "제휴 찜 등록/취소 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 제휴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - }) - @PostMapping("/{partnershipId}/like") - public BaseResponse togglePartnershipLike( - @PathVariable Long partnershipId, - @AuthenticationPrincipal CustomUserDetails userDetails) { - partnershipService.togglePartnershipLike(partnershipId, userDetails); - return BaseResponse.success(); - } + @Operation(summary = "제휴 찜 등록하기/취소하기", description = "제휴 찜 등록하기/취소하기(토글) API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "제휴 찜 등록/취소 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 제휴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + @PostMapping("/{partnershipId}/like") + public BaseResponse togglePartnershipLike( + @PathVariable Long partnershipId, + @AuthenticationPrincipal CustomUserDetails userDetails) { + partnershipService.togglePartnershipLike(partnershipId, userDetails); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java index 38558e62..c02bcebd 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -1,15 +1,8 @@ package ssu.eatssu.domain.partnership.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.CreatePartnershipRequest; import ssu.eatssu.domain.partnership.dto.PartnershipDetailResponse; @@ -28,101 +21,112 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.INVALID_TARGET_TYPE; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.MISSING_USER_DEPARTMENT; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_COLLEGE; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_DEPARTMENT; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_PARTNERSHIP; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; + @Service @RequiredArgsConstructor public class PartnershipService { - private final PartnershipRepository partnershipRepository; - private final CollegeRepository collegeRepository; - private final DepartmentRepository departmentRepository; - private final UserRepository userRepository; - private final PartnershipLikeRepository partnershipLikeRepository; - - @Transactional - public void createPartnership(CreatePartnershipRequest request) { - Partnership partnership = request.toPartnershipEntity(); - - if ("college".equalsIgnoreCase(request.getTargetType())) { - College college = collegeRepository.findByName(request.getTargetName()) - .orElseThrow(() -> new BaseException(NOT_FOUND_COLLEGE)); - PartnershipCollege partnershipCollege = new PartnershipCollege(partnership, college); - partnership.getPartnershipColleges().add(partnershipCollege); - } else if ("department".equalsIgnoreCase(request.getTargetType())) { - Department department = departmentRepository.findByName(request.getTargetName()) - .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); - PartnershipDepartment partnershipDepartment = new PartnershipDepartment(partnership, department); - partnership.getPartnershipDepartments().add(partnershipDepartment); - } else { - throw new BaseException(INVALID_TARGET_TYPE); - } - partnershipRepository.save(partnership); - } - - public List getAllPartnerships() { - List partnerships = partnershipRepository.findAll(); - return partnerships.stream().map(PartnershipResponse::fromEntity) - .collect(Collectors.toList()); - } - - public PartnershipDetailResponse getPartnership(Long partnershipId, CustomUserDetails userDetails) { - Partnership partnership = partnershipRepository.findById(partnershipId) - .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); - - boolean likedByUser = false; - if (userDetails != null) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - likedByUser = partnershipLikeRepository.findByUserAndPartnership(user, partnership).isPresent(); - } - - return PartnershipDetailResponse.fromEntity(partnership, likedByUser); - } - - @Transactional - public void togglePartnershipLike(Long partnershipId, CustomUserDetails userDetails) { - Partnership partnership = partnershipRepository.findById(partnershipId) - .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Optional optionalPartnershipLike = partnershipLikeRepository.findByUserAndPartnership(user, - partnership); - if (optionalPartnershipLike.isPresent()) { - PartnershipLike partnershipLike = optionalPartnershipLike.get(); - partnership.getLikes().remove(partnershipLike); - partnershipLikeRepository.delete(partnershipLike); - } else { - PartnershipLike partnershipLike = new PartnershipLike(user, partnership); - partnership.getLikes().add(partnershipLike); - partnershipLikeRepository.save(partnershipLike); - } - } - - public List getUserLikedPartnerships(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - List likes = partnershipLikeRepository.findAllByUser(user); - return likes - .stream() - .map(PartnershipLike::getPartnership) - .map(PartnershipResponse::fromEntity) - .collect(Collectors.toList()); - } - - public List getUserDepartmentPartnerships(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Department department = user.getDepartment(); - if (department == null) { - throw new BaseException(MISSING_USER_DEPARTMENT); - } - College college = department.getCollege(); - - return partnershipRepository - .findRelevantPartnerships(college, department) - .stream() - .map(PartnershipResponse::fromEntity) - .collect(Collectors.toList()); - } + private final PartnershipRepository partnershipRepository; + private final CollegeRepository collegeRepository; + private final DepartmentRepository departmentRepository; + private final UserRepository userRepository; + private final PartnershipLikeRepository partnershipLikeRepository; + + @Transactional + public void createPartnership(CreatePartnershipRequest request) { + Partnership partnership = request.toPartnershipEntity(); + + if ("college".equalsIgnoreCase(request.getTargetType())) { + College college = collegeRepository.findByName(request.getTargetName()) + .orElseThrow(() -> new BaseException(NOT_FOUND_COLLEGE)); + PartnershipCollege partnershipCollege = new PartnershipCollege(partnership, college); + partnership.getPartnershipColleges().add(partnershipCollege); + } else if ("department".equalsIgnoreCase(request.getTargetType())) { + Department department = departmentRepository.findByName(request.getTargetName()) + .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); + PartnershipDepartment partnershipDepartment = new PartnershipDepartment(partnership, department); + partnership.getPartnershipDepartments().add(partnershipDepartment); + } else { + throw new BaseException(INVALID_TARGET_TYPE); + } + partnershipRepository.save(partnership); + } + + public List getAllPartnerships() { + List partnerships = partnershipRepository.findAll(); + return partnerships.stream().map(PartnershipResponse::fromEntity) + .collect(Collectors.toList()); + } + + public PartnershipDetailResponse getPartnership(Long partnershipId, CustomUserDetails userDetails) { + Partnership partnership = partnershipRepository.findById(partnershipId) + .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); + + boolean likedByUser = false; + if (userDetails != null) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + likedByUser = partnershipLikeRepository.findByUserAndPartnership(user, partnership).isPresent(); + } + + return PartnershipDetailResponse.fromEntity(partnership, likedByUser); + } + + @Transactional + public void togglePartnershipLike(Long partnershipId, CustomUserDetails userDetails) { + Partnership partnership = partnershipRepository.findById(partnershipId) + .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Optional optionalPartnershipLike = partnershipLikeRepository.findByUserAndPartnership(user, + partnership); + if (optionalPartnershipLike.isPresent()) { + PartnershipLike partnershipLike = optionalPartnershipLike.get(); + partnership.getLikes().remove(partnershipLike); + partnershipLikeRepository.delete(partnershipLike); + } else { + PartnershipLike partnershipLike = new PartnershipLike(user, partnership); + partnership.getLikes().add(partnershipLike); + partnershipLikeRepository.save(partnershipLike); + } + } + + public List getUserLikedPartnerships(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + List likes = partnershipLikeRepository.findAllByUser(user); + return likes + .stream() + .map(PartnershipLike::getPartnership) + .map(PartnershipResponse::fromEntity) + .collect(Collectors.toList()); + } + + public List getUserDepartmentPartnerships(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Department department = user.getDepartment(); + if (department == null) { + throw new BaseException(MISSING_USER_DEPARTMENT); + } + College college = department.getCollege(); + + return partnershipRepository + .findRelevantPartnerships(college, department) + .stream() + .map(PartnershipResponse::fromEntity) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java index e3060aee..11572cd5 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java @@ -11,125 +11,125 @@ */ public class JpaLoadCollectionRatingCalculator implements RatingCalculator { - // 식단에 포함된 메뉴들의 평점 별 리뷰 개수 계산 - public ReviewRatingCount mealRatingCount(Meal meal) { - ReviewRating.resetAll(); - - meal.getMealMenus().forEach(mealMenu -> mealMenu.getMenu().getReviews().calculateReviewRatings()); - - return ReviewRating.toResponse(); - } - - // 각 메뉴의 평점 별 개수 계산 - public ReviewRatingCount menuRatingCount(Menu menu) { - ReviewRating.resetAll(); - - menu.getReviews().calculateReviewRatings(); - - return ReviewRating.toResponse(); - } - - // 식단 평균 평점 세트 계산 - public RatingAverages mealAverageRatings(Meal meal) { - long totalReviewCount = mealTotalReviewCount(meal); - - if (totalReviewCount == 0) - return new RatingAverages(null, null, null); - - return RatingAverages.builder() - .mainRating(averageRating(mealTotalMainRating(meal), totalReviewCount)) - .amountRating(averageRating(mealTotalAmountRating(meal), totalReviewCount)) - .tasteRating(averageRating(mealTotalTasteRating(meal), totalReviewCount)) - .build(); - } - - // 메뉴 평균 평점 세트 계산 - public RatingAverages menuAverageRatings(Menu menu) { - int totalReviewCount = menu.getTotalReviewCount(); - - if (totalReviewCount == 0) { - return new RatingAverages(null, null, null); - } - - return RatingAverages.builder() - .mainRating(averageRating(menuTotalMainRating(menu), totalReviewCount)) - .amountRating(averageRating(menuTotalAmountRating(menu), totalReviewCount)) - .tasteRating(averageRating(menuTotalTasteRating(menu), totalReviewCount)) - .build(); - } - - // 식단 메인 평점 평균 계산 - public Double mealAverageMainRating(Meal meal) { - long totalReviewCount = mealTotalReviewCount(meal); - - if (totalReviewCount == 0) { - return null; - } - - return averageRating(mealTotalMainRating(meal), totalReviewCount); - } - - // 메뉴 메인 평점 평균 계산 - public Double menuAverageMainRating(Menu menu) { - if (menu.getReviews().size() == 0) { - return null; - } - - return averageRating(menuTotalMainRating(menu), menu.getReviews().size()); - } - - // 식단 총 리뷰 개수 - public long mealTotalReviewCount(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .mapToLong(menu -> menu.getReviews().size()).sum(); - } - - // 평균 평점 계산 - public Double averageRating(Integer totalRating, long totalReviewCount) { - if (totalRating == null || totalReviewCount == 0) { - return null; - } - return totalRating / (double)totalReviewCount; - } - - // 식단 메인 평점 총합 - public Integer mealTotalMainRating(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(menu -> menu.getReviews().getTotalMainRating()) - .reduce(null, this::sum); - } - - // 식단 양 평점 총합 - public Integer mealTotalAmountRating(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(menu -> menu.getReviews().getTotalAmountRating()) - .reduce(null, this::sum); - } - - // 식단 맛 평점 총합 - public Integer mealTotalTasteRating(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(menu -> menu.getReviews().getTotalTasteRating()) - .reduce(null, this::sum); - } - - // 메뉴 메인 평점 총합 - public Integer menuTotalMainRating(Menu menu) { - return menu.getReviews().getTotalMainRating(); - } - - // 메뉴 양 평점 총합 - public Integer menuTotalAmountRating(Menu menu) { - return menu.getReviews().getTotalAmountRating(); - } - - // 메뉴 맛 평점 총합 - public Integer menuTotalTasteRating(Menu menu) { - return menu.getReviews().getTotalTasteRating(); - } + // 식단에 포함된 메뉴들의 평점 별 리뷰 개수 계산 + public ReviewRatingCount mealRatingCount(Meal meal) { + ReviewRating.resetAll(); + + meal.getMealMenus().forEach(mealMenu -> mealMenu.getMenu().getReviews().calculateReviewRatings()); + + return ReviewRating.toResponse(); + } + + // 각 메뉴의 평점 별 개수 계산 + public ReviewRatingCount menuRatingCount(Menu menu) { + ReviewRating.resetAll(); + + menu.getReviews().calculateReviewRatings(); + + return ReviewRating.toResponse(); + } + + // 식단 평균 평점 세트 계산 + public RatingAverages mealAverageRatings(Meal meal) { + long totalReviewCount = mealTotalReviewCount(meal); + + if (totalReviewCount == 0) + return new RatingAverages(null, null, null); + + return RatingAverages.builder() + .mainRating(averageRating(mealTotalMainRating(meal), totalReviewCount)) + .amountRating(averageRating(mealTotalAmountRating(meal), totalReviewCount)) + .tasteRating(averageRating(mealTotalTasteRating(meal), totalReviewCount)) + .build(); + } + + // 메뉴 평균 평점 세트 계산 + public RatingAverages menuAverageRatings(Menu menu) { + int totalReviewCount = menu.getTotalReviewCount(); + + if (totalReviewCount == 0) { + return new RatingAverages(null, null, null); + } + + return RatingAverages.builder() + .mainRating(averageRating(menuTotalMainRating(menu), totalReviewCount)) + .amountRating(averageRating(menuTotalAmountRating(menu), totalReviewCount)) + .tasteRating(averageRating(menuTotalTasteRating(menu), totalReviewCount)) + .build(); + } + + // 식단 메인 평점 평균 계산 + public Double mealAverageMainRating(Meal meal) { + long totalReviewCount = mealTotalReviewCount(meal); + + if (totalReviewCount == 0) { + return null; + } + + return averageRating(mealTotalMainRating(meal), totalReviewCount); + } + + // 메뉴 메인 평점 평균 계산 + public Double menuAverageMainRating(Menu menu) { + if (menu.getReviews().size() == 0) { + return null; + } + + return averageRating(menuTotalMainRating(menu), menu.getReviews().size()); + } + + // 식단 총 리뷰 개수 + public long mealTotalReviewCount(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .mapToLong(menu -> menu.getReviews().size()).sum(); + } + + // 평균 평점 계산 + public Double averageRating(Integer totalRating, long totalReviewCount) { + if (totalRating == null || totalReviewCount == 0) { + return null; + } + return totalRating / (double) totalReviewCount; + } + + // 식단 메인 평점 총합 + public Integer mealTotalMainRating(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(menu -> menu.getReviews().getTotalMainRating()) + .reduce(null, this::sum); + } + + // 식단 양 평점 총합 + public Integer mealTotalAmountRating(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(menu -> menu.getReviews().getTotalAmountRating()) + .reduce(null, this::sum); + } + + // 식단 맛 평점 총합 + public Integer mealTotalTasteRating(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(menu -> menu.getReviews().getTotalTasteRating()) + .reduce(null, this::sum); + } + + // 메뉴 메인 평점 총합 + public Integer menuTotalMainRating(Menu menu) { + return menu.getReviews().getTotalMainRating(); + } + + // 메뉴 양 평점 총합 + public Integer menuTotalAmountRating(Menu menu) { + return menu.getReviews().getTotalAmountRating(); + } + + // 메뉴 맛 평점 총합 + public Integer menuTotalTasteRating(Menu menu) { + return menu.getReviews().getTotalTasteRating(); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java index 85f5056c..c5fadaac 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java @@ -1,7 +1,5 @@ package ssu.eatssu.domain.rating.entity; -import java.util.Collection; - import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -10,6 +8,8 @@ import ssu.eatssu.domain.review.dto.ReviewRatingCount; import ssu.eatssu.domain.review.repository.ReviewRepository; +import java.util.Collection; + /** * Jpa projection 을 이용하여 구현한 클래스입니다. * 더미 데이터 @@ -20,78 +20,78 @@ @RequiredArgsConstructor public class JpaProjectionRatingCalculator implements RatingCalculator { - private final ReviewRepository reviewRepository; + private final ReviewRepository reviewRepository; - @Override - public ReviewRatingCount mealRatingCount(Meal meal) { - ReviewRating.resetAll(); + @Override + public ReviewRatingCount mealRatingCount(Meal meal) { + ReviewRating.resetAll(); - Collection mealRatings = reviewRepository.findByMenu_MealMenus_Meal(meal, RatingsDto.class); - mealRatings.forEach(ratings -> ReviewRating.fromValue(ratings.getMainRating()).incrementCount()); + Collection mealRatings = reviewRepository.findByMenu_MealMenus_Meal(meal, RatingsDto.class); + mealRatings.forEach(ratings -> ReviewRating.fromValue(ratings.getMainRating()).incrementCount()); - return ReviewRating.toResponse(); - } + return ReviewRating.toResponse(); + } - @Override - public ReviewRatingCount menuRatingCount(Menu menu) { - return null; - } + @Override + public ReviewRatingCount menuRatingCount(Menu menu) { + return null; + } - @Override - public RatingAverages mealAverageRatings(Meal meal) { - long totalReviewCount = mealTotalReviewCount(meal); + @Override + public RatingAverages mealAverageRatings(Meal meal) { + long totalReviewCount = mealTotalReviewCount(meal); - if (totalReviewCount == 0) - return new RatingAverages(null, null, null); + if (totalReviewCount == 0) + return new RatingAverages(null, null, null); - Collection mealRatings = reviewRepository.findByMenu_MealMenus_Meal(meal, RatingsDto.class); + Collection mealRatings = reviewRepository.findByMenu_MealMenus_Meal(meal, RatingsDto.class); - Integer totalMainRating = mealRatings.stream().mapToInt(RatingsDto::getMainRating).sum(); - Integer totalTasteRating = mealRatings.stream().mapToInt(RatingsDto::getTasteRating).sum(); - Integer totalAmountRating = mealRatings.stream().mapToInt(RatingsDto::getAmountRating).sum(); + Integer totalMainRating = mealRatings.stream().mapToInt(RatingsDto::getMainRating).sum(); + Integer totalTasteRating = mealRatings.stream().mapToInt(RatingsDto::getTasteRating).sum(); + Integer totalAmountRating = mealRatings.stream().mapToInt(RatingsDto::getAmountRating).sum(); - return RatingAverages.builder() - .mainRating(averageRating(totalMainRating, totalReviewCount)) - .tasteRating(averageRating(totalTasteRating, totalReviewCount)) - .amountRating(averageRating(totalAmountRating, totalReviewCount)) - .build(); - } + return RatingAverages.builder() + .mainRating(averageRating(totalMainRating, totalReviewCount)) + .tasteRating(averageRating(totalTasteRating, totalReviewCount)) + .amountRating(averageRating(totalAmountRating, totalReviewCount)) + .build(); + } - @Override - public RatingAverages menuAverageRatings(Menu menu) { - return null; - } + @Override + public RatingAverages menuAverageRatings(Menu menu) { + return null; + } - @Override - public Double mealAverageMainRating(Meal meal) { - long totalReviewCount = mealTotalReviewCount(meal); + @Override + public Double mealAverageMainRating(Meal meal) { + long totalReviewCount = mealTotalReviewCount(meal); - if (totalReviewCount == 0) { - return null; - } + if (totalReviewCount == 0) { + return null; + } - return averageRating(mealTotalMainRating(meal), totalReviewCount); - } + return averageRating(mealTotalMainRating(meal), totalReviewCount); + } - @Override - public Double menuAverageMainRating(Menu menu) { - return null; - } + @Override + public Double menuAverageMainRating(Menu menu) { + return null; + } - @Override - public long mealTotalReviewCount(Meal meal) { - return reviewRepository.countByMenu_MealMenus_Meal(meal); - } + @Override + public long mealTotalReviewCount(Meal meal) { + return reviewRepository.countByMenu_MealMenus_Meal(meal); + } - public Double averageRating(Integer totalRating, long totalReviewCount) { - if (totalRating == null || totalReviewCount == 0) { - return null; - } - return totalRating / (double)totalReviewCount; - } + public Double averageRating(Integer totalRating, long totalReviewCount) { + if (totalRating == null || totalReviewCount == 0) { + return null; + } + return totalRating / (double) totalReviewCount; + } - public Integer mealTotalMainRating(Meal meal) { - return null; - } + public Integer mealTotalMainRating(Meal meal) { + return null; + } } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java index e2ed40e7..a7b66327 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java @@ -7,37 +7,37 @@ public interface RatingCalculator { - // 식단에 포함된 메뉴들의 평점 별 리뷰 개수 계산 - ReviewRatingCount mealRatingCount(Meal meal); - - // 각 메뉴의 평점 별 개수 계산 - ReviewRatingCount menuRatingCount(Menu menu); - - // 식단 평균 평점 세트 계산 - RatingAverages mealAverageRatings(Meal meal); - - // 메뉴 평균 평점 세트 계산 - RatingAverages menuAverageRatings(Menu menu); - - // 식단 메인 평점 평균 계산 - Double mealAverageMainRating(Meal meal); - - // 메뉴 메인 평점 평균 계산 - Double menuAverageMainRating(Menu menu); - - // 식단 총 리뷰 개수 - long mealTotalReviewCount(Meal meal); - - /** - * 리뷰 평접 총합 계산용 - * nullable 의 합 계산을 위한 메소드입니다. - */ - default Integer sum(Integer a, Integer b) { - if (a == null) - return b; - if (b == null) - return a; - return a + b; - } + // 식단에 포함된 메뉴들의 평점 별 리뷰 개수 계산 + ReviewRatingCount mealRatingCount(Meal meal); + + // 각 메뉴의 평점 별 개수 계산 + ReviewRatingCount menuRatingCount(Menu menu); + + // 식단 평균 평점 세트 계산 + RatingAverages mealAverageRatings(Meal meal); + + // 메뉴 평균 평점 세트 계산 + RatingAverages menuAverageRatings(Menu menu); + + // 식단 메인 평점 평균 계산 + Double mealAverageMainRating(Meal meal); + + // 메뉴 메인 평점 평균 계산 + Double menuAverageMainRating(Menu menu); + + // 식단 총 리뷰 개수 + long mealTotalReviewCount(Meal meal); + + /** + * 리뷰 평접 총합 계산용 + * nullable 의 합 계산을 위한 메소드입니다. + */ + default Integer sum(Integer a, Integer b) { + if (a == null) + return b; + if (b == null) + return a; + return a + b; + } } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java index 06fe244e..e39bca62 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java @@ -5,31 +5,31 @@ public class RatingCountMap { - private Map ratingCountMap; - - public RatingCountMap() { - this.ratingCountMap = new HashMap<>(); - this.init(); - - } - - private void init() { - this.ratingCountMap.put(1, 0); - this.ratingCountMap.put(2, 0); - this.ratingCountMap.put(3, 0); - this.ratingCountMap.put(4, 0); - this.ratingCountMap.put(5, 0); - } - - public void setRatingCount(Integer rating, Integer count) { - this.ratingCountMap.put(rating, count); - } - - public void merge(RatingCountMap map) { - for (Map.Entry entry : map.ratingCountMap.entrySet()) { - Integer currentCount = this.ratingCountMap.getOrDefault(entry.getKey(), 0); - Integer newCount = entry.getValue(); - this.ratingCountMap.put(entry.getKey(), currentCount + newCount); - } - } + private Map ratingCountMap; + + public RatingCountMap() { + this.ratingCountMap = new HashMap<>(); + this.init(); + + } + + private void init() { + this.ratingCountMap.put(1, 0); + this.ratingCountMap.put(2, 0); + this.ratingCountMap.put(3, 0); + this.ratingCountMap.put(4, 0); + this.ratingCountMap.put(5, 0); + } + + public void setRatingCount(Integer rating, Integer count) { + this.ratingCountMap.put(rating, count); + } + + public void merge(RatingCountMap map) { + for (Map.Entry entry : map.ratingCountMap.entrySet()) { + Integer currentCount = this.ratingCountMap.getOrDefault(entry.getKey(), 0); + Integer newCount = entry.getValue(); + this.ratingCountMap.put(entry.getKey(), currentCount + newCount); + } + } } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java b/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java index 47e4282f..99bd8253 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java @@ -10,22 +10,22 @@ @Embeddable public class Ratings { - private Integer mainRating; + private Integer mainRating; - private Integer amountRating; + private Integer amountRating; - private Integer tasteRating; + private Integer tasteRating; - private Ratings(Integer mainRating, Integer amountRating, Integer tasteRating) { - Assert.isTrue(mainRating >= 0 && mainRating <= 5, "mainRating must be between 0 and 5"); - Assert.isTrue(amountRating >= 0 && amountRating <= 5, "amountRating must be between 0 and 5"); - Assert.isTrue(tasteRating >= 0 && tasteRating <= 5, "tasteRating must be between 0 and 5"); - this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; - } + private Ratings(Integer mainRating, Integer amountRating, Integer tasteRating) { + Assert.isTrue(mainRating >= 0 && mainRating <= 5, "mainRating must be between 0 and 5"); + Assert.isTrue(amountRating >= 0 && amountRating <= 5, "amountRating must be between 0 and 5"); + Assert.isTrue(tasteRating >= 0 && tasteRating <= 5, "tasteRating must be between 0 and 5"); + this.mainRating = mainRating; + this.amountRating = amountRating; + this.tasteRating = tasteRating; + } - public static Ratings of(Integer mainRating, Integer amountRating, Integer tasteRating) { - return new Ratings(mainRating, amountRating, tasteRating); - } + public static Ratings of(Integer mainRating, Integer amountRating, Integer tasteRating) { + return new Ratings(mainRating, amountRating, tasteRating); + } } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java b/src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java index acc013f0..611e0074 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java @@ -3,54 +3,54 @@ import ssu.eatssu.domain.review.dto.ReviewRatingCount; public enum ReviewRating { - RATING_ONE(1), - RATING_TWO(2), - RATING_THREE(3), - RATING_FOUR(4), - RATING_FIVE(5); - - private final int value; - private int count; - - ReviewRating(int value) { - this.value = value; - this.count = 0; - } - - public static void resetAll() { - for (ReviewRating RATING : ReviewRating.values()) { - RATING.resetCount(); - } - } - - public static ReviewRating fromValue(int value) { - for (ReviewRating RATING : ReviewRating.values()) { - if (RATING.value == value) { - return RATING; - } - } - throw new IllegalArgumentException("Invalid ratings value: " + value); - } - - public static ReviewRatingCount toResponse() { - return new ReviewRatingCount( - RATING_ONE.getCount(), - RATING_TWO.getCount(), - RATING_THREE.getCount(), - RATING_FOUR.getCount(), - RATING_FIVE.getCount() - ); - } - - public void incrementCount() { - this.count++; - } - - public int getCount() { - return count; - } - - private void resetCount() { - this.count = 0; - } + RATING_ONE(1), + RATING_TWO(2), + RATING_THREE(3), + RATING_FOUR(4), + RATING_FIVE(5); + + private final int value; + private int count; + + ReviewRating(int value) { + this.value = value; + this.count = 0; + } + + public static void resetAll() { + for (ReviewRating RATING : ReviewRating.values()) { + RATING.resetCount(); + } + } + + public static ReviewRating fromValue(int value) { + for (ReviewRating RATING : ReviewRating.values()) { + if (RATING.value == value) { + return RATING; + } + } + throw new IllegalArgumentException("Invalid ratings value: " + value); + } + + public static ReviewRatingCount toResponse() { + return new ReviewRatingCount( + RATING_ONE.getCount(), + RATING_TWO.getCount(), + RATING_THREE.getCount(), + RATING_FOUR.getCount(), + RATING_FIVE.getCount() + ); + } + + public void incrementCount() { + this.count++; + } + + public int getCount() { + return count; + } + + private void resetCount() { + this.count = 0; + } } diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java b/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java index ee168a77..6ddd6800 100644 --- a/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java @@ -6,13 +6,13 @@ @Schema(title = "리뷰 신고하기") public record ReportCreateRequest( - @Schema(description = "신고할 리뷰 id", example = "4") - Long reviewId, + @Schema(description = "신고할 리뷰 id", example = "4") + Long reviewId, - @Schema(description = "신고 타입", example = "BAD_WORD") - ReportType reportType, + @Schema(description = "신고 타입", example = "BAD_WORD") + ReportType reportType, - @Schema(description = "신고 내용", example = "음란성, 욕설 등 부적절한 내용") - String content) { + @Schema(description = "신고 내용", example = "음란성, 욕설 등 부적절한 내용") + String content) { } diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java index 1bdae80f..387d2427 100644 --- a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java @@ -6,14 +6,14 @@ @Getter @Schema(title = "리뷰 신고 사유") public class ReportTypeInformation { - @Schema(description = "신고 사유 타입") - private String type; + @Schema(description = "신고 사유 타입") + private String type; - @Schema(description = "신고 사유 설명") - private String description; + @Schema(description = "신고 사유 설명") + private String description; - public ReportTypeInformation(String type, String description) { - this.type = type; - this.description = description; - } + public ReportTypeInformation(String type, String description) { + this.type = type; + this.description = description; + } } diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java index e0c2eb18..b2967172 100644 --- a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java @@ -1,25 +1,25 @@ package ssu.eatssu.domain.report.dto; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import ssu.eatssu.domain.report.entity.ReportType; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + @Getter @Schema(title = "리뷰 신고 사유 목록 Response") public class ReportTypeList { - @Schema(description = "리뷰 신고 사유 목록") - private final List response = new ArrayList<>(); + @Schema(description = "리뷰 신고 사유 목록") + private final List response = new ArrayList<>(); - public static ReportTypeList get() { - ReportTypeList reportTypeList = new ReportTypeList(); - Arrays.stream(ReportType.values()) - .forEach(reportType -> reportTypeList.response.add( - new ReportTypeInformation(reportType.name(), reportType.getDescription()))); - return reportTypeList; - } + public static ReportTypeList get() { + ReportTypeList reportTypeList = new ReportTypeList(); + Arrays.stream(ReportType.values()) + .forEach(reportType -> reportTypeList.response.add( + new ReportTypeInformation(reportType.name(), reportType.getDescription()))); + return reportTypeList; + } } diff --git a/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java b/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java index 67b8af13..1d7a746e 100644 --- a/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java +++ b/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java @@ -1,30 +1,29 @@ package ssu.eatssu.domain.report.entity; -import java.util.Arrays; - import com.fasterxml.jackson.annotation.JsonCreator; - import lombok.Getter; +import java.util.Arrays; + @Getter public enum ReportStatus { - PENDING("대기 중"), - IN_PROGRESS("진행 중"), - RESOLVED("해결됨"), - REJECTED("거절됨"), - FALSE_REPORT("거짓 신고"); + PENDING("대기 중"), + IN_PROGRESS("진행 중"), + RESOLVED("해결됨"), + REJECTED("거절됨"), + FALSE_REPORT("거짓 신고"); - private final String description; + private final String description; - ReportStatus(final String description) { - this.description = description; - } + ReportStatus(final String description) { + this.description = description; + } - @JsonCreator - public static ReportStatus from(final String description) { - return Arrays.stream(ReportStatus.values()) - .filter(v -> v.getDescription().equals(description)) - .findAny() - .orElseThrow(IllegalArgumentException::new); - } + @JsonCreator + public static ReportStatus from(final String description) { + return Arrays.stream(ReportStatus.values()) + .filter(v -> v.getDescription().equals(description)) + .findAny() + .orElseThrow(IllegalArgumentException::new); + } } diff --git a/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java b/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java index f029c7bf..7b6e3c07 100644 --- a/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java +++ b/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java @@ -1,28 +1,27 @@ package ssu.eatssu.domain.report.entity; -import java.util.Locale; - import com.fasterxml.jackson.annotation.JsonCreator; - import lombok.Getter; +import java.util.Locale; + @Getter public enum ReportType { - NO_ASSOCIATE_CONTENT("메뉴와 관련 없는 내용"), - IMPROPER_CONTENT("음란성, 욕설 등 부적절한 내용"), - IMPROPER_ADVERTISEMENT("부적절한 홍보 및 광고"), - COPY("리뷰 취지에 맞지 않는 행동(복사글 등)"), - COPYRIGHT("저작권 도용 의심(사진 등)"), - EXTRA("기타 (하단 내용 작성)"); + NO_ASSOCIATE_CONTENT("메뉴와 관련 없는 내용"), + IMPROPER_CONTENT("음란성, 욕설 등 부적절한 내용"), + IMPROPER_ADVERTISEMENT("부적절한 홍보 및 광고"), + COPY("리뷰 취지에 맞지 않는 행동(복사글 등)"), + COPYRIGHT("저작권 도용 의심(사진 등)"), + EXTRA("기타 (하단 내용 작성)"); - private final String description; + private final String description; - ReportType(String description) { - this.description = description; - } + ReportType(String description) { + this.description = description; + } - @JsonCreator - public static ReportType from(final String name) { - return ReportType.valueOf(name.toUpperCase(Locale.ROOT)); - } + @JsonCreator + public static ReportType from(final String name) { + return ReportType.valueOf(name.toUpperCase(Locale.ROOT)); + } } diff --git a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java index 17694962..ccec0ac1 100644 --- a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java +++ b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java @@ -1,12 +1,5 @@ package ssu.eatssu.domain.report.presentation; -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -14,6 +7,12 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.report.dto.ReportCreateRequest; import ssu.eatssu.domain.report.dto.ReportTypeList; @@ -30,31 +29,31 @@ @Tag(name = "Report", description = "신고 API") public class ReportController { - private final ReportService reportService; - private final SlackService slackService; + private final ReportService reportService; + private final SlackService slackService; - @Operation(summary = "리뷰 신고 사유 종류 조회", description = "리뷰 신고 사유 종류를 조회하는 API 입니다.") - @GetMapping("/types") - public BaseResponse getReportType() { - ReportTypeList reportTypeList = reportService.getReportType(); - return BaseResponse.success(reportTypeList); - } + @Operation(summary = "리뷰 신고 사유 종류 조회", description = "리뷰 신고 사유 종류를 조회하는 API 입니다.") + @GetMapping("/types") + public BaseResponse getReportType() { + ReportTypeList reportTypeList = reportService.getReportType(); + return BaseResponse.success(reportTypeList); + } - /** - * 리뷰 신고 - */ - @Operation(summary = "리뷰 신고하기", description = "리뷰를 신고하는 API 입니다.") - @PostMapping("") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 신고 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - public BaseResponse reportReview(@RequestBody ReportCreateRequest createReportRequest, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - Report report = reportService.reportReview(customUserDetails, createReportRequest); - slackService.sendSlackMessage(SlackMessageFormat.sendReport(report), - SlackChannel.REPORT_CHANNEL); - return BaseResponse.success(); - } + /** + * 리뷰 신고 + */ + @Operation(summary = "리뷰 신고하기", description = "리뷰를 신고하는 API 입니다.") + @PostMapping("") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 신고 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + public BaseResponse reportReview(@RequestBody ReportCreateRequest createReportRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + Report report = reportService.reportReview(customUserDetails, createReportRequest); + slackService.sendSlackMessage(SlackMessageFormat.sendReport(report), + SlackChannel.REPORT_CHANNEL); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java b/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java index 3cb1a9e9..58d0a066 100644 --- a/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java +++ b/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.report.repository; import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.review.entity.Report; public interface ReportRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java index d701996b..f0d7050b 100644 --- a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java +++ b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java @@ -1,11 +1,8 @@ package ssu.eatssu.domain.report.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.report.dto.ReportCreateRequest; import ssu.eatssu.domain.report.dto.ReportTypeList; @@ -18,27 +15,30 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; + @RequiredArgsConstructor @Service @Transactional public class ReportService { - private final ReviewRepository reviewRepository; - private final UserRepository userRepository; - private final ReportRepository reportRepository; + private final ReviewRepository reviewRepository; + private final UserRepository userRepository; + private final ReportRepository reportRepository; - public Report reportReview(CustomUserDetails userDetails, ReportCreateRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + public Report reportReview(CustomUserDetails userDetails, ReportCreateRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Review review = reviewRepository.findById(request.reviewId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + Review review = reviewRepository.findById(request.reviewId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - Report report = Report.create(user, review, request, ReportStatus.PENDING); - return reportRepository.save(report); - } + Report report = Report.create(user, review, request, ReportStatus.PENDING); + return reportRepository.save(report); + } - public ReportTypeList getReportType() { - return ReportTypeList.get(); - } + public ReportTypeList getReportType() { + return ReportTypeList.get(); + } } diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index 5a7f15bf..8ac11487 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -1,35 +1,34 @@ package ssu.eatssu.domain.restaurant.entity; -import java.util.Arrays; - import com.fasterxml.jackson.annotation.JsonCreator; - import lombok.Getter; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.util.Arrays; + @Getter public enum Restaurant { - DODAM("DODAM", 6000), - DORMITORY("DORMITORY", 5500), - FOOD_COURT("FOOD_COURT", null), - SNACK_CORNER("SNACK_CORNER", null), - HAKSIK("HAKSIK", 5000); - - private final String restaurantName; - private final Integer restaurantPrice; - - Restaurant(String restaurantName, Integer price) { - this.restaurantName = restaurantName; - this.restaurantPrice = price; - } - - @JsonCreator - public static Restaurant from(String restaurantName) { - return Arrays.stream(Restaurant.values()) - .filter(r -> r.getRestaurantName().equals(restaurantName)) - .findAny() - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); - } + DODAM("DODAM", 6000), + DORMITORY("DORMITORY", 5500), + FOOD_COURT("FOOD_COURT", null), + SNACK_CORNER("SNACK_CORNER", null), + HAKSIK("HAKSIK", 5000); + + private final String restaurantName; + private final Integer restaurantPrice; + + Restaurant(String restaurantName, Integer price) { + this.restaurantName = restaurantName; + this.restaurantPrice = price; + } + + @JsonCreator + public static Restaurant from(String restaurantName) { + return Arrays.stream(Restaurant.values()) + .filter(r -> r.getRestaurantName().equals(restaurantName)) + .findAny() + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java index 3d93bcf8..5e771e9b 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java @@ -1,28 +1,28 @@ package ssu.eatssu.domain.restaurant.entity; +import lombok.Getter; + import java.util.Arrays; import java.util.List; -import lombok.Getter; - @Getter public enum RestaurantType { - FIXED("고정메뉴 식당", Arrays.asList(Restaurant.FOOD_COURT, Restaurant.SNACK_CORNER)), - VARIABLE("변동메뉴 식당", Arrays.asList(Restaurant.DODAM, Restaurant.DORMITORY, Restaurant.HAKSIK)); + FIXED("고정메뉴 식당", Arrays.asList(Restaurant.FOOD_COURT, Restaurant.SNACK_CORNER)), + VARIABLE("변동메뉴 식당", Arrays.asList(Restaurant.DODAM, Restaurant.DORMITORY, Restaurant.HAKSIK)); - private final String description; - private final List restaurants; + private final String description; + private final List restaurants; - RestaurantType(String description, List restaurants) { - this.description = description; - this.restaurants = restaurants; - } + RestaurantType(String description, List restaurants) { + this.description = description; + this.restaurants = restaurants; + } - public static boolean isFixedType(Restaurant restaurant) { - return FIXED.restaurants.contains(restaurant); - } + public static boolean isFixedType(Restaurant restaurant) { + return FIXED.restaurants.contains(restaurant); + } - public static boolean isVariableType(Restaurant restaurant) { - return VARIABLE.restaurants.contains(restaurant); - } + public static boolean isVariableType(Restaurant restaurant) { + return VARIABLE.restaurants.contains(restaurant); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java index bc9ec02e..15da5c9b 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java @@ -1,8 +1,5 @@ package ssu.eatssu.domain.review.dto; -import java.util.List; -import java.util.stream.Collectors; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; @@ -11,32 +8,35 @@ import ssu.eatssu.domain.review.entity.ReviewImage; import ssu.eatssu.domain.user.entity.User; +import java.util.List; +import java.util.stream.Collectors; + @Schema(title = "리뷰 작성") @Getter @AllArgsConstructor public class CreateMealReviewRequest { - @Schema(description = "식단 식별자", example = "123") - private Long mealId; - @Schema(description = "평점", example = "4") - private Integer rating; - private List menuLikes; - @Schema(description = "한줄평", example = "맛있어용") - private String content; - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imageUrls; + @Schema(description = "식단 식별자", example = "123") + private Long mealId; + @Schema(description = "평점", example = "4") + private Integer rating; + private List menuLikes; + @Schema(description = "한줄평", example = "맛있어용") + private String content; + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; - public Review toReviewEntity(User user, Meal meal) { - return Review.builder() - .user(user) - .meal(meal) - .content(content) - .rating(rating) - .build(); - } + public Review toReviewEntity(User user, Meal meal) { + return Review.builder() + .user(user) + .meal(meal) + .content(content) + .rating(rating) + .build(); + } - public List createReviewImages(Review review) { - return imageUrls.stream() - .map(imageUrl -> new ReviewImage(review, imageUrl)) - .collect(Collectors.toList()); - } + public List createReviewImages(Review review) { + return imageUrls.stream() + .map(imageUrl -> new ReviewImage(review, imageUrl)) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java index b15f081d..0d695be0 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java @@ -1,10 +1,5 @@ package ssu.eatssu.domain.review.dto; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; @@ -13,90 +8,96 @@ import ssu.eatssu.domain.review.entity.ReviewMenuLike; import ssu.eatssu.domain.user.util.UserAliasUtil; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + @AllArgsConstructor @Builder @Schema(title = "리뷰 상세") @Getter public class MealReviewResponse { - @Schema(description = "리뷰 식별자", example = "123") - Long reviewId; - - @Schema(description = "작성자 식별자", example = "123") - Long writerId; - - @Schema(description = "본인 글인지 여부(true/false)", example = "true") - Boolean isWriter; - - @Schema(description = "작성자 닉네임", example = "숭시리시리") - private String writerNickname; - - @Schema(description = "평점", example = "4") - private Integer rating; - - @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") - private LocalDate writtenAt; - - @Schema(description = "리뷰 내용", example = "맛있습니당") - private String content; - - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imageUrls; - - @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") - private List likedMenuNames; - - @Schema(description = "본인이 이 리뷰에 좋아요를 눌렀는지 여부(true/false)", example = "true") - private Boolean isLikedByUser; - - @Schema(description = "리뷰 좋아요 개수", example = "10") - private Integer likeCount; - - @Schema(description = "별칭", example = "미슈테리 미식가") - private String alias; - - public static MealReviewResponse from(Review review, Long userId) { - List imageUrls = new ArrayList<>(); - review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); - - List likedMenuNames = review.getMenuLikes().stream() - .filter(ReviewMenuLike::getIsLike) - .map(like -> like.getMenu().getName()) - .collect(Collectors.toList()); - - boolean isLikedByUser = (userId != null) && review.getReviewLikes().stream() - .anyMatch(like -> like.getUser().getId().equals(userId)); - - String alias = (review.getUser() != null) ? UserAliasUtil.getUserAlias(review.getUser(), - review.getUser().getReviews()) : "알 수 없음"; - - MealReviewResponseBuilder builder = MealReviewResponse.builder() - .reviewId(review.getId()) - .rating(review.getRating()) - .writtenAt(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .imageUrls(imageUrls) - .likedMenuNames(likedMenuNames) - .isLikedByUser(isLikedByUser) - .likeCount(review.getReviewLikes().size()) - .alias(alias); - - if (review.getUser() == null) { - return builder.writerId(null) - .writerNickname("알 수 없음") - .isWriter(false) - .build(); - } - - if (review.getUser().getId().equals(userId)) { - return builder.writerId(review.getUser().getId()) - .writerNickname(review.getUser().getNickname()) - .isWriter(true) - .build(); - } - - return builder.writerId(review.getUser().getId()) - .writerNickname(review.getUser().getNickname()) - .isWriter(false) - .build(); - } + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; + + @Schema(description = "작성자 식별자", example = "123") + Long writerId; + + @Schema(description = "본인 글인지 여부(true/false)", example = "true") + Boolean isWriter; + + @Schema(description = "작성자 닉네임", example = "숭시리시리") + private String writerNickname; + + @Schema(description = "평점", example = "4") + private Integer rating; + + @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") + private LocalDate writtenAt; + + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; + + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; + + @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") + private List likedMenuNames; + + @Schema(description = "본인이 이 리뷰에 좋아요를 눌렀는지 여부(true/false)", example = "true") + private Boolean isLikedByUser; + + @Schema(description = "리뷰 좋아요 개수", example = "10") + private Integer likeCount; + + @Schema(description = "별칭", example = "미슈테리 미식가") + private String alias; + + public static MealReviewResponse from(Review review, Long userId) { + List imageUrls = new ArrayList<>(); + review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); + + List likedMenuNames = review.getMenuLikes().stream() + .filter(ReviewMenuLike::getIsLike) + .map(like -> like.getMenu().getName()) + .collect(Collectors.toList()); + + boolean isLikedByUser = (userId != null) && review.getReviewLikes().stream() + .anyMatch(like -> like.getUser().getId().equals(userId)); + + String alias = (review.getUser() != null) ? UserAliasUtil.getUserAlias(review.getUser(), + review.getUser() + .getReviews()) : "알 수 없음"; + + MealReviewResponseBuilder builder = MealReviewResponse.builder() + .reviewId(review.getId()) + .rating(review.getRating()) + .writtenAt(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imageUrls(imageUrls) + .likedMenuNames(likedMenuNames) + .isLikedByUser(isLikedByUser) + .likeCount(review.getReviewLikes().size()) + .alias(alias); + + if (review.getUser() == null) { + return builder.writerId(null) + .writerNickname("알 수 없음") + .isWriter(false) + .build(); + } + + if (review.getUser().getId().equals(userId)) { + return builder.writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(true) + .build(); + } + + return builder.writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(false) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java index b7c9e5ab..05ba5a92 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java @@ -1,46 +1,46 @@ package ssu.eatssu.domain.review.dto; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import java.util.List; + @Schema(title = "식단 리뷰 정보(평점 등등)") @Getter @AllArgsConstructor @Builder public class MealReviewsResponse implements ReviewInformationResponse { - @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") - private List menuNames; + @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") + private List menuNames; - @Schema(description = "리뷰 개수", example = "15") - private Long totalReviewCount; + @Schema(description = "리뷰 개수", example = "15") + private Long totalReviewCount; - @Schema(description = "평점-메인", example = "4.4") - private Double mainRating; + @Schema(description = "평점-메인", example = "4.4") + private Double mainRating; - @Schema(description = "평점-양", example = "4.4") - private Double amountRating; + @Schema(description = "평점-양", example = "4.4") + private Double amountRating; - @Schema(description = "평점-맛", example = "4.4") - private Double tasteRating; + @Schema(description = "평점-맛", example = "4.4") + private Double tasteRating; - @Schema(description = "평점 별 갯수") - private ReviewRatingCount reviewRatingCount; + @Schema(description = "평점 별 갯수") + private ReviewRatingCount reviewRatingCount; - public static MealReviewsResponse of(Long totalReviewCount, List menuNames, - RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { + public static MealReviewsResponse of(Long totalReviewCount, List menuNames, + RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { - return MealReviewsResponse.builder() - .menuNames(menuNames) - .mainRating(ratingAverages.mainRating()) - .amountRating(ratingAverages.amountRating()) - .tasteRating(ratingAverages.tasteRating()) - .totalReviewCount(totalReviewCount) - .reviewRatingCount(reviewRatingCount) - .build(); - } + return MealReviewsResponse.builder() + .menuNames(menuNames) + .mainRating(ratingAverages.mainRating()) + .amountRating(ratingAverages.amountRating()) + .tasteRating(ratingAverages.tasteRating()) + .totalReviewCount(totalReviewCount) + .reviewRatingCount(reviewRatingCount) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java index ff19e98c..33b314f9 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java @@ -1,44 +1,43 @@ package ssu.eatssu.domain.review.dto; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.menu.entity.Meal; + +import java.util.List; @Schema(title = "식단 리뷰 정보V2(평점 등등)") @Getter @AllArgsConstructor @Builder -public class MealReviewsV2Response implements ReviewInformationResponse{ - @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") - private List menuNames; +public class MealReviewsV2Response implements ReviewInformationResponse { + @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") + private List menuNames; - @Schema(description = "리뷰 개수", example = "15") - private Long totalReviewCount; + @Schema(description = "리뷰 개수", example = "15") + private Long totalReviewCount; - @Schema(description = "평점-메인", example = "4.4") - private Double mainRating; + @Schema(description = "평점-메인", example = "4.4") + private Double mainRating; - @Schema(description = "좋아요 개수", example = "4.4") - private Integer likeCount; + @Schema(description = "좋아요 개수", example = "4.4") + private Integer likeCount; - @Schema(description = "싫어요 개수", example = "4.4") - private Integer unlikeCount; + @Schema(description = "싫어요 개수", example = "4.4") + private Integer unlikeCount; - @Schema(description = "평점 별 갯수") - private ReviewRatingCount reviewRatingCount; + @Schema(description = "평점 별 갯수") + private ReviewRatingCount reviewRatingCount; - public static MealReviewsV2Response of(Long totalReviewCount, List menuNames, - RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { + public static MealReviewsV2Response of(Long totalReviewCount, List menuNames, + RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { - return MealReviewsV2Response.builder() - .menuNames(menuNames) - .mainRating(ratingAverages.mainRating()) - .totalReviewCount(totalReviewCount) - .reviewRatingCount(reviewRatingCount) - .build(); - } + return MealReviewsV2Response.builder() + .menuNames(menuNames) + .mainRating(ratingAverages.mainRating()) + .totalReviewCount(totalReviewCount) + .reviewRatingCount(reviewRatingCount) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java index 593cdc4d..1042f12c 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java @@ -8,8 +8,8 @@ @Getter @AllArgsConstructor public class MenuLikeRequest { - @Schema(description = "메뉴 식별자", example = "123") - private Long menuId; - @Schema(description = "좋아요 or 싫어요", example = "좋아요 : true or 싫어요 : false") - private Boolean isLike; + @Schema(description = "메뉴 식별자", example = "123") + private Long menuId; + @Schema(description = "좋아요 or 싫어요", example = "좋아요 : true or 싫어요 : false") + private Boolean isLike; } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java index c94bdc44..77056b7a 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java @@ -12,34 +12,34 @@ @Builder public class MenuReviewResponse implements ReviewInformationResponse { - @Schema(description = "메뉴 이름", example = "바질토마토베이글") - private String menuName; - - @Schema(description = "리뷰 개수", example = "15") - private Integer totalReviewCount; - - @Schema(description = "평점-메인", example = "4.4") - private Double mainRating; - - @Schema(description = "평점-양", example = "4.4") - private Double amountRating; - - @Schema(description = "평점-맛", example = "4.4") - private Double tasteRating; - - @Schema(description = "평점 별 갯수") - private ReviewRatingCount reviewRatingCount; - - public static MenuReviewResponse of(Menu menu, - RatingAverages ratingAverages, - ReviewRatingCount reviewRatingCount) { - return MenuReviewResponse.builder() - .menuName(menu.getName()) - .totalReviewCount(menu.getTotalReviewCount()) - .mainRating(ratingAverages.mainRating()) - .amountRating(ratingAverages.amountRating()) - .tasteRating(ratingAverages.tasteRating()) - .reviewRatingCount(reviewRatingCount) - .build(); - } + @Schema(description = "메뉴 이름", example = "바질토마토베이글") + private String menuName; + + @Schema(description = "리뷰 개수", example = "15") + private Integer totalReviewCount; + + @Schema(description = "평점-메인", example = "4.4") + private Double mainRating; + + @Schema(description = "평점-양", example = "4.4") + private Double amountRating; + + @Schema(description = "평점-맛", example = "4.4") + private Double tasteRating; + + @Schema(description = "평점 별 갯수") + private ReviewRatingCount reviewRatingCount; + + public static MenuReviewResponse of(Menu menu, + RatingAverages ratingAverages, + ReviewRatingCount reviewRatingCount) { + return MenuReviewResponse.builder() + .menuName(menu.getName()) + .totalReviewCount(menu.getTotalReviewCount()) + .mainRating(ratingAverages.mainRating()) + .amountRating(ratingAverages.amountRating()) + .tasteRating(ratingAverages.tasteRating()) + .reviewRatingCount(reviewRatingCount) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java index 15c753a8..cad2981a 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java @@ -1,47 +1,49 @@ package ssu.eatssu.domain.review.dto; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; +import java.util.List; + @Schema(title = "메뉴 리뷰 정보V2(평점 등등)") @Getter @AllArgsConstructor @Builder public class MenuReviewsV2Response implements ReviewInformationResponse { - @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") - private List menuNames; - - @Schema(description = "리뷰 개수", example = "15") - private Long totalReviewCount; - - @Schema(description = "평점-메인", example = "4.4") - private Double mainRating; - - @Schema(description = "좋아요 개수", example = "4.4") - private Integer likeCount; - - @Schema(description = "싫어요 개수", example = "4.4") - private Integer unlikeCount; - - @Schema(description = "평점 별 갯수") - private ReviewRatingCount reviewRatingCount; - - public static MenuReviewsV2Response of(Long totalReviewCount, List menuNames, - RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount,Menu menu) { - - return MenuReviewsV2Response.builder() - .menuNames(menuNames) - .mainRating(ratingAverages.mainRating()) - .likeCount(menu.getLikeCount()) - .unlikeCount(menu.getUnlikeCount()) - .totalReviewCount(totalReviewCount) - .reviewRatingCount(reviewRatingCount) - .build(); - } + @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") + private List menuNames; + + @Schema(description = "리뷰 개수", example = "15") + private Long totalReviewCount; + + @Schema(description = "평점-메인", example = "4.4") + private Double mainRating; + + @Schema(description = "좋아요 개수", example = "4.4") + private Integer likeCount; + + @Schema(description = "싫어요 개수", example = "4.4") + private Integer unlikeCount; + + @Schema(description = "평점 별 갯수") + private ReviewRatingCount reviewRatingCount; + + public static MenuReviewsV2Response of(Long totalReviewCount, + List menuNames, + RatingAverages ratingAverages, + ReviewRatingCount reviewRatingCount, + Menu menu) { + + return MenuReviewsV2Response.builder() + .menuNames(menuNames) + .mainRating(ratingAverages.mainRating()) + .likeCount(menu.getLikeCount()) + .unlikeCount(menu.getUnlikeCount()) + .totalReviewCount(totalReviewCount) + .reviewRatingCount(reviewRatingCount) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java b/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java index 66a4a8cd..d96d03eb 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java @@ -4,7 +4,7 @@ public record RatingAverages(Double mainRating, Double amountRating, Double tasteRating) { - @Builder - public RatingAverages { - } + @Builder + public RatingAverages { + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java b/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java index c0b3efe8..dab7e5f5 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java @@ -4,16 +4,16 @@ public record RatingsDto(Ratings ratings) { - public Integer getMainRating() { - return ratings.getMainRating(); - } + public Integer getMainRating() { + return ratings.getMainRating(); + } - public Integer getTasteRating() { - return ratings.getTasteRating(); - } + public Integer getTasteRating() { + return ratings.getTasteRating(); + } - public Integer getAmountRating() { - return ratings.getAmountRating(); - } + public Integer getAmountRating() { + return ratings.getAmountRating(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/RestaurantReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/RestaurantReviewResponse.java index 962152b8..197d6f5f 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/RestaurantReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/RestaurantReviewResponse.java @@ -10,18 +10,18 @@ @AllArgsConstructor @Builder public class RestaurantReviewResponse { - @Schema(description = "리뷰 개수", example = "15") - private Integer totalReviewCount; + @Schema(description = "리뷰 개수", example = "15") + private Integer totalReviewCount; - @Schema(description = "별점 별 개수") - private ReviewRatingCount reviewRatingCount; + @Schema(description = "별점 별 개수") + private ReviewRatingCount reviewRatingCount; - @Schema(description = "리뷰 평점", example = "4.4") - private Double mainRating; + @Schema(description = "리뷰 평점", example = "4.4") + private Double mainRating; - @Schema(description = "좋아요 개수", example = "15") - private Integer likeCount; + @Schema(description = "좋아요 개수", example = "15") + private Integer likeCount; - @Schema(description = "싫어요 개수", example = "15") - private Integer unlikeCount; + @Schema(description = "싫어요 개수", example = "15") + private Integer unlikeCount; } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java index c138369f..6843b8cc 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java @@ -1,13 +1,12 @@ package ssu.eatssu.domain.review.dto; -import org.springframework.util.Assert; - import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import org.springframework.util.Assert; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.review.entity.Review; @@ -19,38 +18,38 @@ @Setter public class ReviewCreateRequest { - @Schema(description = "평점-메인", example = "4") - private Integer mainRating; - - @Schema(description = "평점-양", example = "4") - private Integer amountRating; - - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; - - @Max(150) - @Schema(description = "한줄평", example = "맛있어용") - private String content; - - public ReviewCreateRequest(int mainRating, int amountRating, int tasteRating, String content) { - Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); - this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; - this.content = content; - } - - public Review toEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); - return Review.builder() - .user(user) - .content(this.content) - .ratings(ratings) - .menu(menu) - .build(); - } + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; + + @Schema(description = "평점-양", example = "4") + private Integer amountRating; + + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; + + @Max(150) + @Schema(description = "한줄평", example = "맛있어용") + private String content; + + public ReviewCreateRequest(int mainRating, int amountRating, int tasteRating, String content) { + Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); + this.mainRating = mainRating; + this.amountRating = amountRating; + this.tasteRating = tasteRating; + this.content = content; + } + + public Review toEntity(User user, Menu menu) { + Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + return Review.builder() + .user(user) + .content(this.content) + .ratings(ratings) + .menu(menu) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java index b99ebd3c..40eb70b5 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java @@ -1,88 +1,88 @@ package ssu.eatssu.domain.review.dto; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import ssu.eatssu.domain.review.entity.Review; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + @AllArgsConstructor @Builder @Schema(title = "리뷰 상세") @Getter public class ReviewDetail { - @Schema(description = "리뷰 식별자", example = "123") - Long reviewId; - - @Schema(description = "메뉴 이름", example = "콥샐러드") - String menu; - - @Schema(description = "작성자 식별자", example = "123") - Long writerId; - - @Schema(description = "본인 글인지 여부(true/false)", example = "true") - Boolean isWriter; - - @Schema(description = "작성자 닉네임", example = "숭시리시리") - private String writerNickname; - - @Schema(description = "평점-메인", example = "4") - private Integer mainRating; - - @Schema(description = "평점-양", example = "4") - private Integer amountRating; - - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; - - @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") - private LocalDate writedAt; - - @Schema(description = "리뷰 내용", example = "맛있습니당") - private String content; - - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imageUrls; - - public static ReviewDetail from(Review review, Long userId) { - List imageUrls = new ArrayList<>(); - review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); - - ReviewDetailBuilder builder = ReviewDetail.builder() - .reviewId(review.getId()) - .mainRating(review.getRatings().getMainRating()) - .amountRating(review.getRatings().getAmountRating()) - .tasteRating(review.getRatings().getTasteRating()) - .writedAt(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .imageUrls(imageUrls) - .menu(review.getMenu().getName()); - - if (review.getUser() == null) { - return builder - .writerId(null) - .writerNickname("알 수 없음") - .isWriter(false) - .build(); - } - - if (review.getUser().getId().equals(userId)) { - return builder - .writerId(review.getUser().getId()) - .writerNickname(review.getUser().getNickname()) - .isWriter(true) - .build(); - } - - return builder - .writerId(review.getUser().getId()) - .writerNickname(review.getUser().getNickname()) - .isWriter(false) - .build(); - } + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; + + @Schema(description = "메뉴 이름", example = "콥샐러드") + String menu; + + @Schema(description = "작성자 식별자", example = "123") + Long writerId; + + @Schema(description = "본인 글인지 여부(true/false)", example = "true") + Boolean isWriter; + + @Schema(description = "작성자 닉네임", example = "숭시리시리") + private String writerNickname; + + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; + + @Schema(description = "평점-양", example = "4") + private Integer amountRating; + + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; + + @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") + private LocalDate writedAt; + + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; + + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; + + public static ReviewDetail from(Review review, Long userId) { + List imageUrls = new ArrayList<>(); + review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); + + ReviewDetailBuilder builder = ReviewDetail.builder() + .reviewId(review.getId()) + .mainRating(review.getRatings().getMainRating()) + .amountRating(review.getRatings().getAmountRating()) + .tasteRating(review.getRatings().getTasteRating()) + .writedAt(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imageUrls(imageUrls) + .menu(review.getMenu().getName()); + + if (review.getUser() == null) { + return builder + .writerId(null) + .writerNickname("알 수 없음") + .isWriter(false) + .build(); + } + + if (review.getUser().getId().equals(userId)) { + return builder + .writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(true) + .build(); + } + + return builder + .writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(false) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java index 2edd23f9..067f5e80 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java @@ -1,31 +1,32 @@ package ssu.eatssu.domain.review.dto; +import ssu.eatssu.domain.review.entity.Review; + import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import ssu.eatssu.domain.review.entity.Review; - //COMMENT: 더 좋은 매개변수 명이 있을 것 같은데 제 머리로는 이게 한계입니다... 멋진 변수명으로 바꿔주세요 public record ReviewRatingCount(long oneStarCount, long twoStarCount, long threeStarCount, long fourStarCount, - long fiveStarCount) { + long fiveStarCount) { - public ReviewRatingCount { - } + public ReviewRatingCount { + } - public static ReviewRatingCount from(List reviews) { - Map ratingDistribution = reviews.stream() - .collect( - Collectors.groupingBy(Review::getRating, LinkedHashMap::new, - Collectors.counting())); + public static ReviewRatingCount from(List reviews) { + Map ratingDistribution = reviews.stream() + .collect( + Collectors.groupingBy(Review::getRating, + LinkedHashMap::new, + Collectors.counting())); - return new ReviewRatingCount( - ratingDistribution.getOrDefault(1, 0L), - ratingDistribution.getOrDefault(2, 0L), - ratingDistribution.getOrDefault(3, 0L), - ratingDistribution.getOrDefault(4, 0L), - ratingDistribution.getOrDefault(5, 0L) - ); - } + return new ReviewRatingCount( + ratingDistribution.getOrDefault(1, 0L), + ratingDistribution.getOrDefault(2, 0L), + ratingDistribution.getOrDefault(3, 0L), + ratingDistribution.getOrDefault(4, 0L), + ratingDistribution.getOrDefault(5, 0L) + ); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java index 471c07ba..fd2b6565 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java @@ -6,18 +6,18 @@ @Schema(title = "리뷰 수정(글)") public record ReviewUpdateRequest( - @Schema(description = "평점-메인", example = "4") - Integer mainRating, + @Schema(description = "평점-메인", example = "4") + Integer mainRating, - @Schema(description = "평점-양", example = "4") - Integer amountRating, + @Schema(description = "평점-양", example = "4") + Integer amountRating, - @Schema(description = "평점-맛", example = "4") - Integer tasteRating, + @Schema(description = "평점-맛", example = "4") + Integer tasteRating, - @Max(150) - @Schema(description = "한줄평", example = "맛있어용") - String content + @Max(150) + @Schema(description = "한줄평", example = "맛있어용") + String content ) { } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/dto/SavedReviewImage.java b/src/main/java/ssu/eatssu/domain/review/dto/SavedReviewImage.java index 430f5cfc..0529ad4a 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/SavedReviewImage.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/SavedReviewImage.java @@ -9,6 +9,6 @@ @Schema(title = "업로드 된 이미지 url") public class SavedReviewImage { - @Schema(description = "이미지 url", example = "image123.jpg") - private String url; + @Schema(description = "이미지 url", example = "image123.jpg") + private String url; } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java index 21a9d57c..dce5e9ad 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java @@ -1,20 +1,20 @@ package ssu.eatssu.domain.review.dto; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; import lombok.AllArgsConstructor; import lombok.Getter; +import java.util.List; + @Schema(title = "리뷰 수정(글)") @Getter @AllArgsConstructor public class UpdateMealReviewRequest { - @Schema(description = "평점", example = "4") - private Integer rating; - private List menuLikes; - @Max(150) - @Schema(description = "한줄평", example = "맛있어용") - private String content; + @Schema(description = "평점", example = "4") + private Integer rating; + private List menuLikes; + @Max(150) + @Schema(description = "한줄평", example = "맛있어용") + private String content; } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java index 57c3b344..20890cee 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java @@ -1,13 +1,12 @@ package ssu.eatssu.domain.review.dto; -import org.springframework.util.Assert; - import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import org.springframework.util.Assert; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.review.entity.Review; @@ -19,42 +18,42 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) public class UploadReviewRequest { - @Schema(description = "평점-메인", example = "4") - private Integer mainRating; - - @Schema(description = "평점-양", example = "4") - private Integer amountRating; - - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; - - @Max(150) - @Schema(description = "한줄평", example = "맛있어용") - private String content; - - @Schema(description = "리뷰 이미지 URL", example = "https://s3.~~~.jpg") - private String imageUrl; - - public UploadReviewRequest(int mainRating, int amountRating, int tasteRating, String content) { - Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); - this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; - this.content = content; - } - - public Review toReviewEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); - return Review.builder() - .user(user) - .content(this.content) - .ratings(ratings) - .menu(menu) - .build(); - } + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; + + @Schema(description = "평점-양", example = "4") + private Integer amountRating; + + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; + + @Max(150) + @Schema(description = "한줄평", example = "맛있어용") + private String content; + + @Schema(description = "리뷰 이미지 URL", example = "https://s3.~~~.jpg") + private String imageUrl; + + public UploadReviewRequest(int mainRating, int amountRating, int tasteRating, String content) { + Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); + this.mainRating = mainRating; + this.amountRating = amountRating; + this.tasteRating = tasteRating; + this.content = content; + } + + public Review toReviewEntity(User user, Menu menu) { + Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + return Review.builder() + .user(user) + .content(this.content) + .ratings(ratings) + .menu(menu) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Report.java b/src/main/java/ssu/eatssu/domain/review/entity/Report.java index 72879752..a96803c0 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Report.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Report.java @@ -28,35 +28,35 @@ @AllArgsConstructor public class Report extends BaseTimeEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "review_report_id") - private Long id; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "reporter_id") - private User user; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "review_id") - private Review review; - - @Enumerated(EnumType.STRING) - private ReportType reportType; - - private String content; - - @Enumerated(EnumType.STRING) - private ReportStatus status; - - public static Report create(User user, Review review, ReportCreateRequest request, - ReportStatus status) { - return Report.builder() - .user(user) - .review(review) - .reportType(request.reportType()) - .content(request.content()) - .status(status) - .build(); - } + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_report_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "reporter_id") + private User user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; + + @Enumerated(EnumType.STRING) + private ReportType reportType; + + private String content; + + @Enumerated(EnumType.STRING) + private ReportStatus status; + + public static Report create(User user, Review review, ReportCreateRequest request, + ReportStatus status) { + return Report.builder() + .user(user) + .review(review) + .reportType(request.reportType()) + .content(request.content()) + .status(status) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index 72c42056..f8ddf00d 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -1,10 +1,5 @@ package ssu.eatssu.domain.review.entity; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Embedded; @@ -28,6 +23,11 @@ import ssu.eatssu.domain.user.entity.BaseTimeEntity; import ssu.eatssu.domain.user.entity.User; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + @Entity @Getter @Setter @@ -36,113 +36,113 @@ @AllArgsConstructor public class Review extends BaseTimeEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "review_id") - private Long id; - - private String content; - - // TODO : 삭제되어야 함 - @Embedded - private Ratings ratings; - - private Integer rating; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") - private User user; - - // TODO : 삭제되어야 함 - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "menu_id") - private Menu menu; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "meal_id") - private Meal meal; - - @Builder.Default - @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) - private List reviewImages = new ArrayList<>(); - - @Builder.Default - @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) - private List menuLikes = new ArrayList<>(); - - @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) - private List reviewLikes = new ArrayList<>(); - - public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { - this.content = content; - this.ratings = Ratings.of(mainRate, amountRate, tasteRate); - } - - // TODO : this.user가 null이면? - public boolean isNotWrittenBy(User user) { - return !this.user.equals(user); - } - - public void clearUser() { - this.user = null; - } - - public void addReviewImage(String imageUrl) { - ReviewImage reviewImage = new ReviewImage(this, imageUrl); - this.reviewImages.add(reviewImage); - } - - public void addReviewMenuLike(Menu menu, boolean isLike) { - ReviewMenuLike reviewMenuLike = ReviewMenuLike.create(this, menu, isLike); - this.menuLikes.add(reviewMenuLike); - - if (isLike) { - menu.increaseLikeCount(); - } else { - menu.increaseUnlikeCount(); - } - } - - public void removeReviewMenuLike(ReviewMenuLike reviewMenuLike) { - this.menuLikes.remove(reviewMenuLike); - - if (reviewMenuLike.getIsLike()) { - reviewMenuLike.getMenu().decreaseLikeCount(); - } else { - reviewMenuLike.getMenu().decreaseUnlikeCount(); - } - } - - public void update(String content, int rating, Map updatedMenuLikes) { - this.content = content; - this.rating = rating; - - // 현재 menu like 상태를 menu를 기준으로 매핑 - Map currentMenuLikes = this.menuLikes.stream() - .collect(Collectors.toMap(ReviewMenuLike::getMenu, - menuLike -> menuLike)); - - for (Map.Entry entry : updatedMenuLikes.entrySet()) { - Menu menu = entry.getKey(); - Boolean newState = entry.getValue(); - ReviewMenuLike existingReviewMenuLike = currentMenuLikes.get(menu); - if (existingReviewMenuLike == null) { - // 기존에 없는 메뉴이면 새롭게 추가 - this.addReviewMenuLike(menu, newState); - } else { - // 기존에 있는 경우 : 상태가 다르면 업데이트 - if (!existingReviewMenuLike.getIsLike().equals(newState)) { - existingReviewMenuLike.updateLike(newState); - menu.changeLikeStatus(newState); - } - } - } - } - - public void resetMenuLikes() { - for (ReviewMenuLike reviewMenuLike : this.menuLikes) { - reviewMenuLike.resetMenuLikeStatus(); - } - this.menuLikes.clear(); - } + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_id") + private Long id; + + private String content; + + // TODO : 삭제되어야 함 + @Embedded + private Ratings ratings; + + private Integer rating; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + // TODO : 삭제되어야 함 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "menu_id") + private Menu menu; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "meal_id") + private Meal meal; + + @Builder.Default + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) + private List reviewImages = new ArrayList<>(); + + @Builder.Default + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) + private List menuLikes = new ArrayList<>(); + + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) + private List reviewLikes = new ArrayList<>(); + + public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { + this.content = content; + this.ratings = Ratings.of(mainRate, amountRate, tasteRate); + } + + // TODO : this.user가 null이면? + public boolean isNotWrittenBy(User user) { + return !this.user.equals(user); + } + + public void clearUser() { + this.user = null; + } + + public void addReviewImage(String imageUrl) { + ReviewImage reviewImage = new ReviewImage(this, imageUrl); + this.reviewImages.add(reviewImage); + } + + public void addReviewMenuLike(Menu menu, boolean isLike) { + ReviewMenuLike reviewMenuLike = ReviewMenuLike.create(this, menu, isLike); + this.menuLikes.add(reviewMenuLike); + + if (isLike) { + menu.increaseLikeCount(); + } else { + menu.increaseUnlikeCount(); + } + } + + public void removeReviewMenuLike(ReviewMenuLike reviewMenuLike) { + this.menuLikes.remove(reviewMenuLike); + + if (reviewMenuLike.getIsLike()) { + reviewMenuLike.getMenu().decreaseLikeCount(); + } else { + reviewMenuLike.getMenu().decreaseUnlikeCount(); + } + } + + public void update(String content, int rating, Map updatedMenuLikes) { + this.content = content; + this.rating = rating; + + // 현재 menu like 상태를 menu를 기준으로 매핑 + Map currentMenuLikes = this.menuLikes.stream() + .collect(Collectors.toMap(ReviewMenuLike::getMenu, + menuLike -> menuLike)); + + for (Map.Entry entry : updatedMenuLikes.entrySet()) { + Menu menu = entry.getKey(); + Boolean newState = entry.getValue(); + ReviewMenuLike existingReviewMenuLike = currentMenuLikes.get(menu); + if (existingReviewMenuLike == null) { + // 기존에 없는 메뉴이면 새롭게 추가 + this.addReviewMenuLike(menu, newState); + } else { + // 기존에 있는 경우 : 상태가 다르면 업데이트 + if (!existingReviewMenuLike.getIsLike().equals(newState)) { + existingReviewMenuLike.updateLike(newState); + menu.changeLikeStatus(newState); + } + } + } + } + + public void resetMenuLikes() { + for (ReviewMenuLike reviewMenuLike : this.menuLikes) { + reviewMenuLike.resetMenuLikeStatus(); + } + this.menuLikes.clear(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java index c43f7fd7..bced0c86 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java @@ -21,19 +21,19 @@ @AllArgsConstructor public class ReviewImage { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "review_image_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_image_id") + private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "review_id") - private Review review; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; - private String imageUrl; + private String imageUrl; - public ReviewImage(Review review, String imageUrl) { - this.review = review; - this.imageUrl = imageUrl; - } + public ReviewImage(Review review, String imageUrl) { + this.review = review; + this.imageUrl = imageUrl; + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java index 04597f5f..4d6006fb 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java @@ -19,20 +19,20 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor public class ReviewLike { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "review_like_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_like_id") + private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "review_id") - private Review review; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") - private User user; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; - public static ReviewLike create(User user, Review review) { - return new ReviewLike(null, review, user); - } + public static ReviewLike create(User user, Review review) { + return new ReviewLike(null, review, user); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java index 7d51e4e3..7eb90e45 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java @@ -21,35 +21,35 @@ @Builder @AllArgsConstructor public class ReviewMenuLike { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "review_menu_like_id") - private Long id; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "review_id") - private Review review; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "menu_id") - private Menu menu; - - @Column(nullable = false) - private Boolean isLike; // true : 좋아요, false : 싫어요 - - public static ReviewMenuLike create(Review review, Menu menu, Boolean isLike) { - return ReviewMenuLike.builder() - .review(review) - .menu(menu) - .isLike(isLike) - .build(); - } - - public void updateLike(Boolean like) { - isLike = like; - } - - public void resetMenuLikeStatus() { - menu.cancelLike(this.isLike); - } + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_menu_like_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "menu_id") + private Menu menu; + + @Column(nullable = false) + private Boolean isLike; // true : 좋아요, false : 싫어요 + + public static ReviewMenuLike create(Review review, Menu menu, Boolean isLike) { + return ReviewMenuLike.builder() + .review(review) + .menu(menu) + .isLike(isLike) + .build(); + } + + public void updateLike(Boolean like) { + isLike = like; + } + + public void resetMenuLikeStatus() { + menu.cancelLike(this.isLike); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java index 76eb3a5d..fc8267e3 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java @@ -1,8 +1,5 @@ package ssu.eatssu.domain.review.entity; -import java.util.ArrayList; -import java.util.List; - import jakarta.persistence.CascadeType; import jakarta.persistence.Embeddable; import jakarta.persistence.OneToMany; @@ -11,52 +8,55 @@ import lombok.NoArgsConstructor; import ssu.eatssu.domain.rating.entity.ReviewRating; +import java.util.ArrayList; +import java.util.List; + @Getter @NoArgsConstructor(access = AccessLevel.PUBLIC) @Embeddable public class Reviews { - @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) - private List reviews = new ArrayList<>(); + @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) + private List reviews = new ArrayList<>(); - public void add(Review review) { - reviews.add(review); - } + public void add(Review review) { + reviews.add(review); + } - public int size() { - return reviews.size(); - } + public int size() { + return reviews.size(); + } - public void calculateReviewRatings() { - this.reviews.forEach(review -> { - int rateValue = review.getRatings().getMainRating(); - ReviewRating.fromValue(rateValue).incrementCount(); - }); - } + public void calculateReviewRatings() { + this.reviews.forEach(review -> { + int rateValue = review.getRatings().getMainRating(); + ReviewRating.fromValue(rateValue).incrementCount(); + }); + } - public int getTotalMainRating() { - return this.reviews.stream().mapToInt(review -> review.getRatings().getMainRating()).sum(); - } + public int getTotalMainRating() { + return this.reviews.stream().mapToInt(review -> review.getRatings().getMainRating()).sum(); + } - public int getTotalAmountRating() { - return this.reviews.stream().mapToInt(review -> review.getRatings().getAmountRating()) - .sum(); - } + public int getTotalAmountRating() { + return this.reviews.stream().mapToInt(review -> review.getRatings().getAmountRating()) + .sum(); + } - public int getTotalTasteRating() { - return this.reviews.stream().mapToInt(review -> review.getRatings().getTasteRating()).sum(); - } + public int getTotalTasteRating() { + return this.reviews.stream().mapToInt(review -> review.getRatings().getTasteRating()).sum(); + } - public double getAverageMainRating() { - return (double)this.getTotalMainRating() / this.size(); - } + public double getAverageMainRating() { + return (double) this.getTotalMainRating() / this.size(); + } - public double getAverageAmountRating() { - return (double)this.getTotalAmountRating() / this.size(); - } + public double getAverageAmountRating() { + return (double) this.getTotalAmountRating() / this.size(); + } - public double getAverageTasteRating() { - return (double)this.getTotalTasteRating() / this.size(); - } + public double getAverageTasteRating() { + return (double) this.getTotalTasteRating() / this.size(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index fd3fac83..b58361ee 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -1,7 +1,15 @@ package ssu.eatssu.domain.review.presentation; -import java.util.List; - +import io.swagger.v3.oas.annotations.Hidden; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -19,17 +27,6 @@ import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; - -import io.swagger.v3.oas.annotations.Hidden; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.enums.ParameterIn; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.constants.MenuType; import ssu.eatssu.domain.review.dto.MealReviewsResponse; @@ -44,165 +41,167 @@ import ssu.eatssu.domain.slice.service.SliceService; import ssu.eatssu.global.handler.response.BaseResponse; +import java.util.List; + @RestController @RequiredArgsConstructor @RequestMapping("/reviews") @Tag(name = "Review", description = "리뷰 API") public class ReviewController { - private final ReviewService reviewService; - private final SliceService sliceService; + private final ReviewService reviewService; + private final SliceService sliceService; - @Operation(summary = "리뷰 리스트 조회 [인증 토큰 필수 X]", description = """ - 리뷰 리스트를 조회하는 API 입니다.

- menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

- menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

- 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

- 페이징 기본 값 = {size=20, sort=date, direction=desc}

- """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("") - public BaseResponse> getReviews( - @Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") MenuType menuType, - @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) Long menuId, - @Parameter(description = "mealId(변동메뉴)") @RequestParam(value = "mealId", required = false) Long mealId, - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) - @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = sliceService.findReviews(menuType, menuId, mealId, - pageable, lastReviewId, customUserDetails); + @Operation(summary = "리뷰 리스트 조회 [인증 토큰 필수 X]", description = """ + 리뷰 리스트를 조회하는 API 입니다.

+ menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

+ menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

+ 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

+ 페이징 기본 값 = {size=20, sort=date, direction=desc}

+ """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("") + public BaseResponse> getReviews( + @Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") MenuType menuType, + @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) Long menuId, + @Parameter(description = "mealId(변동메뉴)") @RequestParam(value = "mealId", required = false) Long mealId, + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) + @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = sliceService.findReviews(menuType, menuId, mealId, + pageable, lastReviewId, customUserDetails); - return BaseResponse.success(myReviews); - } + return BaseResponse.success(myReviews); + } - @Hidden - @Operation(summary = "리뷰 작성", description = """ - 리뷰를 작성하는 API 입니다.

- reviewCreate는 application/json, multipartFileList는 multipart/form-data로 요청해주세요.

- 사진은 여러장 첨부 가능합니다.(기획상으로는 한 장만 첨부하도록 제한이 있지만 API 스펙 자체는 여러 장 첨부 가능) - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping(value = "/{menuId}", - consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, - produces = MediaType.APPLICATION_JSON_VALUE) - public BaseResponse writeReview( - @Parameter(description = "menuId") @PathVariable("menuId") Long menuId, - @RequestPart ReviewCreateRequest createReviewRequest, - @RequestPart(value = "multipartFileList", required = false) List multipartFileList, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewService.createReview(customUserDetails, menuId, createReviewRequest, - multipartFileList); - return BaseResponse.success(); - } + @Hidden + @Operation(summary = "리뷰 작성", description = """ + 리뷰를 작성하는 API 입니다.

+ reviewCreate는 application/json, multipartFileList는 multipart/form-data로 요청해주세요.

+ 사진은 여러장 첨부 가능합니다.(기획상으로는 한 장만 첨부하도록 제한이 있지만 API 스펙 자체는 여러 장 첨부 가능) + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping(value = "/{menuId}", + consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, + produces = MediaType.APPLICATION_JSON_VALUE) + public BaseResponse writeReview( + @Parameter(description = "menuId") @PathVariable("menuId") Long menuId, + @RequestPart ReviewCreateRequest createReviewRequest, + @RequestPart(value = "multipartFileList", required = false) List multipartFileList, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewService.createReview(customUserDetails, menuId, createReviewRequest, + multipartFileList); + return BaseResponse.success(); + } - /** - * 리뷰 이미지 업로드 - */ - @Operation(summary = "리뷰 이미지 업로드", description = "리뷰 이미지를 업로드하고 이미지 URL 을 반환합니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "이미지 업로드 및 URL 반환 성공"), - @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping(value = "/upload/image", - consumes = MediaType.MULTIPART_FORM_DATA_VALUE, - produces = MediaType.APPLICATION_JSON_VALUE) - public BaseResponse uploadReviewImage(@RequestPart(value = "image") MultipartFile image) { - return BaseResponse.success(reviewService.uploadImage(image)); - } + /** + * 리뷰 이미지 업로드 + */ + @Operation(summary = "리뷰 이미지 업로드", description = "리뷰 이미지를 업로드하고 이미지 URL 을 반환합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "이미지 업로드 및 URL 반환 성공"), + @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping(value = "/upload/image", + consumes = MediaType.MULTIPART_FORM_DATA_VALUE, + produces = MediaType.APPLICATION_JSON_VALUE) + public BaseResponse uploadReviewImage(@RequestPart(value = "image") MultipartFile image) { + return BaseResponse.success(reviewService.uploadImage(image)); + } - @Operation(summary = "리뷰 작성", description = "리뷰를 작성하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - }) - @PostMapping("/write/{menuId}") - public BaseResponse writeReview(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, - @RequestBody UploadReviewRequest uploadReviewRequest, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewService.uploadReview(customUserDetails, menuId, uploadReviewRequest); - return BaseResponse.success(); - } + @Operation(summary = "리뷰 작성", description = "리뷰를 작성하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + @PostMapping("/write/{menuId}") + public BaseResponse writeReview(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, + @RequestBody UploadReviewRequest uploadReviewRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewService.uploadReview(customUserDetails, menuId, uploadReviewRequest); + return BaseResponse.success(); + } - @Operation(summary = "리뷰 수정(글 수정)", description = """ - 리뷰 내용을 수정하는 API 입니다.

- 글 수정만 가능하며 사진 수정은 지원하지 않습니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 수정 성공"), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PatchMapping("/{reviewId}") - public BaseResponse updateReview(@Parameter(description = "reviewId") - @PathVariable("reviewId") Long reviewId, - @RequestBody ReviewUpdateRequest request, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewService.updateReview(customUserDetails, reviewId, request); - return BaseResponse.success(); - } + @Operation(summary = "리뷰 수정(글 수정)", description = """ + 리뷰 내용을 수정하는 API 입니다.

+ 글 수정만 가능하며 사진 수정은 지원하지 않습니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 수정 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PatchMapping("/{reviewId}") + public BaseResponse updateReview(@Parameter(description = "reviewId") + @PathVariable("reviewId") Long reviewId, + @RequestBody ReviewUpdateRequest request, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewService.updateReview(customUserDetails, reviewId, request); + return BaseResponse.success(); + } - @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공"), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("/{reviewId}") - public BaseResponse deleteReview( - @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewService.deleteReview(customUserDetails, reviewId); - return BaseResponse.success(); - } + @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("/{reviewId}") + public BaseResponse deleteReview( + @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewService.deleteReview(customUserDetails, reviewId); + return BaseResponse.success(); + } - @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ - 식단 리뷰 정보를 조회하는 API 입니다.

- 메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/meals/{mealId}") - public BaseResponse getMealReviews( - @Parameter(description = "mealId") - @PathVariable(value = "mealId") Long mealId) { - return BaseResponse.success(reviewService.findMealReviews(mealId)); - } + @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ + 식단 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/meals/{mealId}") + public BaseResponse getMealReviews( + @Parameter(description = "mealId") + @PathVariable(value = "mealId") Long mealId) { + return BaseResponse.success(reviewService.findMealReviews(mealId)); + } - @Operation(summary = "고정 메뉴 리뷰 정보 조회(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ - 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

- 메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/menus/{menuId}") - public BaseResponse getMainReviews( - @Parameter(description = "menuId") - @PathVariable(value = "menuId") Long menuId) { - return BaseResponse.success(reviewService.findMenuReviews(menuId)); - } + @Operation(summary = "고정 메뉴 리뷰 정보 조회(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ + 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/menus/{menuId}") + public BaseResponse getMainReviews( + @Parameter(description = "menuId") + @PathVariable(value = "menuId") Long menuId) { + return BaseResponse.success(reviewService.findMenuReviews(menuId)); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java index da44bb5f..23772e5f 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java @@ -1,5 +1,14 @@ package ssu.eatssu.domain.review.presentation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -13,27 +22,16 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.enums.ParameterIn; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; import ssu.eatssu.domain.review.dto.MealReviewResponse; import ssu.eatssu.domain.review.dto.MealReviewsV2Response; -import ssu.eatssu.domain.review.dto.MenuReviewResponse; import ssu.eatssu.domain.review.dto.MenuReviewsV2Response; import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; -import ssu.eatssu.domain.review.service.ReviewServiceV2; import ssu.eatssu.domain.review.service.ReviewService; +import ssu.eatssu.domain.review.service.ReviewServiceV2; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.global.handler.response.BaseResponse; @@ -42,149 +40,149 @@ @RequestMapping("/v2/reviews") @Tag(name = "Review V2", description = "리뷰 V2 API") public class ReviewControllerV2 { - private final ReviewServiceV2 reviewServiceV2; + private final ReviewServiceV2 reviewServiceV2; - private final ReviewService reviewService; + private final ReviewService reviewService; - @Operation(summary = "리뷰 작성", description = "리뷰를 작성하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - }) - @PostMapping() - public BaseResponse createReview( - @RequestBody CreateMealReviewRequest createMealReviewRequest, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewServiceV2.createReview(customUserDetails, createMealReviewRequest); - return BaseResponse.success(); - } + @Operation(summary = "리뷰 작성", description = "리뷰를 작성하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + @PostMapping() + public BaseResponse createReview( + @RequestBody CreateMealReviewRequest createMealReviewRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewServiceV2.createReview(customUserDetails, createMealReviewRequest); + return BaseResponse.success(); + } - @Operation(summary = "특정 식당 모든 리뷰 정보 조회(리뷰 개수, 평점 등등)", description = """ - 특정 식당 모든 리뷰 정보를 조회하는 API 입니다.

- 리뷰 개수, 별점 별 개수, 리뷰 평점, 좋아요 개수, 싫어요 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "path parameter 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/statistics") - public BaseResponse getRestaurantReviews( - @Parameter(description = "restaurant") - @RequestParam Restaurant restaurant - ) { - return BaseResponse.success(reviewServiceV2.findRestaurantReviews(restaurant)); - } + @Operation(summary = "특정 식당 모든 리뷰 정보 조회(리뷰 개수, 평점 등등)", description = """ + 특정 식당 모든 리뷰 정보를 조회하는 API 입니다.

+ 리뷰 개수, 별점 별 개수, 리뷰 평점, 좋아요 개수, 싫어요 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "path parameter 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/statistics") + public BaseResponse getRestaurantReviews( + @Parameter(description = "restaurant") + @RequestParam Restaurant restaurant + ) { + return BaseResponse.success(reviewServiceV2.findRestaurantReviews(restaurant)); + } - @Operation(summary = "리뷰 리스트 조회", description = """ - 리뷰 리스트를 조회하는 API 입니다.

- 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

- 페이징 기본 값 = {size=20, sort=date, direction=desc}

- """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("") - public BaseResponse> getReviews( - @Parameter(description = "mealId") - @RequestParam Long mealId, - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) - @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - Pageable pageable = PageRequest.of(0, 20, Sort.by(Sort.Direction.DESC, "id")); - SliceResponse myReviews = reviewServiceV2.findReviews(mealId, lastReviewId, pageable, - customUserDetails); - return BaseResponse.success(myReviews); - } + @Operation(summary = "리뷰 리스트 조회", description = """ + 리뷰 리스트를 조회하는 API 입니다.

+ 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

+ 페이징 기본 값 = {size=20, sort=date, direction=desc}

+ """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("") + public BaseResponse> getReviews( + @Parameter(description = "mealId") + @RequestParam Long mealId, + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) + @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + Pageable pageable = PageRequest.of(0, 20, Sort.by(Sort.Direction.DESC, "id")); + SliceResponse myReviews = reviewServiceV2.findReviews(mealId, lastReviewId, pageable, + customUserDetails); + return BaseResponse.success(myReviews); + } - @Operation(summary = "리뷰 수정(글 수정)", description = """ - 리뷰 내용을 수정하는 API 입니다.

- 글 수정만 가능하며 사진 수정은 지원하지 않습니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 수정 성공"), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @PatchMapping("/{reviewId}") - public BaseResponse updateReview(@Parameter(description = "reviewId") - @PathVariable("reviewId") Long reviewId, - @RequestBody UpdateMealReviewRequest request, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewServiceV2.updateReview(customUserDetails, reviewId, request); - return BaseResponse.success(); - } + @Operation(summary = "리뷰 수정(글 수정)", description = """ + 리뷰 내용을 수정하는 API 입니다.

+ 글 수정만 가능하며 사진 수정은 지원하지 않습니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 수정 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @PatchMapping("/{reviewId}") + public BaseResponse updateReview(@Parameter(description = "reviewId") + @PathVariable("reviewId") Long reviewId, + @RequestBody UpdateMealReviewRequest request, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewServiceV2.updateReview(customUserDetails, reviewId, request); + return BaseResponse.success(); + } - @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공"), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("/{reviewId}") - public BaseResponse deleteReview( - @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewServiceV2.deleteReview(customUserDetails, reviewId); - return BaseResponse.success(); - } + @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("/{reviewId}") + public BaseResponse deleteReview( + @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewServiceV2.deleteReview(customUserDetails, reviewId); + return BaseResponse.success(); + } - @Operation(summary = "리뷰 좋아요 누르기/취소하기", description = "리뷰에 좋아요(찜)를 누르거나 취소하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 좋아요 토글 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/{reviewId}/like") - public BaseResponse toggleReviewLike( - @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewServiceV2.toggleReviewLike(customUserDetails, reviewId); - return BaseResponse.success(); - } + @Operation(summary = "리뷰 좋아요 누르기/취소하기", description = "리뷰에 좋아요(찜)를 누르거나 취소하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 좋아요 토글 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/{reviewId}/like") + public BaseResponse toggleReviewLike( + @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewServiceV2.toggleReviewLike(customUserDetails, reviewId); + return BaseResponse.success(); + } - @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회 V2(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ - 식단 리뷰 정보를 조회하는 API 입니다.

- 메뉴명 리스트, 리뷰 수, 메인 평점, 좋아요 개수, 싫어요 개수, 각 평점의 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/meals/{mealId}") - public BaseResponse getMealReviews( - @Parameter(description = "mealId") - @PathVariable(value = "mealId") Long mealId) { - return BaseResponse.success(reviewServiceV2.findMealReviews(mealId)); - } + @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회 V2(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ + 식단 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명 리스트, 리뷰 수, 메인 평점, 좋아요 개수, 싫어요 개수, 각 평점의 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/meals/{mealId}") + public BaseResponse getMealReviews( + @Parameter(description = "mealId") + @PathVariable(value = "mealId") Long mealId) { + return BaseResponse.success(reviewServiceV2.findMealReviews(mealId)); + } - @Operation(summary = "고정 메뉴 리뷰 정보 조회 V2(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ - 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

- 메뉴명, 리뷰 수, 메인 평점, 좋아요 개수, 싫어요 개수, 각 평점의 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/menus/{menuId}") - public BaseResponse getMainReviews( - @Parameter(description = "menuId") - @PathVariable(value = "menuId") Long menuId) { - return BaseResponse.success(reviewServiceV2.findMenuReviews(menuId)); - } + @Operation(summary = "고정 메뉴 리뷰 정보 조회 V2(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ + 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명, 리뷰 수, 메인 평점, 좋아요 개수, 싫어요 개수, 각 평점의 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/menus/{menuId}") + public BaseResponse getMainReviews( + @Parameter(description = "menuId") + @PathVariable(value = "menuId") Long menuId) { + return BaseResponse.success(reviewServiceV2.findMenuReviews(menuId)); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewImageRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewImageRepository.java index 0395890b..b608010f 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewImageRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewImageRepository.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.review.repository; import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.review.entity.ReviewImage; public interface ReviewImageRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java index fcba8185..c70d0bf0 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java @@ -1,13 +1,12 @@ package ssu.eatssu.domain.review.repository; -import java.util.Optional; - import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewLike; import ssu.eatssu.domain.user.entity.User; +import java.util.Optional; + public interface ReviewLikeRepository extends JpaRepository { - Optional findByReviewAndUser(Review review, User user); + Optional findByReviewAndUser(Review review, User user); } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java index 545240e0..7b592f36 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java @@ -1,12 +1,11 @@ package ssu.eatssu.domain.review.repository; -import java.util.List; - import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewMenuLike; +import java.util.List; + public interface ReviewMenuLikeRepository extends JpaRepository { - List findByReview(Review review); + List findByReview(Review review); } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java index 21aceef7..d817cfcb 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java @@ -1,35 +1,34 @@ package ssu.eatssu.domain.review.repository; -import java.util.Collection; -import java.util.List; - import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; - import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.review.entity.Review; +import java.util.Collection; +import java.util.List; + public interface ReviewRepository extends JpaRepository, ReviewRepositoryCustom { - List findAllByMenu(Menu menu); + List findAllByMenu(Menu menu); - List findAllByMeal(Meal meal); + List findAllByMeal(Meal meal); - /** - * dto projection - */ - Collection findByMenu_MealMenus_Meal(Meal meal, Class type); + /** + * dto projection + */ + Collection findByMenu_MealMenus_Meal(Meal meal, Class type); - Long countByMenu_MealMenus_Meal(Meal meal); + Long countByMenu_MealMenus_Meal(Meal meal); - List findByMealIn(List meals); + List findByMealIn(List meals); - @Query("SELECT r FROM Review r WHERE r.meal.id IN :mealIds AND (:lastReviewId IS NULL OR r.id < :lastReviewId) ") - Page findReviewsByMealIds(@Param("mealIds") List mealIds, - @Param("lastReviewId") Long lastReviewId, - Pageable pageable); + @Query("SELECT r FROM Review r WHERE r.meal.id IN :mealIds AND (:lastReviewId IS NULL OR r.id < :lastReviewId) ") + Page findReviewsByMealIds(@Param("mealIds") List mealIds, + @Param("lastReviewId") Long lastReviewId, + Pageable pageable); } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java index 96659076..8cbc059f 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java @@ -2,7 +2,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; - import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.review.entity.Review; @@ -10,19 +9,19 @@ public interface ReviewRepositoryCustom { - //특정 메뉴 리뷰 - 최신순 정렬 - Slice findAllByMenuOrderByIdDesc(Menu menu, Long lastReviewId, Pageable pageable); + //특정 메뉴 리뷰 - 최신순 정렬 + Slice findAllByMenuOrderByIdDesc(Menu menu, Long lastReviewId, Pageable pageable); - //특정 메뉴 리뷰 - 오래된순 정렬 - //특정 식단 리뷰 - 최신순 정렬 - Slice findAllByMealOrderByIdDesc(Meal meal, Long lastReviewId, Pageable pageable); + //특정 메뉴 리뷰 - 오래된순 정렬 + //특정 식단 리뷰 - 최신순 정렬 + Slice findAllByMealOrderByIdDesc(Meal meal, Long lastReviewId, Pageable pageable); - //특정 메뉴 리뷰 - 오래된순 정렬 - //특정 유저 리뷰 - 최신순 정렬 - Slice findByUserOrderByIdDesc(User user, Long lastReviewId, Pageable pageable); + //특정 메뉴 리뷰 - 오래된순 정렬 + //특정 유저 리뷰 - 최신순 정렬 + Slice findByUserOrderByIdDesc(User user, Long lastReviewId, Pageable pageable); - Slice findAllByMenuOrderByIdAsc(Menu menu, Long lastReviewId, Pageable pageable); + Slice findAllByMenuOrderByIdAsc(Menu menu, Long lastReviewId, Pageable pageable); - Slice findAllByMealOrderByIdAsc(Meal meal, Long lastReviewId, Pageable pageable); + Slice findAllByMealOrderByIdAsc(Meal meal, Long lastReviewId, Pageable pageable); } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java index 73339ad9..5f754ebc 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java @@ -1,124 +1,122 @@ package ssu.eatssu.domain.review.repository; -import java.util.ArrayList; -import java.util.List; - +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.domain.SliceImpl; import org.springframework.stereotype.Repository; - -import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.jpa.impl.JPAQueryFactory; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.review.entity.QReview; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; +import java.util.ArrayList; +import java.util.List; + @Repository @RequiredArgsConstructor public class ReviewRepositoryImpl implements ReviewRepositoryCustom { - private final JPAQueryFactory queryFactory; - private final QReview review = QReview.review; - - @Override - public Slice findAllByMenuOrderByIdDesc(Menu menu, Long lastReviewId, Pageable pageable) { - List reviewList = queryFactory.selectFrom(review) - .where( - nextFromLastReviewId(lastReviewId), - review.menu.eq(menu) - ) - .orderBy(review.id.desc()) - .limit(pageable.getPageSize() + 1L) - .fetch(); - return checkLastPage(pageable, reviewList); - } - - @Override - public Slice findAllByMenuOrderByIdAsc(Menu menu, Long lastReviewId, Pageable pageable) { - List reviewList = queryFactory.selectFrom(review) - .where( - beforeFromLastReviewId(lastReviewId), - review.menu.eq(menu) - ) - .orderBy(review.id.asc()) - .limit(pageable.getPageSize() + 1L) - .fetch(); - return checkLastPage(pageable, reviewList); - } - - @Override - public Slice findAllByMealOrderByIdDesc(Meal meal, Long lastReviewId, Pageable pageable) { - List menuList = new ArrayList<>(); - meal.getMealMenus().forEach(mealMenu -> menuList.add(mealMenu.getMenu())); - List reviewList = queryFactory.selectFrom(review) - .where( - nextFromLastReviewId(lastReviewId), - review.menu.in(menuList) - ) - .orderBy(review.id.desc()) - .limit(pageable.getPageSize() + 1L) - .fetch(); - return checkLastPage(pageable, reviewList); - } - - @Override - public Slice findAllByMealOrderByIdAsc(Meal meal, Long lastReviewId, Pageable pageable) { - List menuList = new ArrayList<>(); - meal.getMealMenus().forEach(mealMenu -> menuList.add(mealMenu.getMenu())); - List reviewList = queryFactory.selectFrom(review) - .where( - beforeFromLastReviewId(lastReviewId), - review.menu.in(menuList) - ) - .orderBy(review.id.asc()) - .limit(pageable.getPageSize() + 1L) - .fetch(); - return checkLastPage(pageable, reviewList); - } - - @Override - public Slice findByUserOrderByIdDesc(User user, Long lastReviewId, Pageable pageable) { - List reviewList = queryFactory.selectFrom(review) - .where( - nextFromLastReviewId(lastReviewId), - review.user.eq(user) - ) - .orderBy(review.id.desc()) - .limit(pageable.getPageSize() + 1L) - .fetch(); - return checkLastPage(pageable, reviewList); - } - - private BooleanExpression nextFromLastReviewId(Long reviewId) { - if (reviewId == null) { - return null; - } - return review.id.lt(reviewId); //reviewId < lastReviewId - } - - private BooleanExpression beforeFromLastReviewId(Long reviewId) { - if (reviewId == null) { - return null; - } - return review.id.gt(reviewId); //reviewId > lastReviewId - } - - //무한 스크롤 방식 처리하는 메소드 - private Slice checkLastPage(Pageable pageable, List results) { - - boolean hasNext = false; - - // 조회한 결과 개수가 요청한 페이지 사이즈보다 크면 뒤에 더 있음, next = true - if (results.size() > pageable.getPageSize()) { - hasNext = true; - results.remove(pageable.getPageSize()); - } - - return new SliceImpl<>(results, pageable, hasNext); - } + private final JPAQueryFactory queryFactory; + private final QReview review = QReview.review; + + @Override + public Slice findAllByMenuOrderByIdDesc(Menu menu, Long lastReviewId, Pageable pageable) { + List reviewList = queryFactory.selectFrom(review) + .where( + nextFromLastReviewId(lastReviewId), + review.menu.eq(menu) + ) + .orderBy(review.id.desc()) + .limit(pageable.getPageSize() + 1L) + .fetch(); + return checkLastPage(pageable, reviewList); + } + + @Override + public Slice findAllByMenuOrderByIdAsc(Menu menu, Long lastReviewId, Pageable pageable) { + List reviewList = queryFactory.selectFrom(review) + .where( + beforeFromLastReviewId(lastReviewId), + review.menu.eq(menu) + ) + .orderBy(review.id.asc()) + .limit(pageable.getPageSize() + 1L) + .fetch(); + return checkLastPage(pageable, reviewList); + } + + @Override + public Slice findAllByMealOrderByIdDesc(Meal meal, Long lastReviewId, Pageable pageable) { + List menuList = new ArrayList<>(); + meal.getMealMenus().forEach(mealMenu -> menuList.add(mealMenu.getMenu())); + List reviewList = queryFactory.selectFrom(review) + .where( + nextFromLastReviewId(lastReviewId), + review.menu.in(menuList) + ) + .orderBy(review.id.desc()) + .limit(pageable.getPageSize() + 1L) + .fetch(); + return checkLastPage(pageable, reviewList); + } + + @Override + public Slice findAllByMealOrderByIdAsc(Meal meal, Long lastReviewId, Pageable pageable) { + List menuList = new ArrayList<>(); + meal.getMealMenus().forEach(mealMenu -> menuList.add(mealMenu.getMenu())); + List reviewList = queryFactory.selectFrom(review) + .where( + beforeFromLastReviewId(lastReviewId), + review.menu.in(menuList) + ) + .orderBy(review.id.asc()) + .limit(pageable.getPageSize() + 1L) + .fetch(); + return checkLastPage(pageable, reviewList); + } + + @Override + public Slice findByUserOrderByIdDesc(User user, Long lastReviewId, Pageable pageable) { + List reviewList = queryFactory.selectFrom(review) + .where( + nextFromLastReviewId(lastReviewId), + review.user.eq(user) + ) + .orderBy(review.id.desc()) + .limit(pageable.getPageSize() + 1L) + .fetch(); + return checkLastPage(pageable, reviewList); + } + + private BooleanExpression nextFromLastReviewId(Long reviewId) { + if (reviewId == null) { + return null; + } + return review.id.lt(reviewId); //reviewId < lastReviewId + } + + private BooleanExpression beforeFromLastReviewId(Long reviewId) { + if (reviewId == null) { + return null; + } + return review.id.gt(reviewId); //reviewId > lastReviewId + } + + //무한 스크롤 방식 처리하는 메소드 + private Slice checkLastPage(Pageable pageable, List results) { + + boolean hasNext = false; + + // 조회한 결과 개수가 요청한 페이지 사이즈보다 크면 뒤에 더 있음, next = true + if (results.size() > pageable.getPageSize()) { + hasNext = true; + results.remove(pageable.getPageSize()); + } + + return new SliceImpl<>(results, pageable, hasNext); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java index 8247a80a..cf422bc9 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java @@ -1,10 +1,7 @@ package ssu.eatssu.domain.review.service; -import java.util.Map; - -import org.springframework.stereotype.Service; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.persistence.QuerydslMealRatingCalculator; @@ -15,68 +12,70 @@ import ssu.eatssu.domain.review.dto.RatingAverages; import ssu.eatssu.domain.review.dto.ReviewRatingCount; +import java.util.Map; + @Service @RequiredArgsConstructor public class ReviewRatingService implements RatingCalculator { - private final QuerydslMealRatingCalculator mealRatingCalculator; - private final QuerydslMenuRatingCalculator menuRatingCalculator; - private final QuerydslMealRatingCounter mealRatingCounter; - private final QuerydslMenuRatingCounter menuRatingCounter; + private final QuerydslMealRatingCalculator mealRatingCalculator; + private final QuerydslMenuRatingCalculator menuRatingCalculator; + private final QuerydslMealRatingCounter mealRatingCounter; + private final QuerydslMenuRatingCounter menuRatingCounter; - @Override - public ReviewRatingCount mealRatingCount(Meal meal) { - Map ratingCountMap = mealRatingCounter.getRatingCountMap(meal.getId()); - return getRatingCount(ratingCountMap); - } + @Override + public ReviewRatingCount mealRatingCount(Meal meal) { + Map ratingCountMap = mealRatingCounter.getRatingCountMap(meal.getId()); + return getRatingCount(ratingCountMap); + } - @Override - public ReviewRatingCount menuRatingCount(Menu menu) { - Map ratingCountMap = menuRatingCounter.getRatingCountMap(menu.getId()); - return getRatingCount(ratingCountMap); - } + @Override + public ReviewRatingCount menuRatingCount(Menu menu) { + Map ratingCountMap = menuRatingCounter.getRatingCountMap(menu.getId()); + return getRatingCount(ratingCountMap); + } - @Override - public RatingAverages mealAverageRatings(Meal meal) { - Double mainRatingAverage = mealRatingCalculator.getMainRatingAverage(meal.getId()); - Double amountRatingAverage = mealRatingCalculator.getAmountRatingAverage(meal.getId()); - Double tasteRatingAverage = mealRatingCalculator.getTasteRatingAverage(meal.getId()); - return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); - } + @Override + public RatingAverages mealAverageRatings(Meal meal) { + Double mainRatingAverage = mealRatingCalculator.getMainRatingAverage(meal.getId()); + Double amountRatingAverage = mealRatingCalculator.getAmountRatingAverage(meal.getId()); + Double tasteRatingAverage = mealRatingCalculator.getTasteRatingAverage(meal.getId()); + return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); + } - @Override - public RatingAverages menuAverageRatings(Menu menu) { - Double mainRatingAverage = menuRatingCalculator.getMainRatingAverage(menu.getId()); - Double amountRatingAverage = menuRatingCalculator.getAmountRatingAverage(menu.getId()); - Double tasteRatingAverage = menuRatingCalculator.getTasteRatingAverage(menu.getId()); - return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); - } + @Override + public RatingAverages menuAverageRatings(Menu menu) { + Double mainRatingAverage = menuRatingCalculator.getMainRatingAverage(menu.getId()); + Double amountRatingAverage = menuRatingCalculator.getAmountRatingAverage(menu.getId()); + Double tasteRatingAverage = menuRatingCalculator.getTasteRatingAverage(menu.getId()); + return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); + } - @Override - public Double mealAverageMainRating(Meal meal) { - return mealRatingCalculator.getMainRatingAverage(meal.getId()); - } + @Override + public Double mealAverageMainRating(Meal meal) { + return mealRatingCalculator.getMainRatingAverage(meal.getId()); + } - @Override - public Double menuAverageMainRating(Menu menu) { - return menuRatingCalculator.getMainRatingAverage(menu.getId()); - } + @Override + public Double menuAverageMainRating(Menu menu) { + return menuRatingCalculator.getMainRatingAverage(menu.getId()); + } - @Override - public long mealTotalReviewCount(Meal meal) { - return mealRatingCounter.getTotalRatingCount(meal.getId()); - } + @Override + public long mealTotalReviewCount(Meal meal) { + return mealRatingCounter.getTotalRatingCount(meal.getId()); + } - private ReviewRatingCount getRatingCount(Map ratingCountMap) { - long oneStarCount = getCount(ratingCountMap, 1); - long twoStarCount = getCount(ratingCountMap, 2); - long threeStarCount = getCount(ratingCountMap, 3); - long fourStarCount = getCount(ratingCountMap, 4); - long fiveStarCount = getCount(ratingCountMap, 5); - return new ReviewRatingCount(oneStarCount, twoStarCount, threeStarCount, fourStarCount, fiveStarCount); - } + private ReviewRatingCount getRatingCount(Map ratingCountMap) { + long oneStarCount = getCount(ratingCountMap, 1); + long twoStarCount = getCount(ratingCountMap, 2); + long threeStarCount = getCount(ratingCountMap, 3); + long fourStarCount = getCount(ratingCountMap, 4); + long fiveStarCount = getCount(ratingCountMap, 5); + return new ReviewRatingCount(oneStarCount, twoStarCount, threeStarCount, fourStarCount, fiveStarCount); + } - private long getCount(Map ratingCountMap, int star) { - return ratingCountMap.getOrDefault(star, 0L); - } + private long getCount(Map ratingCountMap, int star) { + return ratingCountMap.getOrDefault(star, 0L); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index b9502371..5e62ce31 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -1,16 +1,10 @@ package ssu.eatssu.domain.review.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - -import java.io.IOException; -import java.util.List; - +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -34,139 +28,149 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.util.S3Uploader; +import java.io.IOException; +import java.util.List; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.FAIL_IMAGE_UPLOAD; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MEAL; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; + @Slf4j @RequiredArgsConstructor @Service @Transactional public class ReviewService { - private final UserRepository userRepository; - private final ReviewRepository reviewRepository; - private final ReviewImageRepository reviewImageRepository; - private final MenuRepository menuRepository; - private final MealRepository mealRepository; - private final RatingCalculator ratingCalculator; - private final S3Uploader s3Uploader; - - public Review createReview(CustomUserDetails userDetails, Long menuId, ReviewCreateRequest request, - List images) { - - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - - Review review = request.toEntity(user, menu); - - menu.addReview(review); - processReviewImages(images, review); - - return reviewRepository.save(review); - } - - private void processReviewImages(List images, Review review) { - if (images == null || images.isEmpty()) { - return; - } - for (MultipartFile image : images) { - addReviewImage(review, image); - } - } - - private void addReviewImage(Review review, MultipartFile image) { - if (!image.isEmpty()) { - try { - String reviewImageUrl = s3Uploader.upload(image, "reviewImg"); - ReviewImage reviewImage = ReviewImage.builder().review(review) - .imageUrl(reviewImageUrl) - .build(); - reviewImageRepository.save(reviewImage); - } catch (IOException e) { - throw new BaseException(FAIL_IMAGE_UPLOAD); - } - } - } - - public SavedReviewImage uploadImage(MultipartFile image) { - try { - String imageUrl = s3Uploader.upload(image, "reviewImg"); - SavedReviewImage savedReviewImage = new SavedReviewImage(imageUrl); - log.info("[리뷰 이미지 업로드 완료] 업로드된 URL = {}", savedReviewImage.getUrl()); - return savedReviewImage; - } catch (IOException e) { - log.error("[리뷰 이미지 업로드 실패]", e); - throw new BaseException(FAIL_IMAGE_UPLOAD); - } - } - - public void uploadReview(CustomUserDetails userDetails, Long menuId, UploadReviewRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - - Review review = request.toReviewEntity(user, menu); - reviewRepository.save(review); - - ReviewImage reviewImage = new ReviewImage(review, request.getImageUrl()); - reviewImageRepository.save(reviewImage); - - menu.addReview(review); - } - - public void updateReview(CustomUserDetails userDetails, Long reviewId, - ReviewUpdateRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - if (review.isNotWrittenBy(user)) { - throw new BaseException(REVIEW_PERMISSION_DENIED); - } - - review.update(request.content(), request.mainRating(), request.amountRating(), - request.tasteRating()); - } - - public void deleteReview(CustomUserDetails userDetails, Long reviewId) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - if (review.isNotWrittenBy(user)) { - throw new BaseException(REVIEW_PERMISSION_DENIED); - } - reviewRepository.delete(review); - reviewRepository.flush(); - } - - public MenuReviewResponse findMenuReviews(Long menuId) { - Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - - RatingAverages ratingAverages = ratingCalculator.menuAverageRatings(menu); - ReviewRatingCount ratingCount = ratingCalculator.menuRatingCount(menu); - - return MenuReviewResponse.of(menu, ratingAverages, ratingCount); - - } - - public MealReviewsResponse findMealReviews(Long mealId) { - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); - - long reviewCount = ratingCalculator.mealTotalReviewCount(meal); - - RatingAverages averageRating = ratingCalculator.mealAverageRatings(meal); - ReviewRatingCount ratingCountMap = ratingCalculator.mealRatingCount(meal); - - return MealReviewsResponse.of(reviewCount, meal.getMenuNames(), averageRating, - ratingCountMap); - } + private final UserRepository userRepository; + private final ReviewRepository reviewRepository; + private final ReviewImageRepository reviewImageRepository; + private final MenuRepository menuRepository; + private final MealRepository mealRepository; + private final RatingCalculator ratingCalculator; + private final S3Uploader s3Uploader; + + public Review createReview(CustomUserDetails userDetails, Long menuId, ReviewCreateRequest request, + List images) { + + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + + Review review = request.toEntity(user, menu); + + menu.addReview(review); + processReviewImages(images, review); + + return reviewRepository.save(review); + } + + private void processReviewImages(List images, Review review) { + if (images == null || images.isEmpty()) { + return; + } + for (MultipartFile image : images) { + addReviewImage(review, image); + } + } + + private void addReviewImage(Review review, MultipartFile image) { + if (!image.isEmpty()) { + try { + String reviewImageUrl = s3Uploader.upload(image, "reviewImg"); + ReviewImage reviewImage = ReviewImage.builder().review(review) + .imageUrl(reviewImageUrl) + .build(); + reviewImageRepository.save(reviewImage); + } catch (IOException e) { + throw new BaseException(FAIL_IMAGE_UPLOAD); + } + } + } + + public SavedReviewImage uploadImage(MultipartFile image) { + try { + String imageUrl = s3Uploader.upload(image, "reviewImg"); + SavedReviewImage savedReviewImage = new SavedReviewImage(imageUrl); + log.info("[리뷰 이미지 업로드 완료] 업로드된 URL = {}", savedReviewImage.getUrl()); + return savedReviewImage; + } catch (IOException e) { + log.error("[리뷰 이미지 업로드 실패]", e); + throw new BaseException(FAIL_IMAGE_UPLOAD); + } + } + + public void uploadReview(CustomUserDetails userDetails, Long menuId, UploadReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + + Review review = request.toReviewEntity(user, menu); + reviewRepository.save(review); + + ReviewImage reviewImage = new ReviewImage(review, request.getImageUrl()); + reviewImageRepository.save(reviewImage); + + menu.addReview(review); + } + + public void updateReview(CustomUserDetails userDetails, Long reviewId, + ReviewUpdateRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (review.isNotWrittenBy(user)) { + throw new BaseException(REVIEW_PERMISSION_DENIED); + } + + review.update(request.content(), request.mainRating(), request.amountRating(), + request.tasteRating()); + } + + public void deleteReview(CustomUserDetails userDetails, Long reviewId) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (review.isNotWrittenBy(user)) { + throw new BaseException(REVIEW_PERMISSION_DENIED); + } + reviewRepository.delete(review); + reviewRepository.flush(); + } + + public MenuReviewResponse findMenuReviews(Long menuId) { + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + + RatingAverages ratingAverages = ratingCalculator.menuAverageRatings(menu); + ReviewRatingCount ratingCount = ratingCalculator.menuRatingCount(menu); + + return MenuReviewResponse.of(menu, ratingAverages, ratingCount); + + } + + public MealReviewsResponse findMealReviews(Long mealId) { + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + + long reviewCount = ratingCalculator.mealTotalReviewCount(meal); + + RatingAverages averageRating = ratingCalculator.mealAverageRatings(meal); + ReviewRatingCount ratingCountMap = ratingCalculator.mealRatingCount(meal); + + return MealReviewsResponse.of(reviewCount, meal.getMenuNames(), averageRating, + ratingCountMap); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 36ac0359..60e4069c 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -1,21 +1,11 @@ package ssu.eatssu.domain.review.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; - +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -41,289 +31,305 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MEAL; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; + @RequiredArgsConstructor @Service public class ReviewServiceV2 { - private final UserRepository userRepository; - private final ReviewRepository reviewRepository; - private final MenuRepository menuRepository; - private final MealRepository mealRepository; - private final MealMenuRepository mealMenuRepository; - private final ReviewLikeRepository reviewLikeRepository; - - /** - * 리뷰 생성 - */ - @Transactional - public void createReview(CustomUserDetails userDetails, CreateMealReviewRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Meal meal = mealRepository.findById(request.getMealId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); - - Review review = request.toReviewEntity(user, meal); - - request.getImageUrls().forEach(review::addReviewImage); - - for (MenuLikeRequest menuLike : request.getMenuLikes()) { - Menu menu = menuRepository.findById(menuLike.getMenuId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - review.addReviewMenuLike(menu, menuLike.getIsLike()); - } - - reviewRepository.save(review); - } - - /** - * 특정 식당 리뷰 조회 - */ - public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { - List meals = mealRepository.findByRestaurant(restaurant); - List reviews = reviewRepository.findByMealIn(meals); - List menus = mealMenuRepository.findMenusByMeals(meals); - - Double averageRating = Optional.ofNullable(reviews) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Review::getRating) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .average() - .orElse(0.0); - - Integer likeCount = Optional.ofNullable(menus) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Menu::getLikeCount) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .sum(); - - - Integer unlikeCount = Optional.ofNullable(menus) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Menu::getUnlikeCount) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .sum(); - - ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); - - return RestaurantReviewResponse.builder() - .totalReviewCount(reviews.size()) - .reviewRatingCount(reviewRatingCount) - .mainRating(Math.round(averageRating * 10) / 10.0) - .likeCount(likeCount) - .unlikeCount(unlikeCount) - .build(); - } - - /** - * 특정 식단 리뷰 리스트 조회 - */ - public SliceResponse findReviews(Long mealId, Long lastReviewId, Pageable pageable, - CustomUserDetails userDetails) { - if (!mealRepository.existsById(mealId)) { - throw new BaseException(NOT_FOUND_MEAL); - } - - List menuIds = mealMenuRepository.findMenuIdsByMealId(mealId); - if (menuIds.isEmpty()) { - return SliceResponse.empty(); - } - - List mealIds = mealMenuRepository.findMealIdsByMenuIds(menuIds); - if (mealIds.isEmpty()) { - return SliceResponse.empty(); - } - - Page pageReviews = reviewRepository.findReviewsByMealIds(mealIds, lastReviewId, pageable); - - Long userId = (userDetails != null) ? userDetails.getId() : null; - List mealReviewResponses = - pageReviews.getContent().stream().map(review -> MealReviewResponse.from(review, - userId)).collect(Collectors.toList()); - - return SliceResponse.builder() - .numberOfElements(pageReviews.getNumberOfElements()) - .hasNext(pageReviews.hasNext()) - .dataList(mealReviewResponses) - .build(); - } - - /** - * 특정 Menu 리뷰 조회 - */ - public MenuReviewsV2Response findMenuReviews(Long menuId) { - Menu menu = menuRepository.findById(menuId).orElseThrow(()-> new BaseException(NOT_FOUND_MENU)); - List reviews = reviewRepository.findAllByMenu(menu); - - Double averageRating = Optional.ofNullable(reviews) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Review::getRating) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .average() - .orElse(0.0); - - Integer likeCount = menu.getLikeCount(); - - - Integer unlikeCount = menu.getUnlikeCount(); - - ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); - - return MenuReviewsV2Response.builder() - .totalReviewCount((long)reviews.size()) - .reviewRatingCount(reviewRatingCount) - .mainRating(Math.round(averageRating * 10) / 10.0) - .likeCount(likeCount) - .unlikeCount(unlikeCount) - .build(); - } - - /** - * 특정 Meal 리뷰 조회 - */ - public MealReviewsV2Response findMealReviews(Long mealId) { - Meal meal = mealRepository.findById(mealId).orElseThrow(()-> new BaseException(NOT_FOUND_MEAL)); - List reviews = reviewRepository.findAllByMeal(meal); - List menus = mealMenuRepository.findMenusByMeal(meal); - - Double averageRating = Optional.ofNullable(reviews) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Review::getRating) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .average() - .orElse(0.0); - - Integer likeCount = Optional.ofNullable(menus) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Menu::getLikeCount) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .sum(); - - - Integer unlikeCount = Optional.ofNullable(menus) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Menu::getUnlikeCount) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .sum(); - - ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); - - return MealReviewsV2Response.builder() - .totalReviewCount((long)reviews.size()) - .reviewRatingCount(reviewRatingCount) - .mainRating(Math.round(averageRating * 10) / 10.0) - .likeCount(likeCount) - .unlikeCount(unlikeCount) - .build(); - } - - /** - * 리뷰 수정 - */ - @Transactional - public void updateReview(CustomUserDetails userDetails, Long reviewId, UpdateMealReviewRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - if (review.isNotWrittenBy(user)) { - throw new BaseException(REVIEW_PERMISSION_DENIED); - } - - Map menuLikes = request.getMenuLikes().stream() - .collect(Collectors.toMap( - menuLike -> menuRepository.findById(menuLike.getMenuId()) - .orElseThrow(() -> new BaseException( - NOT_FOUND_MENU)), - MenuLikeRequest::getIsLike)); - - review.update(request.getContent(), request.getRating(), menuLikes); - reviewRepository.save(review); - } - - /** - * 리뷰 삭제 - */ - @Transactional - public void deleteReview(CustomUserDetails userDetails, Long reviewId) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - if (review.isNotWrittenBy(user)) { - throw new BaseException(REVIEW_PERMISSION_DENIED); - } - - review.resetMenuLikes(); - reviewRepository.delete(review); - } - - /** - * 내 리뷰 리스트 조회 - */ - public SliceResponse findMyReviews(CustomUserDetails userDetails, Long lastReviewId, - Pageable pageable) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, - pageable); - - List myMealReviewResponses = sliceReviews.getContent().stream() - .map(MyMealReviewResponse::from).toList(); - - return SliceResponse.builder() - .numberOfElements(sliceReviews.getNumberOfElements()) - .hasNext(sliceReviews.hasNext()) - .dataList(myMealReviewResponses) - .build(); - } - - /** - * 리뷰 좋아요 누르기/취소하기 - */ - @Transactional - public void toggleReviewLike(CustomUserDetails userDetails, Long reviewId) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - Optional optionalReviewLike = reviewLikeRepository.findByReviewAndUser(review, user); - if (optionalReviewLike.isPresent()) { - // 이미 좋아요 한 경우 -> 좋아요 취소 처리 - ReviewLike reviewLike = optionalReviewLike.get(); - review.getReviewLikes().remove(reviewLike); - reviewLikeRepository.delete(reviewLike); - } else { - // 좋아요 하지 않은 경우 -> 좋아요 추가 처리 - ReviewLike reviewLike = ReviewLike.create(user, review); - review.getReviewLikes().add(reviewLike); - reviewLikeRepository.save(reviewLike); - } - } + private final UserRepository userRepository; + private final ReviewRepository reviewRepository; + private final MenuRepository menuRepository; + private final MealRepository mealRepository; + private final MealMenuRepository mealMenuRepository; + private final ReviewLikeRepository reviewLikeRepository; + + /** + * 리뷰 생성 + */ + @Transactional + public void createReview(CustomUserDetails userDetails, CreateMealReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Meal meal = mealRepository.findById(request.getMealId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + + Review review = request.toReviewEntity(user, meal); + + request.getImageUrls().forEach(review::addReviewImage); + + for (MenuLikeRequest menuLike : request.getMenuLikes()) { + Menu menu = menuRepository.findById(menuLike.getMenuId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + review.addReviewMenuLike(menu, menuLike.getIsLike()); + } + + reviewRepository.save(review); + } + + /** + * 특정 식당 리뷰 조회 + */ + public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { + List meals = mealRepository.findByRestaurant(restaurant); + List reviews = reviewRepository.findByMealIn(meals); + List menus = mealMenuRepository.findMenusByMeals(meals); + + Double averageRating = Optional.ofNullable(reviews) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Review::getRating) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + + Integer likeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getLikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + + Integer unlikeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getUnlikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); + + return RestaurantReviewResponse.builder() + .totalReviewCount(reviews.size()) + .reviewRatingCount(reviewRatingCount) + .mainRating(Math.round(averageRating * 10) / 10.0) + .likeCount(likeCount) + .unlikeCount(unlikeCount) + .build(); + } + + /** + * 특정 식단 리뷰 리스트 조회 + */ + public SliceResponse findReviews(Long mealId, Long lastReviewId, Pageable pageable, + CustomUserDetails userDetails) { + if (!mealRepository.existsById(mealId)) { + throw new BaseException(NOT_FOUND_MEAL); + } + + List menuIds = mealMenuRepository.findMenuIdsByMealId(mealId); + if (menuIds.isEmpty()) { + return SliceResponse.empty(); + } + + List mealIds = mealMenuRepository.findMealIdsByMenuIds(menuIds); + if (mealIds.isEmpty()) { + return SliceResponse.empty(); + } + + Page pageReviews = reviewRepository.findReviewsByMealIds(mealIds, lastReviewId, pageable); + + Long userId = (userDetails != null) ? userDetails.getId() : null; + List mealReviewResponses = + pageReviews.getContent() + .stream() + .map(review -> MealReviewResponse.from(review, + userId)) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(pageReviews.getNumberOfElements()) + .hasNext(pageReviews.hasNext()) + .dataList(mealReviewResponses) + .build(); + } + + /** + * 특정 Menu 리뷰 조회 + */ + public MenuReviewsV2Response findMenuReviews(Long menuId) { + Menu menu = menuRepository.findById(menuId).orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + List reviews = reviewRepository.findAllByMenu(menu); + + Double averageRating = Optional.ofNullable(reviews) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Review::getRating) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + + Integer likeCount = menu.getLikeCount(); + + + Integer unlikeCount = menu.getUnlikeCount(); + + ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); + + return MenuReviewsV2Response.builder() + .totalReviewCount((long) reviews.size()) + .reviewRatingCount(reviewRatingCount) + .mainRating(Math.round(averageRating * 10) / 10.0) + .likeCount(likeCount) + .unlikeCount(unlikeCount) + .build(); + } + + /** + * 특정 Meal 리뷰 조회 + */ + public MealReviewsV2Response findMealReviews(Long mealId) { + Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + List reviews = reviewRepository.findAllByMeal(meal); + List menus = mealMenuRepository.findMenusByMeal(meal); + + Double averageRating = Optional.ofNullable(reviews) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Review::getRating) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + + Integer likeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getLikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + + Integer unlikeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getUnlikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); + + return MealReviewsV2Response.builder() + .totalReviewCount((long) reviews.size()) + .reviewRatingCount(reviewRatingCount) + .mainRating(Math.round(averageRating * 10) / 10.0) + .likeCount(likeCount) + .unlikeCount(unlikeCount) + .build(); + } + + /** + * 리뷰 수정 + */ + @Transactional + public void updateReview(CustomUserDetails userDetails, Long reviewId, UpdateMealReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (review.isNotWrittenBy(user)) { + throw new BaseException(REVIEW_PERMISSION_DENIED); + } + + Map menuLikes = request.getMenuLikes().stream() + .collect(Collectors.toMap( + menuLike -> menuRepository.findById(menuLike.getMenuId()) + .orElseThrow(() -> new BaseException( + NOT_FOUND_MENU)), + MenuLikeRequest::getIsLike)); + + review.update(request.getContent(), request.getRating(), menuLikes); + reviewRepository.save(review); + } + + /** + * 리뷰 삭제 + */ + @Transactional + public void deleteReview(CustomUserDetails userDetails, Long reviewId) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (review.isNotWrittenBy(user)) { + throw new BaseException(REVIEW_PERMISSION_DENIED); + } + + review.resetMenuLikes(); + reviewRepository.delete(review); + } + + /** + * 내 리뷰 리스트 조회 + */ + public SliceResponse findMyReviews(CustomUserDetails userDetails, Long lastReviewId, + Pageable pageable) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, + pageable); + + List myMealReviewResponses = sliceReviews.getContent().stream() + .map(MyMealReviewResponse::from).toList(); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(myMealReviewResponses) + .build(); + } + + /** + * 리뷰 좋아요 누르기/취소하기 + */ + @Transactional + public void toggleReviewLike(CustomUserDetails userDetails, Long reviewId) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + Optional optionalReviewLike = reviewLikeRepository.findByReviewAndUser(review, user); + if (optionalReviewLike.isPresent()) { + // 이미 좋아요 한 경우 -> 좋아요 취소 처리 + ReviewLike reviewLike = optionalReviewLike.get(); + review.getReviewLikes().remove(reviewLike); + reviewLikeRepository.delete(reviewLike); + } else { + // 좋아요 하지 않은 경우 -> 좋아요 추가 처리 + ReviewLike reviewLike = ReviewLike.create(user, review); + review.getReviewLikes().add(reviewLike); + reviewLikeRepository.save(reviewLike); + } + } } diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java index ce6f562a..d671170e 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java @@ -4,16 +4,16 @@ public enum SlackChannel { - REPORT_CHANNEL("#신고"), - ADDMENU_CHANNEL("#메뉴_추가"), - ERROR_CHANNEL("#장애"), - USER_INQUIRY_CHANNEL("#유저-문의"), - SERVER_ERROR("C092J4J6F0U"); + REPORT_CHANNEL("#신고"), + ADDMENU_CHANNEL("#메뉴_추가"), + ERROR_CHANNEL("#장애"), + USER_INQUIRY_CHANNEL("#유저-문의"), + SERVER_ERROR("C092J4J6F0U"); - @Getter - private String krName; + @Getter + private String krName; - SlackChannel(String krName) { - this.krName = krName; - } + SlackChannel(String krName) { + this.krName = krName; + } } diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java index 81cabe99..80d3f9ed 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java @@ -1,90 +1,89 @@ package ssu.eatssu.domain.slack.entity; -import java.text.MessageFormat; - import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; - import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.review.entity.Report; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; +import java.text.MessageFormat; + @Component public class SlackMessageFormat { - private static String serverEnv; + private static String serverEnv; - private SlackMessageFormat(@Value("${server.env:unknown}") String serverEnvValue) { - SlackMessageFormat.serverEnv = serverEnvValue; - } + private SlackMessageFormat(@Value("${server.env:unknown}") String serverEnvValue) { + SlackMessageFormat.serverEnv = serverEnvValue; + } - public static String sendReport(Report report) { - User reporter = report.getUser(); - Review review = report.getReview(); - MessageFormat messageFormat = new MessageFormat( - """ - =================== - *신고자 INFO* - - 신고자 ID: {0} - - 닉네임: {1} - *신고된 리뷰 INFO* - - 리뷰 ID: {2} - - 리뷰 작성자 ID : {3} - - 리뷰 작성자 닉네임 : {4} - - 리뷰 메뉴: {5} - - 리뷰 내용: {6} - - 리뷰 날짜: {7} - *신고 INFO* - - 신고사유: {8} - - 신고내용: {9} - - 신고 날짜: {10} - =================== - """ - ); - Object[] args = {reporter.getId(), reporter.getNickname(), review.getId(), review.getUser().getId(), - review.getUser().getNickname(), review.getMenu().getName(), review.getContent(), - review.getModifiedDate().toString(), report.getReportType().getDescription(), report.getContent(), - report.getCreatedDate()}; - return messageFormat.format(args); - } + public static String sendReport(Report report) { + User reporter = report.getUser(); + Review review = report.getReview(); + MessageFormat messageFormat = new MessageFormat( + """ + =================== + *신고자 INFO* + - 신고자 ID: {0} + - 닉네임: {1} + *신고된 리뷰 INFO* + - 리뷰 ID: {2} + - 리뷰 작성자 ID : {3} + - 리뷰 작성자 닉네임 : {4} + - 리뷰 메뉴: {5} + - 리뷰 내용: {6} + - 리뷰 날짜: {7} + *신고 INFO* + - 신고사유: {8} + - 신고내용: {9} + - 신고 날짜: {10} + =================== + """ + ); + Object[] args = {reporter.getId(), reporter.getNickname(), review.getId(), review.getUser().getId(), + review.getUser().getNickname(), review.getMenu().getName(), review.getContent(), + review.getModifiedDate().toString(), report.getReportType().getDescription(), report.getContent(), + report.getCreatedDate()}; + return messageFormat.format(args); + } - public static String sendUserInquiry(Inquiry inquiry) { - MessageFormat messageFormat = new MessageFormat( - """ - =================== - *문의 INFO* - - 문의자 ID: {0} - - 닉네임: {1} - - 이메일: {2} - *문의 내용* - - Date: {3} - - Content: {4} - =================== - """ - ); - Object[] args = {inquiry.getUser().getId(), inquiry.getUser().getNickname(), inquiry.getUser().getEmail() - , inquiry.getCreatedDate(), inquiry.getContent()}; - return messageFormat.format(args); - } + public static String sendUserInquiry(Inquiry inquiry) { + MessageFormat messageFormat = new MessageFormat( + """ + =================== + *문의 INFO* + - 문의자 ID: {0} + - 닉네임: {1} + - 이메일: {2} + *문의 내용* + - Date: {3} + - Content: {4} + =================== + """ + ); + Object[] args = {inquiry.getUser().getId(), inquiry.getUser().getNickname(), inquiry.getUser().getEmail() + , inquiry.getCreatedDate(), inquiry.getContent()}; + return messageFormat.format(args); + } - public static String sendServerError(Exception ex) { - MessageFormat messageFormat = new MessageFormat( - """ - =================== - *서버 에러 발생* - - 예외 클래스: {0} - - 예외 메시지: {1} - - 개발환경: {2} - =================== - """ - ); - Object[] args = { - ex.getClass().getName(), - ex.getMessage(), - serverEnv, - }; - return messageFormat.format(args); - } + public static String sendServerError(Exception ex) { + MessageFormat messageFormat = new MessageFormat( + """ + =================== + *서버 에러 발생* + - 예외 클래스: {0} + - 예외 메시지: {1} + - 개발환경: {2} + =================== + """ + ); + Object[] args = { + ex.getClass().getName(), + ex.getMessage(), + serverEnv, + }; + return messageFormat.format(args); + } } diff --git a/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java b/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java index 33a5a5d4..4f20ac3a 100644 --- a/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java +++ b/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java @@ -1,43 +1,40 @@ package ssu.eatssu.domain.slack.service; -import java.io.IOException; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; - import com.slack.api.Slack; import com.slack.api.methods.MethodsClient; import com.slack.api.methods.SlackApiException; import com.slack.api.methods.request.chat.ChatPostMessageRequest; -import com.slack.api.methods.response.chat.ChatPostMessageResponse; - import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; import ssu.eatssu.domain.slack.entity.SlackChannel; +import java.io.IOException; + @Slf4j @Service public class SlackService { - @Value(value = "${slack.token}") - String slackToken; + @Value(value = "${slack.token}") + String slackToken; - public void sendSlackMessage(String message, SlackChannel channel) { + public void sendSlackMessage(String message, SlackChannel channel) { - String channelAddress = channel.getKrName(); + String channelAddress = channel.getKrName(); - try { - MethodsClient methods = Slack.getInstance().methods(slackToken); + try { + MethodsClient methods = Slack.getInstance().methods(slackToken); - ChatPostMessageRequest request = ChatPostMessageRequest.builder() - .channel(channelAddress) - .text(message) - .build(); + ChatPostMessageRequest request = ChatPostMessageRequest.builder() + .channel(channelAddress) + .text(message) + .build(); - methods.chatPostMessage(request); + methods.chatPostMessage(request); - log.info("Slack " + channel + " 에 메시지 보냄"); - } catch (SlackApiException | IOException e) { - log.error(e.getMessage()); - } - } + log.info("Slack " + channel + " 에 메시지 보냄"); + } catch (SlackApiException | IOException e) { + log.error(e.getMessage()); + } + } } diff --git a/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java b/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java index 6d7015ba..fd82109a 100644 --- a/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java +++ b/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java @@ -1,27 +1,27 @@ package ssu.eatssu.domain.slice.dto; -import java.util.Collections; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import java.util.Collections; +import java.util.List; + @AllArgsConstructor @Builder @Getter public class SliceResponse { - @Schema(description = "현재 넘겨준 페이지에 넘어간 개수(마지막 페이지일시, size 보다 작을 수 있음)", example = "20") - private int numberOfElements; + @Schema(description = "현재 넘겨준 페이지에 넘어간 개수(마지막 페이지일시, size 보다 작을 수 있음)", example = "20") + private int numberOfElements; - @Schema(description = "다음페이지가 있는지 알려주는 값(마지막 페이지라면 false)", example = "true") - private boolean hasNext; + @Schema(description = "다음페이지가 있는지 알려주는 값(마지막 페이지라면 false)", example = "true") + private boolean hasNext; - @Schema(description = "데이터 리스트") - private List dataList; + @Schema(description = "데이터 리스트") + private List dataList; - public static SliceResponse empty() { - return new SliceResponse<>(0, false, Collections.emptyList()); - } + public static SliceResponse empty() { + return new SliceResponse<>(0, false, Collections.emptyList()); + } } diff --git a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java index 7ad650aa..096c6327 100644 --- a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java +++ b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java @@ -1,15 +1,9 @@ package ssu.eatssu.domain.slice.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - -import java.util.List; -import java.util.stream.Collectors; - +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -25,77 +19,83 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import java.util.List; +import java.util.stream.Collectors; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; + @Service @RequiredArgsConstructor public class SliceService { - private final UserRepository userRepository; - private final ReviewRepository reviewRepository; - private final MenuRepository menuRepository; - private final MealRepository mealRepository; - - public SliceResponse findMyReviews( - CustomUserDetails userDetails, - Pageable pageable, - Long lastReviewId) { - - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, - pageable); - - return convertToMyReviewDetail(sliceReviews); - } - - public SliceResponse findReviews(MenuType menuType, - Long menuId, - Long mealId, - Pageable pageable, - Long lastReviewId, - CustomUserDetails userDetails) { - Slice sliceReviews = null; - if (menuType == MenuType.FIXED) { - Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - sliceReviews = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, - pageable); - } - - if (menuType == MenuType.VARIABLE) { - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - sliceReviews = reviewRepository.findAllByMealOrderByIdDesc(meal, lastReviewId, - pageable); - } - - Long userId = (userDetails != null) ? userDetails.getId() : null; - return convertToReviewDetail(sliceReviews, userId); - } - - private SliceResponse convertToReviewDetail(Slice sliceReviews, - Long userId) { - List reviewDetails = sliceReviews.getContent().stream() - .map(review -> ReviewDetail.from(review, userId)) - .collect(Collectors.toList()); - - return SliceResponse.builder() - .numberOfElements(sliceReviews.getNumberOfElements()) - .hasNext(sliceReviews.hasNext()) - .dataList(reviewDetails) - .build(); - } - - private SliceResponse convertToMyReviewDetail(Slice sliceReviews) { - List myReviewDetails = sliceReviews.getContent().stream() - .map(MyReviewDetail::from) - .collect(Collectors.toList()); - - return SliceResponse.builder() - .numberOfElements(sliceReviews.getNumberOfElements()) - .hasNext(sliceReviews.hasNext()) - .dataList(myReviewDetails) - .build(); - } + private final UserRepository userRepository; + private final ReviewRepository reviewRepository; + private final MenuRepository menuRepository; + private final MealRepository mealRepository; + + public SliceResponse findMyReviews( + CustomUserDetails userDetails, + Pageable pageable, + Long lastReviewId) { + + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, + pageable); + + return convertToMyReviewDetail(sliceReviews); + } + + public SliceResponse findReviews(MenuType menuType, + Long menuId, + Long mealId, + Pageable pageable, + Long lastReviewId, + CustomUserDetails userDetails) { + Slice sliceReviews = null; + if (menuType == MenuType.FIXED) { + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + sliceReviews = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, + pageable); + } + + if (menuType == MenuType.VARIABLE) { + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + sliceReviews = reviewRepository.findAllByMealOrderByIdDesc(meal, lastReviewId, + pageable); + } + + Long userId = (userDetails != null) ? userDetails.getId() : null; + return convertToReviewDetail(sliceReviews, userId); + } + + private SliceResponse convertToReviewDetail(Slice sliceReviews, + Long userId) { + List reviewDetails = sliceReviews.getContent().stream() + .map(review -> ReviewDetail.from(review, userId)) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(reviewDetails) + .build(); + } + + private SliceResponse convertToMyReviewDetail(Slice sliceReviews) { + List myReviewDetails = sliceReviews.getContent().stream() + .map(MyReviewDetail::from) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(myReviewDetails) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/department/entity/College.java b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java index 1f6ec4e3..a18edb55 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/entity/College.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java @@ -1,8 +1,5 @@ package ssu.eatssu.domain.user.department.entity; -import java.util.ArrayList; -import java.util.List; - import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -15,21 +12,24 @@ import lombok.NoArgsConstructor; import ssu.eatssu.domain.partnership.entity.PartnershipCollege; +import java.util.ArrayList; +import java.util.List; + @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class College { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "college_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "college_id") + private Long id; - @Column(nullable = false, unique = true) - private String name; + @Column(nullable = false, unique = true) + private String name; - @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) - private List departments = new ArrayList<>(); + @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) + private List departments = new ArrayList<>(); - @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) - private List partnershipColleges = new ArrayList<>(); + @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) + private List partnershipColleges = new ArrayList<>(); } diff --git a/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java index f91bd744..05f4bdea 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java @@ -1,8 +1,5 @@ package ssu.eatssu.domain.user.department.entity; -import java.util.ArrayList; -import java.util.List; - import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -18,22 +15,25 @@ import lombok.NoArgsConstructor; import ssu.eatssu.domain.partnership.entity.PartnershipDepartment; +import java.util.ArrayList; +import java.util.List; + @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Department { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "department_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "department_id") + private Long id; - @Column(nullable = false) - private String name; + @Column(nullable = false) + private String name; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "college_id") - private College college; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "college_id") + private College college; - @OneToMany(mappedBy = "department", cascade = CascadeType.ALL, orphanRemoval = true) - private List partnershipDepartments = new ArrayList<>(); + @OneToMany(mappedBy = "department", cascade = CascadeType.ALL, orphanRemoval = true) + private List partnershipDepartments = new ArrayList<>(); } diff --git a/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java b/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java index c9d21e6c..4e7c6d89 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java @@ -1,11 +1,10 @@ package ssu.eatssu.domain.user.department.persistence; -import java.util.Optional; - import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.user.department.entity.College; +import java.util.Optional; + public interface CollegeRepository extends JpaRepository { - Optional findByName(String name); + Optional findByName(String name); } diff --git a/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java b/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java index db9a9bfb..942e4063 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java @@ -1,11 +1,10 @@ package ssu.eatssu.domain.user.department.persistence; -import java.util.Optional; - import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.user.department.entity.Department; +import java.util.Optional; + public interface DepartmentRepository extends JpaRepository { - Optional findByName(String name); + Optional findByName(String name); } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java index ef62a91b..7df39fdb 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java @@ -6,5 +6,5 @@ @Getter @AllArgsConstructor public class DepartmentResponse { - private String departmentName; + private String departmentName; } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index d5336984..94533ef3 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -1,45 +1,45 @@ package ssu.eatssu.domain.user.dto; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import ssu.eatssu.domain.review.entity.Review; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + @AllArgsConstructor @Builder @Schema(title = "리뷰 상세 - 내 리뷰 리스트 조회 용") @Getter public class MyMealReviewResponse { - @Schema(description = "리뷰 식별자", example = "123") - Long reviewId; + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; - @Schema(description = "평점", example = "4") - private Integer rating; + @Schema(description = "평점", example = "4") + private Integer rating; - @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") - private LocalDate writtenAt; + @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") + private LocalDate writtenAt; - @Schema(description = "리뷰 내용", example = "맛있습니당") - private String content; + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imageUrls; + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; - public static MyMealReviewResponse from(Review review) { - List imgUrlList = new ArrayList<>(); - review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); + public static MyMealReviewResponse from(Review review) { + List imgUrlList = new ArrayList<>(); + review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); - return MyMealReviewResponse.builder() - .reviewId(review.getId()) - .rating(review.getRating()) - .writtenAt(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .imageUrls(imgUrlList) - .build(); - } + return MyMealReviewResponse.builder() + .reviewId(review.getId()) + .rating(review.getRating()) + .writtenAt(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imageUrls(imgUrlList) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java index 22d0b19e..d5d7d529 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java @@ -11,9 +11,9 @@ @Schema(title = "마이페이지 정보") @Getter public class MyPageResponse { - @Schema(description = "닉네임", example = "피치푸치") - private String nickname; + @Schema(description = "닉네임", example = "피치푸치") + private String nickname; - @Schema(description = "연결 계정 정보", example = "피치푸치") - private OAuthProvider provider; + @Schema(description = "연결 계정 정보", example = "피치푸치") + private OAuthProvider provider; } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java index 72af9b1b..83e65827 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java @@ -1,59 +1,59 @@ package ssu.eatssu.domain.user.dto; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import ssu.eatssu.domain.review.entity.Review; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + @AllArgsConstructor @Builder @Schema(title = "리뷰 상세 - 내 리뷰 리스트 조회 용") @Getter public class MyReviewDetail { - @Schema(description = "리뷰 식별자", example = "123") - Long reviewId; + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; - @Schema(description = "평점-메인", example = "4") - private Integer mainRating; + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; - @Schema(description = "평점-양", example = "4") - private Integer amountRating; + @Schema(description = "평점-양", example = "4") + private Integer amountRating; - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; - @Schema(description = "리뷰 작성 날짜(format = yyyyMMdd)", example = "20230407") - private LocalDate writeDate; + @Schema(description = "리뷰 작성 날짜(format = yyyyMMdd)", example = "20230407") + private LocalDate writeDate; - @Schema(description = "메뉴 이름", example = "돈까스") - private String menuName; + @Schema(description = "메뉴 이름", example = "돈까스") + private String menuName; - @Schema(description = "리뷰 내용", example = "맛있습니당") - private String content; + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imgUrlList; + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imgUrlList; - public static MyReviewDetail from(Review review) { + public static MyReviewDetail from(Review review) { - List imgUrlList = new ArrayList<>(); - review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); + List imgUrlList = new ArrayList<>(); + review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); - return MyReviewDetail.builder() - .reviewId(review.getId()) - .mainRating(review.getRatings().getMainRating()) - .amountRating(review.getRatings().getAmountRating()) - .tasteRating(review.getRatings().getTasteRating()) - .writeDate(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .imgUrlList(imgUrlList) - .menuName(review.getMenu().getName()) - .build(); - } + return MyReviewDetail.builder() + .reviewId(review.getId()) + .mainRating(review.getRatings().getMainRating()) + .amountRating(review.getRatings().getAmountRating()) + .tasteRating(review.getRatings().getTasteRating()) + .writeDate(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imgUrlList(imgUrlList) + .menuName(review.getMenu().getName()) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java b/src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java index f55579b0..10fcaef0 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java @@ -5,6 +5,6 @@ @Schema(title = "닉네임 수정") public record NicknameUpdateRequest( - @NotBlank(message = "닉네임을 입력해주세요.") @Schema(description = "닉네임", example = "jumukzzang") String nickname) { + @NotBlank(message = "닉네임을 입력해주세요.") @Schema(description = "닉네임", example = "jumukzzang") String nickname) { } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java b/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java index a97686a3..b848f223 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java @@ -8,15 +8,15 @@ @Getter public class Tokens { - @Schema(description = "accessToken", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjEsXCJlbWFpbFwiOlwiZW1haWxAZW1haWwuY29tXCJ9IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY3OTIyNzc0NX0.gM7F00Dh7OvybtEYODxYqFNATDDdquGCIivAeifNrEnF1ush3Fx1ChWqwD60U6Ek7rmJRU3CUUFAMLUrWDi4Aw") - private String accessToken; + @Schema(description = "accessToken", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjEsXCJlbWFpbFwiOlwiZW1haWxAZW1haWwuY29tXCJ9IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY3OTIyNzc0NX0.gM7F00Dh7OvybtEYODxYqFNATDDdquGCIivAeifNrEnF1ush3Fx1ChWqwD60U6Ek7rmJRU3CUUFAMLUrWDi4Aw") + private String accessToken; - @Schema(description = "refreshToken", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjEsXCJlbWFpbFwiOlwiZW1haWxAZW1haWwuY29tXCJ9IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY3OTgzMDc0NX0.OBtrGGKuSujBxwLTNVs-sc4eEH8uYiG8-Cwomqb_OgB9ADVbWbtSqaml9Ll34TFrKhPZuhMvzdchsWHqMQQ_kg") - private String refreshToken; + @Schema(description = "refreshToken", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjEsXCJlbWFpbFwiOlwiZW1haWxAZW1haWwuY29tXCJ9IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY3OTgzMDc0NX0.OBtrGGKuSujBxwLTNVs-sc4eEH8uYiG8-Cwomqb_OgB9ADVbWbtSqaml9Ll34TFrKhPZuhMvzdchsWHqMQQ_kg") + private String refreshToken; - @Builder - public Tokens(String accessToken, String refreshToken) { - this.accessToken = accessToken; - this.refreshToken = refreshToken; - } + @Builder + public Tokens(String accessToken, String refreshToken) { + this.accessToken = accessToken; + this.refreshToken = refreshToken; + } } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java b/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java index 72acf3df..c93bd8b1 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java @@ -10,6 +10,6 @@ @AllArgsConstructor @NoArgsConstructor public class UpdateDepartmentRequest { - @Schema(description = "학과 이름", example = "소프트") - private String departmentName; + @Schema(description = "학과 이름", example = "소프트") + private String departmentName; } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java b/src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java index 573e920c..c975acf3 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java @@ -1,27 +1,26 @@ package ssu.eatssu.domain.user.entity; -import java.time.LocalDateTime; - -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - import jakarta.persistence.Column; import jakarta.persistence.EntityListeners; import jakarta.persistence.MappedSuperclass; import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public abstract class BaseTimeEntity { - @Column(nullable = false) - @CreatedDate - private LocalDateTime createdDate; + @Column(nullable = false) + @CreatedDate + private LocalDateTime createdDate; - @Column(nullable = false) - @LastModifiedDate - private LocalDateTime modifiedDate; + @Column(nullable = false) + @LastModifiedDate + private LocalDateTime modifiedDate; } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/user/entity/Role.java b/src/main/java/ssu/eatssu/domain/user/entity/Role.java index ef27b76e..19780594 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/Role.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/Role.java @@ -1,25 +1,24 @@ package ssu.eatssu.domain.user.entity; -import org.springframework.security.core.GrantedAuthority; - import lombok.Getter; +import org.springframework.security.core.GrantedAuthority; @Getter public enum Role implements GrantedAuthority { - USER("ROLE_USER", "유저"), - ADMIN("ROLE_ADMIN", "관리자"); + USER("ROLE_USER", "유저"), + ADMIN("ROLE_ADMIN", "관리자"); - private final String authority; - private final String description; + private final String authority; + private final String description; - Role(String authority, String description) { - this.authority = authority; - this.description = description; - } + Role(String authority, String description) { + this.authority = authority; + this.description = description; + } - @Override - public String getAuthority() { - return authority; - } + @Override + public String getAuthority() { + return authority; + } } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index 5523bf44..79460500 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -1,10 +1,5 @@ package ssu.eatssu.domain.user.entity; -import java.util.ArrayList; -import java.util.List; - -import org.jetbrains.annotations.NotNull; - import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -20,6 +15,7 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; +import org.jetbrains.annotations.NotNull; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.partnership.entity.PartnershipLike; @@ -28,97 +24,100 @@ import ssu.eatssu.domain.review.entity.ReviewLike; import ssu.eatssu.domain.user.department.entity.Department; +import java.util.ArrayList; +import java.util.List; + @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class User extends BaseTimeEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "user_id") - private Long id; - - @Enumerated(EnumType.STRING) - private Role role; - - @Column(unique = true) - private String email; - - private String nickname; - - @Enumerated(EnumType.STRING) - private OAuthProvider provider; - - private String providerId; - - private String credentials; - - @Enumerated(EnumType.STRING) - private UserStatus status; - - @OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE - , CascadeType.REFRESH}) - private List reviews = new ArrayList<>(); - - @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) - private List reviewReports = new ArrayList<>(); - - @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) - private List userInquiries = new ArrayList<>(); - - @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) - private List reviewLikes = new ArrayList<>(); - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "department_id") - private Department department; - - @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) - private List partnershipLikes = new ArrayList<>(); - - /** - * Oauth 회원가입 용 생성자 - */ - private User(@NotNull String email, String nickname, @NotNull Role role, @NotNull OAuthProvider provider, - @NotNull String providerId, @NotNull UserStatus status, @NotNull String credentials) { - this.email = email; - this.nickname = nickname; - this.role = role; - this.provider = provider; - this.providerId = providerId; - this.status = status; - this.credentials = credentials; - } - - /** - * <--Static Factory Method--> - * Oauth 회원가입 - */ - public static User create(@NotNull String email, @NotNull String nickname, @NotNull OAuthProvider provider, - String providerId, - String credentials) { - return new User(email, nickname, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials); - } - - /** - * <--Static Factory Method--> - * admin 회원가입 - * Role 은 다른 방법으로 세팅할 예정 - */ - public static User adminJoin(@NotNull String loginId, @NotNull String credentials) { - return new User(loginId, null, Role.USER, OAuthProvider.EATSSU, loginId, UserStatus.INACTIVE, credentials); - } - - public void updateNickname(@NotNull String nickname) { - this.nickname = nickname; - } - - public void updateEmail(String email) { - this.email = email; - } - - public void updateDepartment(Department department) { - this.department = department; - } + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_id") + private Long id; + + @Enumerated(EnumType.STRING) + private Role role; + + @Column(unique = true) + private String email; + + private String nickname; + + @Enumerated(EnumType.STRING) + private OAuthProvider provider; + + private String providerId; + + private String credentials; + + @Enumerated(EnumType.STRING) + private UserStatus status; + + @OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE + , CascadeType.REFRESH}) + private List reviews = new ArrayList<>(); + + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) + private List reviewReports = new ArrayList<>(); + + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) + private List userInquiries = new ArrayList<>(); + + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) + private List reviewLikes = new ArrayList<>(); + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "department_id") + private Department department; + + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) + private List partnershipLikes = new ArrayList<>(); + + /** + * Oauth 회원가입 용 생성자 + */ + private User(@NotNull String email, String nickname, @NotNull Role role, @NotNull OAuthProvider provider, + @NotNull String providerId, @NotNull UserStatus status, @NotNull String credentials) { + this.email = email; + this.nickname = nickname; + this.role = role; + this.provider = provider; + this.providerId = providerId; + this.status = status; + this.credentials = credentials; + } + + /** + * <--Static Factory Method--> + * Oauth 회원가입 + */ + public static User create(@NotNull String email, @NotNull String nickname, @NotNull OAuthProvider provider, + String providerId, + String credentials) { + return new User(email, nickname, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials); + } + + /** + * <--Static Factory Method--> + * admin 회원가입 + * Role 은 다른 방법으로 세팅할 예정 + */ + public static User adminJoin(@NotNull String loginId, @NotNull String credentials) { + return new User(loginId, null, Role.USER, OAuthProvider.EATSSU, loginId, UserStatus.INACTIVE, credentials); + } + + public void updateNickname(@NotNull String nickname) { + this.nickname = nickname; + } + + public void updateEmail(String email) { + this.email = email; + } + + public void updateDepartment(Department department) { + this.department = department; + } } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/UserStatus.java b/src/main/java/ssu/eatssu/domain/user/entity/UserStatus.java index 3827d4e1..4f374c39 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/UserStatus.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/UserStatus.java @@ -4,5 +4,5 @@ @Getter public enum UserStatus { - ACTIVE, INACTIVE + ACTIVE, INACTIVE } diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 77d58615..92037741 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -1,7 +1,15 @@ package ssu.eatssu.domain.user.presentation; -import java.util.List; - +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -16,17 +24,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.enums.ParameterIn; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.validation.Valid; -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.PartnershipResponse; import ssu.eatssu.domain.partnership.service.PartnershipService; @@ -42,172 +39,174 @@ import ssu.eatssu.domain.user.service.UserService; import ssu.eatssu.global.handler.response.BaseResponse; +import java.util.List; + @RestController @RequiredArgsConstructor @RequestMapping("/users") @Tag(name = "User", description = "유저 API") public class UserController { - private final UserService userService; - private final SliceService sliceService; - private final ReviewServiceV2 mealReviewService; - private final PartnershipService partnershipService; - - @Operation(summary = "이메일 중복 체크", description = """ - 이메일 중복 체크 API 입니다.

- 중복되지 않은 이메일이면 true 를 반환합니다 - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "중복되지 않은 이메일") - }) - @PostMapping("/validate/email/{email}") //todo: 중복인 경우 error throw, 중복 아니면 ApiReposne return - public BaseResponse validateDuplicatedEmail( - @Parameter(description = "이메일") @PathVariable String email) { - return BaseResponse.success(userService.validateDuplicatedEmail(email)); - } - - @Operation(summary = "닉네임 중복 체크", description = """ - 닉네임 중복 체크 API 입니다.

- 중복되지 않은 닉네임이면 true 를 반환합니다 - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임") - }) - @GetMapping("/validate/nickname") - public BaseResponse validateDuplicatedNickname(@Parameter(description = "닉네임") - @RequestParam(value = "nickname") String nickname) { - return BaseResponse.success(userService.validateDuplicatedNickname(nickname)); - } - - @Operation(summary = "닉네임 수정", description = "닉네임 수정 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "닉네임 수정 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PatchMapping("/nickname") - public BaseResponse updateNickname( - @Valid @RequestBody NicknameUpdateRequest updateNicknameRequest, - @AuthenticationPrincipal CustomUserDetails userDetails) { - userService.updateNickname(userDetails, updateNicknameRequest); - return BaseResponse.success(); - } - - @Operation(summary = "유저 탈퇴", description = "유저 탈퇴 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("") - public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(userService.withdraw(userDetails)); - } - - @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/reviews") - public BaseResponse> getMyReviewList( - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = sliceService.findMyReviews(customUserDetails, - pageable, - lastReviewId); - return BaseResponse.success(myReviews); - } - - @Operation(summary = "내가 쓴 리뷰 리스트 조회 V2", description = "내가 쓴 리뷰 리스트를 조회하는 API V2 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/v2/reviews") - public BaseResponse> getMyReviews( - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = mealReviewService.findMyReviews(customUserDetails, - lastReviewId, - pageable); - return BaseResponse.success(myReviews); - } - - @Operation(summary = "마이페이지 정보 조회", description = "마이페이지 정보를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/mypage") - public BaseResponse getMyPage( - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - return BaseResponse.success(userService.findMyPage(customUserDetails)); - } - - @Operation(summary = "유저가 찜한 제휴 조회", description = "유저가 찜한 제휴를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저가 찜한 제휴 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/partnerships") - public BaseResponse> getUserLikedPartnerships( - @AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(partnershipService.getUserLikedPartnerships(userDetails)); - } - - @Operation(summary = "유저의 학과 등록", description = "유저의 학과를 등록하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저의 학과 등록 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 학과", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @PostMapping("/department") - public BaseResponse registerDepartment(@RequestBody UpdateDepartmentRequest request, - @AuthenticationPrincipal CustomUserDetails userDetails) { - userService.registerDepartment(request, userDetails); - return BaseResponse.success(); - } - - @Operation(summary = "유저의 단과대/학과 제휴 조회", description = "유저의 단과대/학과 제휴를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저의 단과대/학과 제휴 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/department/partnerships") - public BaseResponse> getUserDepartmentPartnerships( - @AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(partnershipService.getUserDepartmentPartnerships(userDetails)); - } - - @Operation(summary = "학과 기입 여부 체크", description = """ - 학과 기입 여부 체크 API 입니다.

- 학과를 기입했으면 true, 아니면 false 를 반환합니다 - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "학과 기입함") - }) - @GetMapping("/validate/department") - public BaseResponse validateDepartmentExists(@AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(userService.validateDepartmentExists(userDetails)); - } - - @Operation(summary = "유저의 학과 조회", description = "유저의 학과를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저의 학과 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/department") - public BaseResponse getDepartment(@AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(userService.getDepartment(userDetails)); - } + private final UserService userService; + private final SliceService sliceService; + private final ReviewServiceV2 mealReviewService; + private final PartnershipService partnershipService; + + @Operation(summary = "이메일 중복 체크", description = """ + 이메일 중복 체크 API 입니다.

+ 중복되지 않은 이메일이면 true 를 반환합니다 + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "중복되지 않은 이메일") + }) + @PostMapping("/validate/email/{email}") //todo: 중복인 경우 error throw, 중복 아니면 ApiReposne return + public BaseResponse validateDuplicatedEmail( + @Parameter(description = "이메일") @PathVariable String email) { + return BaseResponse.success(userService.validateDuplicatedEmail(email)); + } + + @Operation(summary = "닉네임 중복 체크", description = """ + 닉네임 중복 체크 API 입니다.

+ 중복되지 않은 닉네임이면 true 를 반환합니다 + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임") + }) + @GetMapping("/validate/nickname") + public BaseResponse validateDuplicatedNickname(@Parameter(description = "닉네임") + @RequestParam(value = "nickname") String nickname) { + return BaseResponse.success(userService.validateDuplicatedNickname(nickname)); + } + + @Operation(summary = "닉네임 수정", description = "닉네임 수정 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "닉네임 수정 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PatchMapping("/nickname") + public BaseResponse updateNickname( + @Valid @RequestBody NicknameUpdateRequest updateNicknameRequest, + @AuthenticationPrincipal CustomUserDetails userDetails) { + userService.updateNickname(userDetails, updateNicknameRequest); + return BaseResponse.success(); + } + + @Operation(summary = "유저 탈퇴", description = "유저 탈퇴 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("") + public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(userService.withdraw(userDetails)); + } + + @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/reviews") + public BaseResponse> getMyReviewList( + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = sliceService.findMyReviews(customUserDetails, + pageable, + lastReviewId); + return BaseResponse.success(myReviews); + } + + @Operation(summary = "내가 쓴 리뷰 리스트 조회 V2", description = "내가 쓴 리뷰 리스트를 조회하는 API V2 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/v2/reviews") + public BaseResponse> getMyReviews( + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = mealReviewService.findMyReviews(customUserDetails, + lastReviewId, + pageable); + return BaseResponse.success(myReviews); + } + + @Operation(summary = "마이페이지 정보 조회", description = "마이페이지 정보를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/mypage") + public BaseResponse getMyPage( + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + return BaseResponse.success(userService.findMyPage(customUserDetails)); + } + + @Operation(summary = "유저가 찜한 제휴 조회", description = "유저가 찜한 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저가 찜한 제휴 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @GetMapping("/partnerships") + public BaseResponse> getUserLikedPartnerships( + @AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(partnershipService.getUserLikedPartnerships(userDetails)); + } + + @Operation(summary = "유저의 학과 등록", description = "유저의 학과를 등록하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저의 학과 등록 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 학과", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @PostMapping("/department") + public BaseResponse registerDepartment(@RequestBody UpdateDepartmentRequest request, + @AuthenticationPrincipal CustomUserDetails userDetails) { + userService.registerDepartment(request, userDetails); + return BaseResponse.success(); + } + + @Operation(summary = "유저의 단과대/학과 제휴 조회", description = "유저의 단과대/학과 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저의 단과대/학과 제휴 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @GetMapping("/department/partnerships") + public BaseResponse> getUserDepartmentPartnerships( + @AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(partnershipService.getUserDepartmentPartnerships(userDetails)); + } + + @Operation(summary = "학과 기입 여부 체크", description = """ + 학과 기입 여부 체크 API 입니다.

+ 학과를 기입했으면 true, 아니면 false 를 반환합니다 + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "학과 기입함") + }) + @GetMapping("/validate/department") + public BaseResponse validateDepartmentExists(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(userService.validateDepartmentExists(userDetails)); + } + + @Operation(summary = "유저의 학과 조회", description = "유저의 학과를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저의 학과 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @GetMapping("/department") + public BaseResponse getDepartment(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(userService.getDepartment(userDetails)); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java index 8dbf0a9d..ea4f9cf9 100644 --- a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java @@ -1,17 +1,16 @@ package ssu.eatssu.domain.user.repository; -import java.util.Optional; - import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.user.entity.User; +import java.util.Optional; + public interface UserRepository extends JpaRepository { - boolean existsByEmail(String email); + boolean existsByEmail(String email); - boolean existsByNickname(String nickname); + boolean existsByNickname(String nickname); - Optional findByEmail(String email); + Optional findByEmail(String email); - Optional findByProviderId(String providerId); + Optional findByProviderId(String providerId); } diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index cd9c4dd4..19c2eef3 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -1,16 +1,11 @@ package ssu.eatssu.domain.user.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - -import java.util.UUID; - -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; - import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.review.entity.Review; @@ -25,6 +20,13 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import java.util.UUID; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.DUPLICATE_NICKNAME; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.MISSING_USER_DEPARTMENT; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_DEPARTMENT; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; + @Slf4j @Service @RequiredArgsConstructor @@ -32,95 +34,95 @@ @Component public class UserService { - private final UserRepository userRepository; - private final PasswordEncoder passwordEncoder; - private final DepartmentRepository departmentRepository; - private final UserProperties userProperties; - - public User join(String email, OAuthProvider provider, String providerId) { - String credentials = createCredentials(provider, providerId); - String nickname = createNickname(); - User user = User.create(email, nickname, provider, providerId, credentials); - return userRepository.save(user); - } - - public void updateNickname(CustomUserDetails userDetails, NicknameUpdateRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - if (isForbiddenNickname(request.nickname()) || userRepository.existsByNickname(request.nickname())) { - throw new BaseException(DUPLICATE_NICKNAME); - } - - user.updateNickname(request.nickname()); - } - - public MyPageResponse findMyPage(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - return new MyPageResponse(user.getNickname(), user.getProvider()); - } - - public boolean withdraw(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - user.getReviews().forEach(Review::clearUser); - user.getUserInquiries().forEach(inquiry -> inquiry.clearUser()); - userRepository.delete(user); - - return true; - } - - public Boolean validateDuplicatedEmail(String email) { - return !userRepository.existsByEmail(email); - } - - public Boolean validateDuplicatedNickname(String nickname) { - if (isForbiddenNickname(nickname)) { - return false; - } - return !userRepository.existsByNickname(nickname); - } - - public String createNickname() { - String uuid = UUID.randomUUID().toString(); - String shortUUID = uuid.substring(0, 4); - return "user-" + shortUUID; - } - - private String createCredentials(OAuthProvider provider, String providerId) { - return passwordEncoder.encode(provider + providerId); - } - - @Transactional - public void registerDepartment(UpdateDepartmentRequest request, CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Department department = departmentRepository.findByName(request.getDepartmentName()) - .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); - - user.updateDepartment(department); - } - - public Boolean validateDepartmentExists(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - return user.getDepartment() != null; - } - - public DepartmentResponse getDepartment(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Department department = user.getDepartment(); - if (department == null) { - throw new BaseException(MISSING_USER_DEPARTMENT); - } - return new DepartmentResponse(department.getName()); - } - - private boolean isForbiddenNickname(String nickname) { - return userProperties.getForbiddenNicknames().stream() - .anyMatch(forbidden -> forbidden.equalsIgnoreCase(nickname)); - } + private final UserRepository userRepository; + private final PasswordEncoder passwordEncoder; + private final DepartmentRepository departmentRepository; + private final UserProperties userProperties; + + public User join(String email, OAuthProvider provider, String providerId) { + String credentials = createCredentials(provider, providerId); + String nickname = createNickname(); + User user = User.create(email, nickname, provider, providerId, credentials); + return userRepository.save(user); + } + + public void updateNickname(CustomUserDetails userDetails, NicknameUpdateRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + if (isForbiddenNickname(request.nickname()) || userRepository.existsByNickname(request.nickname())) { + throw new BaseException(DUPLICATE_NICKNAME); + } + + user.updateNickname(request.nickname()); + } + + public MyPageResponse findMyPage(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + return new MyPageResponse(user.getNickname(), user.getProvider()); + } + + public boolean withdraw(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + user.getReviews().forEach(Review::clearUser); + user.getUserInquiries().forEach(inquiry -> inquiry.clearUser()); + userRepository.delete(user); + + return true; + } + + public Boolean validateDuplicatedEmail(String email) { + return !userRepository.existsByEmail(email); + } + + public Boolean validateDuplicatedNickname(String nickname) { + if (isForbiddenNickname(nickname)) { + return false; + } + return !userRepository.existsByNickname(nickname); + } + + public String createNickname() { + String uuid = UUID.randomUUID().toString(); + String shortUUID = uuid.substring(0, 4); + return "user-" + shortUUID; + } + + private String createCredentials(OAuthProvider provider, String providerId) { + return passwordEncoder.encode(provider + providerId); + } + + @Transactional + public void registerDepartment(UpdateDepartmentRequest request, CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + Department department = departmentRepository.findByName(request.getDepartmentName()) + .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); + + user.updateDepartment(department); + } + + public Boolean validateDepartmentExists(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + return user.getDepartment() != null; + } + + public DepartmentResponse getDepartment(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + Department department = user.getDepartment(); + if (department == null) { + throw new BaseException(MISSING_USER_DEPARTMENT); + } + return new DepartmentResponse(department.getName()); + } + + private boolean isForbiddenNickname(String nickname) { + return userProperties.getForbiddenNicknames().stream() + .anyMatch(forbidden -> forbidden.equalsIgnoreCase(nickname)); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java b/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java index b02c9efa..03cbbe3b 100644 --- a/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java +++ b/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java @@ -1,37 +1,37 @@ package ssu.eatssu.domain.user.util; -import java.util.List; -import java.util.Objects; - import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; +import java.util.List; +import java.util.Objects; + public class UserAliasUtil { - public static String getUserAlias(User user, List reviews) { - if (reviews == null || reviews.isEmpty()) { - return "미슈테리 미식가"; - } - double avg = reviews.stream() - .map(Review::getRating) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .average() - .orElse(0.0); + public static String getUserAlias(User user, List reviews) { + if (reviews == null || reviews.isEmpty()) { + return "미슈테리 미식가"; + } + double avg = reviews.stream() + .map(Review::getRating) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); - int avgRating = (int)Math.round(avg); - switch (avgRating) { - case 1: - return "깐깐슈"; - case 2: - return "아이슈"; - case 3: - return "밸런슈"; - case 4: - return "딱좋슈"; - case 5: - return "다 맛있슈"; - default: - return "미슈테리 미식가"; - } - } + int avgRating = (int) Math.round(avg); + switch (avgRating) { + case 1: + return "깐깐슈"; + case 2: + return "아이슈"; + case 3: + return "밸런슈"; + case 4: + return "딱좋슈"; + case 5: + return "다 맛있슈"; + default: + return "미슈테리 미식가"; + } + } } diff --git a/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java b/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java index 0ad66cbf..8262a5ce 100644 --- a/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java +++ b/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java @@ -1,22 +1,20 @@ package ssu.eatssu.global.config; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - import com.querydsl.jpa.impl.JPAQueryFactory; - import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; @Configuration public class QueryDslConfig { - @PersistenceContext - private EntityManager entityManager; + @PersistenceContext + private EntityManager entityManager; - @Bean - public JPAQueryFactory queryFactory() { - return new JPAQueryFactory(entityManager); - } + @Bean + public JPAQueryFactory queryFactory() { + return new JPAQueryFactory(entityManager); + } } diff --git a/src/main/java/ssu/eatssu/global/config/S3Config.java b/src/main/java/ssu/eatssu/global/config/S3Config.java index 092cc3a8..575d76dc 100644 --- a/src/main/java/ssu/eatssu/global/config/S3Config.java +++ b/src/main/java/ssu/eatssu/global/config/S3Config.java @@ -1,35 +1,34 @@ package ssu.eatssu.global.config; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; @Configuration public class S3Config { - @Value("${cloud.aws.credentials.accessKey}") - private String accessKey; + @Value("${cloud.aws.credentials.accessKey}") + private String accessKey; - @Value("${cloud.aws.credentials.secretKey}") - private String secretKey; + @Value("${cloud.aws.credentials.secretKey}") + private String secretKey; - @Value("${cloud.aws.region.static}") - private String region; + @Value("${cloud.aws.region.static}") + private String region; - @Bean - public AmazonS3Client amazonS3Client() { - AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); + @Bean + public AmazonS3Client amazonS3Client() { + AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); - return (AmazonS3Client)AmazonS3ClientBuilder - .standard() - .withCredentials(new AWSStaticCredentialsProvider(credentials)) - .withRegion(region) - .build(); - } + return (AmazonS3Client) AmazonS3ClientBuilder + .standard() + .withCredentials(new AWSStaticCredentialsProvider(credentials)) + .withRegion(region) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java b/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java index 12811e8f..531036c8 100644 --- a/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java +++ b/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java @@ -1,52 +1,51 @@ package ssu.eatssu.global.config; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.security.SecurityRequirement; import io.swagger.v3.oas.models.security.SecurityScheme; import io.swagger.v3.oas.models.servers.Server; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; @Configuration public class SwaggerConfig { - private static final String API_NAME = "EAT-SSU API"; - private static final String API_VERSION = "1.0.0"; - private static final String API_DESCRIPTION = "EAT-SSU API 명세서"; - - @Value("${swagger.url}") - private String SERVER_URL; - @Value("${swagger.description}") - private String SERVER_DESCRIPTION; - - @Bean - public OpenAPI openAPI() { - Info info = new Info() - .version(API_VERSION) - .title(API_NAME) - .description(API_DESCRIPTION); - - List servers = new ArrayList<>(); - servers.add(new Server().url(SERVER_URL).description(SERVER_DESCRIPTION)); - - SecurityScheme securityScheme = new SecurityScheme() - .type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT") - .in(SecurityScheme.In.HEADER).name("Authorization"); - - SecurityRequirement securityRequirement = new SecurityRequirement().addList("bearerAuth"); - - return new OpenAPI() - .components(new Components().addSecuritySchemes("bearerAuth", securityScheme)) - .security(Collections.singletonList(securityRequirement)) - .servers(servers) - .info(info); - } + private static final String API_NAME = "EAT-SSU API"; + private static final String API_VERSION = "1.0.0"; + private static final String API_DESCRIPTION = "EAT-SSU API 명세서"; + + @Value("${swagger.url}") + private String SERVER_URL; + @Value("${swagger.description}") + private String SERVER_DESCRIPTION; + + @Bean + public OpenAPI openAPI() { + Info info = new Info() + .version(API_VERSION) + .title(API_NAME) + .description(API_DESCRIPTION); + + List servers = new ArrayList<>(); + servers.add(new Server().url(SERVER_URL).description(SERVER_DESCRIPTION)); + + SecurityScheme securityScheme = new SecurityScheme() + .type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT") + .in(SecurityScheme.In.HEADER).name("Authorization"); + + SecurityRequirement securityRequirement = new SecurityRequirement().addList("bearerAuth"); + + return new OpenAPI() + .components(new Components().addSecuritySchemes("bearerAuth", securityScheme)) + .security(Collections.singletonList(securityRequirement)) + .servers(servers) + .info(info); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/global/handler/ErrorTestController.java b/src/main/java/ssu/eatssu/global/handler/ErrorTestController.java index e4cfd34d..1d446190 100644 --- a/src/main/java/ssu/eatssu/global/handler/ErrorTestController.java +++ b/src/main/java/ssu/eatssu/global/handler/ErrorTestController.java @@ -5,8 +5,8 @@ @RestController public class ErrorTestController { - @GetMapping("/error-test") - public String triggerError() { - throw new RuntimeException("임의로 발생시킨 런타임 에러입니다!"); - } + @GetMapping("/error-test") + public String triggerError() { + throw new RuntimeException("임의로 발생시킨 런타임 에러입니다!"); + } } diff --git a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java index 0e7b2c71..0edb313b 100644 --- a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java @@ -1,5 +1,7 @@ package ssu.eatssu.global.handler; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.TypeMismatchException; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; @@ -22,9 +24,6 @@ import org.springframework.web.multipart.support.MissingServletRequestPartException; import org.springframework.web.servlet.NoHandlerFoundException; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.slack.entity.SlackMessageFormat; import ssu.eatssu.domain.slack.service.SlackService; import ssu.eatssu.global.handler.response.BaseException; @@ -38,225 +37,226 @@ @RestControllerAdvice @RequiredArgsConstructor public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { - private final SlackService slackService; + private final SlackService slackService; + + /** + * BaseException 처리 + */ + @ExceptionHandler(BaseException.class) + public ResponseEntity> handleBaseException(BaseException e) { + log.info(e.getStatus().toString()); + sendErrorToSlack(e); + return ResponseEntity.status(e.getStatus().getHttpStatus()).body(BaseResponse.fail(e.getStatus())); + } - /** - * BaseException 처리 - */ - @ExceptionHandler(BaseException.class) - public ResponseEntity> handleBaseException(BaseException e) { - log.info(e.getStatus().toString()); - sendErrorToSlack(e); - return ResponseEntity.status(e.getStatus().getHttpStatus()).body(BaseResponse.fail(e.getStatus())); - } - @ExceptionHandler(Exception.class) - public ResponseEntity> handleAllUnhandledException(Exception ex) { - sendErrorToSlack(ex); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); - } + @ExceptionHandler(Exception.class) + public ResponseEntity> handleAllUnhandledException(Exception ex) { + sendErrorToSlack(ex); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); + } - /** - * 경로는 있으나 지원하지 않는 http method로 요청 시 - */ - @Override - protected ResponseEntity handleHttpRequestMethodNotSupported( - @NonNull HttpRequestMethodNotSupportedException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.METHOD_NOT_ALLOWED).body(BaseResponse.fail( - BaseResponseStatus.METHOD_NOT_ALLOWED)); - } + /** + * 경로는 있으나 지원하지 않는 http method로 요청 시 + */ + @Override + protected ResponseEntity handleHttpRequestMethodNotSupported( + @NonNull HttpRequestMethodNotSupportedException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.METHOD_NOT_ALLOWED).body(BaseResponse.fail( + BaseResponseStatus.METHOD_NOT_ALLOWED)); + } - /** - * 지원하지 않는 content type으로 요청 시 - */ - @Override - protected ResponseEntity handleHttpMediaTypeNotSupported( - @NonNull HttpMediaTypeNotSupportedException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE) - .body(BaseResponse.fail(BaseResponseStatus.UNSUPPORTED_MEDIA_TYPE)); - } + /** + * 지원하지 않는 content type으로 요청 시 + */ + @Override + protected ResponseEntity handleHttpMediaTypeNotSupported( + @NonNull HttpMediaTypeNotSupportedException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE) + .body(BaseResponse.fail(BaseResponseStatus.UNSUPPORTED_MEDIA_TYPE)); + } - /** - * 인식할 수 없는 content type으로 요청 시 - */ - @Override - protected ResponseEntity handleHttpMediaTypeNotAcceptable( - @NonNull HttpMediaTypeNotAcceptableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.NOT_ACCEPTABLE) - .body(BaseResponse.fail(BaseResponseStatus.NOT_ACCEPTABLE)); - } + /** + * 인식할 수 없는 content type으로 요청 시 + */ + @Override + protected ResponseEntity handleHttpMediaTypeNotAcceptable( + @NonNull HttpMediaTypeNotAcceptableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.NOT_ACCEPTABLE) + .body(BaseResponse.fail(BaseResponseStatus.NOT_ACCEPTABLE)); + } - /** - * PathVariable 값 누락 시 - */ - @Override - protected ResponseEntity handleMissingPathVariable( - @NonNull MissingPathVariableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISSING_PATH_VARIABLE)); - } + /** + * PathVariable 값 누락 시 + */ + @Override + protected ResponseEntity handleMissingPathVariable( + @NonNull MissingPathVariableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISSING_PATH_VARIABLE)); + } - /*** - * RequestParam 값 누락 시 - */ - @Override - protected ResponseEntity handleMissingServletRequestParameter( - @NonNull MissingServletRequestParameterException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PARAM)); - } + /*** + * RequestParam 값 누락 시 + */ + @Override + protected ResponseEntity handleMissingServletRequestParameter( + @NonNull MissingServletRequestParameterException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PARAM)); + } - /** - * RequestPart 값 누락 시 - */ - @Override - protected ResponseEntity handleMissingServletRequestPart( - @NonNull MissingServletRequestPartException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PART)); - } + /** + * RequestPart 값 누락 시 + */ + @Override + protected ResponseEntity handleMissingServletRequestPart( + @NonNull MissingServletRequestPartException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PART)); + } - /** - * 요청 값 바인딩 처리에 실패한 경우 - */ - @Override - protected ResponseEntity handleServletRequestBindingException( - @NonNull ServletRequestBindingException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.REQ_BINDING_FAIL)); - } + /** + * 요청 값 바인딩 처리에 실패한 경우 + */ + @Override + protected ResponseEntity handleServletRequestBindingException( + @NonNull ServletRequestBindingException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.REQ_BINDING_FAIL)); + } - /** - * request @Valid 유효성 체크를 통과하지 못한 경우 - */ - @Override - protected ResponseEntity handleMethodArgumentNotValid( - @NonNull MethodArgumentNotValidException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.FAILED_VALIDATION)); - } + /** + * request @Valid 유효성 체크를 통과하지 못한 경우 + */ + @Override + protected ResponseEntity handleMethodArgumentNotValid( + @NonNull MethodArgumentNotValidException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.FAILED_VALIDATION)); + } - /** - * Dispatcher Servlet에서 핸들러를 찾지 못한 경우 - *

기본적으로는 404-Not Found응답을 내리지만 Dispatcher Servlet의 throwExceptionIfNoHandlerFound 값이 true인 경우 - * NoHandlerFoundException 예외를 발생

- */ - @Override - protected ResponseEntity handleNoHandlerFoundException( - @NonNull NoHandlerFoundException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.NOT_FOUND) - .body(BaseResponse.fail(BaseResponseStatus.NOT_FOUND)); - } + /** + * Dispatcher Servlet에서 핸들러를 찾지 못한 경우 + *

기본적으로는 404-Not Found응답을 내리지만 Dispatcher Servlet의 throwExceptionIfNoHandlerFound 값이 true인 경우 + * NoHandlerFoundException 예외를 발생

+ */ + @Override + protected ResponseEntity handleNoHandlerFoundException( + @NonNull NoHandlerFoundException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.NOT_FOUND) + .body(BaseResponse.fail(BaseResponseStatus.NOT_FOUND)); + } - /** - * 비동기 요청의 응답시간이 초과될 경우 - */ - @Override - protected ResponseEntity handleAsyncRequestTimeoutException( - @NonNull AsyncRequestTimeoutException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE) - .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_TIME_OUT)); - } + /** + * 비동기 요청의 응답시간이 초과될 경우 + */ + @Override + protected ResponseEntity handleAsyncRequestTimeoutException( + @NonNull AsyncRequestTimeoutException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE) + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_TIME_OUT)); + } - /** - * 파라미터 타입 불일치가 발생한 경우 - */ - @Override - protected ResponseEntity handleTypeMismatch( - @NonNull TypeMismatchException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISMATCH_PARAM_TYPE)); - } + /** + * 파라미터 타입 불일치가 발생한 경우 + */ + @Override + protected ResponseEntity handleTypeMismatch( + @NonNull TypeMismatchException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISMATCH_PARAM_TYPE)); + } - /** - * 적절하지 않은 RequestBody 때문에 HttpMessageConverter.read 메소드 실패한 경우 - */ - @Override - protected ResponseEntity handleHttpMessageNotReadable( - @NonNull HttpMessageNotReadableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.BAD_REQUEST)); - } + /** + * 적절하지 않은 RequestBody 때문에 HttpMessageConverter.read 메소드 실패한 경우 + */ + @Override + protected ResponseEntity handleHttpMessageNotReadable( + @NonNull HttpMessageNotReadableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.BAD_REQUEST)); + } - /** - * 직렬화 실패한 경우 - */ - @Override - protected ResponseEntity handleHttpMessageNotWritable( - @NonNull HttpMessageNotWritableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); - } + /** + * 직렬화 실패한 경우 + */ + @Override + protected ResponseEntity handleHttpMessageNotWritable( + @NonNull HttpMessageNotWritableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); + } - @Override - protected ResponseEntity handleExceptionInternal( - @NonNull Exception ex, - Object body, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode statusCode, - @NonNull WebRequest request) { + @Override + protected ResponseEntity handleExceptionInternal( + @NonNull Exception ex, + Object body, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode statusCode, + @NonNull WebRequest request) { - HttpStatus status = HttpStatus.valueOf(statusCode.value()); + HttpStatus status = HttpStatus.valueOf(statusCode.value()); - if (status.is4xxClientError() || status.is5xxServerError()) { - sendErrorToSlack(ex); - } + if (status.is4xxClientError() || status.is5xxServerError()) { + sendErrorToSlack(ex); + } - BaseResponseStatus responseStatus = status.is4xxClientError() - ? BaseResponseStatus.BAD_REQUEST - : BaseResponseStatus.INTERNAL_SERVER_ERROR; + BaseResponseStatus responseStatus = status.is4xxClientError() + ? BaseResponseStatus.BAD_REQUEST + : BaseResponseStatus.INTERNAL_SERVER_ERROR; - return ResponseEntity.status(status).body(BaseResponse.fail(responseStatus)); - } + return ResponseEntity.status(status).body(BaseResponse.fail(responseStatus)); + } - private void sendErrorToSlack(Exception ex) { - try { - String message = SlackMessageFormat.sendServerError(ex); - slackService.sendSlackMessage(message, ssu.eatssu.domain.slack.entity.SlackChannel.SERVER_ERROR); - } catch (Exception slackEx) { - log.warn("슬랙 전송 실패: {}", slackEx.getMessage()); - } - } + private void sendErrorToSlack(Exception ex) { + try { + String message = SlackMessageFormat.sendServerError(ex); + slackService.sendSlackMessage(message, ssu.eatssu.domain.slack.entity.SlackChannel.SERVER_ERROR); + } catch (Exception slackEx) { + log.warn("슬랙 전송 실패: {}", slackEx.getMessage()); + } + } } diff --git a/src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java b/src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java index ea2846e0..2ce13a9c 100644 --- a/src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java @@ -1,21 +1,19 @@ package ssu.eatssu.global.handler; -import java.io.IOException; - -import org.springframework.http.MediaType; -import org.springframework.security.access.AccessDeniedException; -import org.springframework.security.web.access.AccessDeniedHandler; -import org.springframework.stereotype.Component; - import com.fasterxml.jackson.databind.ObjectMapper; - import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; +import org.springframework.http.MediaType; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.web.access.AccessDeniedHandler; +import org.springframework.stereotype.Component; import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.io.IOException; + /** * jwt 인가 실패 시 처리 * HttpStatus 403 @@ -24,21 +22,21 @@ @RequiredArgsConstructor public class JwtAccessDeniedHandler implements AccessDeniedHandler { - private final ObjectMapper objectMapper; + private final ObjectMapper objectMapper; - @Override - public void handle(HttpServletRequest request, HttpServletResponse response, - AccessDeniedException accessDeniedException) throws IOException, ServletException { + @Override + public void handle(HttpServletRequest request, HttpServletResponse response, + AccessDeniedException accessDeniedException) throws IOException, ServletException { - BaseResponseStatus responseStatus = BaseResponseStatus.FORBIDDEN; + BaseResponseStatus responseStatus = BaseResponseStatus.FORBIDDEN; - BaseResponse body = BaseResponse.fail(responseStatus); - String bodyString = objectMapper.writeValueAsString(body); + BaseResponse body = BaseResponse.fail(responseStatus); + String bodyString = objectMapper.writeValueAsString(body); - //response setting - response.setStatus(responseStatus.getHttpStatus().value()); - response.setContentType(MediaType.APPLICATION_JSON_VALUE); - response.setCharacterEncoding("UTF-8"); - response.getWriter().write(bodyString); - } + //response setting + response.setStatus(responseStatus.getHttpStatus().value()); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write(bodyString); + } } diff --git a/src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java b/src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java index 2555f4f2..f8032dc3 100644 --- a/src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java +++ b/src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java @@ -1,21 +1,19 @@ package ssu.eatssu.global.handler; -import java.io.IOException; - -import org.springframework.http.MediaType; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.web.AuthenticationEntryPoint; -import org.springframework.stereotype.Component; - import com.fasterxml.jackson.databind.ObjectMapper; - import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; +import org.springframework.http.MediaType; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.stereotype.Component; import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.io.IOException; + /** * jwt 인증 실패 시 처리 * HttpStatus 401 @@ -24,21 +22,21 @@ @RequiredArgsConstructor public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint { - private final ObjectMapper objectMapper; + private final ObjectMapper objectMapper; - @Override - public void commence(HttpServletRequest request, HttpServletResponse response, - AuthenticationException authException) throws IOException, ServletException { + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, + AuthenticationException authException) throws IOException, ServletException { - BaseResponseStatus responseStatus = BaseResponseStatus.UNAUTHORIZED; + BaseResponseStatus responseStatus = BaseResponseStatus.UNAUTHORIZED; - BaseResponse body = BaseResponse.fail(responseStatus); - String bodyString = objectMapper.writeValueAsString(body); + BaseResponse body = BaseResponse.fail(responseStatus); + String bodyString = objectMapper.writeValueAsString(body); - //response setting - response.setStatus(responseStatus.getHttpStatus().value()); - response.setContentType(MediaType.APPLICATION_JSON_VALUE); - response.setCharacterEncoding("UTF-8"); - response.getWriter().write(bodyString); - } + //response setting + response.setStatus(responseStatus.getHttpStatus().value()); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write(bodyString); + } } diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseException.java b/src/main/java/ssu/eatssu/global/handler/response/BaseException.java index a7aa52c1..6ab7f076 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseException.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseException.java @@ -8,5 +8,5 @@ @Setter @AllArgsConstructor public class BaseException extends RuntimeException { - private final BaseResponseStatus status; + private final BaseResponseStatus status; } diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java index 108e1e95..28411d04 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java @@ -2,7 +2,6 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonPropertyOrder; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; @@ -12,46 +11,46 @@ @JsonPropertyOrder({"isSuccess", "code", "message", "result"}) public class BaseResponse { - @Schema(description = "성공 여부") - private final Boolean isSuccess; - private final String message; - private final int code; - - @Schema(description = "결과 값") - @JsonInclude(JsonInclude.Include.NON_NULL) //JSON으로 응답이 나갈 때 null인 경우 포함되지 않음 - private T result; - - /** - * 정적 팩토리 메서드를 위한 private 생성자 - */ - private BaseResponse(BaseResponseStatus status) { - this.isSuccess = status.isSuccess(); - this.message = status.getMessage(); - this.code = status.getCode(); - } - - private BaseResponse(BaseResponseStatus status, T result) { - this.isSuccess = status.isSuccess(); - this.message = status.getMessage(); - this.code = status.getCode(); - this.result = result; - } - - /** - * API 성공 응답 - */ - public static BaseResponse success() { - return new BaseResponse<>(BaseResponseStatus.SUCCESS); - } - - public static BaseResponse success(T result) { - return new BaseResponse<>(BaseResponseStatus.SUCCESS, result); - } - - /** - * API 실패 응답 - */ - public static BaseResponse fail(BaseResponseStatus status) { - return new BaseResponse<>(status); - } + @Schema(description = "성공 여부") + private final Boolean isSuccess; + private final String message; + private final int code; + + @Schema(description = "결과 값") + @JsonInclude(JsonInclude.Include.NON_NULL) //JSON으로 응답이 나갈 때 null인 경우 포함되지 않음 + private T result; + + /** + * 정적 팩토리 메서드를 위한 private 생성자 + */ + private BaseResponse(BaseResponseStatus status) { + this.isSuccess = status.isSuccess(); + this.message = status.getMessage(); + this.code = status.getCode(); + } + + private BaseResponse(BaseResponseStatus status, T result) { + this.isSuccess = status.isSuccess(); + this.message = status.getMessage(); + this.code = status.getCode(); + this.result = result; + } + + /** + * API 성공 응답 + */ + public static BaseResponse success() { + return new BaseResponse<>(BaseResponseStatus.SUCCESS); + } + + public static BaseResponse success(T result) { + return new BaseResponse<>(BaseResponseStatus.SUCCESS, result); + } + + /** + * API 실패 응답 + */ + public static BaseResponse fail(BaseResponseStatus status) { + return new BaseResponse<>(status); + } } diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index cebc6da1..059a7da1 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -1,8 +1,7 @@ package ssu.eatssu.global.handler.response; -import org.springframework.http.HttpStatus; - import lombok.Getter; +import org.springframework.http.HttpStatus; /** * 에러 코드 관리 @@ -10,99 +9,99 @@ @Getter public enum BaseResponseStatus { - /** - * 1000 : 요청 성공 - */ - SUCCESS(true, HttpStatus.OK, 1000, "요청에 성공하였습니다."), - - /** - * 400 BAD_REQUEST 잘못된 요청 - */ - BAD_REQUEST(false, HttpStatus.BAD_REQUEST, 400, "잘못된 요청입니다."), - VALIDATION_ERROR(false, HttpStatus.BAD_REQUEST, 40001, "입력값을 확인해주세요."), - MISSING_PATH_VARIABLE(false, HttpStatus.BAD_REQUEST, 40002, "경로 변수가 누락되었습니다."), - MISSING_REQUEST_PARAM(false, HttpStatus.BAD_REQUEST, 40003, "쿼리 파라미터가 누락되었습니다."), - MISSING_REQUEST_PART(false, HttpStatus.BAD_REQUEST, 40004, "multipart/form-data 파일이 누락되었습니다."), - REQ_BINDING_FAIL(false, HttpStatus.BAD_REQUEST, 40005, "잘못된 request 입니다."), - MISMATCH_PARAM_TYPE(false, HttpStatus.BAD_REQUEST, 40006, "잘못된 파라미터 타입입니다."), - FAILED_VALIDATION(false, HttpStatus.BAD_REQUEST, 40007, "입력값이 누락되었거나, 부적절한 입력 값이 있습니다."), - INVALID_DATE(false, HttpStatus.BAD_REQUEST, 40008, "잘못된 날짜형식입니다."), - NOT_SUPPORT_RESTAURANT(false, HttpStatus.BAD_REQUEST, 40009, "해당 식당은 지원하지 않습니다."), - INVALID_IDENTITY_TOKEN(false, HttpStatus.BAD_REQUEST, 40010, "잘못된 identityToken 입니다."), - EXISTED_MEAL(false, HttpStatus.BAD_REQUEST, 40011, "이미 존재하는 식단입니다."), - INVALID_TARGET_TYPE(false, HttpStatus.BAD_REQUEST, 40012, "잘못된 targetType 입니다."), - MISSING_USER_DEPARTMENT(false, HttpStatus.BAD_REQUEST, 40013, "사용자의 학과 정보가 없습니다."), - - /** - * 401 UNAUTHORIZED 권한없음(인증 실패) - */ - UNAUTHORIZED(false, HttpStatus.UNAUTHORIZED, 401, "인증에 실패했습니다."), - INVALID_TOKEN(false, HttpStatus.UNAUTHORIZED, 40101, "유효하지 않은 토큰 입니다."), - - /** - * 403 FORBIDDEN 권한없음(인가 실패) - */ - FORBIDDEN(false, HttpStatus.FORBIDDEN, 403, "권한이 없습니다."), - REVIEW_PERMISSION_DENIED(false, HttpStatus.FORBIDDEN, 40301, "리뷰에 대한 권한이 없습니다."), - - /** - * 404 NOT_FOUND 잘못된 리소스 접근 - */ - NOT_FOUND(false, HttpStatus.NOT_FOUND, 404, "요청한 리소스를 찾을 수 없습니다."), - NOT_FOUND_USER(false, HttpStatus.NOT_FOUND, 40401, "해당 회원을 찾을 수 없습니다."), - NOT_FOUND_MENU(false, HttpStatus.NOT_FOUND, 40402, "해당 메뉴를 찾을 수 없습니다."), - NOT_FOUND_MEAL(false, HttpStatus.NOT_FOUND, 40403, "해당 식단을 찾을 수 없습니다."), - NOT_FOUND_RESTAURANT(false, HttpStatus.NOT_FOUND, 40404, "해당 식당을 찾을 수 없습니다."), - NOT_FOUND_REVIEW(false, HttpStatus.NOT_FOUND, 40405, "해당 리뷰을 찾을 수 없습니다."), - NOT_FOUND_REVIEW_REPORT(false, HttpStatus.NOT_FOUND, 40406, "해당 리뷰 신고 내역을 찾을 수 없습니다."), - NOT_FOUND_USER_INQUIRY(false, HttpStatus.NOT_FOUND, 40407, "해당 문의 내역을 찾을 수 없습니다."), - NOT_FOUND_COLLEGE(false, HttpStatus.NOT_FOUND, 40408, "해당 대학을 찾을 수 없습니다."), - NOT_FOUND_DEPARTMENT(false, HttpStatus.NOT_FOUND, 40409, "해당 학과를 찾을 수 없습니다."), - NOT_FOUND_PARTNERSHIP(false, HttpStatus.NOT_FOUND, 40410, "해당 제휴를 찾을 수 없습니다."), - - /** - * 405 METHOD_NOT_ALLOWED 지원하지 않은 method 호출 - */ - METHOD_NOT_ALLOWED(false, HttpStatus.METHOD_NOT_ALLOWED, 405, "해당 method는 지원하지 않습니다."), - - /** - * 406 NOT_ACCEPTABLE 인식할 수 없는 content type - */ - NOT_ACCEPTABLE(false, HttpStatus.NOT_ACCEPTABLE, 406, "인식할 수 없는 미디어 타입입니다."), - - /** - * 409 CONFLICT 중복된 리소스 - */ - CONFLICT(false, HttpStatus.CONFLICT, 409, "중복된 리소스를 입력했습니다."), - DUPLICATE_EMAIL(false, HttpStatus.CONFLICT, 40901, "중복된 이메일입니다."), - DUPLICATE_NICKNAME(false, HttpStatus.CONFLICT, 40902, "중복된 닉네임입니다."), - - /** - * 415 UNSUPPORTED_MEDIA_TYPE 지원하지 않는 content type - */ - UNSUPPORTED_MEDIA_TYPE(false, HttpStatus.UNSUPPORTED_MEDIA_TYPE, 415, "지원하지 않는 미디어 타입입니다."), - - /** - * 500 INTERNAL_SERVER_ERROR 서버 내부 에러 - */ - INTERNAL_SERVER_ERROR(false, HttpStatus.INTERNAL_SERVER_ERROR, 500, "서버 내부 에러입니다"), - FAIL_IMAGE_UPLOAD(false, HttpStatus.INTERNAL_SERVER_ERROR, 50001, "이미지 업로드에 실패했습니다."), - - /** - * 503 SERVICE_UNAVAILABLE 서버 내부 에러 - */ - SERVICE_UNAVAILABLE(false, HttpStatus.SERVICE_UNAVAILABLE, 503, "현재 서비스가 불가능한 상태입니다."), - INTERNAL_SERVER_TIME_OUT(false, HttpStatus.SERVICE_UNAVAILABLE, 503, "서버에서 시간초과가 발생했습니다."); - - private final boolean isSuccess; - private final HttpStatus httpStatus; - private final int code; - private final String message; - - BaseResponseStatus(boolean isSuccess, HttpStatus httpStatus, int code, String message) { - this.isSuccess = isSuccess; - this.httpStatus = httpStatus; - this.code = code; - this.message = message; - } + /** + * 1000 : 요청 성공 + */ + SUCCESS(true, HttpStatus.OK, 1000, "요청에 성공하였습니다."), + + /** + * 400 BAD_REQUEST 잘못된 요청 + */ + BAD_REQUEST(false, HttpStatus.BAD_REQUEST, 400, "잘못된 요청입니다."), + VALIDATION_ERROR(false, HttpStatus.BAD_REQUEST, 40001, "입력값을 확인해주세요."), + MISSING_PATH_VARIABLE(false, HttpStatus.BAD_REQUEST, 40002, "경로 변수가 누락되었습니다."), + MISSING_REQUEST_PARAM(false, HttpStatus.BAD_REQUEST, 40003, "쿼리 파라미터가 누락되었습니다."), + MISSING_REQUEST_PART(false, HttpStatus.BAD_REQUEST, 40004, "multipart/form-data 파일이 누락되었습니다."), + REQ_BINDING_FAIL(false, HttpStatus.BAD_REQUEST, 40005, "잘못된 request 입니다."), + MISMATCH_PARAM_TYPE(false, HttpStatus.BAD_REQUEST, 40006, "잘못된 파라미터 타입입니다."), + FAILED_VALIDATION(false, HttpStatus.BAD_REQUEST, 40007, "입력값이 누락되었거나, 부적절한 입력 값이 있습니다."), + INVALID_DATE(false, HttpStatus.BAD_REQUEST, 40008, "잘못된 날짜형식입니다."), + NOT_SUPPORT_RESTAURANT(false, HttpStatus.BAD_REQUEST, 40009, "해당 식당은 지원하지 않습니다."), + INVALID_IDENTITY_TOKEN(false, HttpStatus.BAD_REQUEST, 40010, "잘못된 identityToken 입니다."), + EXISTED_MEAL(false, HttpStatus.BAD_REQUEST, 40011, "이미 존재하는 식단입니다."), + INVALID_TARGET_TYPE(false, HttpStatus.BAD_REQUEST, 40012, "잘못된 targetType 입니다."), + MISSING_USER_DEPARTMENT(false, HttpStatus.BAD_REQUEST, 40013, "사용자의 학과 정보가 없습니다."), + + /** + * 401 UNAUTHORIZED 권한없음(인증 실패) + */ + UNAUTHORIZED(false, HttpStatus.UNAUTHORIZED, 401, "인증에 실패했습니다."), + INVALID_TOKEN(false, HttpStatus.UNAUTHORIZED, 40101, "유효하지 않은 토큰 입니다."), + + /** + * 403 FORBIDDEN 권한없음(인가 실패) + */ + FORBIDDEN(false, HttpStatus.FORBIDDEN, 403, "권한이 없습니다."), + REVIEW_PERMISSION_DENIED(false, HttpStatus.FORBIDDEN, 40301, "리뷰에 대한 권한이 없습니다."), + + /** + * 404 NOT_FOUND 잘못된 리소스 접근 + */ + NOT_FOUND(false, HttpStatus.NOT_FOUND, 404, "요청한 리소스를 찾을 수 없습니다."), + NOT_FOUND_USER(false, HttpStatus.NOT_FOUND, 40401, "해당 회원을 찾을 수 없습니다."), + NOT_FOUND_MENU(false, HttpStatus.NOT_FOUND, 40402, "해당 메뉴를 찾을 수 없습니다."), + NOT_FOUND_MEAL(false, HttpStatus.NOT_FOUND, 40403, "해당 식단을 찾을 수 없습니다."), + NOT_FOUND_RESTAURANT(false, HttpStatus.NOT_FOUND, 40404, "해당 식당을 찾을 수 없습니다."), + NOT_FOUND_REVIEW(false, HttpStatus.NOT_FOUND, 40405, "해당 리뷰을 찾을 수 없습니다."), + NOT_FOUND_REVIEW_REPORT(false, HttpStatus.NOT_FOUND, 40406, "해당 리뷰 신고 내역을 찾을 수 없습니다."), + NOT_FOUND_USER_INQUIRY(false, HttpStatus.NOT_FOUND, 40407, "해당 문의 내역을 찾을 수 없습니다."), + NOT_FOUND_COLLEGE(false, HttpStatus.NOT_FOUND, 40408, "해당 대학을 찾을 수 없습니다."), + NOT_FOUND_DEPARTMENT(false, HttpStatus.NOT_FOUND, 40409, "해당 학과를 찾을 수 없습니다."), + NOT_FOUND_PARTNERSHIP(false, HttpStatus.NOT_FOUND, 40410, "해당 제휴를 찾을 수 없습니다."), + + /** + * 405 METHOD_NOT_ALLOWED 지원하지 않은 method 호출 + */ + METHOD_NOT_ALLOWED(false, HttpStatus.METHOD_NOT_ALLOWED, 405, "해당 method는 지원하지 않습니다."), + + /** + * 406 NOT_ACCEPTABLE 인식할 수 없는 content type + */ + NOT_ACCEPTABLE(false, HttpStatus.NOT_ACCEPTABLE, 406, "인식할 수 없는 미디어 타입입니다."), + + /** + * 409 CONFLICT 중복된 리소스 + */ + CONFLICT(false, HttpStatus.CONFLICT, 409, "중복된 리소스를 입력했습니다."), + DUPLICATE_EMAIL(false, HttpStatus.CONFLICT, 40901, "중복된 이메일입니다."), + DUPLICATE_NICKNAME(false, HttpStatus.CONFLICT, 40902, "중복된 닉네임입니다."), + + /** + * 415 UNSUPPORTED_MEDIA_TYPE 지원하지 않는 content type + */ + UNSUPPORTED_MEDIA_TYPE(false, HttpStatus.UNSUPPORTED_MEDIA_TYPE, 415, "지원하지 않는 미디어 타입입니다."), + + /** + * 500 INTERNAL_SERVER_ERROR 서버 내부 에러 + */ + INTERNAL_SERVER_ERROR(false, HttpStatus.INTERNAL_SERVER_ERROR, 500, "서버 내부 에러입니다"), + FAIL_IMAGE_UPLOAD(false, HttpStatus.INTERNAL_SERVER_ERROR, 50001, "이미지 업로드에 실패했습니다."), + + /** + * 503 SERVICE_UNAVAILABLE 서버 내부 에러 + */ + SERVICE_UNAVAILABLE(false, HttpStatus.SERVICE_UNAVAILABLE, 503, "현재 서비스가 불가능한 상태입니다."), + INTERNAL_SERVER_TIME_OUT(false, HttpStatus.SERVICE_UNAVAILABLE, 503, "서버에서 시간초과가 발생했습니다."); + + private final boolean isSuccess; + private final HttpStatus httpStatus; + private final int code; + private final String message; + + BaseResponseStatus(boolean isSuccess, HttpStatus httpStatus, int code, String message) { + this.isSuccess = isSuccess; + this.httpStatus = httpStatus; + this.code = code; + this.message = message; + } } diff --git a/src/main/java/ssu/eatssu/global/runner/WarmUpRunner.java b/src/main/java/ssu/eatssu/global/runner/WarmUpRunner.java index d31f7542..f749e873 100644 --- a/src/main/java/ssu/eatssu/global/runner/WarmUpRunner.java +++ b/src/main/java/ssu/eatssu/global/runner/WarmUpRunner.java @@ -1,10 +1,9 @@ package ssu.eatssu.global.runner; +import lombok.RequiredArgsConstructor; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.auth.service.OAuthService; @@ -13,20 +12,20 @@ @RequiredArgsConstructor public class WarmUpRunner implements ApplicationRunner { - private final OAuthService oAuthService; + private final OAuthService oAuthService; - @Override - public void run(ApplicationArguments args) throws Exception { - try{ - KakaoLoginRequest kakaoRequest = new KakaoLoginRequest("",""); - oAuthService.kakaoLogin(kakaoRequest); + @Override + public void run(ApplicationArguments args) throws Exception { + try { + KakaoLoginRequest kakaoRequest = new KakaoLoginRequest("", ""); + oAuthService.kakaoLogin(kakaoRequest); - AppleLoginRequest appleLoginRequest = new AppleLoginRequest(""); - oAuthService.appleLogin(appleLoginRequest); + AppleLoginRequest appleLoginRequest = new AppleLoginRequest(""); + oAuthService.appleLogin(appleLoginRequest); - }catch (Exception e){ + } catch (Exception e) { - } + } - } + } } diff --git a/src/main/java/ssu/eatssu/global/util/S3Uploader.java b/src/main/java/ssu/eatssu/global/util/S3Uploader.java index 2bbb7925..70d606bc 100644 --- a/src/main/java/ssu/eatssu/global/util/S3Uploader.java +++ b/src/main/java/ssu/eatssu/global/util/S3Uploader.java @@ -1,5 +1,14 @@ package ssu.eatssu.global.util; +import com.amazonaws.services.s3.AmazonS3Client; +import com.amazonaws.services.s3.model.CannedAccessControlList; +import com.amazonaws.services.s3.model.PutObjectRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -8,64 +17,53 @@ import java.util.Optional; import java.util.UUID; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; -import org.springframework.web.multipart.MultipartFile; - -import com.amazonaws.services.s3.AmazonS3Client; -import com.amazonaws.services.s3.model.CannedAccessControlList; -import com.amazonaws.services.s3.model.PutObjectRequest; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; - @RequiredArgsConstructor @Component @Slf4j public class S3Uploader { - private final AmazonS3Client amazonS3Client; + private final AmazonS3Client amazonS3Client; - @Value("${cloud.aws.s3.bucket}") - private String bucket; + @Value("${cloud.aws.s3.bucket}") + private String bucket; - public String upload(MultipartFile multipartFile, String dirName) throws IOException { - File uploadFile = convert(multipartFile) - .orElseThrow(() -> new IllegalArgumentException("MultipartFile -> File로 전환이 실패했습니다.")); - return upload(uploadFile, dirName); - } + public String upload(MultipartFile multipartFile, String dirName) throws IOException { + File uploadFile = convert(multipartFile) + .orElseThrow(() -> new IllegalArgumentException("MultipartFile -> File로 전환이 실패했습니다.")); + return upload(uploadFile, dirName); + } - private String upload(File uploadFile, String dirName) { - String fileName = dirName + "/" + UUID.randomUUID() + uploadFile.getName(); - String uploadImageUrl = putS3(uploadFile, fileName); - removeNewFile(uploadFile); - return uploadImageUrl; - } + private String upload(File uploadFile, String dirName) { + String fileName = dirName + "/" + UUID.randomUUID() + uploadFile.getName(); + String uploadImageUrl = putS3(uploadFile, fileName); + removeNewFile(uploadFile); + return uploadImageUrl; + } - private String putS3(File uploadFile, String fileName) { - amazonS3Client.putObject(new PutObjectRequest(bucket, fileName, uploadFile).withCannedAcl( - CannedAccessControlList.PublicRead)); - return amazonS3Client.getUrl(bucket, fileName).toString(); - } + private String putS3(File uploadFile, String fileName) { + amazonS3Client.putObject(new PutObjectRequest(bucket, fileName, uploadFile).withCannedAcl( + CannedAccessControlList.PublicRead)); + return amazonS3Client.getUrl(bucket, fileName).toString(); + } - private void removeNewFile(File targetFile) { - if (targetFile.delete()) { - log.info("파일이 삭제되었습니다."); - } else { - log.info("파일이 삭제되지 못했습니다."); - } - } + private void removeNewFile(File targetFile) { + if (targetFile.delete()) { + log.info("파일이 삭제되었습니다."); + } else { + log.info("파일이 삭제되지 못했습니다."); + } + } - private Optional convert(MultipartFile file) throws IOException { - String formatedNow = LocalDateTime.now() - .format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); - File convertFile = new File(formatedNow + file.getOriginalFilename()); - if (convertFile.createNewFile()) { - try (FileOutputStream fos = new FileOutputStream(convertFile)) { - fos.write(file.getBytes()); - } - return Optional.of(convertFile); - } - return Optional.empty(); - } + private Optional convert(MultipartFile file) throws IOException { + String formatedNow = LocalDateTime.now() + .format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + File convertFile = new File(formatedNow + file.getOriginalFilename()); + if (convertFile.createNewFile()) { + try (FileOutputStream fos = new FileOutputStream(convertFile)) { + fos.write(file.getBytes()); + } + return Optional.of(convertFile); + } + return Optional.empty(); + } } \ No newline at end of file diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 73e0008b..20b92233 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -25,12 +25,12 @@ spring: hibernate: ddl-auto: none properties: - hibernate: - jdbc: - lob: - non_contextual_creation: true - format_sql: false - show_sql: true + hibernate: + jdbc: + lob: + non_contextual_creation: true + format_sql: false + show_sql: true servlet: multipart: @@ -51,11 +51,11 @@ cloud: accessKey: ${EATSSU_AWS_ACCESS_KEY_DEV} secretKey: ${EATSSU_AWS_SECRET_KEY_DEV} s3: - bucket: eatssu-bucket + bucket: eatssu-bucket region: - static: ap-northeast-2 + static: ap-northeast-2 stack: - auto: false + auto: false #Slack slack: diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 1a4ffcd6..cc8b8d48 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -17,12 +17,12 @@ spring: hibernate: ddl-auto: none properties: - hibernate: - jdbc: - lob: - non_contextual_creation: true - format_sql: true - show_sql: false + hibernate: + jdbc: + lob: + non_contextual_creation: true + format_sql: true + show_sql: false servlet: multipart: @@ -43,11 +43,11 @@ cloud: accessKey: ${EATSSU_AWS_ACCESS_KEY_DEV} secretKey: ${EATSSU_AWS_SECRET_KEY_DEV} s3: - bucket: eatssu-bucket + bucket: eatssu-bucket region: - static: ap-northeast-2 + static: ap-northeast-2 stack: - auto: false + auto: false #Slack slack: diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 29d82927..3786480b 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -25,12 +25,12 @@ spring: hibernate: ddl-auto: none properties: - hibernate: - jdbc: - lob: - non_contextual_creation: true - format_sql: true - show_sql: false + hibernate: + jdbc: + lob: + non_contextual_creation: true + format_sql: true + show_sql: false servlet: multipart: @@ -51,11 +51,11 @@ cloud: accessKey: ${EATSSU_AWS_ACCESS_KEY_PROD} secretKey: ${EATSSU_AWS_SECRET_KEY_PROD} s3: - bucket: eatssu-prod-bucket + bucket: eatssu-prod-bucket region: - static: ap-northeast-2 + static: ap-northeast-2 stack: - auto: false + auto: false #Slack slack: diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index e6835a44..5379245d 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -16,13 +16,13 @@ spring: hibernate: ddl-auto: update properties: - hibernate: -# jdbc: - lob: - non_contextual_creation: true - format_sql: true - show_sql: true - dialect: org.hibernate.dialect.MySQLDialect + hibernate: + # jdbc: + lob: + non_contextual_creation: true + format_sql: true + show_sql: true + dialect: org.hibernate.dialect.MySQLDialect servlet: multipart: @@ -43,11 +43,11 @@ cloud: accessKey: ${EATSSU_AWS_ACCESS_KEY_PROD} secretKey: ${EATSSU_AWS_SECRET_KEY_PROD} s3: - bucket: eatssu-dev-bucket + bucket: eatssu-dev-bucket region: - static: ap-northeast-2 + static: ap-northeast-2 stack: - auto: false + auto: false #Slack slack: diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index d2133024..9aa2f73b 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -2,7 +2,7 @@ spring: profiles: # include : prod # include : dev - include : local + include: local # include: test user: diff --git a/src/test/java/ssu/eatssu/EatSsuApplicationTests.java b/src/test/java/ssu/eatssu/EatSsuApplicationTests.java index d8ba04b6..92b384f5 100644 --- a/src/test/java/ssu/eatssu/EatSsuApplicationTests.java +++ b/src/test/java/ssu/eatssu/EatSsuApplicationTests.java @@ -6,8 +6,8 @@ @SpringBootTest class EatSsuApplicationTests { - @Test - void contextLoads() { - } + @Test + void contextLoads() { + } } diff --git a/src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java b/src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java index cf22a4eb..58e03d83 100644 --- a/src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java +++ b/src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java @@ -5,8 +5,8 @@ public class TestAppleAuthenticator implements AppleAuthenticator { - @Override - public OAuthInfo getOAuthInfoByIdentityToken(String identityToken) { - return new OAuthInfo("test@test.com", "1234567890"); - } + @Override + public OAuthInfo getOAuthInfoByIdentityToken(String identityToken) { + return new OAuthInfo("test@test.com", "1234567890"); + } } diff --git a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java b/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java index 5ce77db1..6ee9a2c9 100644 --- a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java @@ -1,43 +1,36 @@ package ssu.eatssu.domain.auth.service; -import static org.junit.jupiter.api.Assertions.*; - -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; - import ssu.eatssu.domain.auth.dto.ValidRequest; import ssu.eatssu.domain.auth.security.JwtTokenProvider; -import ssu.eatssu.domain.auth.service.OAuthService; -import ssu.eatssu.domain.review.repository.ReviewRepository; -import ssu.eatssu.domain.user.repository.UserRepository; -import ssu.eatssu.domain.user.service.UserService; + +import static org.junit.jupiter.api.Assertions.assertTrue; @ExtendWith(MockitoExtension.class) class OauthServiceTest { - @InjectMocks - private OAuthService oauthService; + @InjectMocks + private OAuthService oauthService; - @Mock - private JwtTokenProvider jwtTokenProvider; + @Mock + private JwtTokenProvider jwtTokenProvider; - @Test - void 토큰_유효성_검사() { - // given - String token = "eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi"; - ValidRequest request = new ValidRequest(token); - Mockito.when(jwtTokenProvider.validateToken(token)).thenReturn(true); + @Test + void 토큰_유효성_검사() { + // given + String token = "eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi"; + ValidRequest request = new ValidRequest(token); + Mockito.when(jwtTokenProvider.validateToken(token)).thenReturn(true); - // when - Boolean result = oauthService.validToken(request); + // when + Boolean result = oauthService.validToken(request); - // then - assertTrue(result); - } + // then + assertTrue(result); + } } diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java index 7d1f252d..a18a0e03 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java @@ -1,12 +1,5 @@ package ssu.eatssu.domain.menu.service; -import static org.assertj.core.api.Assertions.*; -import static ssu.eatssu.domain.menu.entity.constants.TimePart.*; - -import java.sql.Date; -import java.util.List; -import java.util.Optional; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -14,7 +7,6 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.annotation.Transactional; - import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.menu.persistence.MealRepository; @@ -22,73 +14,80 @@ import ssu.eatssu.domain.menu.presentation.dto.response.MenusInMealResponse; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.sql.Date; +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static ssu.eatssu.domain.menu.entity.constants.TimePart.LUNCH; + @SpringBootTest @DisplayName("MealService 테스트") @ActiveProfiles("test") class MealServiceTest { - @Autowired - private MealService mealService; - - @Autowired - private MealRepository mealRepository; - - @BeforeEach - void setUp() { - mealRepository.deleteAll(); - } - - @Transactional - @Test - void 식단을_생성한다() { - // when - Long mealId = 식단_생성_요청(); - - // then - Optional meal = mealRepository.findById(mealId); - - assertThat(meal).isPresent(); - assertThat(mealRepository.findAll()).hasSize(1); - - Meal createdMeal = meal.get(); - assertThat(createdMeal.getMenuNames()).containsExactlyInAnyOrder("돈까스", "샐러드", "김치"); - assertThat(createdMeal.getRestaurant().name()).isEqualTo("HAKSIK"); - assertThat(createdMeal.getTimePart()).isEqualTo(LUNCH); - } - - private Long 식단_생성_요청() { - // given & when - Date date = Date.valueOf("2024-01-03"); - TimePart timePart = LUNCH; - Restaurant restaurant = Restaurant.from("HAKSIK"); - CreateMealRequest request = new CreateMealRequest(List.of("돈까스", "샐러드", "김치")); - - // then - return mealService.createMeal(date, restaurant, timePart, request); - } - - @Test - void 식단을_조회한다() { - // given - Long meadId = 식단_생성_요청(); - - // when - MenusInMealResponse response = mealService.getMenusInMealByMealId(meadId); - - // then - assertThat(response.getBriefMenus()).hasSize(3); - } - - @Test - void 식단을_삭제한다() { - // given - Long mealId = 식단_생성_요청(); - - // when - mealService.deleteByMealId(mealId); - - // then - assertThat(mealRepository.findAll()).hasSize(0); - assertThat(mealRepository.findAll()).hasSize(0); - } + @Autowired + private MealService mealService; + + @Autowired + private MealRepository mealRepository; + + @BeforeEach + void setUp() { + mealRepository.deleteAll(); + } + + @Transactional + @Test + void 식단을_생성한다() { + // when + Long mealId = 식단_생성_요청(); + + // then + Optional meal = mealRepository.findById(mealId); + + assertThat(meal).isPresent(); + assertThat(mealRepository.findAll()).hasSize(1); + + Meal createdMeal = meal.get(); + assertThat(createdMeal.getMenuNames()).containsExactlyInAnyOrder("돈까스", "샐러드", "김치"); + assertThat(createdMeal.getRestaurant().name()).isEqualTo("HAKSIK"); + assertThat(createdMeal.getTimePart()).isEqualTo(LUNCH); + } + + private Long 식단_생성_요청() { + // given & when + Date date = Date.valueOf("2024-01-03"); + TimePart timePart = LUNCH; + Restaurant restaurant = Restaurant.from("HAKSIK"); + CreateMealRequest request = new CreateMealRequest(List.of("돈까스", "샐러드", "김치")); + + // then + return mealService.createMeal(date, restaurant, timePart, request); + } + + @Test + void 식단을_조회한다() { + // given + Long meadId = 식단_생성_요청(); + + // when + MenusInMealResponse response = mealService.getMenusInMealByMealId(meadId); + + // then + assertThat(response.getBriefMenus()).hasSize(3); + } + + @Test + void 식단을_삭제한다() { + // given + Long mealId = 식단_생성_요청(); + + // when + mealService.deleteByMealId(mealId); + + // then + assertThat(mealRepository.findAll()).hasSize(0); + assertThat(mealRepository.findAll()).hasSize(0); + } } \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java index aeaafcc9..0cacedd3 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java @@ -1,17 +1,11 @@ package ssu.eatssu.domain.menu.service; -import static org.assertj.core.api.Assertions.*; - -import java.util.ArrayList; -import java.util.List; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; - import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.menu.persistence.MenuCategoryRepository; @@ -19,46 +13,51 @@ import ssu.eatssu.domain.menu.presentation.dto.response.MenuRestaurantResponse; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + @SpringBootTest @DisplayName("MenuService 테스트") @ActiveProfiles("test") class MenuServiceTest { - @Autowired - private MenuService menuService; + @Autowired + private MenuService menuService; - @Autowired - private MenuRepository menuRepository; + @Autowired + private MenuRepository menuRepository; - @Autowired - private MenuCategoryRepository menuCategoryRepository; + @Autowired + private MenuCategoryRepository menuCategoryRepository; - @BeforeEach - void setUp() { - menuRepository.deleteAll(); - } + @BeforeEach + void setUp() { + menuRepository.deleteAll(); + } - @Test - void 식당_이름으로_고정_메뉴를_조회한다() { - // given - List menus = new ArrayList<>(); - Restaurant foodCourt = Restaurant.from("FOOD_COURT"); + @Test + void 식당_이름으로_고정_메뉴를_조회한다() { + // given + List menus = new ArrayList<>(); + Restaurant foodCourt = Restaurant.from("FOOD_COURT"); - MenuCategory category1 = MenuCategory.builder().name("분식").restaurant(foodCourt).build(); - MenuCategory category2 = MenuCategory.builder().name("한식").restaurant(foodCourt).build(); + MenuCategory category1 = MenuCategory.builder().name("분식").restaurant(foodCourt).build(); + MenuCategory category2 = MenuCategory.builder().name("한식").restaurant(foodCourt).build(); - menus.add(Menu.createFixed("라면", foodCourt, 3000, category1)); - menus.add(Menu.createFixed("떡볶이", foodCourt, 5000, category2)); - menus.add(Menu.createFixed("짜게치", foodCourt, 4000, category1)); + menus.add(Menu.createFixed("라면", foodCourt, 3000, category1)); + menus.add(Menu.createFixed("떡볶이", foodCourt, 5000, category2)); + menus.add(Menu.createFixed("짜게치", foodCourt, 4000, category1)); - menuCategoryRepository.save(category1); - menuCategoryRepository.save(category2); - menuRepository.saveAll(menus); + menuCategoryRepository.save(category1); + menuCategoryRepository.save(category2); + menuRepository.saveAll(menus); - // when - MenuRestaurantResponse response = menuService.getMenusByRestaurant(foodCourt); + // when + MenuRestaurantResponse response = menuService.getMenusByRestaurant(foodCourt); - // then - assertThat(response.getCategoryMenuListCollection()).hasSize(2); - } + // then + assertThat(response.getCategoryMenuListCollection()).hasSize(2); + } } \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java b/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java index 89d3b443..12a08797 100644 --- a/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java @@ -1,12 +1,11 @@ package ssu.eatssu.domain.report.service; +import jakarta.transaction.Transactional; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; - -import jakarta.transaction.Transactional; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.report.dto.ReportCreateRequest; @@ -21,58 +20,58 @@ @SpringBootTest class ReportServiceTest { - @Autowired - private ReportService reportService; + @Autowired + private ReportService reportService; - @Autowired - private ReviewRepository reviewRepository; + @Autowired + private ReviewRepository reviewRepository; - @Autowired - private ReportRepository reportRepository; + @Autowired + private ReportRepository reportRepository; - @Autowired - private UserRepository userRepository; + @Autowired + private UserRepository userRepository; - @BeforeEach - void setUp() { - reportRepository.deleteAll(); - reviewRepository.deleteAll(); - userRepository.deleteAll(); - } + @BeforeEach + void setUp() { + reportRepository.deleteAll(); + reviewRepository.deleteAll(); + userRepository.deleteAll(); + } - @Test - @Transactional - void 신고를_생성한다() { - //given - User user = createUser(); // 이 부분에서 User가 데이터베이스에 저장되었는지 확인 - Review review = createReview(user); - CustomUserDetails userDetails = createCustomUserDetails(user); - ReportCreateRequest request = new ReportCreateRequest( - review.getId(), ReportType.IMPROPER_ADVERTISEMENT, "음란성, 욕설 등 부적절한 내용"); + @Test + @Transactional + void 신고를_생성한다() { + //given + User user = createUser(); // 이 부분에서 User가 데이터베이스에 저장되었는지 확인 + Review review = createReview(user); + CustomUserDetails userDetails = createCustomUserDetails(user); + ReportCreateRequest request = new ReportCreateRequest( + review.getId(), ReportType.IMPROPER_ADVERTISEMENT, "음란성, 욕설 등 부적절한 내용"); - //when - Report createdReport = reportService.reportReview(userDetails, request); + //when + Report createdReport = reportService.reportReview(userDetails, request); - //then - Assertions.assertThat(reportRepository.findAll()).hasSize(1); - Assertions.assertThat(createdReport.getContent()) - .isEqualTo("음란성, 욕설 등 부적절한 내용"); - } + //then + Assertions.assertThat(reportRepository.findAll()).hasSize(1); + Assertions.assertThat(createdReport.getContent()) + .isEqualTo("음란성, 욕설 등 부적절한 내용"); + } - private User createUser() { - return User.create("test1@test.com", "user-test", OAuthProvider.EATSSU, "1234", "1234"); - } + private User createUser() { + return User.create("test1@test.com", "user-test", OAuthProvider.EATSSU, "1234", "1234"); + } - private CustomUserDetails createCustomUserDetails(User user) { - User savedUser = userRepository.save(user); - return new CustomUserDetails(savedUser); - } + private CustomUserDetails createCustomUserDetails(User user) { + User savedUser = userRepository.save(user); + return new CustomUserDetails(savedUser); + } - private Review createReview(User user) { - return reviewRepository.save(Review.builder() - .user(user) - .content("굿") - .build()); - } + private Review createReview(User user) { + return reviewRepository.save(Review.builder() + .user(user) + .content("굿") + .build()); + } } \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java index 727981f5..b2011705 100644 --- a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java @@ -1,12 +1,9 @@ package ssu.eatssu.domain.review.service; -import static org.assertj.core.api.Assertions.*; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; - import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Menu; @@ -19,92 +16,94 @@ import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; +import static org.assertj.core.api.Assertions.assertThat; + @SpringBootTest class ReviewServiceTest { - @Autowired - private ReviewService reviewService; - - @Autowired - private UserRepository userRepository; - - @Autowired - private MenuRepository menuRepository; - - @Autowired - private ReviewRepository reviewRepository; - - @BeforeEach - void setup() { - reviewRepository.deleteAll(); - userRepository.deleteAll(); - menuRepository.deleteAll(); - } - - @Test - void 리뷰를_생성한다() { - User user = createUser(); - CustomUserDetails userDetails = createCustomUserDetails(user); - Review createdReview = 리뷰_생성_요청(userDetails); - - // then - assertThat(reviewRepository.findAll()).hasSize(1); - assertThat(reviewRepository.findById(createdReview.getId()).orElseThrow().getContent()) - .isEqualTo("굿"); - } - - @Test - void 리뷰를_업데이트한다() { - // given - User user = createUser(); - CustomUserDetails userDetails = createCustomUserDetails(user); - Review createdReview = 리뷰_생성_요청(userDetails); - - // when - ReviewUpdateRequest request = new ReviewUpdateRequest(5, 5, 5, "굿굿"); - reviewService.updateReview(userDetails, createdReview.getId(), request); - - // then - assertThat(reviewRepository.findById(createdReview.getId()).orElseThrow().getContent()) - .isEqualTo("굿굿"); - } - - @Test - void 리뷰를_삭제한다() { - // given - User user = createUser(); - CustomUserDetails userDetails = createCustomUserDetails(user); - Review createdReview = 리뷰_생성_요청(userDetails); - - // when - reviewService.deleteReview(userDetails, createdReview.getId()); - - // then - assertThat(reviewRepository.findAll()).hasSize(0); - } - - private Review 리뷰_생성_요청(CustomUserDetails userDetails) { - // given - Menu menu = createMenu(); - ReviewCreateRequest request = new ReviewCreateRequest(4, 4, 4, "굿"); - - // when - Review createdReview = reviewService.createReview(userDetails, menu.getId(), - request, null); - return createdReview; - } - - private User createUser() { - return User.create("test@test.com", "user-test", OAuthProvider.EATSSU, "1234", "1234"); - } - - private CustomUserDetails createCustomUserDetails(User user) { - User savedUser = userRepository.save(user); - return new CustomUserDetails(savedUser); - } - - private Menu createMenu() { - Menu menu = Menu.createFixed("라면", Restaurant.FOOD_COURT, 3000, null); - return menuRepository.save(menu); - } + @Autowired + private ReviewService reviewService; + + @Autowired + private UserRepository userRepository; + + @Autowired + private MenuRepository menuRepository; + + @Autowired + private ReviewRepository reviewRepository; + + @BeforeEach + void setup() { + reviewRepository.deleteAll(); + userRepository.deleteAll(); + menuRepository.deleteAll(); + } + + @Test + void 리뷰를_생성한다() { + User user = createUser(); + CustomUserDetails userDetails = createCustomUserDetails(user); + Review createdReview = 리뷰_생성_요청(userDetails); + + // then + assertThat(reviewRepository.findAll()).hasSize(1); + assertThat(reviewRepository.findById(createdReview.getId()).orElseThrow().getContent()) + .isEqualTo("굿"); + } + + @Test + void 리뷰를_업데이트한다() { + // given + User user = createUser(); + CustomUserDetails userDetails = createCustomUserDetails(user); + Review createdReview = 리뷰_생성_요청(userDetails); + + // when + ReviewUpdateRequest request = new ReviewUpdateRequest(5, 5, 5, "굿굿"); + reviewService.updateReview(userDetails, createdReview.getId(), request); + + // then + assertThat(reviewRepository.findById(createdReview.getId()).orElseThrow().getContent()) + .isEqualTo("굿굿"); + } + + @Test + void 리뷰를_삭제한다() { + // given + User user = createUser(); + CustomUserDetails userDetails = createCustomUserDetails(user); + Review createdReview = 리뷰_생성_요청(userDetails); + + // when + reviewService.deleteReview(userDetails, createdReview.getId()); + + // then + assertThat(reviewRepository.findAll()).hasSize(0); + } + + private Review 리뷰_생성_요청(CustomUserDetails userDetails) { + // given + Menu menu = createMenu(); + ReviewCreateRequest request = new ReviewCreateRequest(4, 4, 4, "굿"); + + // when + Review createdReview = reviewService.createReview(userDetails, menu.getId(), + request, null); + return createdReview; + } + + private User createUser() { + return User.create("test@test.com", "user-test", OAuthProvider.EATSSU, "1234", "1234"); + } + + private CustomUserDetails createCustomUserDetails(User user) { + User savedUser = userRepository.save(user); + return new CustomUserDetails(savedUser); + } + + private Menu createMenu() { + Menu menu = Menu.createFixed("라면", Restaurant.FOOD_COURT, 3000, null); + return menuRepository.save(menu); + } } \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java b/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java index 9c612f23..9f49ce8d 100644 --- a/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java @@ -1,13 +1,10 @@ package ssu.eatssu.domain.user.service; -import static org.assertj.core.api.Assertions.*; - import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; - import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.review.repository.ReviewRepository; @@ -15,76 +12,78 @@ import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; +import static org.assertj.core.api.Assertions.assertThat; + @SpringBootTest class UserServiceTest { - @Autowired - private UserService userService; - @Autowired - private UserRepository userRepository; - @Autowired - private ReviewRepository reviewRepository; - - @BeforeEach - void setUp() { - reviewRepository.deleteAll(); - userRepository.deleteAll(); - } - - @Test - void 회원가입을_한다() { - // given & when - 회원가입_요청(); - - // then - assertThat(userRepository.findAll()).hasSize(1); - } - - @Test - void 닉네임을_변경한다() { - // given - User user = 회원가입_요청(); - CustomUserDetails userDetails = UserDetails_생성(user); - - // when - userService.updateNickname(userDetails, new NicknameUpdateRequest("newNickname")); - - // then - user = userRepository.findById(userDetails.getId()).orElseThrow(); - assertThat(user.getNickname()).isEqualTo("newNickname"); - } - - @Test - void 회원탈퇴를_한다() { - // given - User user = 회원가입_요청(); - CustomUserDetails userDetails = UserDetails_생성(user); - - // when - userService.withdraw(userDetails); - - // then - assertThat(userRepository.findAll()).hasSize(0); - } - - @Test - void 중복_이메일을_확인한다() { - // given - User user = 회원가입_요청(); - - // when - boolean isDuplicated = userService.validateDuplicatedEmail(user.getEmail()); - - // then - assertThat(isDuplicated).isFalse(); - } - - private User 회원가입_요청() { - return userService.join("test@test.com", OAuthProvider.EATSSU, "1234"); - } - - @NotNull - private CustomUserDetails UserDetails_생성(User user) { - return new CustomUserDetails(user); - } + @Autowired + private UserService userService; + @Autowired + private UserRepository userRepository; + @Autowired + private ReviewRepository reviewRepository; + + @BeforeEach + void setUp() { + reviewRepository.deleteAll(); + userRepository.deleteAll(); + } + + @Test + void 회원가입을_한다() { + // given & when + 회원가입_요청(); + + // then + assertThat(userRepository.findAll()).hasSize(1); + } + + @Test + void 닉네임을_변경한다() { + // given + User user = 회원가입_요청(); + CustomUserDetails userDetails = UserDetails_생성(user); + + // when + userService.updateNickname(userDetails, new NicknameUpdateRequest("newNickname")); + + // then + user = userRepository.findById(userDetails.getId()).orElseThrow(); + assertThat(user.getNickname()).isEqualTo("newNickname"); + } + + @Test + void 회원탈퇴를_한다() { + // given + User user = 회원가입_요청(); + CustomUserDetails userDetails = UserDetails_생성(user); + + // when + userService.withdraw(userDetails); + + // then + assertThat(userRepository.findAll()).hasSize(0); + } + + @Test + void 중복_이메일을_확인한다() { + // given + User user = 회원가입_요청(); + + // when + boolean isDuplicated = userService.validateDuplicatedEmail(user.getEmail()); + + // then + assertThat(isDuplicated).isFalse(); + } + + private User 회원가입_요청() { + return userService.join("test@test.com", OAuthProvider.EATSSU, "1234"); + } + + @NotNull + private CustomUserDetails UserDetails_생성(User user) { + return new CustomUserDetails(user); + } } From e80915cb11fe804e6abbad8e0967694574270f13 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Thu, 26 Jun 2025 22:14:34 +0900 Subject: [PATCH 232/399] =?UTF-8?q?fix:=20=EB=A6=AC=EB=B7=B0v2=200601=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=EC=82=AC=ED=95=AD=20(#171)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 리뷰 좋아요, 싫어요 API 삭제 * feat: 리뷰v2 uri 직관적으로 네이밍 수정 * feat: dev, prod에서만 서버에러 슬랙 알림가게 수정 * feat: menu에 대한 리뷰리스트 조회 추가 * feat: likeCount, alias 제거 * feat: menu에 대한 리뷰 추가 * chore: 내가 쓴 리뷰 조회 user -> review로 위치 이동 * feat: /statistics/menu api 조회시 npe 나는 문제 해결 * feat: ReviewMenuRepository 원복 * feat: meal, menu 정보 조회 시 menuName / menuNames null로 나오는 문제 해결 * feat: 좋아요, 싫어요 산정 기준에 맞춰서 로직 변경 * feat: /users/reviews NPE 문제 나는 부분 예외처리 * feat: 마이페이지 좋아한 메뉴 칩 추가되게 dto, 로직 일괄 변경 * feat: 특정 메뉴 리스트 조회 로직 변경 --- .../auth/infrastructure/SecurityConfig.java | 103 +-- .../domain/review/dto/MealReviewResponse.java | 156 ++--- .../review/dto/MenuReviewsV2Response.java | 68 +- .../domain/review/dto/ReviewRatingCount.java | 37 +- .../eatssu/domain/review/entity/Review.java | 229 +++---- .../eatssu/domain/review/entity/Reviews.java | 86 ++- .../presentation/ReviewControllerV2.java | 355 +++++----- .../repository/ReviewLikeRepository.java | 12 - .../repository/ReviewMenuLikeRepository.java | 7 +- .../review/service/ReviewServiceV2.java | 612 +++++++++--------- .../domain/slice/service/SliceService.java | 155 ++--- .../domain/user/dto/MyMealReviewResponse.java | 74 ++- .../domain/user/dto/MyReviewDetail.java | 89 ++- .../user/presentation/UserController.java | 333 +++++----- .../domain/user/util/UserAliasUtil.java | 37 -- .../handler/GlobalExceptionHandler.java | 406 ++++++------ 16 files changed, 1388 insertions(+), 1371 deletions(-) delete mode 100644 src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java delete mode 100644 src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 4ea22ac4..472a867e 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -1,6 +1,5 @@ package ssu.eatssu.domain.auth.infrastructure; -import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -12,6 +11,8 @@ import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; + +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.JwtAuthenticationFilter; import ssu.eatssu.domain.auth.security.JwtTokenProvider; import ssu.eatssu.global.handler.JwtAccessDeniedHandler; @@ -21,64 +22,64 @@ @Configuration @RequiredArgsConstructor public class SecurityConfig { - private static final String[] RESOURCE_LIST = { - "/swagger-ui.html", "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**", "/oauths/valid/token", "/admin/img/**", "/css/**", "/js/**", - "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" - }; + private static final String[] RESOURCE_LIST = { + "/swagger-ui.html", "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**","/oauths/valid/token", "/admin/img/**", "/css/**", "/js/**", + "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" + }; - private static final String[] AUTH_WHITELIST = { - "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", - "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics", "/v2/reviews", - "/partnerships/**", "/v2/reviews/menus/**", "/v2/reviews/meals/**", "/actuator/**", "/error-test/**" - }; + private static final String[] AUTH_WHITELIST = { + "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", + "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics/**", + "/partnerships/**","/v2/reviews/menus/**","/v2/reviews/meals/**","/actuator/**","/error-test/**" + }; - private static final String[] ADMIN_PAGE_LIST = { - "/admin/**" - }; + private static final String[] ADMIN_PAGE_LIST = { + "/admin/**" + }; - private final JwtTokenProvider jwtTokenProvider; - private final JwtAccessDeniedHandler jwtAccessDeniedHandler; - private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; + private final JwtTokenProvider jwtTokenProvider; + private final JwtAccessDeniedHandler jwtAccessDeniedHandler; + private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; - @Bean - public PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(); - } + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } - @Bean - protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - http - .csrf().disable() - .authorizeHttpRequests(authorize -> authorize - .shouldFilterAllDispatcherTypes(false) - .requestMatchers("/partnerships/*/like").authenticated() - .requestMatchers(AUTH_WHITELIST).permitAll() - .requestMatchers(RESOURCE_LIST).permitAll() - .requestMatchers(ADMIN_PAGE_LIST).hasRole("ADMIN") - .anyRequest().authenticated() - .and().addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), - UsernamePasswordAuthenticationFilter.class)) - .exceptionHandling() - .accessDeniedHandler(jwtAccessDeniedHandler) - .authenticationEntryPoint(jwtAuthenticationEntryPoint); + @Bean + protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http + .csrf().disable() + .authorizeHttpRequests(authorize -> authorize + .shouldFilterAllDispatcherTypes(false) + .requestMatchers("/partnerships/*/like").authenticated() + .requestMatchers(AUTH_WHITELIST).permitAll() + .requestMatchers(RESOURCE_LIST).permitAll() + .requestMatchers(ADMIN_PAGE_LIST).hasRole("ADMIN") + .anyRequest().authenticated() + .and().addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), + UsernamePasswordAuthenticationFilter.class)) + .exceptionHandling() + .accessDeniedHandler(jwtAccessDeniedHandler) + .authenticationEntryPoint(jwtAuthenticationEntryPoint); - http - .cors().configurationSource(corsConfigurationSource()); - return http.build(); - } + http + .cors().configurationSource(corsConfigurationSource()); + return http.build(); + } - @Bean - public CorsConfigurationSource corsConfigurationSource() { - CorsConfiguration configuration = new CorsConfiguration(); + @Bean + public CorsConfigurationSource corsConfigurationSource() { + CorsConfiguration configuration = new CorsConfiguration(); - configuration.addAllowedOriginPattern("*"); - configuration.addAllowedHeader("*"); - configuration.addAllowedMethod("*"); - configuration.setAllowCredentials(true); + configuration.addAllowedOriginPattern("*"); + configuration.addAllowedHeader("*"); + configuration.addAllowedMethod("*"); + configuration.setAllowCredentials(true); - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - source.registerCorsConfiguration("/**", configuration); - return source; - } + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", configuration); + return source; + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java index 0d695be0..11653c59 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java @@ -1,103 +1,83 @@ package ssu.eatssu.domain.review.dto; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewMenuLike; -import ssu.eatssu.domain.user.util.UserAliasUtil; - -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; @AllArgsConstructor @Builder @Schema(title = "리뷰 상세") @Getter public class MealReviewResponse { - @Schema(description = "리뷰 식별자", example = "123") - Long reviewId; - - @Schema(description = "작성자 식별자", example = "123") - Long writerId; - - @Schema(description = "본인 글인지 여부(true/false)", example = "true") - Boolean isWriter; - - @Schema(description = "작성자 닉네임", example = "숭시리시리") - private String writerNickname; - - @Schema(description = "평점", example = "4") - private Integer rating; - - @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") - private LocalDate writtenAt; - - @Schema(description = "리뷰 내용", example = "맛있습니당") - private String content; - - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imageUrls; - - @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") - private List likedMenuNames; - - @Schema(description = "본인이 이 리뷰에 좋아요를 눌렀는지 여부(true/false)", example = "true") - private Boolean isLikedByUser; - - @Schema(description = "리뷰 좋아요 개수", example = "10") - private Integer likeCount; - - @Schema(description = "별칭", example = "미슈테리 미식가") - private String alias; - - public static MealReviewResponse from(Review review, Long userId) { - List imageUrls = new ArrayList<>(); - review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); - - List likedMenuNames = review.getMenuLikes().stream() - .filter(ReviewMenuLike::getIsLike) - .map(like -> like.getMenu().getName()) - .collect(Collectors.toList()); - - boolean isLikedByUser = (userId != null) && review.getReviewLikes().stream() - .anyMatch(like -> like.getUser().getId().equals(userId)); - - String alias = (review.getUser() != null) ? UserAliasUtil.getUserAlias(review.getUser(), - review.getUser() - .getReviews()) : "알 수 없음"; - - MealReviewResponseBuilder builder = MealReviewResponse.builder() - .reviewId(review.getId()) - .rating(review.getRating()) - .writtenAt(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .imageUrls(imageUrls) - .likedMenuNames(likedMenuNames) - .isLikedByUser(isLikedByUser) - .likeCount(review.getReviewLikes().size()) - .alias(alias); - - if (review.getUser() == null) { - return builder.writerId(null) - .writerNickname("알 수 없음") - .isWriter(false) - .build(); - } - - if (review.getUser().getId().equals(userId)) { - return builder.writerId(review.getUser().getId()) - .writerNickname(review.getUser().getNickname()) - .isWriter(true) - .build(); - } - - return builder.writerId(review.getUser().getId()) - .writerNickname(review.getUser().getNickname()) - .isWriter(false) - .build(); - } + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; + + @Schema(description = "작성자 식별자", example = "123") + Long writerId; + + @Schema(description = "본인 글인지 여부(true/false)", example = "true") + Boolean isWriter; + + @Schema(description = "작성자 닉네임", example = "숭시리시리") + private String writerNickname; + + @Schema(description = "평점", example = "4") + private Integer rating; + + @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") + private LocalDate writtenAt; + + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; + + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; + + @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") + private List likedMenuNames; + + public static MealReviewResponse from(Review review, Long userId) { + List imageUrls = new ArrayList<>(); + review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); + + List likedMenuNames = review.getMenuLikes().stream() + .filter(ReviewMenuLike::getIsLike) + .map(like -> like.getMenu().getName()) + .collect(Collectors.toList()); + + MealReviewResponseBuilder builder = MealReviewResponse.builder() + .reviewId(review.getId()) + .rating(review.getRating()) + .writtenAt(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imageUrls(imageUrls) + .likedMenuNames(likedMenuNames); + + if (review.getUser() == null) { + return builder.writerId(null) + .writerNickname("알 수 없음") + .isWriter(false) + .build(); + } + + if (review.getUser().getId().equals(userId)) { + return builder.writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(true) + .build(); + } + + return builder.writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(false) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java index cad2981a..d6af85a8 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java @@ -1,49 +1,47 @@ package ssu.eatssu.domain.review.dto; +import java.util.List; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; -import java.util.List; - @Schema(title = "메뉴 리뷰 정보V2(평점 등등)") @Getter @AllArgsConstructor @Builder public class MenuReviewsV2Response implements ReviewInformationResponse { - @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") - private List menuNames; - - @Schema(description = "리뷰 개수", example = "15") - private Long totalReviewCount; - - @Schema(description = "평점-메인", example = "4.4") - private Double mainRating; - - @Schema(description = "좋아요 개수", example = "4.4") - private Integer likeCount; - - @Schema(description = "싫어요 개수", example = "4.4") - private Integer unlikeCount; - - @Schema(description = "평점 별 갯수") - private ReviewRatingCount reviewRatingCount; - - public static MenuReviewsV2Response of(Long totalReviewCount, - List menuNames, - RatingAverages ratingAverages, - ReviewRatingCount reviewRatingCount, - Menu menu) { - - return MenuReviewsV2Response.builder() - .menuNames(menuNames) - .mainRating(ratingAverages.mainRating()) - .likeCount(menu.getLikeCount()) - .unlikeCount(menu.getUnlikeCount()) - .totalReviewCount(totalReviewCount) - .reviewRatingCount(reviewRatingCount) - .build(); - } + @Schema(description = "메뉴명", example = "고구마 치즈 돈까스") + private String menuName; + + @Schema(description = "리뷰 개수", example = "15") + private Long totalReviewCount; + + @Schema(description = "평점-메인", example = "4.4") + private Double mainRating; + + @Schema(description = "좋아요 개수", example = "4.4") + private Integer likeCount; + + @Schema(description = "싫어요 개수", example = "4.4") + private Integer unlikeCount; + + @Schema(description = "평점 별 갯수") + private ReviewRatingCount reviewRatingCount; + + public static MenuReviewsV2Response of(Long totalReviewCount, String menuName, + RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount,Menu menu) { + + return MenuReviewsV2Response.builder() + .menuName(menuName) + .mainRating(ratingAverages.mainRating()) + .likeCount(menu.getLikeCount()) + .unlikeCount(menu.getUnlikeCount()) + .totalReviewCount(totalReviewCount) + .reviewRatingCount(reviewRatingCount) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java index 067f5e80..5d7638bc 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java @@ -1,32 +1,31 @@ package ssu.eatssu.domain.review.dto; -import ssu.eatssu.domain.review.entity.Review; - import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import ssu.eatssu.domain.review.entity.Review; + //COMMENT: 더 좋은 매개변수 명이 있을 것 같은데 제 머리로는 이게 한계입니다... 멋진 변수명으로 바꿔주세요 public record ReviewRatingCount(long oneStarCount, long twoStarCount, long threeStarCount, long fourStarCount, - long fiveStarCount) { + long fiveStarCount) { - public ReviewRatingCount { - } + public ReviewRatingCount { + } - public static ReviewRatingCount from(List reviews) { - Map ratingDistribution = reviews.stream() - .collect( - Collectors.groupingBy(Review::getRating, - LinkedHashMap::new, - Collectors.counting())); + public static ReviewRatingCount from(List reviews) { + Map ratingDistribution = reviews.stream() + .filter(r -> r.getRating() != null) + .collect(Collectors.groupingBy(Review::getRating, LinkedHashMap::new, + Collectors.counting())); - return new ReviewRatingCount( - ratingDistribution.getOrDefault(1, 0L), - ratingDistribution.getOrDefault(2, 0L), - ratingDistribution.getOrDefault(3, 0L), - ratingDistribution.getOrDefault(4, 0L), - ratingDistribution.getOrDefault(5, 0L) - ); - } + return new ReviewRatingCount( + ratingDistribution.getOrDefault(1, 0L), + ratingDistribution.getOrDefault(2, 0L), + ratingDistribution.getOrDefault(3, 0L), + ratingDistribution.getOrDefault(4, 0L), + ratingDistribution.getOrDefault(5, 0L) + ); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index f8ddf00d..50c0ec90 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -1,5 +1,10 @@ package ssu.eatssu.domain.review.entity; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Embedded; @@ -23,11 +28,6 @@ import ssu.eatssu.domain.user.entity.BaseTimeEntity; import ssu.eatssu.domain.user.entity.User; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - @Entity @Getter @Setter @@ -36,113 +36,114 @@ @AllArgsConstructor public class Review extends BaseTimeEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "review_id") - private Long id; - - private String content; - - // TODO : 삭제되어야 함 - @Embedded - private Ratings ratings; - - private Integer rating; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") - private User user; - - // TODO : 삭제되어야 함 - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "menu_id") - private Menu menu; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "meal_id") - private Meal meal; - - @Builder.Default - @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) - private List reviewImages = new ArrayList<>(); - - @Builder.Default - @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) - private List menuLikes = new ArrayList<>(); - - @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) - private List reviewLikes = new ArrayList<>(); - - public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { - this.content = content; - this.ratings = Ratings.of(mainRate, amountRate, tasteRate); - } - - // TODO : this.user가 null이면? - public boolean isNotWrittenBy(User user) { - return !this.user.equals(user); - } - - public void clearUser() { - this.user = null; - } - - public void addReviewImage(String imageUrl) { - ReviewImage reviewImage = new ReviewImage(this, imageUrl); - this.reviewImages.add(reviewImage); - } - - public void addReviewMenuLike(Menu menu, boolean isLike) { - ReviewMenuLike reviewMenuLike = ReviewMenuLike.create(this, menu, isLike); - this.menuLikes.add(reviewMenuLike); - - if (isLike) { - menu.increaseLikeCount(); - } else { - menu.increaseUnlikeCount(); - } - } - - public void removeReviewMenuLike(ReviewMenuLike reviewMenuLike) { - this.menuLikes.remove(reviewMenuLike); - - if (reviewMenuLike.getIsLike()) { - reviewMenuLike.getMenu().decreaseLikeCount(); - } else { - reviewMenuLike.getMenu().decreaseUnlikeCount(); - } - } - - public void update(String content, int rating, Map updatedMenuLikes) { - this.content = content; - this.rating = rating; - - // 현재 menu like 상태를 menu를 기준으로 매핑 - Map currentMenuLikes = this.menuLikes.stream() - .collect(Collectors.toMap(ReviewMenuLike::getMenu, - menuLike -> menuLike)); - - for (Map.Entry entry : updatedMenuLikes.entrySet()) { - Menu menu = entry.getKey(); - Boolean newState = entry.getValue(); - ReviewMenuLike existingReviewMenuLike = currentMenuLikes.get(menu); - if (existingReviewMenuLike == null) { - // 기존에 없는 메뉴이면 새롭게 추가 - this.addReviewMenuLike(menu, newState); - } else { - // 기존에 있는 경우 : 상태가 다르면 업데이트 - if (!existingReviewMenuLike.getIsLike().equals(newState)) { - existingReviewMenuLike.updateLike(newState); - menu.changeLikeStatus(newState); - } - } - } - } - - public void resetMenuLikes() { - for (ReviewMenuLike reviewMenuLike : this.menuLikes) { - reviewMenuLike.resetMenuLikeStatus(); - } - this.menuLikes.clear(); - } + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_id") + private Long id; + + private String content; + + // TODO : 삭제되어야 함 + @Embedded + private Ratings ratings; + + private Integer rating; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + // TODO : 삭제되어야 함 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "menu_id") + private Menu menu; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "meal_id") + private Meal meal; + + @Builder.Default + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) + private List reviewImages = new ArrayList<>(); + + @Builder.Default + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) + private List menuLikes = new ArrayList<>(); + + // @TODO: 리뷰v2 배포 이후 제거 해야함 + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) + private List reviewLikes = new ArrayList<>(); + + public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { + this.content = content; + this.ratings = Ratings.of(mainRate, amountRate, tasteRate); + } + + // TODO : this.user가 null이면? + public boolean isNotWrittenBy(User user) { + return !this.user.equals(user); + } + + public void clearUser() { + this.user = null; + } + + public void addReviewImage(String imageUrl) { + ReviewImage reviewImage = new ReviewImage(this, imageUrl); + this.reviewImages.add(reviewImage); + } + + public void addReviewMenuLike(Menu menu, boolean isLike) { + ReviewMenuLike reviewMenuLike = ReviewMenuLike.create(this, menu, isLike); + this.menuLikes.add(reviewMenuLike); + + if (isLike) { + menu.increaseLikeCount(); + } else { + menu.increaseUnlikeCount(); + } + } + + public void removeReviewMenuLike(ReviewMenuLike reviewMenuLike) { + this.menuLikes.remove(reviewMenuLike); + + if (reviewMenuLike.getIsLike()) { + reviewMenuLike.getMenu().decreaseLikeCount(); + } else { + reviewMenuLike.getMenu().decreaseUnlikeCount(); + } + } + + public void update(String content, int rating, Map updatedMenuLikes) { + this.content = content; + this.rating = rating; + + // 현재 menu like 상태를 menu를 기준으로 매핑 + Map currentMenuLikes = this.menuLikes.stream() + .collect(Collectors.toMap(ReviewMenuLike::getMenu, + menuLike -> menuLike)); + + for (Map.Entry entry : updatedMenuLikes.entrySet()) { + Menu menu = entry.getKey(); + Boolean newState = entry.getValue(); + ReviewMenuLike existingReviewMenuLike = currentMenuLikes.get(menu); + if (existingReviewMenuLike == null) { + // 기존에 없는 메뉴이면 새롭게 추가 + this.addReviewMenuLike(menu, newState); + } else { + // 기존에 있는 경우 : 상태가 다르면 업데이트 + if (!existingReviewMenuLike.getIsLike().equals(newState)) { + existingReviewMenuLike.updateLike(newState); + menu.changeLikeStatus(newState); + } + } + } + } + + public void resetMenuLikes() { + for (ReviewMenuLike reviewMenuLike : this.menuLikes) { + reviewMenuLike.resetMenuLikeStatus(); + } + this.menuLikes.clear(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java index fc8267e3..4597c350 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java @@ -1,5 +1,8 @@ package ssu.eatssu.domain.review.entity; +import java.util.ArrayList; +import java.util.List; + import jakarta.persistence.CascadeType; import jakarta.persistence.Embeddable; import jakarta.persistence.OneToMany; @@ -8,55 +11,50 @@ import lombok.NoArgsConstructor; import ssu.eatssu.domain.rating.entity.ReviewRating; -import java.util.ArrayList; -import java.util.List; - @Getter @NoArgsConstructor(access = AccessLevel.PUBLIC) @Embeddable public class Reviews { - @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) - private List reviews = new ArrayList<>(); - - public void add(Review review) { - reviews.add(review); - } - - public int size() { - return reviews.size(); - } - - public void calculateReviewRatings() { - this.reviews.forEach(review -> { - int rateValue = review.getRatings().getMainRating(); - ReviewRating.fromValue(rateValue).incrementCount(); - }); - } - - public int getTotalMainRating() { - return this.reviews.stream().mapToInt(review -> review.getRatings().getMainRating()).sum(); - } - - public int getTotalAmountRating() { - return this.reviews.stream().mapToInt(review -> review.getRatings().getAmountRating()) - .sum(); - } - - public int getTotalTasteRating() { - return this.reviews.stream().mapToInt(review -> review.getRatings().getTasteRating()).sum(); - } - - public double getAverageMainRating() { - return (double) this.getTotalMainRating() / this.size(); - } - - public double getAverageAmountRating() { - return (double) this.getTotalAmountRating() / this.size(); - } + @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) + private List reviews = new ArrayList<>(); + + public void add(Review review) { + reviews.add(review); + } + + public int size() { + return reviews.size(); + } + + public void calculateReviewRatings() { + this.reviews.forEach(review -> { + if (review.getRatings() != null) { + int rateValue = review.getRatings().getMainRating(); + ReviewRating.fromValue(rateValue).incrementCount(); + } + }); + } + + public int getTotalMainRating() { + return this.reviews.stream() + .filter(review -> review.getRatings() != null) + .mapToInt(review-> review.getRatings().getMainRating()) + .sum(); + } + + public int getTotalAmountRating() { + return this.reviews.stream() + .filter(review -> review.getRatings() != null) + .mapToInt(review -> review.getRatings().getAmountRating()) + .sum(); + } + + public int getTotalTasteRating() { + return this.reviews.stream() + .filter(review -> review.getRatings() != null) + .mapToInt(review -> review.getRatings().getTasteRating()).sum(); + } - public double getAverageTasteRating() { - return (double) this.getTotalTasteRating() / this.size(); - } } diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java index 23772e5f..4ee7f728 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java @@ -1,17 +1,10 @@ package ssu.eatssu.domain.review.presentation; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.enums.ParameterIn; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; +import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; +import org.springframework.data.web.PageableDefault; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -22,17 +15,33 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.domain.menu.entity.constants.MenuType; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; import ssu.eatssu.domain.review.dto.MealReviewResponse; import ssu.eatssu.domain.review.dto.MealReviewsV2Response; +import ssu.eatssu.domain.review.dto.MenuReviewResponse; import ssu.eatssu.domain.review.dto.MenuReviewsV2Response; import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; +import ssu.eatssu.domain.review.dto.ReviewDetail; import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; -import ssu.eatssu.domain.review.service.ReviewService; +import ssu.eatssu.domain.review.dto.UploadReviewRequest; import ssu.eatssu.domain.review.service.ReviewServiceV2; +import ssu.eatssu.domain.review.service.ReviewService; import ssu.eatssu.domain.slice.dto.SliceResponse; +import ssu.eatssu.domain.slice.service.SliceService; +import ssu.eatssu.domain.user.dto.MyMealReviewResponse; import ssu.eatssu.global.handler.response.BaseResponse; @RestController @@ -40,149 +49,187 @@ @RequestMapping("/v2/reviews") @Tag(name = "Review V2", description = "리뷰 V2 API") public class ReviewControllerV2 { - private final ReviewServiceV2 reviewServiceV2; - - private final ReviewService reviewService; - - @Operation(summary = "리뷰 작성", description = "리뷰를 작성하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - }) - @PostMapping() - public BaseResponse createReview( - @RequestBody CreateMealReviewRequest createMealReviewRequest, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewServiceV2.createReview(customUserDetails, createMealReviewRequest); - return BaseResponse.success(); - } - - @Operation(summary = "특정 식당 모든 리뷰 정보 조회(리뷰 개수, 평점 등등)", description = """ - 특정 식당 모든 리뷰 정보를 조회하는 API 입니다.

- 리뷰 개수, 별점 별 개수, 리뷰 평점, 좋아요 개수, 싫어요 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "path parameter 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/statistics") - public BaseResponse getRestaurantReviews( - @Parameter(description = "restaurant") - @RequestParam Restaurant restaurant - ) { - return BaseResponse.success(reviewServiceV2.findRestaurantReviews(restaurant)); - } - - @Operation(summary = "리뷰 리스트 조회", description = """ - 리뷰 리스트를 조회하는 API 입니다.

- 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

- 페이징 기본 값 = {size=20, sort=date, direction=desc}

- """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("") - public BaseResponse> getReviews( - @Parameter(description = "mealId") - @RequestParam Long mealId, - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) - @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - Pageable pageable = PageRequest.of(0, 20, Sort.by(Sort.Direction.DESC, "id")); - SliceResponse myReviews = reviewServiceV2.findReviews(mealId, lastReviewId, pageable, - customUserDetails); - return BaseResponse.success(myReviews); - } - - @Operation(summary = "리뷰 수정(글 수정)", description = """ - 리뷰 내용을 수정하는 API 입니다.

- 글 수정만 가능하며 사진 수정은 지원하지 않습니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 수정 성공"), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @PatchMapping("/{reviewId}") - public BaseResponse updateReview(@Parameter(description = "reviewId") - @PathVariable("reviewId") Long reviewId, - @RequestBody UpdateMealReviewRequest request, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewServiceV2.updateReview(customUserDetails, reviewId, request); - return BaseResponse.success(); - } - - @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공"), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("/{reviewId}") - public BaseResponse deleteReview( - @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewServiceV2.deleteReview(customUserDetails, reviewId); - return BaseResponse.success(); - } - - @Operation(summary = "리뷰 좋아요 누르기/취소하기", description = "리뷰에 좋아요(찜)를 누르거나 취소하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 좋아요 토글 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/{reviewId}/like") - public BaseResponse toggleReviewLike( - @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewServiceV2.toggleReviewLike(customUserDetails, reviewId); - return BaseResponse.success(); - } - - @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회 V2(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ - 식단 리뷰 정보를 조회하는 API 입니다.

- 메뉴명 리스트, 리뷰 수, 메인 평점, 좋아요 개수, 싫어요 개수, 각 평점의 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/meals/{mealId}") - public BaseResponse getMealReviews( - @Parameter(description = "mealId") - @PathVariable(value = "mealId") Long mealId) { - return BaseResponse.success(reviewServiceV2.findMealReviews(mealId)); - } - - @Operation(summary = "고정 메뉴 리뷰 정보 조회 V2(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ - 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

- 메뉴명, 리뷰 수, 메인 평점, 좋아요 개수, 싫어요 개수, 각 평점의 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/menus/{menuId}") - public BaseResponse getMainReviews( - @Parameter(description = "menuId") - @PathVariable(value = "menuId") Long menuId) { - return BaseResponse.success(reviewServiceV2.findMenuReviews(menuId)); - } + private final ReviewServiceV2 reviewServiceV2; + private final ReviewService reviewService; + private final SliceService sliceService; + + @Operation(summary = "meal(식단)에 대한 리뷰 작성", description = "리뷰를 작성하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + @PostMapping("/meal") + public BaseResponse createMealReview( + @RequestBody CreateMealReviewRequest createMealReviewRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewServiceV2.createReview(customUserDetails, createMealReviewRequest); + return BaseResponse.success(); + } + + @Operation(summary = "특정 식당 모든 리뷰 정보 조회(리뷰 개수, 평점 등등)", description = """ + 특정 식당 모든 리뷰 정보를 조회하는 API 입니다.

+ 리뷰 개수, 별점 별 개수, 리뷰 평점, 좋아요 개수, 싫어요 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "path parameter 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/statistics/restaurant") + public BaseResponse getRestaurantReviews( + @Parameter(description = "restaurant") + @RequestParam Restaurant restaurant + ) { + return BaseResponse.success(reviewServiceV2.findRestaurantReviews(restaurant)); + } + + @Operation(summary = "meal(식단)에 대한 리뷰 리스트 조회", description = """ + 리뷰 리스트를 조회하는 API 입니다.

+ 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

+ 페이징 기본 값 = {size=20, sort=date, direction=desc}

+ """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/list/meal") + public BaseResponse> getMealReviewList( + @Parameter(description = "mealId") + @RequestParam Long mealId, + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) + @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + Pageable pageable = PageRequest.of(0, 20, Sort.by(Sort.Direction.DESC, "id")); + SliceResponse myReviews = reviewServiceV2.findMealReviewList(mealId, lastReviewId, pageable, + customUserDetails); + return BaseResponse.success(myReviews); + } + + @Operation(summary = "리뷰 수정(글 수정)", description = """ + 리뷰 내용을 수정하는 API 입니다.

+ 글 수정만 가능하며 사진 수정은 지원하지 않습니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 수정 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @PatchMapping("/{reviewId}") + public BaseResponse updateReview(@Parameter(description = "reviewId") + @PathVariable("reviewId") Long reviewId, + @RequestBody UpdateMealReviewRequest request, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewServiceV2.updateReview(customUserDetails, reviewId, request); + return BaseResponse.success(); + } + + @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("/{reviewId}") + public BaseResponse deleteReview( + @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewServiceV2.deleteReview(customUserDetails, reviewId); + return BaseResponse.success(); + } + + @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회 V2(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ + 식단 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명 리스트, 리뷰 수, 메인 평점, 좋아요 개수, 싫어요 개수, 각 평점의 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/statistics/meals/{mealId}") + public BaseResponse getMealReviews( + @Parameter(description = "mealId") + @PathVariable(value = "mealId") Long mealId) { + return BaseResponse.success(reviewServiceV2.findMealReviews(mealId)); + } + + @Operation(summary = "고정 메뉴 리뷰 정보 조회 V2(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ + 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명, 리뷰 수, 메인 평점, 좋아요 개수, 싫어요 개수, 각 평점의 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/statistics/menus/{menuId}") + public BaseResponse getMainReviews( + @Parameter(description = "menuId") + @PathVariable(value = "menuId") Long menuId) { + return BaseResponse.success(reviewServiceV2.findMenuReviews(menuId)); + } + + @Operation(summary = "menu 에 대한 리뷰 리스트 조회", description = """ + 리뷰 리스트를 조회하는 API 입니다.

+ 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

+ 페이징 기본 값 = {size=20, sort=date, direction=desc}

+ """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/list/menu") + public BaseResponse> getMenuReviewList( + @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId") Long menuId, + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) + @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = reviewServiceV2.findMenuReviewList(menuId, pageable, lastReviewId, customUserDetails); + + return BaseResponse.success(myReviews); + } + + @Operation(summary = "menu에 대한 리뷰 작성", description = "리뷰를 작성하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + @PostMapping("/menu/{menuId}") + public BaseResponse createMenuReview(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, + @RequestBody UploadReviewRequest uploadReviewRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewService.uploadReview(customUserDetails, menuId, uploadReviewRequest); + return BaseResponse.success(); + } + + @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API V2 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/my") + public BaseResponse> getMyReviews( + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = reviewServiceV2.findMyReviews(customUserDetails, + lastReviewId, + pageable); + return BaseResponse.success(myReviews); + } + } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java deleted file mode 100644 index c70d0bf0..00000000 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package ssu.eatssu.domain.review.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.review.entity.ReviewLike; -import ssu.eatssu.domain.user.entity.User; - -import java.util.Optional; - -public interface ReviewLikeRepository extends JpaRepository { - Optional findByReviewAndUser(Review review, User user); -} diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java index 7b592f36..bfb084cb 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java @@ -1,11 +1,12 @@ package ssu.eatssu.domain.review.repository; +import java.util.List; + import org.springframework.data.jpa.repository.JpaRepository; + import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewMenuLike; -import java.util.List; - public interface ReviewMenuLikeRepository extends JpaRepository { List findByReview(Review review); -} +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 60e4069c..324d2007 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -1,14 +1,25 @@ package ssu.eatssu.domain.review.service; -import lombok.RequiredArgsConstructor; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.menu.entity.constants.MenuType; import ssu.eatssu.domain.menu.persistence.MealMenuRepository; import ssu.eatssu.domain.menu.persistence.MealRepository; import ssu.eatssu.domain.menu.persistence.MenuRepository; @@ -19,11 +30,11 @@ import ssu.eatssu.domain.review.dto.MenuLikeRequest; import ssu.eatssu.domain.review.dto.MenuReviewsV2Response; import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; +import ssu.eatssu.domain.review.dto.ReviewDetail; import ssu.eatssu.domain.review.dto.ReviewRatingCount; import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewLike; -import ssu.eatssu.domain.review.repository.ReviewLikeRepository; import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.domain.user.dto.MyMealReviewResponse; @@ -31,305 +42,306 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; - -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MEAL; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; - @RequiredArgsConstructor @Service public class ReviewServiceV2 { - private final UserRepository userRepository; - private final ReviewRepository reviewRepository; - private final MenuRepository menuRepository; - private final MealRepository mealRepository; - private final MealMenuRepository mealMenuRepository; - private final ReviewLikeRepository reviewLikeRepository; - - /** - * 리뷰 생성 - */ - @Transactional - public void createReview(CustomUserDetails userDetails, CreateMealReviewRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Meal meal = mealRepository.findById(request.getMealId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); - - Review review = request.toReviewEntity(user, meal); - - request.getImageUrls().forEach(review::addReviewImage); - - for (MenuLikeRequest menuLike : request.getMenuLikes()) { - Menu menu = menuRepository.findById(menuLike.getMenuId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - review.addReviewMenuLike(menu, menuLike.getIsLike()); - } - - reviewRepository.save(review); - } - - /** - * 특정 식당 리뷰 조회 - */ - public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { - List meals = mealRepository.findByRestaurant(restaurant); - List reviews = reviewRepository.findByMealIn(meals); - List menus = mealMenuRepository.findMenusByMeals(meals); - - Double averageRating = Optional.ofNullable(reviews) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Review::getRating) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .average() - .orElse(0.0); - - Integer likeCount = Optional.ofNullable(menus) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Menu::getLikeCount) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .sum(); - - - Integer unlikeCount = Optional.ofNullable(menus) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Menu::getUnlikeCount) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .sum(); - - ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); - - return RestaurantReviewResponse.builder() - .totalReviewCount(reviews.size()) - .reviewRatingCount(reviewRatingCount) - .mainRating(Math.round(averageRating * 10) / 10.0) - .likeCount(likeCount) - .unlikeCount(unlikeCount) - .build(); - } - - /** - * 특정 식단 리뷰 리스트 조회 - */ - public SliceResponse findReviews(Long mealId, Long lastReviewId, Pageable pageable, - CustomUserDetails userDetails) { - if (!mealRepository.existsById(mealId)) { - throw new BaseException(NOT_FOUND_MEAL); - } - - List menuIds = mealMenuRepository.findMenuIdsByMealId(mealId); - if (menuIds.isEmpty()) { - return SliceResponse.empty(); - } - - List mealIds = mealMenuRepository.findMealIdsByMenuIds(menuIds); - if (mealIds.isEmpty()) { - return SliceResponse.empty(); - } - - Page pageReviews = reviewRepository.findReviewsByMealIds(mealIds, lastReviewId, pageable); - - Long userId = (userDetails != null) ? userDetails.getId() : null; - List mealReviewResponses = - pageReviews.getContent() - .stream() - .map(review -> MealReviewResponse.from(review, - userId)) - .collect(Collectors.toList()); - - return SliceResponse.builder() - .numberOfElements(pageReviews.getNumberOfElements()) - .hasNext(pageReviews.hasNext()) - .dataList(mealReviewResponses) - .build(); - } - - /** - * 특정 Menu 리뷰 조회 - */ - public MenuReviewsV2Response findMenuReviews(Long menuId) { - Menu menu = menuRepository.findById(menuId).orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - List reviews = reviewRepository.findAllByMenu(menu); - - Double averageRating = Optional.ofNullable(reviews) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Review::getRating) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .average() - .orElse(0.0); - - Integer likeCount = menu.getLikeCount(); - - - Integer unlikeCount = menu.getUnlikeCount(); - - ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); - - return MenuReviewsV2Response.builder() - .totalReviewCount((long) reviews.size()) - .reviewRatingCount(reviewRatingCount) - .mainRating(Math.round(averageRating * 10) / 10.0) - .likeCount(likeCount) - .unlikeCount(unlikeCount) - .build(); - } - - /** - * 특정 Meal 리뷰 조회 - */ - public MealReviewsV2Response findMealReviews(Long mealId) { - Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); - List reviews = reviewRepository.findAllByMeal(meal); - List menus = mealMenuRepository.findMenusByMeal(meal); - - Double averageRating = Optional.ofNullable(reviews) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Review::getRating) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .average() - .orElse(0.0); - - Integer likeCount = Optional.ofNullable(menus) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Menu::getLikeCount) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .sum(); - - - Integer unlikeCount = Optional.ofNullable(menus) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Menu::getUnlikeCount) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .sum(); - - ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); - - return MealReviewsV2Response.builder() - .totalReviewCount((long) reviews.size()) - .reviewRatingCount(reviewRatingCount) - .mainRating(Math.round(averageRating * 10) / 10.0) - .likeCount(likeCount) - .unlikeCount(unlikeCount) - .build(); - } - - /** - * 리뷰 수정 - */ - @Transactional - public void updateReview(CustomUserDetails userDetails, Long reviewId, UpdateMealReviewRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - if (review.isNotWrittenBy(user)) { - throw new BaseException(REVIEW_PERMISSION_DENIED); - } - - Map menuLikes = request.getMenuLikes().stream() - .collect(Collectors.toMap( - menuLike -> menuRepository.findById(menuLike.getMenuId()) - .orElseThrow(() -> new BaseException( - NOT_FOUND_MENU)), - MenuLikeRequest::getIsLike)); - - review.update(request.getContent(), request.getRating(), menuLikes); - reviewRepository.save(review); - } - - /** - * 리뷰 삭제 - */ - @Transactional - public void deleteReview(CustomUserDetails userDetails, Long reviewId) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - if (review.isNotWrittenBy(user)) { - throw new BaseException(REVIEW_PERMISSION_DENIED); - } - - review.resetMenuLikes(); - reviewRepository.delete(review); - } - - /** - * 내 리뷰 리스트 조회 - */ - public SliceResponse findMyReviews(CustomUserDetails userDetails, Long lastReviewId, - Pageable pageable) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, - pageable); - - List myMealReviewResponses = sliceReviews.getContent().stream() - .map(MyMealReviewResponse::from).toList(); - - return SliceResponse.builder() - .numberOfElements(sliceReviews.getNumberOfElements()) - .hasNext(sliceReviews.hasNext()) - .dataList(myMealReviewResponses) - .build(); - } - - /** - * 리뷰 좋아요 누르기/취소하기 - */ - @Transactional - public void toggleReviewLike(CustomUserDetails userDetails, Long reviewId) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - Optional optionalReviewLike = reviewLikeRepository.findByReviewAndUser(review, user); - if (optionalReviewLike.isPresent()) { - // 이미 좋아요 한 경우 -> 좋아요 취소 처리 - ReviewLike reviewLike = optionalReviewLike.get(); - review.getReviewLikes().remove(reviewLike); - reviewLikeRepository.delete(reviewLike); - } else { - // 좋아요 하지 않은 경우 -> 좋아요 추가 처리 - ReviewLike reviewLike = ReviewLike.create(user, review); - review.getReviewLikes().add(reviewLike); - reviewLikeRepository.save(reviewLike); - } - } + private final UserRepository userRepository; + private final ReviewRepository reviewRepository; + private final MenuRepository menuRepository; + private final MealRepository mealRepository; + private final MealMenuRepository mealMenuRepository; + + /** + * 리뷰 생성 + */ + @Transactional + public void createReview(CustomUserDetails userDetails, CreateMealReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Meal meal = mealRepository.findById(request.getMealId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + + Review review = request.toReviewEntity(user, meal); + + request.getImageUrls().forEach(review::addReviewImage); + + for (MenuLikeRequest menuLike : request.getMenuLikes()) { + Menu menu = menuRepository.findById(menuLike.getMenuId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + review.addReviewMenuLike(menu, menuLike.getIsLike()); + } + + reviewRepository.save(review); + } + + /** + * 특정 식당 리뷰 조회 + */ + public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { + List meals = mealRepository.findByRestaurant(restaurant); + List reviews = reviewRepository.findByMealIn(meals); + List menus = mealMenuRepository.findMenusByMeals(meals); + + Double averageRating = Optional.ofNullable(reviews) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Review::getRating) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + + Integer likeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getLikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + + Integer unlikeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getUnlikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); + + return RestaurantReviewResponse.builder() + .totalReviewCount(reviews.size()) + .reviewRatingCount(reviewRatingCount) + .mainRating(Math.round(averageRating * 10) / 10.0) + .likeCount(likeCount) + .unlikeCount(unlikeCount) + .build(); + } + + /** + * 특정 식단 리뷰 리스트 조회 + */ + public SliceResponse findMealReviewList(Long mealId, Long lastReviewId, Pageable pageable, + CustomUserDetails userDetails) { + if (!mealRepository.existsById(mealId)) { + throw new BaseException(NOT_FOUND_MEAL); + } + + List menuIds = mealMenuRepository.findMenuIdsByMealId(mealId); + if (menuIds.isEmpty()) { + return SliceResponse.empty(); + } + + List mealIds = mealMenuRepository.findMealIdsByMenuIds(menuIds); + if (mealIds.isEmpty()) { + return SliceResponse.empty(); + } + + Page pageReviews = reviewRepository.findReviewsByMealIds(mealIds, lastReviewId, pageable); + + Long userId = (userDetails != null) ? userDetails.getId() : null; + List mealReviewResponses = + pageReviews.getContent().stream().map(review -> MealReviewResponse.from(review, + userId)).collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(pageReviews.getNumberOfElements()) + .hasNext(pageReviews.hasNext()) + .dataList(mealReviewResponses) + .build(); + } + + /** + * 특정 메뉴 리뷰 리스트 조회 + */ + + public SliceResponse findMenuReviewList(Long menuId, + Pageable pageable, + Long lastReviewId, + CustomUserDetails userDetails) { + Slice sliceReviews = null; + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + sliceReviews = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, + pageable); + + Long userId = (userDetails != null) ? userDetails.getId() : null; + return convertToReviewDetail(sliceReviews, userId); + } + + private SliceResponse convertToReviewDetail(Slice sliceReviews, + Long userId) { + List reviewDetails = sliceReviews.getContent().stream() + .map(review -> ReviewDetail.from(review, userId)) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(reviewDetails) + .build(); + } + + + + + /** + * 특정 Menu 리뷰 조회 + */ + public MenuReviewsV2Response findMenuReviews(Long menuId) { + Menu menu = menuRepository.findById(menuId).orElseThrow(()-> new BaseException(NOT_FOUND_MENU)); + List reviews = reviewRepository.findAllByMenu(menu); + + double averageRating = Optional.ofNullable(reviews) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Review::getRating) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + + Integer likeCount = menu.getLikeCount(); + Integer unlikeCount = menu.getUnlikeCount(); + + ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); + + return MenuReviewsV2Response + .builder() + .menuName(menu.getName()) + .totalReviewCount((long)reviews.size()) + .reviewRatingCount(reviewRatingCount) + .mainRating(Math.round(averageRating * 10) / 10.0) + .likeCount(likeCount!=null?likeCount:0) + .unlikeCount(unlikeCount!=null?unlikeCount:0) + .build(); + } + + /** + * 특정 Meal 리뷰 조회 + */ + public MealReviewsV2Response findMealReviews(Long mealId) { + Meal meal = mealRepository.findById(mealId).orElseThrow(()-> new BaseException(NOT_FOUND_MEAL)); + List reviews = reviewRepository.findAllByMeal(meal); + List menus = mealMenuRepository.findMenusByMeal(meal); + + Double averageRating = Optional.ofNullable(reviews) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Review::getRating) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + + Integer likeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getLikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + + Integer unlikeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getUnlikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); + + return MealReviewsV2Response + .builder() + .menuNames( menus.stream() + .filter(Objects::nonNull) + .map(Menu::getName) + .filter(Objects::nonNull) + .collect(Collectors.toList())) + .totalReviewCount((long)reviews.size()) + .reviewRatingCount(reviewRatingCount) + .mainRating(Math.round(averageRating * 10) / 10.0) + .likeCount(likeCount) + .unlikeCount(unlikeCount) + .build(); + } + + /** + * 리뷰 수정 + */ + @Transactional + public void updateReview(CustomUserDetails userDetails, Long reviewId, UpdateMealReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (review.isNotWrittenBy(user)) { + throw new BaseException(REVIEW_PERMISSION_DENIED); + } + + Map menuLikes = request.getMenuLikes().stream() + .collect(Collectors.toMap( + menuLike -> menuRepository.findById(menuLike.getMenuId()) + .orElseThrow(() -> new BaseException( + NOT_FOUND_MENU)), + MenuLikeRequest::getIsLike)); + + review.update(request.getContent(), request.getRating(), menuLikes); + reviewRepository.save(review); + } + + /** + * 리뷰 삭제 + */ + @Transactional + public void deleteReview(CustomUserDetails userDetails, Long reviewId) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (review.isNotWrittenBy(user)) { + throw new BaseException(REVIEW_PERMISSION_DENIED); + } + + review.resetMenuLikes(); + reviewRepository.delete(review); + } + + /** + * 내 리뷰 리스트 조회 + */ + public SliceResponse findMyReviews(CustomUserDetails userDetails, Long lastReviewId, + Pageable pageable) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, + pageable); + + List myMealReviewResponses = sliceReviews.getContent().stream() + .map(MyMealReviewResponse::from).toList(); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(myMealReviewResponses) + .build(); + } + + } diff --git a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java index 096c6327..071ee2e4 100644 --- a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java +++ b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java @@ -1,9 +1,17 @@ package ssu.eatssu.domain.slice.service; -import lombok.RequiredArgsConstructor; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; + +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; + +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -19,83 +27,80 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; -import java.util.List; -import java.util.stream.Collectors; - -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; - @Service @RequiredArgsConstructor public class SliceService { - private final UserRepository userRepository; - private final ReviewRepository reviewRepository; - private final MenuRepository menuRepository; - private final MealRepository mealRepository; - - public SliceResponse findMyReviews( - CustomUserDetails userDetails, - Pageable pageable, - Long lastReviewId) { - - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, - pageable); - - return convertToMyReviewDetail(sliceReviews); - } - - public SliceResponse findReviews(MenuType menuType, - Long menuId, - Long mealId, - Pageable pageable, - Long lastReviewId, - CustomUserDetails userDetails) { - Slice sliceReviews = null; - if (menuType == MenuType.FIXED) { - Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - sliceReviews = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, - pageable); - } - - if (menuType == MenuType.VARIABLE) { - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - sliceReviews = reviewRepository.findAllByMealOrderByIdDesc(meal, lastReviewId, - pageable); - } - - Long userId = (userDetails != null) ? userDetails.getId() : null; - return convertToReviewDetail(sliceReviews, userId); - } - - private SliceResponse convertToReviewDetail(Slice sliceReviews, - Long userId) { - List reviewDetails = sliceReviews.getContent().stream() - .map(review -> ReviewDetail.from(review, userId)) - .collect(Collectors.toList()); - - return SliceResponse.builder() - .numberOfElements(sliceReviews.getNumberOfElements()) - .hasNext(sliceReviews.hasNext()) - .dataList(reviewDetails) - .build(); - } - - private SliceResponse convertToMyReviewDetail(Slice sliceReviews) { - List myReviewDetails = sliceReviews.getContent().stream() - .map(MyReviewDetail::from) - .collect(Collectors.toList()); - - return SliceResponse.builder() - .numberOfElements(sliceReviews.getNumberOfElements()) - .hasNext(sliceReviews.hasNext()) - .dataList(myReviewDetails) - .build(); - } + private final UserRepository userRepository; + private final ReviewRepository reviewRepository; + private final MenuRepository menuRepository; + private final MealRepository mealRepository; + + public SliceResponse findMyReviews( + CustomUserDetails userDetails, + Pageable pageable, + Long lastReviewId) { + + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, + pageable); + + return convertToMyReviewDetail(sliceReviews); + } + + public SliceResponse findReviews(MenuType menuType, + Long menuId, + Long mealId, + Pageable pageable, + Long lastReviewId, + CustomUserDetails userDetails) { + Slice sliceReviews = null; + if (menuType == MenuType.FIXED) { + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + sliceReviews = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, + pageable); + } + + if (menuType == MenuType.VARIABLE) { + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + sliceReviews = reviewRepository.findAllByMealOrderByIdDesc(meal, lastReviewId, + pageable); + } + + Long userId = (userDetails != null) ? userDetails.getId() : null; + return convertToReviewDetail(sliceReviews, userId); + } + + private SliceResponse convertToReviewDetail(Slice sliceReviews, + Long userId) { + List reviewDetails = sliceReviews.getContent().stream() + .map(review -> ReviewDetail.from(review, userId)) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(reviewDetails) + .build(); + } + + private SliceResponse convertToMyReviewDetail(Slice sliceReviews) { + List myReviewDetails = Optional.of(sliceReviews.getContent()) + .orElse(List.of()) + .stream() + .filter(Objects::nonNull) + .map(MyReviewDetail::from) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(myReviewDetails) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index 94533ef3..7d2d3176 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -1,45 +1,57 @@ package ssu.eatssu.domain.user.dto; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import ssu.eatssu.domain.review.entity.Review; - -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; +import ssu.eatssu.domain.review.entity.ReviewMenuLike; @AllArgsConstructor @Builder @Schema(title = "리뷰 상세 - 내 리뷰 리스트 조회 용") @Getter public class MyMealReviewResponse { - @Schema(description = "리뷰 식별자", example = "123") - Long reviewId; - - @Schema(description = "평점", example = "4") - private Integer rating; - - @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") - private LocalDate writtenAt; - - @Schema(description = "리뷰 내용", example = "맛있습니당") - private String content; - - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imageUrls; - - public static MyMealReviewResponse from(Review review) { - List imgUrlList = new ArrayList<>(); - review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); - - return MyMealReviewResponse.builder() - .reviewId(review.getId()) - .rating(review.getRating()) - .writtenAt(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .imageUrls(imgUrlList) - .build(); - } + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; + + @Schema(description = "평점", example = "4") + private Integer rating; + + @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") + private LocalDate writtenAt; + + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; + + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; + + @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") + private List likedMenuNames; + + public static MyMealReviewResponse from(Review review) { + List imgUrlList = new ArrayList<>(); + review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); + + List likedMenuNames = review.getMenuLikes().stream() + .filter(ReviewMenuLike::getIsLike) + .map(like -> like.getMenu().getName()) + .toList(); + + return MyMealReviewResponse + .builder() + .reviewId(review.getId()) + .rating(review.getRating()) + .writtenAt(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imageUrls(imgUrlList) + .likedMenuNames(likedMenuNames) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java index 83e65827..a9387549 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java @@ -1,59 +1,80 @@ package ssu.eatssu.domain.user.dto; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.review.entity.Review; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; - @AllArgsConstructor @Builder @Schema(title = "리뷰 상세 - 내 리뷰 리스트 조회 용") @Getter public class MyReviewDetail { - @Schema(description = "리뷰 식별자", example = "123") - Long reviewId; + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; + + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; + + @Schema(description = "평점-양", example = "4") + private Integer amountRating; + + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; - @Schema(description = "평점-메인", example = "4") - private Integer mainRating; + @Schema(description = "리뷰 작성 날짜(format = yyyyMMdd)", example = "20230407") + private LocalDate writeDate; - @Schema(description = "평점-양", example = "4") - private Integer amountRating; + @Schema(description = "메뉴 이름", example = "돈까스") + private String menuName; - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; - @Schema(description = "리뷰 작성 날짜(format = yyyyMMdd)", example = "20230407") - private LocalDate writeDate; + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imgUrlList; - @Schema(description = "메뉴 이름", example = "돈까스") - private String menuName; + public static MyReviewDetail from(Review review) { + List imgUrlList = new ArrayList<>(); + if (review.getReviewImages() != null) { + review.getReviewImages().forEach(image -> { + if (image != null && image.getImageUrl() != null) { + imgUrlList.add(image.getImageUrl()); + } + }); + } - @Schema(description = "리뷰 내용", example = "맛있습니당") - private String content; + Ratings ratings = review.getRatings(); + int mainRating = 0; + int amountRating = 0; + int tasteRating = 0; - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imgUrlList; + if (ratings != null) { + mainRating = ratings.getMainRating() != null ? ratings.getMainRating() : 0; + amountRating = ratings.getAmountRating() != null ? ratings.getAmountRating() : 0; + tasteRating = ratings.getTasteRating() != null ? ratings.getTasteRating() : 0; + } - public static MyReviewDetail from(Review review) { + String menuName = review.getMenu() != null ? review.getMenu().getName() : null; + LocalDate writeDate = review.getCreatedDate() != null ? review.getCreatedDate().toLocalDate() : null; - List imgUrlList = new ArrayList<>(); - review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); + return MyReviewDetail.builder() + .reviewId(review.getId()) + .mainRating(mainRating) + .amountRating(amountRating) + .tasteRating(tasteRating) + .writeDate(writeDate) + .content(review.getContent()) + .imgUrlList(imgUrlList) + .menuName(menuName) + .build(); + } - return MyReviewDetail.builder() - .reviewId(review.getId()) - .mainRating(review.getRatings().getMainRating()) - .amountRating(review.getRatings().getAmountRating()) - .tasteRating(review.getRatings().getTasteRating()) - .writeDate(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .imgUrlList(imgUrlList) - .menuName(review.getMenu().getName()) - .build(); - } } diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 92037741..a80453eb 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -1,15 +1,7 @@ package ssu.eatssu.domain.user.presentation; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.enums.ParameterIn; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.validation.Valid; -import lombok.RequiredArgsConstructor; +import java.util.List; + import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -24,6 +16,17 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.PartnershipResponse; import ssu.eatssu.domain.partnership.service.PartnershipService; @@ -39,174 +42,156 @@ import ssu.eatssu.domain.user.service.UserService; import ssu.eatssu.global.handler.response.BaseResponse; -import java.util.List; - @RestController @RequiredArgsConstructor @RequestMapping("/users") @Tag(name = "User", description = "유저 API") public class UserController { - private final UserService userService; - private final SliceService sliceService; - private final ReviewServiceV2 mealReviewService; - private final PartnershipService partnershipService; - - @Operation(summary = "이메일 중복 체크", description = """ - 이메일 중복 체크 API 입니다.

- 중복되지 않은 이메일이면 true 를 반환합니다 - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "중복되지 않은 이메일") - }) - @PostMapping("/validate/email/{email}") //todo: 중복인 경우 error throw, 중복 아니면 ApiReposne return - public BaseResponse validateDuplicatedEmail( - @Parameter(description = "이메일") @PathVariable String email) { - return BaseResponse.success(userService.validateDuplicatedEmail(email)); - } - - @Operation(summary = "닉네임 중복 체크", description = """ - 닉네임 중복 체크 API 입니다.

- 중복되지 않은 닉네임이면 true 를 반환합니다 - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임") - }) - @GetMapping("/validate/nickname") - public BaseResponse validateDuplicatedNickname(@Parameter(description = "닉네임") - @RequestParam(value = "nickname") String nickname) { - return BaseResponse.success(userService.validateDuplicatedNickname(nickname)); - } - - @Operation(summary = "닉네임 수정", description = "닉네임 수정 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "닉네임 수정 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PatchMapping("/nickname") - public BaseResponse updateNickname( - @Valid @RequestBody NicknameUpdateRequest updateNicknameRequest, - @AuthenticationPrincipal CustomUserDetails userDetails) { - userService.updateNickname(userDetails, updateNicknameRequest); - return BaseResponse.success(); - } - - @Operation(summary = "유저 탈퇴", description = "유저 탈퇴 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("") - public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(userService.withdraw(userDetails)); - } - - @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/reviews") - public BaseResponse> getMyReviewList( - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = sliceService.findMyReviews(customUserDetails, - pageable, - lastReviewId); - return BaseResponse.success(myReviews); - } - - @Operation(summary = "내가 쓴 리뷰 리스트 조회 V2", description = "내가 쓴 리뷰 리스트를 조회하는 API V2 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/v2/reviews") - public BaseResponse> getMyReviews( - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = mealReviewService.findMyReviews(customUserDetails, - lastReviewId, - pageable); - return BaseResponse.success(myReviews); - } - - @Operation(summary = "마이페이지 정보 조회", description = "마이페이지 정보를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/mypage") - public BaseResponse getMyPage( - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - return BaseResponse.success(userService.findMyPage(customUserDetails)); - } - - @Operation(summary = "유저가 찜한 제휴 조회", description = "유저가 찜한 제휴를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저가 찜한 제휴 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/partnerships") - public BaseResponse> getUserLikedPartnerships( - @AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(partnershipService.getUserLikedPartnerships(userDetails)); - } - - @Operation(summary = "유저의 학과 등록", description = "유저의 학과를 등록하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저의 학과 등록 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 학과", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @PostMapping("/department") - public BaseResponse registerDepartment(@RequestBody UpdateDepartmentRequest request, - @AuthenticationPrincipal CustomUserDetails userDetails) { - userService.registerDepartment(request, userDetails); - return BaseResponse.success(); - } - - @Operation(summary = "유저의 단과대/학과 제휴 조회", description = "유저의 단과대/학과 제휴를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저의 단과대/학과 제휴 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/department/partnerships") - public BaseResponse> getUserDepartmentPartnerships( - @AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(partnershipService.getUserDepartmentPartnerships(userDetails)); - } - - @Operation(summary = "학과 기입 여부 체크", description = """ - 학과 기입 여부 체크 API 입니다.

- 학과를 기입했으면 true, 아니면 false 를 반환합니다 - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "학과 기입함") - }) - @GetMapping("/validate/department") - public BaseResponse validateDepartmentExists(@AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(userService.validateDepartmentExists(userDetails)); - } - - @Operation(summary = "유저의 학과 조회", description = "유저의 학과를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저의 학과 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/department") - public BaseResponse getDepartment(@AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(userService.getDepartment(userDetails)); - } + private final UserService userService; + private final SliceService sliceService; + private final PartnershipService partnershipService; + + @Operation(summary = "이메일 중복 체크", description = """ + 이메일 중복 체크 API 입니다.

+ 중복되지 않은 이메일이면 true 를 반환합니다 + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "중복되지 않은 이메일") + }) + @PostMapping("/validate/email/{email}") //todo: 중복인 경우 error throw, 중복 아니면 ApiReposne return + public BaseResponse validateDuplicatedEmail( + @Parameter(description = "이메일") @PathVariable String email) { + return BaseResponse.success(userService.validateDuplicatedEmail(email)); + } + + @Operation(summary = "닉네임 중복 체크", description = """ + 닉네임 중복 체크 API 입니다.

+ 중복되지 않은 닉네임이면 true 를 반환합니다 + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임") + }) + @GetMapping("/validate/nickname") + public BaseResponse validateDuplicatedNickname(@Parameter(description = "닉네임") + @RequestParam(value = "nickname") String nickname) { + return BaseResponse.success(userService.validateDuplicatedNickname(nickname)); + } + + @Operation(summary = "닉네임 수정", description = "닉네임 수정 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "닉네임 수정 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PatchMapping("/nickname") + public BaseResponse updateNickname( + @Valid @RequestBody NicknameUpdateRequest updateNicknameRequest, + @AuthenticationPrincipal CustomUserDetails userDetails) { + userService.updateNickname(userDetails, updateNicknameRequest); + return BaseResponse.success(); + } + + @Operation(summary = "유저 탈퇴", description = "유저 탈퇴 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("") + public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(userService.withdraw(userDetails)); + } + + @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/reviews") + public BaseResponse> getMyReviewList( + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = sliceService.findMyReviews(customUserDetails, + pageable, + lastReviewId); + return BaseResponse.success(myReviews); + } + + + @Operation(summary = "마이페이지 정보 조회", description = "마이페이지 정보를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/mypage") + public BaseResponse getMyPage( + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + return BaseResponse.success(userService.findMyPage(customUserDetails)); + } + + @Operation(summary = "유저가 찜한 제휴 조회", description = "유저가 찜한 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저가 찜한 제휴 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @GetMapping("/partnerships") + public BaseResponse> getUserLikedPartnerships( + @AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(partnershipService.getUserLikedPartnerships(userDetails)); + } + + @Operation(summary = "유저의 학과 등록", description = "유저의 학과를 등록하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저의 학과 등록 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 학과", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @PostMapping("/department") + public BaseResponse registerDepartment(@RequestBody UpdateDepartmentRequest request, + @AuthenticationPrincipal CustomUserDetails userDetails) { + userService.registerDepartment(request, userDetails); + return BaseResponse.success(); + } + + @Operation(summary = "유저의 단과대/학과 제휴 조회", description = "유저의 단과대/학과 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저의 단과대/학과 제휴 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @GetMapping("/department/partnerships") + public BaseResponse> getUserDepartmentPartnerships( + @AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(partnershipService.getUserDepartmentPartnerships(userDetails)); + } + + @Operation(summary = "학과 기입 여부 체크", description = """ + 학과 기입 여부 체크 API 입니다.

+ 학과를 기입했으면 true, 아니면 false 를 반환합니다 + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "학과 기입함") + }) + @GetMapping("/validate/department") + public BaseResponse validateDepartmentExists(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(userService.validateDepartmentExists(userDetails)); + } + + @Operation(summary = "유저의 학과 조회", description = "유저의 학과를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저의 학과 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @GetMapping("/department") + public BaseResponse getDepartment(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(userService.getDepartment(userDetails)); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java b/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java deleted file mode 100644 index 03cbbe3b..00000000 --- a/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java +++ /dev/null @@ -1,37 +0,0 @@ -package ssu.eatssu.domain.user.util; - -import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.user.entity.User; - -import java.util.List; -import java.util.Objects; - -public class UserAliasUtil { - public static String getUserAlias(User user, List reviews) { - if (reviews == null || reviews.isEmpty()) { - return "미슈테리 미식가"; - } - double avg = reviews.stream() - .map(Review::getRating) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .average() - .orElse(0.0); - - int avgRating = (int) Math.round(avg); - switch (avgRating) { - case 1: - return "깐깐슈"; - case 2: - return "아이슈"; - case 3: - return "밸런슈"; - case 4: - return "딱좋슈"; - case 5: - return "다 맛있슈"; - default: - return "미슈테리 미식가"; - } - } -} diff --git a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java index 0edb313b..e50f90d5 100644 --- a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java @@ -1,8 +1,7 @@ package ssu.eatssu.global.handler; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.springframework.beans.TypeMismatchException; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatusCode; @@ -24,6 +23,9 @@ import org.springframework.web.multipart.support.MissingServletRequestPartException; import org.springframework.web.servlet.NoHandlerFoundException; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.slack.entity.SlackMessageFormat; import ssu.eatssu.domain.slack.service.SlackService; import ssu.eatssu.global.handler.response.BaseException; @@ -37,226 +39,230 @@ @RestControllerAdvice @RequiredArgsConstructor public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { - private final SlackService slackService; + private final SlackService slackService; + @Value("${server.env:unknown}") + private String serverEnv; - /** - * BaseException 처리 - */ - @ExceptionHandler(BaseException.class) - public ResponseEntity> handleBaseException(BaseException e) { - log.info(e.getStatus().toString()); - sendErrorToSlack(e); - return ResponseEntity.status(e.getStatus().getHttpStatus()).body(BaseResponse.fail(e.getStatus())); - } + /** + * BaseException 처리 + */ + @ExceptionHandler(BaseException.class) + public ResponseEntity> handleBaseException(BaseException e) { + sendErrorToSlack(e); + return ResponseEntity.status(e.getStatus().getHttpStatus()).body(BaseResponse.fail(e.getStatus())); + } + @ExceptionHandler(Exception.class) + public ResponseEntity> handleAllUnhandledException(Exception ex) { + sendErrorToSlack(ex); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); + } - @ExceptionHandler(Exception.class) - public ResponseEntity> handleAllUnhandledException(Exception ex) { - sendErrorToSlack(ex); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); - } + /** + * 경로는 있으나 지원하지 않는 http method로 요청 시 + */ + @Override + protected ResponseEntity handleHttpRequestMethodNotSupported( + @NonNull HttpRequestMethodNotSupportedException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.METHOD_NOT_ALLOWED).body(BaseResponse.fail( + BaseResponseStatus.METHOD_NOT_ALLOWED)); + } - /** - * 경로는 있으나 지원하지 않는 http method로 요청 시 - */ - @Override - protected ResponseEntity handleHttpRequestMethodNotSupported( - @NonNull HttpRequestMethodNotSupportedException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.METHOD_NOT_ALLOWED).body(BaseResponse.fail( - BaseResponseStatus.METHOD_NOT_ALLOWED)); - } + /** + * 지원하지 않는 content type으로 요청 시 + */ + @Override + protected ResponseEntity handleHttpMediaTypeNotSupported( + @NonNull HttpMediaTypeNotSupportedException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE) + .body(BaseResponse.fail(BaseResponseStatus.UNSUPPORTED_MEDIA_TYPE)); + } - /** - * 지원하지 않는 content type으로 요청 시 - */ - @Override - protected ResponseEntity handleHttpMediaTypeNotSupported( - @NonNull HttpMediaTypeNotSupportedException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE) - .body(BaseResponse.fail(BaseResponseStatus.UNSUPPORTED_MEDIA_TYPE)); - } + /** + * 인식할 수 없는 content type으로 요청 시 + */ + @Override + protected ResponseEntity handleHttpMediaTypeNotAcceptable( + @NonNull HttpMediaTypeNotAcceptableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.NOT_ACCEPTABLE) + .body(BaseResponse.fail(BaseResponseStatus.NOT_ACCEPTABLE)); + } - /** - * 인식할 수 없는 content type으로 요청 시 - */ - @Override - protected ResponseEntity handleHttpMediaTypeNotAcceptable( - @NonNull HttpMediaTypeNotAcceptableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.NOT_ACCEPTABLE) - .body(BaseResponse.fail(BaseResponseStatus.NOT_ACCEPTABLE)); - } + /** + * PathVariable 값 누락 시 + */ + @Override + protected ResponseEntity handleMissingPathVariable( + @NonNull MissingPathVariableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISSING_PATH_VARIABLE)); + } - /** - * PathVariable 값 누락 시 - */ - @Override - protected ResponseEntity handleMissingPathVariable( - @NonNull MissingPathVariableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISSING_PATH_VARIABLE)); - } + /*** + * RequestParam 값 누락 시 + */ + @Override + protected ResponseEntity handleMissingServletRequestParameter( + @NonNull MissingServletRequestParameterException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PARAM)); + } - /*** - * RequestParam 값 누락 시 - */ - @Override - protected ResponseEntity handleMissingServletRequestParameter( - @NonNull MissingServletRequestParameterException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PARAM)); - } + /** + * RequestPart 값 누락 시 + */ + @Override + protected ResponseEntity handleMissingServletRequestPart( + @NonNull MissingServletRequestPartException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PART)); + } - /** - * RequestPart 값 누락 시 - */ - @Override - protected ResponseEntity handleMissingServletRequestPart( - @NonNull MissingServletRequestPartException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PART)); - } + /** + * 요청 값 바인딩 처리에 실패한 경우 + */ + @Override + protected ResponseEntity handleServletRequestBindingException( + @NonNull ServletRequestBindingException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.REQ_BINDING_FAIL)); + } - /** - * 요청 값 바인딩 처리에 실패한 경우 - */ - @Override - protected ResponseEntity handleServletRequestBindingException( - @NonNull ServletRequestBindingException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.REQ_BINDING_FAIL)); - } + /** + * request @Valid 유효성 체크를 통과하지 못한 경우 + */ + @Override + protected ResponseEntity handleMethodArgumentNotValid( + @NonNull MethodArgumentNotValidException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.FAILED_VALIDATION)); + } - /** - * request @Valid 유효성 체크를 통과하지 못한 경우 - */ - @Override - protected ResponseEntity handleMethodArgumentNotValid( - @NonNull MethodArgumentNotValidException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.FAILED_VALIDATION)); - } + /** + * Dispatcher Servlet에서 핸들러를 찾지 못한 경우 + *

기본적으로는 404-Not Found응답을 내리지만 Dispatcher Servlet의 throwExceptionIfNoHandlerFound 값이 true인 경우 + * NoHandlerFoundException 예외를 발생

+ */ + @Override + protected ResponseEntity handleNoHandlerFoundException( + @NonNull NoHandlerFoundException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.NOT_FOUND) + .body(BaseResponse.fail(BaseResponseStatus.NOT_FOUND)); + } - /** - * Dispatcher Servlet에서 핸들러를 찾지 못한 경우 - *

기본적으로는 404-Not Found응답을 내리지만 Dispatcher Servlet의 throwExceptionIfNoHandlerFound 값이 true인 경우 - * NoHandlerFoundException 예외를 발생

- */ - @Override - protected ResponseEntity handleNoHandlerFoundException( - @NonNull NoHandlerFoundException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.NOT_FOUND) - .body(BaseResponse.fail(BaseResponseStatus.NOT_FOUND)); - } + /** + * 비동기 요청의 응답시간이 초과될 경우 + */ + @Override + protected ResponseEntity handleAsyncRequestTimeoutException( + @NonNull AsyncRequestTimeoutException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE) + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_TIME_OUT)); + } - /** - * 비동기 요청의 응답시간이 초과될 경우 - */ - @Override - protected ResponseEntity handleAsyncRequestTimeoutException( - @NonNull AsyncRequestTimeoutException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE) - .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_TIME_OUT)); - } + /** + * 파라미터 타입 불일치가 발생한 경우 + */ + @Override + protected ResponseEntity handleTypeMismatch( + @NonNull TypeMismatchException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISMATCH_PARAM_TYPE)); + } - /** - * 파라미터 타입 불일치가 발생한 경우 - */ - @Override - protected ResponseEntity handleTypeMismatch( - @NonNull TypeMismatchException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISMATCH_PARAM_TYPE)); - } + /** + * 적절하지 않은 RequestBody 때문에 HttpMessageConverter.read 메소드 실패한 경우 + */ + @Override + protected ResponseEntity handleHttpMessageNotReadable( + @NonNull HttpMessageNotReadableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.BAD_REQUEST)); + } - /** - * 적절하지 않은 RequestBody 때문에 HttpMessageConverter.read 메소드 실패한 경우 - */ - @Override - protected ResponseEntity handleHttpMessageNotReadable( - @NonNull HttpMessageNotReadableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.BAD_REQUEST)); - } + /** + * 직렬화 실패한 경우 + */ + @Override + protected ResponseEntity handleHttpMessageNotWritable( + @NonNull HttpMessageNotWritableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); + } - /** - * 직렬화 실패한 경우 - */ - @Override - protected ResponseEntity handleHttpMessageNotWritable( - @NonNull HttpMessageNotWritableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); - } + @Override + protected ResponseEntity handleExceptionInternal( + @NonNull Exception ex, + Object body, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode statusCode, + @NonNull WebRequest request) { - @Override - protected ResponseEntity handleExceptionInternal( - @NonNull Exception ex, - Object body, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode statusCode, - @NonNull WebRequest request) { + HttpStatus status = HttpStatus.valueOf(statusCode.value()); - HttpStatus status = HttpStatus.valueOf(statusCode.value()); + if (status.is4xxClientError() || status.is5xxServerError()) { + sendErrorToSlack(ex); + } - if (status.is4xxClientError() || status.is5xxServerError()) { - sendErrorToSlack(ex); - } + BaseResponseStatus responseStatus = status.is4xxClientError() + ? BaseResponseStatus.BAD_REQUEST + : BaseResponseStatus.INTERNAL_SERVER_ERROR; - BaseResponseStatus responseStatus = status.is4xxClientError() - ? BaseResponseStatus.BAD_REQUEST - : BaseResponseStatus.INTERNAL_SERVER_ERROR; + return ResponseEntity.status(status).body(BaseResponse.fail(responseStatus)); + } - return ResponseEntity.status(status).body(BaseResponse.fail(responseStatus)); - } + private void sendErrorToSlack(Exception ex) { + if (!("dev".equals(serverEnv) || "prod".equals(serverEnv))) { + return; + } - private void sendErrorToSlack(Exception ex) { - try { - String message = SlackMessageFormat.sendServerError(ex); - slackService.sendSlackMessage(message, ssu.eatssu.domain.slack.entity.SlackChannel.SERVER_ERROR); - } catch (Exception slackEx) { - log.warn("슬랙 전송 실패: {}", slackEx.getMessage()); - } - } + try { + String message = SlackMessageFormat.sendServerError(ex); + slackService.sendSlackMessage(message, ssu.eatssu.domain.slack.entity.SlackChannel.SERVER_ERROR); + } catch (Exception slackEx) { + log.warn("슬랙 전송 실패: {}", slackEx.getMessage()); + } + } } From aa890b43b34917e8f254a9f469eb2827aff254d2 Mon Sep 17 00:00:00 2001 From: Jiwoong CHOI Date: Fri, 27 Jun 2025 19:34:49 +0900 Subject: [PATCH 233/399] Merge pull request #178 from EAT-SSU/feat/add-ai-rules MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat: .gitignore 및 코드컨벤션에 맞는 AI Rules 작성 --- .cursor/rules/eatssu-server-rule.mdc | 9 +++++++++ .github/copilot-instructions.md | 4 ++++ .gitignore | 12 ------------ CLAUDE.md | 4 ++++ GEMINI.md | 4 ++++ 5 files changed, 21 insertions(+), 12 deletions(-) create mode 100644 .cursor/rules/eatssu-server-rule.mdc create mode 100644 .github/copilot-instructions.md create mode 100644 CLAUDE.md create mode 100644 GEMINI.md diff --git a/.cursor/rules/eatssu-server-rule.mdc b/.cursor/rules/eatssu-server-rule.mdc new file mode 100644 index 00000000..1664a2cd --- /dev/null +++ b/.cursor/rules/eatssu-server-rule.mdc @@ -0,0 +1,9 @@ +--- +description: +globs: +alwaysApply: true +--- +- You must respond in Korean for all answers, regardless of the input language. +- Do not write any comments in code blocks, even if asked to do so. +- But if the codes is related to test, write the comment for "given, when, then". +- Do not use wildcard when importing libraries diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 00000000..de176461 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,4 @@ +- You must respond in Korean for all answers, regardless of the input language. +- Do not write any comments in code blocks, even if asked to do so. +- But if the codes is related to test, write the comment for "given, when, then". +- Do not use wildcard when importing libraries diff --git a/.gitignore b/.gitignore index 4ec9ead9..57e55e52 100644 --- a/.gitignore +++ b/.gitignore @@ -41,15 +41,3 @@ out/ ### Docker Tar files ### /eat-ssu.tar - -### SDKMAN ### -.sdkmanrc - -### Junie guideline ### -.junie - -### Cursor guideline ### -eatssu-server-rule.mdc - -### Copilot guildline ### -copilot-instructions.md \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..10153893 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,4 @@ +- You must respond in Korean for all answers, regardless of the input language. +- Do not write any comments in code blocks, even if asked to do so. +- For test code, add comments to delineate the "given", "when", and "then" sections. +- Do not use wildcard when importing libraries diff --git a/GEMINI.md b/GEMINI.md new file mode 100644 index 00000000..10153893 --- /dev/null +++ b/GEMINI.md @@ -0,0 +1,4 @@ +- You must respond in Korean for all answers, regardless of the input language. +- Do not write any comments in code blocks, even if asked to do so. +- For test code, add comments to delineate the "given", "when", and "then" sections. +- Do not use wildcard when importing libraries From 1e37c69ab56f8f1fdded7b101c2f189cb401f42b Mon Sep 17 00:00:00 2001 From: Jiwoong CHOI Date: Sun, 29 Jun 2025 16:39:30 +0900 Subject: [PATCH 234/399] =?UTF-8?q?feat:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EA=B5=AC=EC=A1=B0=20=EA=B0=9C=EC=84=A0=20?= =?UTF-8?q?=EB=B0=8F=20OAuthService=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=8A=A4=20=EC=B6=94=EA=B0=80=20(#177)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 테스트 코드 구조 개선 및 OAuthService 테스트 케이스 추가 - 기존 `OauthServiceTest` 및 Apple 관련 Mock 클래스 제거 - `OAuthServiceUnitTest` 작성으로 단위 테스트 강화 - 테스트 프로필 활성화를 위한 설정 및 application.yml 정리 - 테스트 환경(application-test.yml) 개선 - 빌드 환경 관련 build.gradle 의존성 간소화 및 필요한 테스트 의존성 추가 * feat: Tokens 클래스 리팩토링 및 OAuthService 테스트 추가 - Tokens 클래스를 record로 변경하여 간결하게 리팩토링 - OAuthService에 대한 통합 테스트 추가 - 기존 OAuthServiceUnitTest 파일 삭제 및 테스트 구조 개선 - GitHub Actions에서 테스트 환경 설정 강화 * fix: 변수를 거치지 않고 리턴하게 코드 수정 Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/copilot-instructions.md | 2 + build.gradle | 12 +- .../domain/auth/service/OAuthService.java | 45 +- .../ssu/eatssu/domain/user/dto/Tokens.java | 19 +- src/main/resources/application-local.yml | 12 - src/main/resources/application.yml | 5 +- .../ssu/eatssu/EatSsuApplicationTests.java | 2 + .../TestAppleAuthenticator.java | 12 - .../domain/auth/service/OAuthServiceTest.java | 535 ++++++++++++++++++ .../domain/auth/service/OauthServiceTest.java | 36 -- .../domain/menu/service/MealServiceTest.java | 2 - .../domain/menu/service/MenuServiceTest.java | 2 - .../resources/application-test.yml | 44 +- src/test/resources/application.yml | 3 + 14 files changed, 587 insertions(+), 144 deletions(-) delete mode 100644 src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java create mode 100644 src/test/java/ssu/eatssu/domain/auth/service/OAuthServiceTest.java delete mode 100644 src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java rename src/{main => test}/resources/application-test.yml (66%) create mode 100644 src/test/resources/application.yml diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index de176461..f706dd29 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -2,3 +2,5 @@ - Do not write any comments in code blocks, even if asked to do so. - But if the codes is related to test, write the comment for "given, when, then". - Do not use wildcard when importing libraries +- When you write reviews for pull request, specific review will very helpful for my team. +- Suggest based on logical reasons. \ No newline at end of file diff --git a/build.gradle b/build.gradle index 5094e40a..5d72192e 100644 --- a/build.gradle +++ b/build.gradle @@ -31,49 +31,39 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.hibernate.validator:hibernate-validator:8.0.0.Final' - // Lombok annotationProcessor 'org.projectlombok:lombok' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'com.mysql:mysql-connector-j' + testRuntimeOnly 'com.mysql:mysql-connector-j' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' - - //openApi implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' - //jwt implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2' runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2' runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2' - //httpClient implementation 'org.apache.httpcomponents.client5:httpclient5:5.3-alpha1' - // Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" - //S3 implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' - //slack implementation("com.slack.api:bolt:1.35.0") implementation("com.slack.api:bolt-servlet:1.35.0") implementation("com.slack.api:bolt-jetty:1.35.0") implementation("org.slf4j:slf4j-simple:1.7.36") - - // Spring Actuator implementation 'org.springframework.boot:spring-boot-starter-actuator' - // Prometheus runtimeOnly 'io.micrometer:micrometer-registry-prometheus' } diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java index dbb8d6a1..96338a6e 100644 --- a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.auth.service; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.core.Authentication; @@ -23,7 +22,6 @@ import static ssu.eatssu.domain.auth.entity.OAuthProvider.APPLE; import static ssu.eatssu.domain.auth.entity.OAuthProvider.KAKAO; -@Slf4j @Service @Transactional @RequiredArgsConstructor @@ -39,31 +37,22 @@ public class OAuthService { public Tokens kakaoLogin(KakaoLoginRequest request) { User user = userRepository.findByProviderId(request.providerId()) - .orElseGet( - () -> userService.join(request.email(), KAKAO, request.providerId())); + .orElseGet(() -> userService.join(request.email(), KAKAO, request.providerId())); - return generateOauthJwtTokens(user.getEmail(), KAKAO, - request.providerId()); + return generateOauthJwtTokens(user.getEmail(), KAKAO, request.providerId()); } public Tokens appleLogin(AppleLoginRequest request) { - OAuthInfo oAuthInfo = appleAuthenticator.getOAuthInfoByIdentityToken( - request.identityToken()); + OAuthInfo oAuthInfo = appleAuthenticator.getOAuthInfoByIdentityToken(request.identityToken()); User user = userRepository.findByProviderId(oAuthInfo.providerId()) - .orElseGet(() -> userService.join(oAuthInfo.email(), APPLE, - oAuthInfo.providerId())); + .orElseGet(() -> userService.join(oAuthInfo.email(), APPLE, oAuthInfo.providerId())); - //todo 이메일 갱신의 이유? updateAppleUserEmail(user, oAuthInfo.email()); - return generateOauthJwtTokens(user.getEmail(), APPLE, - oAuthInfo.providerId()); + return generateOauthJwtTokens(user.getEmail(), APPLE, oAuthInfo.providerId()); } - /** - * JWT 토큰 재발급 - */ public Tokens refreshTokens(Authentication authentication) { return jwtTokenProvider.generateTokens(authentication); } @@ -75,17 +64,12 @@ private void updateAppleUserEmail(User user, String email) { } } - /** - * 유효한 토큰인지 확인 - */ - public Boolean validToken(ValidRequest request) { String token = request.token(); try { return jwtTokenProvider.validateToken(token); } catch (BaseException e) { - log.warn("토큰 유효성 검사 중 예외 발생: {}", e.getMessage()); return false; } } @@ -98,23 +82,16 @@ private boolean isHideEmail(String email) { } } - /** - * Oauth 회원 - email, providerId 를 통해 JwtToken 을 생성 - * todo: 같은 이메일로 카카오, 애플 등 여러 회원가입을 한 회원 처리 필요 - */ + // FIXME: 같은 이메일로 카카오, 애플 등 여러 회원가입을 한 회원 처리 필요. + // 사용자는 같은 이메일로 로그인을 진행했을 시 같은 계정에 접근하기를 원함. + // iPhone을 사용하는 사용자들에서만 한함. + // 하지만 private relay를 사용하는 경우도 있는데, 이럴 때는 사용자의 계정을 묶기 다소 복잡하다. private Tokens generateOauthJwtTokens(String email, OAuthProvider provider, String providerId) { - // email, credentials 를 기반으로 Authentication 객체 생성 - // 이때 authentication 은 인증 여부를 확인하는 authenticated 값이 false UsernamePasswordAuthenticationToken authenticationToken = - new UsernamePasswordAuthenticationToken(email, - makeOauthCredentials(provider, providerId)); + new UsernamePasswordAuthenticationToken(email, makeOauthCredentials(provider, providerId)); - // 실제 검증 (사용자 비밀번호 체크) - // authenticate 메서드 실행 => CustomUserDetailsService 에서 만든 loadUserByUsername 메서드 실행 - Authentication authentication = authenticationManagerBuilder.getObject() - .authenticate(authenticationToken); + Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken); - // 인증 정보를 바탕으로 JWT 토큰 생성 return jwtTokenProvider.generateTokens(authentication); } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java b/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java index b848f223..d7c35c2c 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java @@ -1,22 +1,13 @@ package ssu.eatssu.domain.user.dto; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Builder; -import lombok.Getter; @Schema(title = "jwt 토큰들") -@Getter -public class Tokens { - +public record Tokens( @Schema(description = "accessToken", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjEsXCJlbWFpbFwiOlwiZW1haWxAZW1haWwuY29tXCJ9IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY3OTIyNzc0NX0.gM7F00Dh7OvybtEYODxYqFNATDDdquGCIivAeifNrEnF1ush3Fx1ChWqwD60U6Ek7rmJRU3CUUFAMLUrWDi4Aw") - private String accessToken; - + String accessToken, + @Schema(description = "refreshToken", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjEsXCJlbWFpbFwiOlwiZW1haWxAZW1haWwuY29tXCJ9IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY3OTgzMDc0NX0.OBtrGGKuSujBxwLTNVs-sc4eEH8uYiG8-Cwomqb_OgB9ADVbWbtSqaml9Ll34TFrKhPZuhMvzdchsWHqMQQ_kg") - private String refreshToken; - - @Builder - public Tokens(String accessToken, String refreshToken) { - this.accessToken = accessToken; - this.refreshToken = refreshToken; - } + String refreshToken +) { } diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index cc8b8d48..fc610794 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -1,18 +1,15 @@ -## port number server: port: 9000 env: local spring: - ## Database datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: ${EATSSU_DB_URL_DEV} username: ${EATSSU_DB_USERNAME} password: ${EATSSU_DB_PASSWORD} - ## JPA jpa: hibernate: ddl-auto: none @@ -29,14 +26,12 @@ spring: max-file-size: 20MB max-request-size: 20MB -## Auth jwt: secret: key: ${EATSSU_JWT_SECRET_LOCAL} token-validity-in-seconds: 86400 refresh-token-validity-in-seconds: 259200 -#S3 cloud: aws: credentials: @@ -49,26 +44,19 @@ cloud: stack: auto: false -#Slack slack: token: ${EATSSU_SLACK_TOKEN} -#Swagger swagger: url: http://localhost:9000 description: Test Server Swagger API springdoc: swagger-ui: - # Swagger UI path: /swagger-ui.html - # Group groups-order: DESC - # API operationsSorter: method - # Swagger UI disable-swagger-default-url: true - # API display-request-duration: true api-docs: path: /v3/api-docs diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 9aa2f73b..2b43a76f 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,9 +1,6 @@ spring: profiles: - # include : prod - # include : dev - include: local - # include: test + active: local user: forbidden-nicknames: diff --git a/src/test/java/ssu/eatssu/EatSsuApplicationTests.java b/src/test/java/ssu/eatssu/EatSsuApplicationTests.java index 92b384f5..0d956ea4 100644 --- a/src/test/java/ssu/eatssu/EatSsuApplicationTests.java +++ b/src/test/java/ssu/eatssu/EatSsuApplicationTests.java @@ -2,8 +2,10 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; @SpringBootTest +@ActiveProfiles("test") class EatSsuApplicationTests { @Test diff --git a/src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java b/src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java deleted file mode 100644 index 58e03d83..00000000 --- a/src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java +++ /dev/null @@ -1,12 +0,0 @@ -package ssu.eatssu.domain.auth.infrastructure; - -import ssu.eatssu.domain.auth.dto.OAuthInfo; -import ssu.eatssu.domain.auth.entity.AppleAuthenticator; - -public class TestAppleAuthenticator implements AppleAuthenticator { - - @Override - public OAuthInfo getOAuthInfoByIdentityToken(String identityToken) { - return new OAuthInfo("test@test.com", "1234567890"); - } -} diff --git a/src/test/java/ssu/eatssu/domain/auth/service/OAuthServiceTest.java b/src/test/java/ssu/eatssu/domain/auth/service/OAuthServiceTest.java new file mode 100644 index 00000000..dab3e80f --- /dev/null +++ b/src/test/java/ssu/eatssu/domain/auth/service/OAuthServiceTest.java @@ -0,0 +1,535 @@ +package ssu.eatssu.domain.auth.service; + +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.transaction.annotation.Transactional; + +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import java.security.NoSuchAlgorithmException; +import java.time.Instant; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import ssu.eatssu.domain.auth.dto.AppleLoginRequest; +import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; +import ssu.eatssu.domain.auth.dto.OAuthInfo; +import ssu.eatssu.domain.auth.dto.ValidRequest; +import ssu.eatssu.domain.auth.entity.AppleAuthenticator; +import ssu.eatssu.domain.auth.entity.OAuthProvider; +import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.domain.user.dto.Tokens; +import ssu.eatssu.domain.user.entity.Role; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.user.entity.UserStatus; +import ssu.eatssu.domain.user.repository.UserRepository; +import ssu.eatssu.domain.user.service.UserService; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; +import static org.mockito.ArgumentMatchers.anyString; + +@SpringBootTest +@ActiveProfiles("test") +@Transactional +class OAuthServiceTest { + + @Autowired + private OAuthService oAuthService; + + @Autowired + private UserRepository userRepository; + + @Autowired + private UserService userService; + + @MockBean + private AppleAuthenticator appleAuthenticator; + + @BeforeEach + void setUp() { + userRepository.deleteAll(); + } + + private String createMockAppleIdentityToken(String email, String providerId) { + try { + SecretKey key = KeyGenerator.getInstance("HmacSHA256").generateKey(); + + Map claims = new HashMap<>(); + claims.put("iss", "https://appleid.apple.com"); + claims.put("aud", "com.example.testapp"); + claims.put("exp", Instant.now().plusSeconds(3600).getEpochSecond()); + claims.put("iat", Instant.now().getEpochSecond()); + claims.put("sub", providerId); + claims.put("email", email); + claims.put("email_verified", "true"); + + Map header = new HashMap<>(); + header.put("kid", "test-key-id"); + header.put("alg", "HS256"); + + return Jwts.builder() + .setHeader(header) + .setClaims(claims) + .setIssuedAt(new Date()) + .setExpiration(new Date(System.currentTimeMillis() + 3600000)) + .signWith(key, SignatureAlgorithm.HS256) + .compact(); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException("모의 Apple Identity Token 생성에 실패했습니다", e); + } + } + + @Test + @DisplayName("카카오 로그인 - 신규 사용자 가입 및 토큰 생성") + void kakaoLogin_신규사용자_토큰생성() { + // given + String email = "test@kakao.com"; + String providerId = "kakao123"; + KakaoLoginRequest request = new KakaoLoginRequest(email, providerId); + + // when + Tokens tokens = oAuthService.kakaoLogin(request); + + // then + assertThat(tokens).isNotNull(); + assertThat(tokens.accessToken()).isNotBlank(); + assertThat(tokens.refreshToken()).isNotBlank(); + + User savedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(savedUser).isNotNull(); + assertThat(savedUser.getEmail()).isEqualTo(email); + assertThat(savedUser.getProvider()).isEqualTo(OAuthProvider.KAKAO); + assertThat(savedUser.getProviderId()).isEqualTo(providerId); + assertThat(savedUser.getRole()).isEqualTo(Role.USER); + assertThat(savedUser.getStatus()).isEqualTo(UserStatus.ACTIVE); + } + + @Test + @DisplayName("카카오 로그인 - 기존 사용자 로그인") + void kakaoLogin_기존사용자_로그인() { + // given + String email = "existing@kakao.com"; + String providerId = "existing123"; + User existingUser = userService.join(email, OAuthProvider.KAKAO, providerId); + existingUser.updateNickname("테스트닉네임"); + userRepository.save(existingUser); + + KakaoLoginRequest request = new KakaoLoginRequest(email, providerId); + + // when + Tokens tokens = oAuthService.kakaoLogin(request); + + // then + assertThat(tokens).isNotNull(); + assertThat(tokens.accessToken()).isNotBlank(); + assertThat(tokens.refreshToken()).isNotBlank(); + + long userCount = userRepository.count(); + assertThat(userCount).isEqualTo(1); + } + + @Test + @DisplayName("애플 로그인 - 신규 사용자 가입 및 토큰 생성") + void appleLogin_신규사용자_토큰생성() { + // given + String email = "test@apple.com"; + String providerId = "apple123"; + String identityToken = "mock.identity.token"; + AppleLoginRequest request = new AppleLoginRequest(identityToken); + + OAuthInfo mockOAuthInfo = new OAuthInfo(email, providerId); + given(appleAuthenticator.getOAuthInfoByIdentityToken(identityToken)).willReturn(mockOAuthInfo); + + // when + Tokens tokens = oAuthService.appleLogin(request); + + // then + assertThat(tokens).isNotNull(); + assertThat(tokens.accessToken()).isNotBlank(); + assertThat(tokens.refreshToken()).isNotBlank(); + + User savedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(savedUser).isNotNull(); + assertThat(savedUser.getEmail()).isEqualTo(email); + assertThat(savedUser.getProvider()).isEqualTo(OAuthProvider.APPLE); + assertThat(savedUser.getProviderId()).isEqualTo(providerId); + } + + @Test + @DisplayName("애플 로그인 - 기존 사용자 로그인") + void appleLogin_기존사용자_로그인() { + // given + String email = "existing@apple.com"; + String providerId = "existing_apple123"; + String identityToken = "mock.identity.token"; + + User existingUser = userService.join(email, OAuthProvider.APPLE, providerId); + existingUser.updateNickname("기존애플사용자"); + userRepository.save(existingUser); + + AppleLoginRequest request = new AppleLoginRequest(identityToken); + OAuthInfo mockOAuthInfo = new OAuthInfo(email, providerId); + given(appleAuthenticator.getOAuthInfoByIdentityToken(identityToken)).willReturn(mockOAuthInfo); + + // when + Tokens tokens = oAuthService.appleLogin(request); + + // then + assertThat(tokens).isNotNull(); + assertThat(tokens.accessToken()).isNotBlank(); + assertThat(tokens.refreshToken()).isNotBlank(); + + long userCount = userRepository.count(); + assertThat(userCount).isEqualTo(1); + } + + @Test + @DisplayName("애플 로그인 - 프라이빗 릴레이 이메일에서 실제 이메일로 업데이트") + void appleLogin_프라이빗릴레이이메일_실제이메일업데이트() { + // given + String privateEmail = "abc123@privaterelay.appleid.com"; + String realEmail = "user@icloud.com"; + String providerId = "apple_private123"; + String identityToken = "mock.identity.token"; + + User existingUser = userService.join(privateEmail, OAuthProvider.APPLE, providerId); + existingUser.updateNickname("프라이빗사용자"); + userRepository.save(existingUser); + + AppleLoginRequest request = new AppleLoginRequest(identityToken); + OAuthInfo mockOAuthInfo = new OAuthInfo(realEmail, providerId); + given(appleAuthenticator.getOAuthInfoByIdentityToken(identityToken)).willReturn(mockOAuthInfo); + + // when + Tokens tokens = oAuthService.appleLogin(request); + + // then + assertThat(tokens).isNotNull(); + + User updatedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(updatedUser).isNotNull(); + assertThat(updatedUser.getEmail()).isEqualTo(realEmail); + } + + @Test + @DisplayName("애플 로그인 - 실제 이메일에서 프라이빗 릴레이 이메일로 변경 시 업데이트 안됨") + void appleLogin_실제이메일_프라이빗릴레이이메일_업데이트안됨() { + // given + String realEmail = "user@icloud.com"; + String privateEmail = "xyz789@privaterelay.appleid.com"; + String providerId = "apple_real123"; + String identityToken = "mock.identity.token"; + + User existingUser = userService.join(realEmail, OAuthProvider.APPLE, providerId); + existingUser.updateNickname("실제사용자"); + userRepository.save(existingUser); + + AppleLoginRequest request = new AppleLoginRequest(identityToken); + OAuthInfo mockOAuthInfo = new OAuthInfo(privateEmail, providerId); + given(appleAuthenticator.getOAuthInfoByIdentityToken(identityToken)).willReturn(mockOAuthInfo); + + // when + Tokens tokens = oAuthService.appleLogin(request); + + // then + assertThat(tokens).isNotNull(); + + User updatedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(updatedUser).isNotNull(); + assertThat(updatedUser.getEmail()).isEqualTo(realEmail); + } + + @Test + @DisplayName("토큰 새로고침 - 유효한 Authentication으로 새 토큰 생성") + void refreshTokens_유효한인증_새토큰생성() { + // given + String email = "refresh@test.com"; + String providerId = "refresh123"; + KakaoLoginRequest request = new KakaoLoginRequest(email, providerId); + Tokens originalTokens = oAuthService.kakaoLogin(request); + + User user = userRepository.findByProviderId(providerId).orElseThrow(); + CustomUserDetails userDetails = new CustomUserDetails(user); + Authentication authentication = new UsernamePasswordAuthenticationToken( + userDetails, + userDetails.getCredentials(), + userDetails.getAuthorities() + ); + + // when + Tokens refreshedTokens = oAuthService.refreshTokens(authentication); + + // then + assertThat(refreshedTokens).isNotNull(); + assertThat(refreshedTokens.accessToken()).isNotBlank(); + assertThat(refreshedTokens.refreshToken()).isNotBlank(); + } + + @Test + @DisplayName("유효한 토큰 검증 - 유효한 토큰") + void validToken_유효한토큰_true반환() { + // given + String email = "valid@test.com"; + String providerId = "valid123"; + KakaoLoginRequest request = new KakaoLoginRequest(email, providerId); + Tokens tokens = oAuthService.kakaoLogin(request); + + ValidRequest validRequest = new ValidRequest(tokens.accessToken()); + + // when + Boolean result = oAuthService.validToken(validRequest); + + // then + assertThat(result).isTrue(); + } + + @Test + @DisplayName("유효하지 않은 토큰 검증 - 무효한 토큰") + void validToken_무효한토큰_false반환() { + // given + String invalidToken = "invalid.jwt.token"; + ValidRequest request = new ValidRequest(invalidToken); + + // when + Boolean result = oAuthService.validToken(request); + + // then + assertThat(result).isFalse(); + } + + @Test + @DisplayName("토큰 검증 - 빈 토큰") + void validToken_빈토큰_false반환() { + // given + String emptyToken = ""; + ValidRequest request = new ValidRequest(emptyToken); + + // when + Boolean result = oAuthService.validToken(request); + + // then + assertThat(result).isFalse(); + } + + @Test + @DisplayName("토큰 검증 - null 토큰") + void validToken_null토큰_false반환() { + // given + ValidRequest request = new ValidRequest(null); + + // when + Boolean result = oAuthService.validToken(request); + + // then + assertThat(result).isFalse(); + } + + @ParameterizedTest + @DisplayName("다양한 providerId로 카카오 로그인 테스트") + @ValueSource(strings = {"kakao123", "kakao_test_456", "1234567890"}) + void kakaoLogin_다양한providerId_성공(String providerId) { + // given + String email = "test@example.com"; + KakaoLoginRequest request = new KakaoLoginRequest(email, providerId); + + // when + Tokens tokens = oAuthService.kakaoLogin(request); + + // then + assertThat(tokens).isNotNull(); + assertThat(tokens.accessToken()).isNotBlank(); + assertThat(tokens.refreshToken()).isNotBlank(); + + User savedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(savedUser).isNotNull(); + assertThat(savedUser.getProviderId()).isEqualTo(providerId); + assertThat(savedUser.getProvider()).isEqualTo(OAuthProvider.KAKAO); + } + + @Test + @DisplayName("동일한 providerId로 중복 로그인 시도") + void kakaoLogin_중복providerId_기존사용자반환() { + // given + String email = "first@kakao.com"; + String providerId = "duplicate123"; + + KakaoLoginRequest firstRequest = new KakaoLoginRequest(email, providerId); + oAuthService.kakaoLogin(firstRequest); + + KakaoLoginRequest secondRequest = new KakaoLoginRequest("different@email.com", providerId); + + // when + Tokens secondTokens = oAuthService.kakaoLogin(secondRequest); + + // then + assertThat(secondTokens).isNotNull(); + long userCount = userRepository.count(); + assertThat(userCount).isEqualTo(1); + + User user = userRepository.findByProviderId(providerId).orElse(null); + assertThat(user).isNotNull(); + assertThat(user.getEmail()).isEqualTo(email); + } + + @ParameterizedTest + @DisplayName("프라이빗 릴레이 이메일 패턴 테스트") + @ValueSource(strings = { + "test123@privaterelay.appleid.com", + "a1b2c3d4e5f6@privaterelay.appleid.com", + "verylongusername@privaterelay.appleid.com" + }) + void appleLogin_프라이빗릴레이이메일패턴_인식확인(String privateEmail) { + // given + String providerId = "apple_private_test"; + String identityToken = "mock.identity.token"; + + AppleLoginRequest request = new AppleLoginRequest(identityToken); + OAuthInfo mockOAuthInfo = new OAuthInfo(privateEmail, providerId); + given(appleAuthenticator.getOAuthInfoByIdentityToken(identityToken)).willReturn(mockOAuthInfo); + + // when + Tokens tokens = oAuthService.appleLogin(request); + + // then + assertThat(tokens).isNotNull(); + + User savedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(savedUser).isNotNull(); + assertThat(savedUser.getEmail()).isEqualTo(privateEmail); + } + + @Test + @DisplayName("실제 Identity Token을 사용한 Apple 로그인 테스트") + void appleLogin_실제IdentityToken_성공() { + // given + String email = "realtest@icloud.com"; + String providerId = "001234.abcd1234abcd1234abcd1234abcd1234.1234"; + String realIdentityToken = createMockAppleIdentityToken(email, providerId); + + AppleLoginRequest request = new AppleLoginRequest(realIdentityToken); + OAuthInfo mockOAuthInfo = new OAuthInfo(email, providerId); + given(appleAuthenticator.getOAuthInfoByIdentityToken(realIdentityToken)).willReturn(mockOAuthInfo); + + // when + Tokens tokens = oAuthService.appleLogin(request); + + // then + assertThat(tokens).isNotNull(); + assertThat(tokens.accessToken()).isNotBlank(); + assertThat(tokens.refreshToken()).isNotBlank(); + + User savedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(savedUser).isNotNull(); + assertThat(savedUser.getEmail()).isEqualTo(email); + assertThat(savedUser.getProvider()).isEqualTo(OAuthProvider.APPLE); + assertThat(savedUser.getProviderId()).isEqualTo(providerId); + } + + @Test + @DisplayName("실제 Identity Token - 프라이빗 릴레이 이메일 테스트") + void appleLogin_실제IdentityToken_프라이빗릴레이이메일() { + // given + String privateEmail = "real123test@privaterelay.appleid.com"; + String providerId = "001234.private1234private1234private1234.5678"; + String realIdentityToken = createMockAppleIdentityToken(privateEmail, providerId); + + AppleLoginRequest request = new AppleLoginRequest(realIdentityToken); + OAuthInfo mockOAuthInfo = new OAuthInfo(privateEmail, providerId); + given(appleAuthenticator.getOAuthInfoByIdentityToken(realIdentityToken)).willReturn(mockOAuthInfo); + + // when + Tokens tokens = oAuthService.appleLogin(request); + + // then + assertThat(tokens).isNotNull(); + assertThat(tokens.accessToken()).isNotBlank(); + assertThat(tokens.refreshToken()).isNotBlank(); + + User savedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(savedUser).isNotNull(); + assertThat(savedUser.getEmail()).isEqualTo(privateEmail); + assertThat(savedUser.getProvider()).isEqualTo(OAuthProvider.APPLE); + assertThat(savedUser.getProviderId()).isEqualTo(providerId); + } + + @Test + @DisplayName("실제 Identity Token - 이메일 업데이트 시나리오") + void appleLogin_실제IdentityToken_이메일업데이트() { + // given + String privateEmail = "update123test@privaterelay.appleid.com"; + String realEmail = "updated.user@icloud.com"; + String providerId = "001234.update1234update1234update1234.9012"; + + // 기존 사용자를 프라이빗 이메일로 생성 + User existingUser = userService.join(privateEmail, OAuthProvider.APPLE, providerId); + existingUser.updateNickname("업데이트테스트사용자"); + userRepository.save(existingUser); + + // 실제 이메일이 포함된 Identity Token 생성 + String realIdentityToken = createMockAppleIdentityToken(realEmail, providerId); + + AppleLoginRequest request = new AppleLoginRequest(realIdentityToken); + OAuthInfo mockOAuthInfo = new OAuthInfo(realEmail, providerId); + given(appleAuthenticator.getOAuthInfoByIdentityToken(realIdentityToken)).willReturn(mockOAuthInfo); + + // when + Tokens tokens = oAuthService.appleLogin(request); + + // then + assertThat(tokens).isNotNull(); + + User updatedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(updatedUser).isNotNull(); + assertThat(updatedUser.getEmail()).isEqualTo(realEmail); // 프라이빗 이메일에서 실제 이메일로 업데이트 + assertThat(updatedUser.getProvider()).isEqualTo(OAuthProvider.APPLE); + assertThat(updatedUser.getProviderId()).isEqualTo(providerId); + + long userCount = userRepository.count(); + assertThat(userCount).isEqualTo(1); // 사용자는 한 명만 존재 + } + + @ParameterizedTest + @DisplayName("다양한 실제 Identity Token 패턴 테스트") + @ValueSource(strings = { + "test1@icloud.com", + "user.name@me.com", + "developer@mac.com", + "testuser123@privaterelay.appleid.com", + "a1b2c3d4e5@privaterelay.appleid.com" + }) + void appleLogin_다양한실제이메일패턴_성공(String email) { + // given + String providerId = "001234.pattern" + email.hashCode() + ".test"; + String realIdentityToken = createMockAppleIdentityToken(email, providerId); + + AppleLoginRequest request = new AppleLoginRequest(realIdentityToken); + OAuthInfo mockOAuthInfo = new OAuthInfo(email, providerId); + given(appleAuthenticator.getOAuthInfoByIdentityToken(realIdentityToken)).willReturn(mockOAuthInfo); + + // when + Tokens tokens = oAuthService.appleLogin(request); + + // then + assertThat(tokens).isNotNull(); + assertThat(tokens.accessToken()).isNotBlank(); + assertThat(tokens.refreshToken()).isNotBlank(); + + User savedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(savedUser).isNotNull(); + assertThat(savedUser.getEmail()).isEqualTo(email); + assertThat(savedUser.getProvider()).isEqualTo(OAuthProvider.APPLE); + } +} \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java b/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java deleted file mode 100644 index 6ee9a2c9..00000000 --- a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package ssu.eatssu.domain.auth.service; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.junit.jupiter.MockitoExtension; -import ssu.eatssu.domain.auth.dto.ValidRequest; -import ssu.eatssu.domain.auth.security.JwtTokenProvider; - -import static org.junit.jupiter.api.Assertions.assertTrue; - -@ExtendWith(MockitoExtension.class) -class OauthServiceTest { - - @InjectMocks - private OAuthService oauthService; - - @Mock - private JwtTokenProvider jwtTokenProvider; - - @Test - void 토큰_유효성_검사() { - // given - String token = "eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi"; - ValidRequest request = new ValidRequest(token); - Mockito.when(jwtTokenProvider.validateToken(token)).thenReturn(true); - - // when - Boolean result = oauthService.validToken(request); - - // then - assertTrue(result); - } -} diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java index a18a0e03..f76810ab 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java @@ -5,7 +5,6 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.constants.TimePart; @@ -23,7 +22,6 @@ @SpringBootTest @DisplayName("MealService 테스트") -@ActiveProfiles("test") class MealServiceTest { @Autowired diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java index 0cacedd3..22ec1531 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java @@ -5,7 +5,6 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ActiveProfiles; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.menu.persistence.MenuCategoryRepository; @@ -20,7 +19,6 @@ @SpringBootTest @DisplayName("MenuService 테스트") -@ActiveProfiles("test") class MenuServiceTest { @Autowired diff --git a/src/main/resources/application-test.yml b/src/test/resources/application-test.yml similarity index 66% rename from src/main/resources/application-test.yml rename to src/test/resources/application-test.yml index 5379245d..d2e73163 100644 --- a/src/main/resources/application-test.yml +++ b/src/test/resources/application-test.yml @@ -1,47 +1,42 @@ -## port number server: port: 9000 + env: test spring: - ## Database datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: ${EATSSU_DB_URL_TEST} - username: ${EATSSU_DB_USERNAME_TEST} - password: ${EATSSU_DB_PASSWORD_TEST} + username: ${EATSSU_DB_USERNAME} + password: ${EATSSU_DB_PASSWORD} - ## JPA jpa: hibernate: - ddl-auto: update + ddl-auto: create-drop properties: hibernate: - # jdbc: + jdbc: lob: non_contextual_creation: true - format_sql: true - show_sql: true - dialect: org.hibernate.dialect.MySQLDialect + format_sql: false + show_sql: false servlet: multipart: max-file-size: 20MB max-request-size: 20MB -## Auth jwt: secret: key: ${EATSSU_JWT_SECRET_TEST} token-validity-in-seconds: 86400 refresh-token-validity-in-seconds: 259200 -#S3 cloud: aws: credentials: - accessKey: ${EATSSU_AWS_ACCESS_KEY_PROD} - secretKey: ${EATSSU_AWS_SECRET_KEY_PROD} + accessKey: ${EATSSU_AWS_ACCESS_KEY_DEV} + secretKey: ${EATSSU_AWS_SECRET_KEY_DEV} s3: bucket: eatssu-dev-bucket region: @@ -49,11 +44,9 @@ cloud: stack: auto: false -#Slack slack: token: ${EATSSU_SLACK_TOKEN} -#Swagger swagger: url: http://localhost:9000 description: Test Server Swagger API @@ -71,4 +64,21 @@ springdoc: default-consumes-media-type: application/json default-produces-media-type: application/json paths-to-match: - - /** \ No newline at end of file + - /** + +logging: + level: + root: INFO + com.zaxxer.hikari: INFO + +management: + endpoint: + metrics: + enabled: true + prometheus: + enabled: true + + endpoints: + web: + exposure: + include: health, info, metrics, prometheus diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml new file mode 100644 index 00000000..027b4e36 --- /dev/null +++ b/src/test/resources/application.yml @@ -0,0 +1,3 @@ +spring: + profiles: + active: test \ No newline at end of file From b6f100f3c42f23e0f501638b69b49ae35ef6f3ba Mon Sep 17 00:00:00 2001 From: Jiwoong CHOI Date: Sun, 29 Jun 2025 16:49:30 +0900 Subject: [PATCH 235/399] =?UTF-8?q?feat:=20=EA=B8=88=EC=A7=80=EB=90=9C=20?= =?UTF-8?q?=EB=8B=89=EB=84=A4=EC=9E=84=20=EB=AA=A9=EB=A1=9D=EC=97=90=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=ED=95=AD=EB=AA=A9=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?(#179)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.yml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 2b43a76f..7c25d12e 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -6,3 +6,33 @@ user: forbidden-nicknames: - EAT-SSU - EATSSU + - 잇슈 + - 읻슈 + - 잍슈 + - 잇쓔 + - 잇쓲 + - 잇씨유 + - 잇슈우 + - 잇슈웅 + - eat-ssu + - eatssu + - eatsu + - e4tssu + - 3at-ssu + - ea7-ssu + - "e @t-ssu" + - e.at.ssu + - e-a-t-s-s-u + - e_a_t_s_s_u + - "e a t ssu" + - eat_ssu + - eatssu_ + - eatssu123 + - "e @tssu" + - ēat-ssu + - 3atssu + - "eat$u" + - eat5su + - "eats$u" + - eats-u + - E4T슈 From 5aa2d698898a4de47b93c472e2fd3175a4fabe7a Mon Sep 17 00:00:00 2001 From: Jiwoong CHOI Date: Mon, 30 Jun 2025 19:27:24 +0900 Subject: [PATCH 236/399] =?UTF-8?q?feat:=20Gemini=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EB=B0=8F=20=EC=8A=A4=ED=83=80=EC=9D=BC=20=EA=B0=80=EC=9D=B4?= =?UTF-8?q?=EB=93=9C=20=EB=AC=B8=EC=84=9C=20=EC=B6=94=EA=B0=80=20(#181)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: Gemini 설정 및 스타일 가이드 문서 추가 * fix: 영어 문법 수정 * feat: Copilot 지침 및 주석, 테스트 코드 규칙 추가 --- .cursor/rules/eatssu-server-rule.mdc | 20 +++++++++++++++++++- .gemini/config.yaml | 10 ++++++++++ .gemini/styleguide.md | 22 ++++++++++++++++++++++ .github/copilot-instructions.md | 20 ++++++++++++++++++-- CLAUDE.md | 20 +++++++++++++++++++- GEMINI.md | 20 +++++++++++++++++++- 6 files changed, 107 insertions(+), 5 deletions(-) create mode 100644 .gemini/config.yaml create mode 100644 .gemini/styleguide.md diff --git a/.cursor/rules/eatssu-server-rule.mdc b/.cursor/rules/eatssu-server-rule.mdc index 1664a2cd..c83a97fc 100644 --- a/.cursor/rules/eatssu-server-rule.mdc +++ b/.cursor/rules/eatssu-server-rule.mdc @@ -3,7 +3,25 @@ description: globs: alwaysApply: true --- +# Copilot instructions + - You must respond in Korean for all answers, regardless of the input language. - Do not write any comments in code blocks, even if asked to do so. -- But if the codes is related to test, write the comment for "given, when, then". - Do not use wildcard when importing libraries +- When you write reviews for pull request, specific review will very helpful for my team. +- Suggest based on logical reasons. + +## Commenting Convention + +- Comments should be written in a single line whenever possible. +- Each comment must include the author's name and the date. +- Use IntelliJ's default `FIX ME` comment format. + - Use this for parts of the code where there may be a potential issue but immediate exception handling is unnecessary. + - Also use this for parts that are not yet finalized due to unclear business requirements. + +## Test Code Convention + +- Test method names must be written in **English**. +- But if the codes is related to test, write the comment for "given, when, then". + +Please follow these conventions when reviewing or suggesting changes to the code. \ No newline at end of file diff --git a/.gemini/config.yaml b/.gemini/config.yaml new file mode 100644 index 00000000..e8560858 --- /dev/null +++ b/.gemini/config.yaml @@ -0,0 +1,10 @@ +have_fun: true +code_review: + disable: false + comment_severity_threshold: MEDIUM + max_review_comments: -1 + pull_request_opened: + help: false + summary: true + code_review: true +ignore_patterns: [] \ No newline at end of file diff --git a/.gemini/styleguide.md b/.gemini/styleguide.md new file mode 100644 index 00000000..e74ab612 --- /dev/null +++ b/.gemini/styleguide.md @@ -0,0 +1,22 @@ +# Copilot instructions + +- You must respond in Korean for all answers, regardless of the input language. +- Do not write any comments in code blocks, even if asked to do so. +- Do not use wildcard when importing libraries +- When you write reviews for pull request, specific review will very helpful for my team. +- Suggest based on logical reasons. + +## Commenting Convention + +- Comments should be written in a single line whenever possible. +- Each comment must include the author's name and the date. +- Use IntelliJ's default `FIX ME` comment format. + - Use this for parts of the code where there may be a potential issue but immediate exception handling is unnecessary. + - Also use this for parts that are not yet finalized due to unclear business requirements. + +## Test Code Convention + +- Test method names must be written in **English**. +- But if the codes is related to test, write the comment for "given, when, then". + +Please follow these conventions when reviewing or suggesting changes to the code. \ No newline at end of file diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index f706dd29..e74ab612 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -1,6 +1,22 @@ +# Copilot instructions + - You must respond in Korean for all answers, regardless of the input language. - Do not write any comments in code blocks, even if asked to do so. -- But if the codes is related to test, write the comment for "given, when, then". - Do not use wildcard when importing libraries - When you write reviews for pull request, specific review will very helpful for my team. -- Suggest based on logical reasons. \ No newline at end of file +- Suggest based on logical reasons. + +## Commenting Convention + +- Comments should be written in a single line whenever possible. +- Each comment must include the author's name and the date. +- Use IntelliJ's default `FIX ME` comment format. + - Use this for parts of the code where there may be a potential issue but immediate exception handling is unnecessary. + - Also use this for parts that are not yet finalized due to unclear business requirements. + +## Test Code Convention + +- Test method names must be written in **English**. +- But if the codes is related to test, write the comment for "given, when, then". + +Please follow these conventions when reviewing or suggesting changes to the code. \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md index 10153893..e74ab612 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,4 +1,22 @@ +# Copilot instructions + - You must respond in Korean for all answers, regardless of the input language. - Do not write any comments in code blocks, even if asked to do so. -- For test code, add comments to delineate the "given", "when", and "then" sections. - Do not use wildcard when importing libraries +- When you write reviews for pull request, specific review will very helpful for my team. +- Suggest based on logical reasons. + +## Commenting Convention + +- Comments should be written in a single line whenever possible. +- Each comment must include the author's name and the date. +- Use IntelliJ's default `FIX ME` comment format. + - Use this for parts of the code where there may be a potential issue but immediate exception handling is unnecessary. + - Also use this for parts that are not yet finalized due to unclear business requirements. + +## Test Code Convention + +- Test method names must be written in **English**. +- But if the codes is related to test, write the comment for "given, when, then". + +Please follow these conventions when reviewing or suggesting changes to the code. \ No newline at end of file diff --git a/GEMINI.md b/GEMINI.md index 10153893..e74ab612 100644 --- a/GEMINI.md +++ b/GEMINI.md @@ -1,4 +1,22 @@ +# Copilot instructions + - You must respond in Korean for all answers, regardless of the input language. - Do not write any comments in code blocks, even if asked to do so. -- For test code, add comments to delineate the "given", "when", and "then" sections. - Do not use wildcard when importing libraries +- When you write reviews for pull request, specific review will very helpful for my team. +- Suggest based on logical reasons. + +## Commenting Convention + +- Comments should be written in a single line whenever possible. +- Each comment must include the author's name and the date. +- Use IntelliJ's default `FIX ME` comment format. + - Use this for parts of the code where there may be a potential issue but immediate exception handling is unnecessary. + - Also use this for parts that are not yet finalized due to unclear business requirements. + +## Test Code Convention + +- Test method names must be written in **English**. +- But if the codes is related to test, write the comment for "given, when, then". + +Please follow these conventions when reviewing or suggesting changes to the code. \ No newline at end of file From b54c983eb378325404d2110c5c68085084bab119 Mon Sep 17 00:00:00 2001 From: Jiwoong CHOI Date: Mon, 30 Jun 2025 19:29:39 +0900 Subject: [PATCH 237/399] =?UTF-8?q?feat:=20Review=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=20=ED=95=84=EB=93=9C=20=EB=B0=8F=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=A0=95=EB=A6=AC=20(#180)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/review/entity/Review.java | 231 +++++++++--------- 1 file changed, 116 insertions(+), 115 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index 50c0ec90..f1c31683 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -1,10 +1,5 @@ package ssu.eatssu.domain.review.entity; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Embedded; @@ -28,6 +23,11 @@ import ssu.eatssu.domain.user.entity.BaseTimeEntity; import ssu.eatssu.domain.user.entity.User; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + @Entity @Getter @Setter @@ -36,114 +36,115 @@ @AllArgsConstructor public class Review extends BaseTimeEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "review_id") - private Long id; - - private String content; - - // TODO : 삭제되어야 함 - @Embedded - private Ratings ratings; - - private Integer rating; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") - private User user; - - // TODO : 삭제되어야 함 - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "menu_id") - private Menu menu; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "meal_id") - private Meal meal; - - @Builder.Default - @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) - private List reviewImages = new ArrayList<>(); - - @Builder.Default - @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) - private List menuLikes = new ArrayList<>(); - - // @TODO: 리뷰v2 배포 이후 제거 해야함 - @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) - private List reviewLikes = new ArrayList<>(); - - public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { - this.content = content; - this.ratings = Ratings.of(mainRate, amountRate, tasteRate); - } - - // TODO : this.user가 null이면? - public boolean isNotWrittenBy(User user) { - return !this.user.equals(user); - } - - public void clearUser() { - this.user = null; - } - - public void addReviewImage(String imageUrl) { - ReviewImage reviewImage = new ReviewImage(this, imageUrl); - this.reviewImages.add(reviewImage); - } - - public void addReviewMenuLike(Menu menu, boolean isLike) { - ReviewMenuLike reviewMenuLike = ReviewMenuLike.create(this, menu, isLike); - this.menuLikes.add(reviewMenuLike); - - if (isLike) { - menu.increaseLikeCount(); - } else { - menu.increaseUnlikeCount(); - } - } - - public void removeReviewMenuLike(ReviewMenuLike reviewMenuLike) { - this.menuLikes.remove(reviewMenuLike); - - if (reviewMenuLike.getIsLike()) { - reviewMenuLike.getMenu().decreaseLikeCount(); - } else { - reviewMenuLike.getMenu().decreaseUnlikeCount(); - } - } - - public void update(String content, int rating, Map updatedMenuLikes) { - this.content = content; - this.rating = rating; - - // 현재 menu like 상태를 menu를 기준으로 매핑 - Map currentMenuLikes = this.menuLikes.stream() - .collect(Collectors.toMap(ReviewMenuLike::getMenu, - menuLike -> menuLike)); - - for (Map.Entry entry : updatedMenuLikes.entrySet()) { - Menu menu = entry.getKey(); - Boolean newState = entry.getValue(); - ReviewMenuLike existingReviewMenuLike = currentMenuLikes.get(menu); - if (existingReviewMenuLike == null) { - // 기존에 없는 메뉴이면 새롭게 추가 - this.addReviewMenuLike(menu, newState); - } else { - // 기존에 있는 경우 : 상태가 다르면 업데이트 - if (!existingReviewMenuLike.getIsLike().equals(newState)) { - existingReviewMenuLike.updateLike(newState); - menu.changeLikeStatus(newState); - } - } - } - } - - public void resetMenuLikes() { - for (ReviewMenuLike reviewMenuLike : this.menuLikes) { - reviewMenuLike.resetMenuLikeStatus(); - } - this.menuLikes.clear(); - } + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_id") + private Long id; + + @Column(length = 300) + private String content; + + // TODO : 삭제되어야 함 + @Embedded + private Ratings ratings; + + private Integer rating; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + // TODO : 삭제되어야 함 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "menu_id") + private Menu menu; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "meal_id") + private Meal meal; + + @Builder.Default + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) + private List reviewImages = new ArrayList<>(); + + @Builder.Default + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) + private List menuLikes = new ArrayList<>(); + + // @TODO: 리뷰v2 배포 이후 제거 해야함 + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) + private List reviewLikes = new ArrayList<>(); + + public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { + this.content = content; + this.ratings = Ratings.of(mainRate, amountRate, tasteRate); + } + + // TODO : this.user가 null이면? + public boolean isNotWrittenBy(User user) { + return !this.user.equals(user); + } + + public void clearUser() { + this.user = null; + } + + public void addReviewImage(String imageUrl) { + ReviewImage reviewImage = new ReviewImage(this, imageUrl); + this.reviewImages.add(reviewImage); + } + + public void addReviewMenuLike(Menu menu, boolean isLike) { + ReviewMenuLike reviewMenuLike = ReviewMenuLike.create(this, menu, isLike); + this.menuLikes.add(reviewMenuLike); + + if (isLike) { + menu.increaseLikeCount(); + } else { + menu.increaseUnlikeCount(); + } + } + + public void removeReviewMenuLike(ReviewMenuLike reviewMenuLike) { + this.menuLikes.remove(reviewMenuLike); + + if (reviewMenuLike.getIsLike()) { + reviewMenuLike.getMenu().decreaseLikeCount(); + } else { + reviewMenuLike.getMenu().decreaseUnlikeCount(); + } + } + + public void update(String content, int rating, Map updatedMenuLikes) { + this.content = content; + this.rating = rating; + + // 현재 menu like 상태를 menu를 기준으로 매핑 + Map currentMenuLikes = this.menuLikes.stream() + .collect(Collectors.toMap(ReviewMenuLike::getMenu, + menuLike -> menuLike)); + + for (Map.Entry entry : updatedMenuLikes.entrySet()) { + Menu menu = entry.getKey(); + Boolean newState = entry.getValue(); + ReviewMenuLike existingReviewMenuLike = currentMenuLikes.get(menu); + if (existingReviewMenuLike == null) { + // 기존에 없는 메뉴이면 새롭게 추가 + this.addReviewMenuLike(menu, newState); + } else { + // 기존에 있는 경우 : 상태가 다르면 업데이트 + if (!existingReviewMenuLike.getIsLike().equals(newState)) { + existingReviewMenuLike.updateLike(newState); + menu.changeLikeStatus(newState); + } + } + } + } + + public void resetMenuLikes() { + for (ReviewMenuLike reviewMenuLike : this.menuLikes) { + reviewMenuLike.resetMenuLikeStatus(); + } + this.menuLikes.clear(); + } } From f6158422435bcb75ea9eb790083d1eca14c2ad5f Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Tue, 1 Jul 2025 11:25:34 +0900 Subject: [PATCH 238/399] =?UTF-8?q?feat:=20eatssu=20scheme=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=A5=B8=20=EC=BD=94=EB=93=9C=20=EC=9E=AC=EC=A0=95?= =?UTF-8?q?=EB=A0=AC=20(#185)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/auth/entity/OAuthProvider.java | 2 +- .../auth/infrastructure/SecurityConfig.java | 103 ++- .../domain/inquiry/entity/InquiryStatus.java | 2 +- .../ssu/eatssu/domain/menu/entity/Meal.java | 2 +- .../ssu/eatssu/domain/menu/entity/Menu.java | 4 +- .../domain/rating/entity/RatingCountMap.java | 2 +- .../report/dto/ReportTypeInformation.java | 4 +- .../domain/review/dto/MealReviewResponse.java | 136 ++-- .../review/dto/MenuReviewsV2Response.java | 66 +- .../domain/review/dto/ReviewRatingCount.java | 37 +- .../eatssu/domain/review/entity/Review.java | 1 - .../eatssu/domain/review/entity/Reviews.java | 84 +-- .../presentation/ReviewControllerV2.java | 388 +++++------ .../repository/ReviewMenuLikeRepository.java | 5 +- .../review/service/ReviewServiceV2.java | 622 +++++++++--------- .../domain/slack/entity/SlackChannel.java | 2 +- .../domain/slice/service/SliceService.java | 160 ++--- .../domain/user/dto/MyMealReviewResponse.java | 83 ++- .../domain/user/dto/MyReviewDetail.java | 126 ++-- .../ssu/eatssu/domain/user/dto/Tokens.java | 10 +- .../ssu/eatssu/domain/user/entity/User.java | 10 +- .../user/presentation/UserController.java | 319 +++++---- .../handler/GlobalExceptionHandler.java | 410 ++++++------ .../domain/auth/service/OAuthServiceTest.java | 110 ++-- 24 files changed, 1341 insertions(+), 1347 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java b/src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java index 25a7c25d..5c8a22fc 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java @@ -1,5 +1,5 @@ package ssu.eatssu.domain.auth.entity; public enum OAuthProvider { - EATSSU, KAKAO, APPLE; + EATSSU, KAKAO, APPLE } diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 472a867e..c7f11c5e 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -1,5 +1,6 @@ package ssu.eatssu.domain.auth.infrastructure; +import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -11,8 +12,6 @@ import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.JwtAuthenticationFilter; import ssu.eatssu.domain.auth.security.JwtTokenProvider; import ssu.eatssu.global.handler.JwtAccessDeniedHandler; @@ -22,64 +21,64 @@ @Configuration @RequiredArgsConstructor public class SecurityConfig { - private static final String[] RESOURCE_LIST = { - "/swagger-ui.html", "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**","/oauths/valid/token", "/admin/img/**", "/css/**", "/js/**", - "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" - }; + private static final String[] RESOURCE_LIST = { + "/swagger-ui.html", "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**", "/oauths/valid/token", "/admin/img/**", "/css/**", "/js/**", + "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" + }; - private static final String[] AUTH_WHITELIST = { - "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", - "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics/**", - "/partnerships/**","/v2/reviews/menus/**","/v2/reviews/meals/**","/actuator/**","/error-test/**" - }; + private static final String[] AUTH_WHITELIST = { + "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", + "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics/**", + "/partnerships/**", "/v2/reviews/menus/**", "/v2/reviews/meals/**", "/actuator/**", "/error-test/**" + }; - private static final String[] ADMIN_PAGE_LIST = { - "/admin/**" - }; + private static final String[] ADMIN_PAGE_LIST = { + "/admin/**" + }; - private final JwtTokenProvider jwtTokenProvider; - private final JwtAccessDeniedHandler jwtAccessDeniedHandler; - private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; + private final JwtTokenProvider jwtTokenProvider; + private final JwtAccessDeniedHandler jwtAccessDeniedHandler; + private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; - @Bean - public PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(); - } + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } - @Bean - protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - http - .csrf().disable() - .authorizeHttpRequests(authorize -> authorize - .shouldFilterAllDispatcherTypes(false) - .requestMatchers("/partnerships/*/like").authenticated() - .requestMatchers(AUTH_WHITELIST).permitAll() - .requestMatchers(RESOURCE_LIST).permitAll() - .requestMatchers(ADMIN_PAGE_LIST).hasRole("ADMIN") - .anyRequest().authenticated() - .and().addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), - UsernamePasswordAuthenticationFilter.class)) - .exceptionHandling() - .accessDeniedHandler(jwtAccessDeniedHandler) - .authenticationEntryPoint(jwtAuthenticationEntryPoint); + @Bean + protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http + .csrf().disable() + .authorizeHttpRequests(authorize -> authorize + .shouldFilterAllDispatcherTypes(false) + .requestMatchers("/partnerships/*/like").authenticated() + .requestMatchers(AUTH_WHITELIST).permitAll() + .requestMatchers(RESOURCE_LIST).permitAll() + .requestMatchers(ADMIN_PAGE_LIST).hasRole("ADMIN") + .anyRequest().authenticated() + .and().addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), + UsernamePasswordAuthenticationFilter.class)) + .exceptionHandling() + .accessDeniedHandler(jwtAccessDeniedHandler) + .authenticationEntryPoint(jwtAuthenticationEntryPoint); - http - .cors().configurationSource(corsConfigurationSource()); - return http.build(); - } + http + .cors().configurationSource(corsConfigurationSource()); + return http.build(); + } - @Bean - public CorsConfigurationSource corsConfigurationSource() { - CorsConfiguration configuration = new CorsConfiguration(); + @Bean + public CorsConfigurationSource corsConfigurationSource() { + CorsConfiguration configuration = new CorsConfiguration(); - configuration.addAllowedOriginPattern("*"); - configuration.addAllowedHeader("*"); - configuration.addAllowedMethod("*"); - configuration.setAllowCredentials(true); + configuration.addAllowedOriginPattern("*"); + configuration.addAllowedHeader("*"); + configuration.addAllowedMethod("*"); + configuration.setAllowCredentials(true); - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - source.registerCorsConfiguration("/**", configuration); - return source; - } + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", configuration); + return source; + } } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java b/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java index 34e04b1e..4156adfb 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java @@ -1,5 +1,5 @@ package ssu.eatssu.domain.inquiry.entity; public enum InquiryStatus { - WAITING, ANSWERED, HOLD; + WAITING, ANSWERED, HOLD } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index c1e36486..6519126e 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -46,7 +46,7 @@ public class Meal { private Integer price; @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL, fetch = FetchType.LAZY) - private List mealMenus = new ArrayList<>(); + private final List mealMenus = new ArrayList<>(); public Meal(Date date, TimePart timePart, Restaurant restaurant) { this.date = date; diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index a015b2b5..8a1425d2 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -42,10 +42,10 @@ public class Menu { // TODO : 삭제되어야 함 @Embedded - private Reviews reviews = new Reviews(); + private final Reviews reviews = new Reviews(); @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) - private List mealMenus = new ArrayList<>(); + private final List mealMenus = new ArrayList<>(); @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "menu_category_id") diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java index e39bca62..744ac1cf 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java @@ -5,7 +5,7 @@ public class RatingCountMap { - private Map ratingCountMap; + private final Map ratingCountMap; public RatingCountMap() { this.ratingCountMap = new HashMap<>(); diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java index 387d2427..db545667 100644 --- a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java @@ -7,10 +7,10 @@ @Schema(title = "리뷰 신고 사유") public class ReportTypeInformation { @Schema(description = "신고 사유 타입") - private String type; + private final String type; @Schema(description = "신고 사유 설명") - private String description; + private final String description; public ReportTypeInformation(String type, String description) { this.type = type; diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java index 11653c59..0fdf0e52 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java @@ -1,10 +1,5 @@ package ssu.eatssu.domain.review.dto; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; @@ -12,72 +7,77 @@ import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewMenuLike; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + @AllArgsConstructor @Builder @Schema(title = "리뷰 상세") @Getter public class MealReviewResponse { - @Schema(description = "리뷰 식별자", example = "123") - Long reviewId; - - @Schema(description = "작성자 식별자", example = "123") - Long writerId; - - @Schema(description = "본인 글인지 여부(true/false)", example = "true") - Boolean isWriter; - - @Schema(description = "작성자 닉네임", example = "숭시리시리") - private String writerNickname; - - @Schema(description = "평점", example = "4") - private Integer rating; - - @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") - private LocalDate writtenAt; - - @Schema(description = "리뷰 내용", example = "맛있습니당") - private String content; - - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imageUrls; - - @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") - private List likedMenuNames; - - public static MealReviewResponse from(Review review, Long userId) { - List imageUrls = new ArrayList<>(); - review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); - - List likedMenuNames = review.getMenuLikes().stream() - .filter(ReviewMenuLike::getIsLike) - .map(like -> like.getMenu().getName()) - .collect(Collectors.toList()); - - MealReviewResponseBuilder builder = MealReviewResponse.builder() - .reviewId(review.getId()) - .rating(review.getRating()) - .writtenAt(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .imageUrls(imageUrls) - .likedMenuNames(likedMenuNames); - - if (review.getUser() == null) { - return builder.writerId(null) - .writerNickname("알 수 없음") - .isWriter(false) - .build(); - } - - if (review.getUser().getId().equals(userId)) { - return builder.writerId(review.getUser().getId()) - .writerNickname(review.getUser().getNickname()) - .isWriter(true) - .build(); - } - - return builder.writerId(review.getUser().getId()) - .writerNickname(review.getUser().getNickname()) - .isWriter(false) - .build(); - } + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; + + @Schema(description = "작성자 식별자", example = "123") + Long writerId; + + @Schema(description = "본인 글인지 여부(true/false)", example = "true") + Boolean isWriter; + + @Schema(description = "작성자 닉네임", example = "숭시리시리") + private String writerNickname; + + @Schema(description = "평점", example = "4") + private Integer rating; + + @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") + private LocalDate writtenAt; + + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; + + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; + + @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") + private List likedMenuNames; + + public static MealReviewResponse from(Review review, Long userId) { + List imageUrls = new ArrayList<>(); + review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); + + List likedMenuNames = review.getMenuLikes().stream() + .filter(ReviewMenuLike::getIsLike) + .map(like -> like.getMenu().getName()) + .collect(Collectors.toList()); + + MealReviewResponseBuilder builder = MealReviewResponse.builder() + .reviewId(review.getId()) + .rating(review.getRating()) + .writtenAt(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imageUrls(imageUrls) + .likedMenuNames(likedMenuNames); + + if (review.getUser() == null) { + return builder.writerId(null) + .writerNickname("알 수 없음") + .isWriter(false) + .build(); + } + + if (review.getUser().getId().equals(userId)) { + return builder.writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(true) + .build(); + } + + return builder.writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(false) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java index d6af85a8..93007cae 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java @@ -1,12 +1,9 @@ package ssu.eatssu.domain.review.dto; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @Schema(title = "메뉴 리뷰 정보V2(평점 등등)") @@ -14,34 +11,37 @@ @AllArgsConstructor @Builder public class MenuReviewsV2Response implements ReviewInformationResponse { - @Schema(description = "메뉴명", example = "고구마 치즈 돈까스") - private String menuName; - - @Schema(description = "리뷰 개수", example = "15") - private Long totalReviewCount; - - @Schema(description = "평점-메인", example = "4.4") - private Double mainRating; - - @Schema(description = "좋아요 개수", example = "4.4") - private Integer likeCount; - - @Schema(description = "싫어요 개수", example = "4.4") - private Integer unlikeCount; - - @Schema(description = "평점 별 갯수") - private ReviewRatingCount reviewRatingCount; - - public static MenuReviewsV2Response of(Long totalReviewCount, String menuName, - RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount,Menu menu) { - - return MenuReviewsV2Response.builder() - .menuName(menuName) - .mainRating(ratingAverages.mainRating()) - .likeCount(menu.getLikeCount()) - .unlikeCount(menu.getUnlikeCount()) - .totalReviewCount(totalReviewCount) - .reviewRatingCount(reviewRatingCount) - .build(); - } + @Schema(description = "메뉴명", example = "고구마 치즈 돈까스") + private String menuName; + + @Schema(description = "리뷰 개수", example = "15") + private Long totalReviewCount; + + @Schema(description = "평점-메인", example = "4.4") + private Double mainRating; + + @Schema(description = "좋아요 개수", example = "4.4") + private Integer likeCount; + + @Schema(description = "싫어요 개수", example = "4.4") + private Integer unlikeCount; + + @Schema(description = "평점 별 갯수") + private ReviewRatingCount reviewRatingCount; + + public static MenuReviewsV2Response of(Long totalReviewCount, + String menuName, + RatingAverages ratingAverages, + ReviewRatingCount reviewRatingCount, + Menu menu) { + + return MenuReviewsV2Response.builder() + .menuName(menuName) + .mainRating(ratingAverages.mainRating()) + .likeCount(menu.getLikeCount()) + .unlikeCount(menu.getUnlikeCount()) + .totalReviewCount(totalReviewCount) + .reviewRatingCount(reviewRatingCount) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java index 5d7638bc..facbdead 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java @@ -1,31 +1,32 @@ package ssu.eatssu.domain.review.dto; +import ssu.eatssu.domain.review.entity.Review; + import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import ssu.eatssu.domain.review.entity.Review; - //COMMENT: 더 좋은 매개변수 명이 있을 것 같은데 제 머리로는 이게 한계입니다... 멋진 변수명으로 바꿔주세요 public record ReviewRatingCount(long oneStarCount, long twoStarCount, long threeStarCount, long fourStarCount, - long fiveStarCount) { + long fiveStarCount) { - public ReviewRatingCount { - } + public ReviewRatingCount { + } - public static ReviewRatingCount from(List reviews) { - Map ratingDistribution = reviews.stream() - .filter(r -> r.getRating() != null) - .collect(Collectors.groupingBy(Review::getRating, LinkedHashMap::new, - Collectors.counting())); + public static ReviewRatingCount from(List reviews) { + Map ratingDistribution = reviews.stream() + .filter(r -> r.getRating() != null) + .collect(Collectors.groupingBy(Review::getRating, + LinkedHashMap::new, + Collectors.counting())); - return new ReviewRatingCount( - ratingDistribution.getOrDefault(1, 0L), - ratingDistribution.getOrDefault(2, 0L), - ratingDistribution.getOrDefault(3, 0L), - ratingDistribution.getOrDefault(4, 0L), - ratingDistribution.getOrDefault(5, 0L) - ); - } + return new ReviewRatingCount( + ratingDistribution.getOrDefault(1, 0L), + ratingDistribution.getOrDefault(2, 0L), + ratingDistribution.getOrDefault(3, 0L), + ratingDistribution.getOrDefault(4, 0L), + ratingDistribution.getOrDefault(5, 0L) + ); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index f1c31683..bd07c3f5 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -40,7 +40,6 @@ public class Review extends BaseTimeEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "review_id") private Long id; - @Column(length = 300) private String content; diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java index 4597c350..183d663c 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java @@ -1,8 +1,5 @@ package ssu.eatssu.domain.review.entity; -import java.util.ArrayList; -import java.util.List; - import jakarta.persistence.CascadeType; import jakarta.persistence.Embeddable; import jakarta.persistence.OneToMany; @@ -11,50 +8,53 @@ import lombok.NoArgsConstructor; import ssu.eatssu.domain.rating.entity.ReviewRating; +import java.util.ArrayList; +import java.util.List; + @Getter @NoArgsConstructor(access = AccessLevel.PUBLIC) @Embeddable public class Reviews { - @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) - private List reviews = new ArrayList<>(); - - public void add(Review review) { - reviews.add(review); - } - - public int size() { - return reviews.size(); - } - - public void calculateReviewRatings() { - this.reviews.forEach(review -> { - if (review.getRatings() != null) { - int rateValue = review.getRatings().getMainRating(); - ReviewRating.fromValue(rateValue).incrementCount(); - } - }); - } - - public int getTotalMainRating() { - return this.reviews.stream() - .filter(review -> review.getRatings() != null) - .mapToInt(review-> review.getRatings().getMainRating()) - .sum(); - } - - public int getTotalAmountRating() { - return this.reviews.stream() - .filter(review -> review.getRatings() != null) - .mapToInt(review -> review.getRatings().getAmountRating()) - .sum(); - } - - public int getTotalTasteRating() { - return this.reviews.stream() - .filter(review -> review.getRatings() != null) - .mapToInt(review -> review.getRatings().getTasteRating()).sum(); - } + @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) + private List reviews = new ArrayList<>(); + + public void add(Review review) { + reviews.add(review); + } + + public int size() { + return reviews.size(); + } + + public void calculateReviewRatings() { + this.reviews.forEach(review -> { + if (review.getRatings() != null) { + int rateValue = review.getRatings().getMainRating(); + ReviewRating.fromValue(rateValue).incrementCount(); + } + }); + } + + public int getTotalMainRating() { + return this.reviews.stream() + .filter(review -> review.getRatings() != null) + .mapToInt(review -> review.getRatings().getMainRating()) + .sum(); + } + + public int getTotalAmountRating() { + return this.reviews.stream() + .filter(review -> review.getRatings() != null) + .mapToInt(review -> review.getRatings().getAmountRating()) + .sum(); + } + + public int getTotalTasteRating() { + return this.reviews.stream() + .filter(review -> review.getRatings() != null) + .mapToInt(review -> review.getRatings().getTasteRating()).sum(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java index 4ee7f728..2a545235 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java @@ -1,5 +1,14 @@ package ssu.eatssu.domain.review.presentation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -15,30 +24,18 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.enums.ParameterIn; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; -import ssu.eatssu.domain.menu.entity.constants.MenuType; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; import ssu.eatssu.domain.review.dto.MealReviewResponse; import ssu.eatssu.domain.review.dto.MealReviewsV2Response; -import ssu.eatssu.domain.review.dto.MenuReviewResponse; import ssu.eatssu.domain.review.dto.MenuReviewsV2Response; import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; import ssu.eatssu.domain.review.dto.ReviewDetail; import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; import ssu.eatssu.domain.review.dto.UploadReviewRequest; -import ssu.eatssu.domain.review.service.ReviewServiceV2; import ssu.eatssu.domain.review.service.ReviewService; +import ssu.eatssu.domain.review.service.ReviewServiceV2; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.domain.slice.service.SliceService; import ssu.eatssu.domain.user.dto.MyMealReviewResponse; @@ -49,187 +46,190 @@ @RequestMapping("/v2/reviews") @Tag(name = "Review V2", description = "리뷰 V2 API") public class ReviewControllerV2 { - private final ReviewServiceV2 reviewServiceV2; - private final ReviewService reviewService; - private final SliceService sliceService; - - @Operation(summary = "meal(식단)에 대한 리뷰 작성", description = "리뷰를 작성하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - }) - @PostMapping("/meal") - public BaseResponse createMealReview( - @RequestBody CreateMealReviewRequest createMealReviewRequest, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewServiceV2.createReview(customUserDetails, createMealReviewRequest); - return BaseResponse.success(); - } - - @Operation(summary = "특정 식당 모든 리뷰 정보 조회(리뷰 개수, 평점 등등)", description = """ - 특정 식당 모든 리뷰 정보를 조회하는 API 입니다.

- 리뷰 개수, 별점 별 개수, 리뷰 평점, 좋아요 개수, 싫어요 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "path parameter 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/statistics/restaurant") - public BaseResponse getRestaurantReviews( - @Parameter(description = "restaurant") - @RequestParam Restaurant restaurant - ) { - return BaseResponse.success(reviewServiceV2.findRestaurantReviews(restaurant)); - } - - @Operation(summary = "meal(식단)에 대한 리뷰 리스트 조회", description = """ - 리뷰 리스트를 조회하는 API 입니다.

- 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

- 페이징 기본 값 = {size=20, sort=date, direction=desc}

- """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/list/meal") - public BaseResponse> getMealReviewList( - @Parameter(description = "mealId") - @RequestParam Long mealId, - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) - @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - Pageable pageable = PageRequest.of(0, 20, Sort.by(Sort.Direction.DESC, "id")); - SliceResponse myReviews = reviewServiceV2.findMealReviewList(mealId, lastReviewId, pageable, - customUserDetails); - return BaseResponse.success(myReviews); - } - - @Operation(summary = "리뷰 수정(글 수정)", description = """ - 리뷰 내용을 수정하는 API 입니다.

- 글 수정만 가능하며 사진 수정은 지원하지 않습니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 수정 성공"), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @PatchMapping("/{reviewId}") - public BaseResponse updateReview(@Parameter(description = "reviewId") - @PathVariable("reviewId") Long reviewId, - @RequestBody UpdateMealReviewRequest request, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewServiceV2.updateReview(customUserDetails, reviewId, request); - return BaseResponse.success(); - } - - @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공"), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("/{reviewId}") - public BaseResponse deleteReview( - @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewServiceV2.deleteReview(customUserDetails, reviewId); - return BaseResponse.success(); - } - - @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회 V2(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ - 식단 리뷰 정보를 조회하는 API 입니다.

- 메뉴명 리스트, 리뷰 수, 메인 평점, 좋아요 개수, 싫어요 개수, 각 평점의 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/statistics/meals/{mealId}") - public BaseResponse getMealReviews( - @Parameter(description = "mealId") - @PathVariable(value = "mealId") Long mealId) { - return BaseResponse.success(reviewServiceV2.findMealReviews(mealId)); - } - - @Operation(summary = "고정 메뉴 리뷰 정보 조회 V2(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ - 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

- 메뉴명, 리뷰 수, 메인 평점, 좋아요 개수, 싫어요 개수, 각 평점의 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/statistics/menus/{menuId}") - public BaseResponse getMainReviews( - @Parameter(description = "menuId") - @PathVariable(value = "menuId") Long menuId) { - return BaseResponse.success(reviewServiceV2.findMenuReviews(menuId)); - } - - @Operation(summary = "menu 에 대한 리뷰 리스트 조회", description = """ - 리뷰 리스트를 조회하는 API 입니다.

- 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

- 페이징 기본 값 = {size=20, sort=date, direction=desc}

- """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/list/menu") - public BaseResponse> getMenuReviewList( - @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId") Long menuId, - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) - @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = reviewServiceV2.findMenuReviewList(menuId, pageable, lastReviewId, customUserDetails); - - return BaseResponse.success(myReviews); - } - - @Operation(summary = "menu에 대한 리뷰 작성", description = "리뷰를 작성하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - }) - @PostMapping("/menu/{menuId}") - public BaseResponse createMenuReview(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, - @RequestBody UploadReviewRequest uploadReviewRequest, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewService.uploadReview(customUserDetails, menuId, uploadReviewRequest); - return BaseResponse.success(); - } - - @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API V2 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/my") - public BaseResponse> getMyReviews( - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = reviewServiceV2.findMyReviews(customUserDetails, - lastReviewId, - pageable); - return BaseResponse.success(myReviews); - } + private final ReviewServiceV2 reviewServiceV2; + private final ReviewService reviewService; + private final SliceService sliceService; + + @Operation(summary = "meal(식단)에 대한 리뷰 작성", description = "리뷰를 작성하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + @PostMapping("/meal") + public BaseResponse createMealReview( + @RequestBody CreateMealReviewRequest createMealReviewRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewServiceV2.createReview(customUserDetails, createMealReviewRequest); + return BaseResponse.success(); + } + + @Operation(summary = "특정 식당 모든 리뷰 정보 조회(리뷰 개수, 평점 등등)", description = """ + 특정 식당 모든 리뷰 정보를 조회하는 API 입니다.

+ 리뷰 개수, 별점 별 개수, 리뷰 평점, 좋아요 개수, 싫어요 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "path parameter 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/statistics/restaurant") + public BaseResponse getRestaurantReviews( + @Parameter(description = "restaurant") + @RequestParam Restaurant restaurant + ) { + return BaseResponse.success(reviewServiceV2.findRestaurantReviews(restaurant)); + } + + @Operation(summary = "meal(식단)에 대한 리뷰 리스트 조회", description = """ + 리뷰 리스트를 조회하는 API 입니다.

+ 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

+ 페이징 기본 값 = {size=20, sort=date, direction=desc}

+ """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/list/meal") + public BaseResponse> getMealReviewList( + @Parameter(description = "mealId") + @RequestParam Long mealId, + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) + @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + Pageable pageable = PageRequest.of(0, 20, Sort.by(Sort.Direction.DESC, "id")); + SliceResponse myReviews = reviewServiceV2.findMealReviewList(mealId, lastReviewId, pageable, + customUserDetails); + return BaseResponse.success(myReviews); + } + + @Operation(summary = "리뷰 수정(글 수정)", description = """ + 리뷰 내용을 수정하는 API 입니다.

+ 글 수정만 가능하며 사진 수정은 지원하지 않습니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 수정 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @PatchMapping("/{reviewId}") + public BaseResponse updateReview(@Parameter(description = "reviewId") + @PathVariable("reviewId") Long reviewId, + @RequestBody UpdateMealReviewRequest request, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewServiceV2.updateReview(customUserDetails, reviewId, request); + return BaseResponse.success(); + } + + @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("/{reviewId}") + public BaseResponse deleteReview( + @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewServiceV2.deleteReview(customUserDetails, reviewId); + return BaseResponse.success(); + } + + @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회 V2(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ + 식단 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명 리스트, 리뷰 수, 메인 평점, 좋아요 개수, 싫어요 개수, 각 평점의 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/statistics/meals/{mealId}") + public BaseResponse getMealReviews( + @Parameter(description = "mealId") + @PathVariable(value = "mealId") Long mealId) { + return BaseResponse.success(reviewServiceV2.findMealReviews(mealId)); + } + + @Operation(summary = "고정 메뉴 리뷰 정보 조회 V2(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ + 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명, 리뷰 수, 메인 평점, 좋아요 개수, 싫어요 개수, 각 평점의 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/statistics/menus/{menuId}") + public BaseResponse getMainReviews( + @Parameter(description = "menuId") + @PathVariable(value = "menuId") Long menuId) { + return BaseResponse.success(reviewServiceV2.findMenuReviews(menuId)); + } + + @Operation(summary = "menu 에 대한 리뷰 리스트 조회", description = """ + 리뷰 리스트를 조회하는 API 입니다.

+ 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

+ 페이징 기본 값 = {size=20, sort=date, direction=desc}

+ """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/list/menu") + public BaseResponse> getMenuReviewList( + @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId") Long menuId, + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) + @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = reviewServiceV2.findMenuReviewList(menuId, + pageable, + lastReviewId, + customUserDetails); + + return BaseResponse.success(myReviews); + } + + @Operation(summary = "menu에 대한 리뷰 작성", description = "리뷰를 작성하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + @PostMapping("/menu/{menuId}") + public BaseResponse createMenuReview(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, + @RequestBody UploadReviewRequest uploadReviewRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewService.uploadReview(customUserDetails, menuId, uploadReviewRequest); + return BaseResponse.success(); + } + + @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API V2 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/my") + public BaseResponse> getMyReviews( + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = reviewServiceV2.findMyReviews(customUserDetails, + lastReviewId, + pageable); + return BaseResponse.success(myReviews); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java index bfb084cb..28a98bb7 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java @@ -1,12 +1,11 @@ package ssu.eatssu.domain.review.repository; -import java.util.List; - import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewMenuLike; +import java.util.List; + public interface ReviewMenuLikeRepository extends JpaRepository { List findByReview(Review review); } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 324d2007..7278d158 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -1,25 +1,14 @@ package ssu.eatssu.domain.review.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; - +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; -import ssu.eatssu.domain.menu.entity.constants.MenuType; import ssu.eatssu.domain.menu.persistence.MealMenuRepository; import ssu.eatssu.domain.menu.persistence.MealRepository; import ssu.eatssu.domain.menu.persistence.MenuRepository; @@ -34,7 +23,6 @@ import ssu.eatssu.domain.review.dto.ReviewRatingCount; import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.review.entity.ReviewLike; import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.domain.user.dto.MyMealReviewResponse; @@ -42,306 +30,320 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MEAL; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; + @RequiredArgsConstructor @Service public class ReviewServiceV2 { - private final UserRepository userRepository; - private final ReviewRepository reviewRepository; - private final MenuRepository menuRepository; - private final MealRepository mealRepository; - private final MealMenuRepository mealMenuRepository; - - /** - * 리뷰 생성 - */ - @Transactional - public void createReview(CustomUserDetails userDetails, CreateMealReviewRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Meal meal = mealRepository.findById(request.getMealId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); - - Review review = request.toReviewEntity(user, meal); - - request.getImageUrls().forEach(review::addReviewImage); - - for (MenuLikeRequest menuLike : request.getMenuLikes()) { - Menu menu = menuRepository.findById(menuLike.getMenuId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - review.addReviewMenuLike(menu, menuLike.getIsLike()); - } - - reviewRepository.save(review); - } - - /** - * 특정 식당 리뷰 조회 - */ - public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { - List meals = mealRepository.findByRestaurant(restaurant); - List reviews = reviewRepository.findByMealIn(meals); - List menus = mealMenuRepository.findMenusByMeals(meals); - - Double averageRating = Optional.ofNullable(reviews) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Review::getRating) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .average() - .orElse(0.0); - - Integer likeCount = Optional.ofNullable(menus) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Menu::getLikeCount) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .sum(); - - - Integer unlikeCount = Optional.ofNullable(menus) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Menu::getUnlikeCount) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .sum(); - - ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); - - return RestaurantReviewResponse.builder() - .totalReviewCount(reviews.size()) - .reviewRatingCount(reviewRatingCount) - .mainRating(Math.round(averageRating * 10) / 10.0) - .likeCount(likeCount) - .unlikeCount(unlikeCount) - .build(); - } - - /** - * 특정 식단 리뷰 리스트 조회 - */ - public SliceResponse findMealReviewList(Long mealId, Long lastReviewId, Pageable pageable, - CustomUserDetails userDetails) { - if (!mealRepository.existsById(mealId)) { - throw new BaseException(NOT_FOUND_MEAL); - } - - List menuIds = mealMenuRepository.findMenuIdsByMealId(mealId); - if (menuIds.isEmpty()) { - return SliceResponse.empty(); - } - - List mealIds = mealMenuRepository.findMealIdsByMenuIds(menuIds); - if (mealIds.isEmpty()) { - return SliceResponse.empty(); - } - - Page pageReviews = reviewRepository.findReviewsByMealIds(mealIds, lastReviewId, pageable); - - Long userId = (userDetails != null) ? userDetails.getId() : null; - List mealReviewResponses = - pageReviews.getContent().stream().map(review -> MealReviewResponse.from(review, - userId)).collect(Collectors.toList()); - - return SliceResponse.builder() - .numberOfElements(pageReviews.getNumberOfElements()) - .hasNext(pageReviews.hasNext()) - .dataList(mealReviewResponses) - .build(); - } - - /** - * 특정 메뉴 리뷰 리스트 조회 - */ - - public SliceResponse findMenuReviewList(Long menuId, - Pageable pageable, - Long lastReviewId, - CustomUserDetails userDetails) { - Slice sliceReviews = null; - Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - sliceReviews = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, - pageable); - - Long userId = (userDetails != null) ? userDetails.getId() : null; - return convertToReviewDetail(sliceReviews, userId); - } - - private SliceResponse convertToReviewDetail(Slice sliceReviews, - Long userId) { - List reviewDetails = sliceReviews.getContent().stream() - .map(review -> ReviewDetail.from(review, userId)) - .collect(Collectors.toList()); - - return SliceResponse.builder() - .numberOfElements(sliceReviews.getNumberOfElements()) - .hasNext(sliceReviews.hasNext()) - .dataList(reviewDetails) - .build(); - } - - - - - /** - * 특정 Menu 리뷰 조회 - */ - public MenuReviewsV2Response findMenuReviews(Long menuId) { - Menu menu = menuRepository.findById(menuId).orElseThrow(()-> new BaseException(NOT_FOUND_MENU)); - List reviews = reviewRepository.findAllByMenu(menu); - - double averageRating = Optional.ofNullable(reviews) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Review::getRating) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .average() - .orElse(0.0); - - Integer likeCount = menu.getLikeCount(); - Integer unlikeCount = menu.getUnlikeCount(); - - ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); - - return MenuReviewsV2Response - .builder() - .menuName(menu.getName()) - .totalReviewCount((long)reviews.size()) - .reviewRatingCount(reviewRatingCount) - .mainRating(Math.round(averageRating * 10) / 10.0) - .likeCount(likeCount!=null?likeCount:0) - .unlikeCount(unlikeCount!=null?unlikeCount:0) - .build(); - } - - /** - * 특정 Meal 리뷰 조회 - */ - public MealReviewsV2Response findMealReviews(Long mealId) { - Meal meal = mealRepository.findById(mealId).orElseThrow(()-> new BaseException(NOT_FOUND_MEAL)); - List reviews = reviewRepository.findAllByMeal(meal); - List menus = mealMenuRepository.findMenusByMeal(meal); - - Double averageRating = Optional.ofNullable(reviews) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Review::getRating) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .average() - .orElse(0.0); - - Integer likeCount = Optional.ofNullable(menus) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Menu::getLikeCount) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .sum(); - - - Integer unlikeCount = Optional.ofNullable(menus) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Menu::getUnlikeCount) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .sum(); - - ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); - - return MealReviewsV2Response - .builder() - .menuNames( menus.stream() - .filter(Objects::nonNull) - .map(Menu::getName) - .filter(Objects::nonNull) - .collect(Collectors.toList())) - .totalReviewCount((long)reviews.size()) - .reviewRatingCount(reviewRatingCount) - .mainRating(Math.round(averageRating * 10) / 10.0) - .likeCount(likeCount) - .unlikeCount(unlikeCount) - .build(); - } - - /** - * 리뷰 수정 - */ - @Transactional - public void updateReview(CustomUserDetails userDetails, Long reviewId, UpdateMealReviewRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - if (review.isNotWrittenBy(user)) { - throw new BaseException(REVIEW_PERMISSION_DENIED); - } - - Map menuLikes = request.getMenuLikes().stream() - .collect(Collectors.toMap( - menuLike -> menuRepository.findById(menuLike.getMenuId()) - .orElseThrow(() -> new BaseException( - NOT_FOUND_MENU)), - MenuLikeRequest::getIsLike)); - - review.update(request.getContent(), request.getRating(), menuLikes); - reviewRepository.save(review); - } - - /** - * 리뷰 삭제 - */ - @Transactional - public void deleteReview(CustomUserDetails userDetails, Long reviewId) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - if (review.isNotWrittenBy(user)) { - throw new BaseException(REVIEW_PERMISSION_DENIED); - } - - review.resetMenuLikes(); - reviewRepository.delete(review); - } - - /** - * 내 리뷰 리스트 조회 - */ - public SliceResponse findMyReviews(CustomUserDetails userDetails, Long lastReviewId, - Pageable pageable) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, - pageable); - - List myMealReviewResponses = sliceReviews.getContent().stream() - .map(MyMealReviewResponse::from).toList(); - - return SliceResponse.builder() - .numberOfElements(sliceReviews.getNumberOfElements()) - .hasNext(sliceReviews.hasNext()) - .dataList(myMealReviewResponses) - .build(); - } + private final UserRepository userRepository; + private final ReviewRepository reviewRepository; + private final MenuRepository menuRepository; + private final MealRepository mealRepository; + private final MealMenuRepository mealMenuRepository; + + /** + * 리뷰 생성 + */ + @Transactional + public void createReview(CustomUserDetails userDetails, CreateMealReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Meal meal = mealRepository.findById(request.getMealId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + + Review review = request.toReviewEntity(user, meal); + + request.getImageUrls().forEach(review::addReviewImage); + + for (MenuLikeRequest menuLike : request.getMenuLikes()) { + Menu menu = menuRepository.findById(menuLike.getMenuId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + review.addReviewMenuLike(menu, menuLike.getIsLike()); + } + + reviewRepository.save(review); + } + + /** + * 특정 식당 리뷰 조회 + */ + public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { + List meals = mealRepository.findByRestaurant(restaurant); + List reviews = reviewRepository.findByMealIn(meals); + List menus = mealMenuRepository.findMenusByMeals(meals); + + Double averageRating = Optional.ofNullable(reviews) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Review::getRating) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + + Integer likeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getLikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + + Integer unlikeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getUnlikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); + + return RestaurantReviewResponse.builder() + .totalReviewCount(reviews.size()) + .reviewRatingCount(reviewRatingCount) + .mainRating(Math.round(averageRating * 10) / 10.0) + .likeCount(likeCount) + .unlikeCount(unlikeCount) + .build(); + } + + /** + * 특정 식단 리뷰 리스트 조회 + */ + public SliceResponse findMealReviewList(Long mealId, Long lastReviewId, Pageable pageable, + CustomUserDetails userDetails) { + if (!mealRepository.existsById(mealId)) { + throw new BaseException(NOT_FOUND_MEAL); + } + + List menuIds = mealMenuRepository.findMenuIdsByMealId(mealId); + if (menuIds.isEmpty()) { + return SliceResponse.empty(); + } + + List mealIds = mealMenuRepository.findMealIdsByMenuIds(menuIds); + if (mealIds.isEmpty()) { + return SliceResponse.empty(); + } + + Page pageReviews = reviewRepository.findReviewsByMealIds(mealIds, lastReviewId, pageable); + + Long userId = (userDetails != null) ? userDetails.getId() : null; + List mealReviewResponses = + pageReviews.getContent() + .stream() + .map(review -> MealReviewResponse.from(review, + userId)) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(pageReviews.getNumberOfElements()) + .hasNext(pageReviews.hasNext()) + .dataList(mealReviewResponses) + .build(); + } + + /** + * 특정 메뉴 리뷰 리스트 조회 + */ + + public SliceResponse findMenuReviewList(Long menuId, + Pageable pageable, + Long lastReviewId, + CustomUserDetails userDetails) { + Slice sliceReviews = null; + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + sliceReviews = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, + pageable); + + Long userId = (userDetails != null) ? userDetails.getId() : null; + return convertToReviewDetail(sliceReviews, userId); + } + + private SliceResponse convertToReviewDetail(Slice sliceReviews, + Long userId) { + List reviewDetails = sliceReviews.getContent().stream() + .map(review -> ReviewDetail.from(review, userId)) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(reviewDetails) + .build(); + } + + + /** + * 특정 Menu 리뷰 조회 + */ + public MenuReviewsV2Response findMenuReviews(Long menuId) { + Menu menu = menuRepository.findById(menuId).orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + List reviews = reviewRepository.findAllByMenu(menu); + + double averageRating = Optional.ofNullable(reviews) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Review::getRating) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + + Integer likeCount = menu.getLikeCount(); + Integer unlikeCount = menu.getUnlikeCount(); + + ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); + + return MenuReviewsV2Response + .builder() + .menuName(menu.getName()) + .totalReviewCount((long) reviews.size()) + .reviewRatingCount(reviewRatingCount) + .mainRating(Math.round(averageRating * 10) / 10.0) + .likeCount(likeCount != null ? likeCount : 0) + .unlikeCount(unlikeCount != null ? unlikeCount : 0) + .build(); + } + + /** + * 특정 Meal 리뷰 조회 + */ + public MealReviewsV2Response findMealReviews(Long mealId) { + Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + List reviews = reviewRepository.findAllByMeal(meal); + List menus = mealMenuRepository.findMenusByMeal(meal); + + Double averageRating = Optional.ofNullable(reviews) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Review::getRating) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + + Integer likeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getLikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + + Integer unlikeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getUnlikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); + + return MealReviewsV2Response + .builder() + .menuNames(menus.stream() + .filter(Objects::nonNull) + .map(Menu::getName) + .filter(Objects::nonNull) + .collect(Collectors.toList())) + .totalReviewCount((long) reviews.size()) + .reviewRatingCount(reviewRatingCount) + .mainRating(Math.round(averageRating * 10) / 10.0) + .likeCount(likeCount) + .unlikeCount(unlikeCount) + .build(); + } + + /** + * 리뷰 수정 + */ + @Transactional + public void updateReview(CustomUserDetails userDetails, Long reviewId, UpdateMealReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (review.isNotWrittenBy(user)) { + throw new BaseException(REVIEW_PERMISSION_DENIED); + } + + Map menuLikes = request.getMenuLikes().stream() + .collect(Collectors.toMap( + menuLike -> menuRepository.findById(menuLike.getMenuId()) + .orElseThrow(() -> new BaseException( + NOT_FOUND_MENU)), + MenuLikeRequest::getIsLike)); + + review.update(request.getContent(), request.getRating(), menuLikes); + reviewRepository.save(review); + } + + /** + * 리뷰 삭제 + */ + @Transactional + public void deleteReview(CustomUserDetails userDetails, Long reviewId) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (review.isNotWrittenBy(user)) { + throw new BaseException(REVIEW_PERMISSION_DENIED); + } + + review.resetMenuLikes(); + reviewRepository.delete(review); + } + + /** + * 내 리뷰 리스트 조회 + */ + public SliceResponse findMyReviews(CustomUserDetails userDetails, Long lastReviewId, + Pageable pageable) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, + pageable); + + List myMealReviewResponses = sliceReviews.getContent().stream() + .map(MyMealReviewResponse::from).toList(); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(myMealReviewResponses) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java index d671170e..d9b142dc 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java @@ -11,7 +11,7 @@ public enum SlackChannel { SERVER_ERROR("C092J4J6F0U"); @Getter - private String krName; + private final String krName; SlackChannel(String krName) { this.krName = krName; diff --git a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java index 071ee2e4..bc4bd390 100644 --- a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java +++ b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java @@ -1,17 +1,9 @@ package ssu.eatssu.domain.slice.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; - +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -27,80 +19,88 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; + @Service @RequiredArgsConstructor public class SliceService { - private final UserRepository userRepository; - private final ReviewRepository reviewRepository; - private final MenuRepository menuRepository; - private final MealRepository mealRepository; - - public SliceResponse findMyReviews( - CustomUserDetails userDetails, - Pageable pageable, - Long lastReviewId) { - - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, - pageable); - - return convertToMyReviewDetail(sliceReviews); - } - - public SliceResponse findReviews(MenuType menuType, - Long menuId, - Long mealId, - Pageable pageable, - Long lastReviewId, - CustomUserDetails userDetails) { - Slice sliceReviews = null; - if (menuType == MenuType.FIXED) { - Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - sliceReviews = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, - pageable); - } - - if (menuType == MenuType.VARIABLE) { - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - sliceReviews = reviewRepository.findAllByMealOrderByIdDesc(meal, lastReviewId, - pageable); - } - - Long userId = (userDetails != null) ? userDetails.getId() : null; - return convertToReviewDetail(sliceReviews, userId); - } - - private SliceResponse convertToReviewDetail(Slice sliceReviews, - Long userId) { - List reviewDetails = sliceReviews.getContent().stream() - .map(review -> ReviewDetail.from(review, userId)) - .collect(Collectors.toList()); - - return SliceResponse.builder() - .numberOfElements(sliceReviews.getNumberOfElements()) - .hasNext(sliceReviews.hasNext()) - .dataList(reviewDetails) - .build(); - } - - private SliceResponse convertToMyReviewDetail(Slice sliceReviews) { - List myReviewDetails = Optional.of(sliceReviews.getContent()) - .orElse(List.of()) - .stream() - .filter(Objects::nonNull) - .map(MyReviewDetail::from) - .collect(Collectors.toList()); - - return SliceResponse.builder() - .numberOfElements(sliceReviews.getNumberOfElements()) - .hasNext(sliceReviews.hasNext()) - .dataList(myReviewDetails) - .build(); - } + private final UserRepository userRepository; + private final ReviewRepository reviewRepository; + private final MenuRepository menuRepository; + private final MealRepository mealRepository; + + public SliceResponse findMyReviews( + CustomUserDetails userDetails, + Pageable pageable, + Long lastReviewId) { + + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, + pageable); + + return convertToMyReviewDetail(sliceReviews); + } + + public SliceResponse findReviews(MenuType menuType, + Long menuId, + Long mealId, + Pageable pageable, + Long lastReviewId, + CustomUserDetails userDetails) { + Slice sliceReviews = null; + if (menuType == MenuType.FIXED) { + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + sliceReviews = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, + pageable); + } + + if (menuType == MenuType.VARIABLE) { + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + sliceReviews = reviewRepository.findAllByMealOrderByIdDesc(meal, lastReviewId, + pageable); + } + + Long userId = (userDetails != null) ? userDetails.getId() : null; + return convertToReviewDetail(sliceReviews, userId); + } + + private SliceResponse convertToReviewDetail(Slice sliceReviews, + Long userId) { + List reviewDetails = sliceReviews.getContent().stream() + .map(review -> ReviewDetail.from(review, userId)) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(reviewDetails) + .build(); + } + + private SliceResponse convertToMyReviewDetail(Slice sliceReviews) { + List myReviewDetails = Optional.of(sliceReviews.getContent()) + .orElse(List.of()) + .stream() + .filter(Objects::nonNull) + .map(MyReviewDetail::from) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(myReviewDetails) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index 7d2d3176..0278e652 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -1,10 +1,5 @@ package ssu.eatssu.domain.user.dto; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; @@ -12,46 +7,50 @@ import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewMenuLike; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + @AllArgsConstructor @Builder @Schema(title = "리뷰 상세 - 내 리뷰 리스트 조회 용") @Getter public class MyMealReviewResponse { - @Schema(description = "리뷰 식별자", example = "123") - Long reviewId; - - @Schema(description = "평점", example = "4") - private Integer rating; - - @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") - private LocalDate writtenAt; - - @Schema(description = "리뷰 내용", example = "맛있습니당") - private String content; - - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imageUrls; - - @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") - private List likedMenuNames; - - public static MyMealReviewResponse from(Review review) { - List imgUrlList = new ArrayList<>(); - review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); - - List likedMenuNames = review.getMenuLikes().stream() - .filter(ReviewMenuLike::getIsLike) - .map(like -> like.getMenu().getName()) - .toList(); - - return MyMealReviewResponse - .builder() - .reviewId(review.getId()) - .rating(review.getRating()) - .writtenAt(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .imageUrls(imgUrlList) - .likedMenuNames(likedMenuNames) - .build(); - } + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; + + @Schema(description = "평점", example = "4") + private Integer rating; + + @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") + private LocalDate writtenAt; + + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; + + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; + + @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") + private List likedMenuNames; + + public static MyMealReviewResponse from(Review review) { + List imgUrlList = new ArrayList<>(); + review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); + + List likedMenuNames = review.getMenuLikes().stream() + .filter(ReviewMenuLike::getIsLike) + .map(like -> like.getMenu().getName()) + .toList(); + + return MyMealReviewResponse + .builder() + .reviewId(review.getId()) + .rating(review.getRating()) + .writtenAt(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imageUrls(imgUrlList) + .likedMenuNames(likedMenuNames) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java index a9387549..e45d05e3 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java @@ -1,9 +1,5 @@ package ssu.eatssu.domain.user.dto; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; @@ -11,70 +7,74 @@ import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.review.entity.Review; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + @AllArgsConstructor @Builder @Schema(title = "리뷰 상세 - 내 리뷰 리스트 조회 용") @Getter public class MyReviewDetail { - @Schema(description = "리뷰 식별자", example = "123") - Long reviewId; - - @Schema(description = "평점-메인", example = "4") - private Integer mainRating; - - @Schema(description = "평점-양", example = "4") - private Integer amountRating; - - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; - - @Schema(description = "리뷰 작성 날짜(format = yyyyMMdd)", example = "20230407") - private LocalDate writeDate; - - @Schema(description = "메뉴 이름", example = "돈까스") - private String menuName; - - @Schema(description = "리뷰 내용", example = "맛있습니당") - private String content; - - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imgUrlList; - - public static MyReviewDetail from(Review review) { - List imgUrlList = new ArrayList<>(); - if (review.getReviewImages() != null) { - review.getReviewImages().forEach(image -> { - if (image != null && image.getImageUrl() != null) { - imgUrlList.add(image.getImageUrl()); - } - }); - } - - Ratings ratings = review.getRatings(); - int mainRating = 0; - int amountRating = 0; - int tasteRating = 0; - - if (ratings != null) { - mainRating = ratings.getMainRating() != null ? ratings.getMainRating() : 0; - amountRating = ratings.getAmountRating() != null ? ratings.getAmountRating() : 0; - tasteRating = ratings.getTasteRating() != null ? ratings.getTasteRating() : 0; - } - - String menuName = review.getMenu() != null ? review.getMenu().getName() : null; - LocalDate writeDate = review.getCreatedDate() != null ? review.getCreatedDate().toLocalDate() : null; - - return MyReviewDetail.builder() - .reviewId(review.getId()) - .mainRating(mainRating) - .amountRating(amountRating) - .tasteRating(tasteRating) - .writeDate(writeDate) - .content(review.getContent()) - .imgUrlList(imgUrlList) - .menuName(menuName) - .build(); - } + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; + + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; + + @Schema(description = "평점-양", example = "4") + private Integer amountRating; + + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; + + @Schema(description = "리뷰 작성 날짜(format = yyyyMMdd)", example = "20230407") + private LocalDate writeDate; + + @Schema(description = "메뉴 이름", example = "돈까스") + private String menuName; + + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; + + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imgUrlList; + + public static MyReviewDetail from(Review review) { + List imgUrlList = new ArrayList<>(); + if (review.getReviewImages() != null) { + review.getReviewImages().forEach(image -> { + if (image != null && image.getImageUrl() != null) { + imgUrlList.add(image.getImageUrl()); + } + }); + } + + Ratings ratings = review.getRatings(); + int mainRating = 0; + int amountRating = 0; + int tasteRating = 0; + + if (ratings != null) { + mainRating = ratings.getMainRating() != null ? ratings.getMainRating() : 0; + amountRating = ratings.getAmountRating() != null ? ratings.getAmountRating() : 0; + tasteRating = ratings.getTasteRating() != null ? ratings.getTasteRating() : 0; + } + + String menuName = review.getMenu() != null ? review.getMenu().getName() : null; + LocalDate writeDate = review.getCreatedDate() != null ? review.getCreatedDate().toLocalDate() : null; + + return MyReviewDetail.builder() + .reviewId(review.getId()) + .mainRating(mainRating) + .amountRating(amountRating) + .tasteRating(tasteRating) + .writeDate(writeDate) + .content(review.getContent()) + .imgUrlList(imgUrlList) + .menuName(menuName) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java b/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java index d7c35c2c..a10fbecf 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java @@ -4,10 +4,10 @@ @Schema(title = "jwt 토큰들") public record Tokens( - @Schema(description = "accessToken", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjEsXCJlbWFpbFwiOlwiZW1haWxAZW1haWwuY29tXCJ9IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY3OTIyNzc0NX0.gM7F00Dh7OvybtEYODxYqFNATDDdquGCIivAeifNrEnF1ush3Fx1ChWqwD60U6Ek7rmJRU3CUUFAMLUrWDi4Aw") - String accessToken, - - @Schema(description = "refreshToken", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjEsXCJlbWFpbFwiOlwiZW1haWxAZW1haWwuY29tXCJ9IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY3OTgzMDc0NX0.OBtrGGKuSujBxwLTNVs-sc4eEH8uYiG8-Cwomqb_OgB9ADVbWbtSqaml9Ll34TFrKhPZuhMvzdchsWHqMQQ_kg") - String refreshToken + @Schema(description = "accessToken", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjEsXCJlbWFpbFwiOlwiZW1haWxAZW1haWwuY29tXCJ9IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY3OTIyNzc0NX0.gM7F00Dh7OvybtEYODxYqFNATDDdquGCIivAeifNrEnF1ush3Fx1ChWqwD60U6Ek7rmJRU3CUUFAMLUrWDi4Aw") + String accessToken, + + @Schema(description = "refreshToken", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjEsXCJlbWFpbFwiOlwiZW1haWxAZW1haWwuY29tXCJ9IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY3OTgzMDc0NX0.OBtrGGKuSujBxwLTNVs-sc4eEH8uYiG8-Cwomqb_OgB9ADVbWbtSqaml9Ll34TFrKhPZuhMvzdchsWHqMQQ_kg") + String refreshToken ) { } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index 79460500..97ba385b 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -57,23 +57,23 @@ public class User extends BaseTimeEntity { @OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE , CascadeType.REFRESH}) - private List reviews = new ArrayList<>(); + private final List reviews = new ArrayList<>(); @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) - private List reviewReports = new ArrayList<>(); + private final List reviewReports = new ArrayList<>(); @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) - private List userInquiries = new ArrayList<>(); + private final List userInquiries = new ArrayList<>(); @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) - private List reviewLikes = new ArrayList<>(); + private final List reviewLikes = new ArrayList<>(); @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "department_id") private Department department; @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) - private List partnershipLikes = new ArrayList<>(); + private final List partnershipLikes = new ArrayList<>(); /** * Oauth 회원가입 용 생성자 diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index a80453eb..2d57819a 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -1,7 +1,15 @@ package ssu.eatssu.domain.user.presentation; -import java.util.List; - +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -16,25 +24,12 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.enums.ParameterIn; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.validation.Valid; -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.PartnershipResponse; import ssu.eatssu.domain.partnership.service.PartnershipService; -import ssu.eatssu.domain.review.service.ReviewServiceV2; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.domain.slice.service.SliceService; import ssu.eatssu.domain.user.dto.DepartmentResponse; -import ssu.eatssu.domain.user.dto.MyMealReviewResponse; import ssu.eatssu.domain.user.dto.MyPageResponse; import ssu.eatssu.domain.user.dto.MyReviewDetail; import ssu.eatssu.domain.user.dto.NicknameUpdateRequest; @@ -42,156 +37,158 @@ import ssu.eatssu.domain.user.service.UserService; import ssu.eatssu.global.handler.response.BaseResponse; +import java.util.List; + @RestController @RequiredArgsConstructor @RequestMapping("/users") @Tag(name = "User", description = "유저 API") public class UserController { - private final UserService userService; - private final SliceService sliceService; - private final PartnershipService partnershipService; - - @Operation(summary = "이메일 중복 체크", description = """ - 이메일 중복 체크 API 입니다.

- 중복되지 않은 이메일이면 true 를 반환합니다 - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "중복되지 않은 이메일") - }) - @PostMapping("/validate/email/{email}") //todo: 중복인 경우 error throw, 중복 아니면 ApiReposne return - public BaseResponse validateDuplicatedEmail( - @Parameter(description = "이메일") @PathVariable String email) { - return BaseResponse.success(userService.validateDuplicatedEmail(email)); - } - - @Operation(summary = "닉네임 중복 체크", description = """ - 닉네임 중복 체크 API 입니다.

- 중복되지 않은 닉네임이면 true 를 반환합니다 - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임") - }) - @GetMapping("/validate/nickname") - public BaseResponse validateDuplicatedNickname(@Parameter(description = "닉네임") - @RequestParam(value = "nickname") String nickname) { - return BaseResponse.success(userService.validateDuplicatedNickname(nickname)); - } - - @Operation(summary = "닉네임 수정", description = "닉네임 수정 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "닉네임 수정 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PatchMapping("/nickname") - public BaseResponse updateNickname( - @Valid @RequestBody NicknameUpdateRequest updateNicknameRequest, - @AuthenticationPrincipal CustomUserDetails userDetails) { - userService.updateNickname(userDetails, updateNicknameRequest); - return BaseResponse.success(); - } - - @Operation(summary = "유저 탈퇴", description = "유저 탈퇴 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("") - public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(userService.withdraw(userDetails)); - } - - @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/reviews") - public BaseResponse> getMyReviewList( - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = sliceService.findMyReviews(customUserDetails, - pageable, - lastReviewId); - return BaseResponse.success(myReviews); - } - - - @Operation(summary = "마이페이지 정보 조회", description = "마이페이지 정보를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/mypage") - public BaseResponse getMyPage( - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - return BaseResponse.success(userService.findMyPage(customUserDetails)); - } - - @Operation(summary = "유저가 찜한 제휴 조회", description = "유저가 찜한 제휴를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저가 찜한 제휴 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/partnerships") - public BaseResponse> getUserLikedPartnerships( - @AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(partnershipService.getUserLikedPartnerships(userDetails)); - } - - @Operation(summary = "유저의 학과 등록", description = "유저의 학과를 등록하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저의 학과 등록 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 학과", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @PostMapping("/department") - public BaseResponse registerDepartment(@RequestBody UpdateDepartmentRequest request, - @AuthenticationPrincipal CustomUserDetails userDetails) { - userService.registerDepartment(request, userDetails); - return BaseResponse.success(); - } - - @Operation(summary = "유저의 단과대/학과 제휴 조회", description = "유저의 단과대/학과 제휴를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저의 단과대/학과 제휴 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/department/partnerships") - public BaseResponse> getUserDepartmentPartnerships( - @AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(partnershipService.getUserDepartmentPartnerships(userDetails)); - } - - @Operation(summary = "학과 기입 여부 체크", description = """ - 학과 기입 여부 체크 API 입니다.

- 학과를 기입했으면 true, 아니면 false 를 반환합니다 - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "학과 기입함") - }) - @GetMapping("/validate/department") - public BaseResponse validateDepartmentExists(@AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(userService.validateDepartmentExists(userDetails)); - } - - @Operation(summary = "유저의 학과 조회", description = "유저의 학과를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저의 학과 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/department") - public BaseResponse getDepartment(@AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(userService.getDepartment(userDetails)); - } + private final UserService userService; + private final SliceService sliceService; + private final PartnershipService partnershipService; + + @Operation(summary = "이메일 중복 체크", description = """ + 이메일 중복 체크 API 입니다.

+ 중복되지 않은 이메일이면 true 를 반환합니다 + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "중복되지 않은 이메일") + }) + @PostMapping("/validate/email/{email}") //todo: 중복인 경우 error throw, 중복 아니면 ApiReposne return + public BaseResponse validateDuplicatedEmail( + @Parameter(description = "이메일") @PathVariable String email) { + return BaseResponse.success(userService.validateDuplicatedEmail(email)); + } + + @Operation(summary = "닉네임 중복 체크", description = """ + 닉네임 중복 체크 API 입니다.

+ 중복되지 않은 닉네임이면 true 를 반환합니다 + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임") + }) + @GetMapping("/validate/nickname") + public BaseResponse validateDuplicatedNickname(@Parameter(description = "닉네임") + @RequestParam(value = "nickname") String nickname) { + return BaseResponse.success(userService.validateDuplicatedNickname(nickname)); + } + + @Operation(summary = "닉네임 수정", description = "닉네임 수정 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "닉네임 수정 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PatchMapping("/nickname") + public BaseResponse updateNickname( + @Valid @RequestBody NicknameUpdateRequest updateNicknameRequest, + @AuthenticationPrincipal CustomUserDetails userDetails) { + userService.updateNickname(userDetails, updateNicknameRequest); + return BaseResponse.success(); + } + + @Operation(summary = "유저 탈퇴", description = "유저 탈퇴 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("") + public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(userService.withdraw(userDetails)); + } + + @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/reviews") + public BaseResponse> getMyReviewList( + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = sliceService.findMyReviews(customUserDetails, + pageable, + lastReviewId); + return BaseResponse.success(myReviews); + } + + + @Operation(summary = "마이페이지 정보 조회", description = "마이페이지 정보를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/mypage") + public BaseResponse getMyPage( + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + return BaseResponse.success(userService.findMyPage(customUserDetails)); + } + + @Operation(summary = "유저가 찜한 제휴 조회", description = "유저가 찜한 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저가 찜한 제휴 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @GetMapping("/partnerships") + public BaseResponse> getUserLikedPartnerships( + @AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(partnershipService.getUserLikedPartnerships(userDetails)); + } + + @Operation(summary = "유저의 학과 등록", description = "유저의 학과를 등록하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저의 학과 등록 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 학과", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @PostMapping("/department") + public BaseResponse registerDepartment(@RequestBody UpdateDepartmentRequest request, + @AuthenticationPrincipal CustomUserDetails userDetails) { + userService.registerDepartment(request, userDetails); + return BaseResponse.success(); + } + + @Operation(summary = "유저의 단과대/학과 제휴 조회", description = "유저의 단과대/학과 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저의 단과대/학과 제휴 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @GetMapping("/department/partnerships") + public BaseResponse> getUserDepartmentPartnerships( + @AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(partnershipService.getUserDepartmentPartnerships(userDetails)); + } + + @Operation(summary = "학과 기입 여부 체크", description = """ + 학과 기입 여부 체크 API 입니다.

+ 학과를 기입했으면 true, 아니면 false 를 반환합니다 + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "학과 기입함") + }) + @GetMapping("/validate/department") + public BaseResponse validateDepartmentExists(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(userService.validateDepartmentExists(userDetails)); + } + + @Operation(summary = "유저의 학과 조회", description = "유저의 학과를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저의 학과 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @GetMapping("/department") + public BaseResponse getDepartment(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(userService.getDepartment(userDetails)); + } } diff --git a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java index e50f90d5..9abb4817 100644 --- a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java @@ -1,5 +1,7 @@ package ssu.eatssu.global.handler; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.TypeMismatchException; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpHeaders; @@ -23,9 +25,6 @@ import org.springframework.web.multipart.support.MissingServletRequestPartException; import org.springframework.web.servlet.NoHandlerFoundException; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.slack.entity.SlackMessageFormat; import ssu.eatssu.domain.slack.service.SlackService; import ssu.eatssu.global.handler.response.BaseException; @@ -39,230 +38,231 @@ @RestControllerAdvice @RequiredArgsConstructor public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { - private final SlackService slackService; - @Value("${server.env:unknown}") - private String serverEnv; + private final SlackService slackService; + @Value("${server.env:unknown}") + private String serverEnv; + + /** + * BaseException 처리 + */ + @ExceptionHandler(BaseException.class) + public ResponseEntity> handleBaseException(BaseException e) { + sendErrorToSlack(e); + return ResponseEntity.status(e.getStatus().getHttpStatus()).body(BaseResponse.fail(e.getStatus())); + } - /** - * BaseException 처리 - */ - @ExceptionHandler(BaseException.class) - public ResponseEntity> handleBaseException(BaseException e) { - sendErrorToSlack(e); - return ResponseEntity.status(e.getStatus().getHttpStatus()).body(BaseResponse.fail(e.getStatus())); - } - @ExceptionHandler(Exception.class) - public ResponseEntity> handleAllUnhandledException(Exception ex) { - sendErrorToSlack(ex); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); - } + @ExceptionHandler(Exception.class) + public ResponseEntity> handleAllUnhandledException(Exception ex) { + sendErrorToSlack(ex); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); + } - /** - * 경로는 있으나 지원하지 않는 http method로 요청 시 - */ - @Override - protected ResponseEntity handleHttpRequestMethodNotSupported( - @NonNull HttpRequestMethodNotSupportedException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.METHOD_NOT_ALLOWED).body(BaseResponse.fail( - BaseResponseStatus.METHOD_NOT_ALLOWED)); - } + /** + * 경로는 있으나 지원하지 않는 http method로 요청 시 + */ + @Override + protected ResponseEntity handleHttpRequestMethodNotSupported( + @NonNull HttpRequestMethodNotSupportedException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.METHOD_NOT_ALLOWED).body(BaseResponse.fail( + BaseResponseStatus.METHOD_NOT_ALLOWED)); + } - /** - * 지원하지 않는 content type으로 요청 시 - */ - @Override - protected ResponseEntity handleHttpMediaTypeNotSupported( - @NonNull HttpMediaTypeNotSupportedException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE) - .body(BaseResponse.fail(BaseResponseStatus.UNSUPPORTED_MEDIA_TYPE)); - } + /** + * 지원하지 않는 content type으로 요청 시 + */ + @Override + protected ResponseEntity handleHttpMediaTypeNotSupported( + @NonNull HttpMediaTypeNotSupportedException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE) + .body(BaseResponse.fail(BaseResponseStatus.UNSUPPORTED_MEDIA_TYPE)); + } - /** - * 인식할 수 없는 content type으로 요청 시 - */ - @Override - protected ResponseEntity handleHttpMediaTypeNotAcceptable( - @NonNull HttpMediaTypeNotAcceptableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.NOT_ACCEPTABLE) - .body(BaseResponse.fail(BaseResponseStatus.NOT_ACCEPTABLE)); - } + /** + * 인식할 수 없는 content type으로 요청 시 + */ + @Override + protected ResponseEntity handleHttpMediaTypeNotAcceptable( + @NonNull HttpMediaTypeNotAcceptableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.NOT_ACCEPTABLE) + .body(BaseResponse.fail(BaseResponseStatus.NOT_ACCEPTABLE)); + } - /** - * PathVariable 값 누락 시 - */ - @Override - protected ResponseEntity handleMissingPathVariable( - @NonNull MissingPathVariableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISSING_PATH_VARIABLE)); - } + /** + * PathVariable 값 누락 시 + */ + @Override + protected ResponseEntity handleMissingPathVariable( + @NonNull MissingPathVariableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISSING_PATH_VARIABLE)); + } - /*** - * RequestParam 값 누락 시 - */ - @Override - protected ResponseEntity handleMissingServletRequestParameter( - @NonNull MissingServletRequestParameterException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PARAM)); - } + /*** + * RequestParam 값 누락 시 + */ + @Override + protected ResponseEntity handleMissingServletRequestParameter( + @NonNull MissingServletRequestParameterException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PARAM)); + } - /** - * RequestPart 값 누락 시 - */ - @Override - protected ResponseEntity handleMissingServletRequestPart( - @NonNull MissingServletRequestPartException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PART)); - } + /** + * RequestPart 값 누락 시 + */ + @Override + protected ResponseEntity handleMissingServletRequestPart( + @NonNull MissingServletRequestPartException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PART)); + } - /** - * 요청 값 바인딩 처리에 실패한 경우 - */ - @Override - protected ResponseEntity handleServletRequestBindingException( - @NonNull ServletRequestBindingException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.REQ_BINDING_FAIL)); - } + /** + * 요청 값 바인딩 처리에 실패한 경우 + */ + @Override + protected ResponseEntity handleServletRequestBindingException( + @NonNull ServletRequestBindingException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.REQ_BINDING_FAIL)); + } - /** - * request @Valid 유효성 체크를 통과하지 못한 경우 - */ - @Override - protected ResponseEntity handleMethodArgumentNotValid( - @NonNull MethodArgumentNotValidException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.FAILED_VALIDATION)); - } + /** + * request @Valid 유효성 체크를 통과하지 못한 경우 + */ + @Override + protected ResponseEntity handleMethodArgumentNotValid( + @NonNull MethodArgumentNotValidException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.FAILED_VALIDATION)); + } - /** - * Dispatcher Servlet에서 핸들러를 찾지 못한 경우 - *

기본적으로는 404-Not Found응답을 내리지만 Dispatcher Servlet의 throwExceptionIfNoHandlerFound 값이 true인 경우 - * NoHandlerFoundException 예외를 발생

- */ - @Override - protected ResponseEntity handleNoHandlerFoundException( - @NonNull NoHandlerFoundException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.NOT_FOUND) - .body(BaseResponse.fail(BaseResponseStatus.NOT_FOUND)); - } + /** + * Dispatcher Servlet에서 핸들러를 찾지 못한 경우 + *

기본적으로는 404-Not Found응답을 내리지만 Dispatcher Servlet의 throwExceptionIfNoHandlerFound 값이 true인 경우 + * NoHandlerFoundException 예외를 발생

+ */ + @Override + protected ResponseEntity handleNoHandlerFoundException( + @NonNull NoHandlerFoundException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.NOT_FOUND) + .body(BaseResponse.fail(BaseResponseStatus.NOT_FOUND)); + } - /** - * 비동기 요청의 응답시간이 초과될 경우 - */ - @Override - protected ResponseEntity handleAsyncRequestTimeoutException( - @NonNull AsyncRequestTimeoutException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE) - .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_TIME_OUT)); - } + /** + * 비동기 요청의 응답시간이 초과될 경우 + */ + @Override + protected ResponseEntity handleAsyncRequestTimeoutException( + @NonNull AsyncRequestTimeoutException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE) + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_TIME_OUT)); + } - /** - * 파라미터 타입 불일치가 발생한 경우 - */ - @Override - protected ResponseEntity handleTypeMismatch( - @NonNull TypeMismatchException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISMATCH_PARAM_TYPE)); - } + /** + * 파라미터 타입 불일치가 발생한 경우 + */ + @Override + protected ResponseEntity handleTypeMismatch( + @NonNull TypeMismatchException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISMATCH_PARAM_TYPE)); + } - /** - * 적절하지 않은 RequestBody 때문에 HttpMessageConverter.read 메소드 실패한 경우 - */ - @Override - protected ResponseEntity handleHttpMessageNotReadable( - @NonNull HttpMessageNotReadableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.BAD_REQUEST)); - } + /** + * 적절하지 않은 RequestBody 때문에 HttpMessageConverter.read 메소드 실패한 경우 + */ + @Override + protected ResponseEntity handleHttpMessageNotReadable( + @NonNull HttpMessageNotReadableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.BAD_REQUEST)); + } - /** - * 직렬화 실패한 경우 - */ - @Override - protected ResponseEntity handleHttpMessageNotWritable( - @NonNull HttpMessageNotWritableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); - } + /** + * 직렬화 실패한 경우 + */ + @Override + protected ResponseEntity handleHttpMessageNotWritable( + @NonNull HttpMessageNotWritableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); + } - @Override - protected ResponseEntity handleExceptionInternal( - @NonNull Exception ex, - Object body, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode statusCode, - @NonNull WebRequest request) { + @Override + protected ResponseEntity handleExceptionInternal( + @NonNull Exception ex, + Object body, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode statusCode, + @NonNull WebRequest request) { - HttpStatus status = HttpStatus.valueOf(statusCode.value()); + HttpStatus status = HttpStatus.valueOf(statusCode.value()); - if (status.is4xxClientError() || status.is5xxServerError()) { - sendErrorToSlack(ex); - } + if (status.is4xxClientError() || status.is5xxServerError()) { + sendErrorToSlack(ex); + } - BaseResponseStatus responseStatus = status.is4xxClientError() - ? BaseResponseStatus.BAD_REQUEST - : BaseResponseStatus.INTERNAL_SERVER_ERROR; + BaseResponseStatus responseStatus = status.is4xxClientError() + ? BaseResponseStatus.BAD_REQUEST + : BaseResponseStatus.INTERNAL_SERVER_ERROR; - return ResponseEntity.status(status).body(BaseResponse.fail(responseStatus)); - } + return ResponseEntity.status(status).body(BaseResponse.fail(responseStatus)); + } - private void sendErrorToSlack(Exception ex) { - if (!("dev".equals(serverEnv) || "prod".equals(serverEnv))) { - return; - } + private void sendErrorToSlack(Exception ex) { + if (!("dev".equals(serverEnv) || "prod".equals(serverEnv))) { + return; + } - try { - String message = SlackMessageFormat.sendServerError(ex); - slackService.sendSlackMessage(message, ssu.eatssu.domain.slack.entity.SlackChannel.SERVER_ERROR); - } catch (Exception slackEx) { - log.warn("슬랙 전송 실패: {}", slackEx.getMessage()); - } - } + try { + String message = SlackMessageFormat.sendServerError(ex); + slackService.sendSlackMessage(message, ssu.eatssu.domain.slack.entity.SlackChannel.SERVER_ERROR); + } catch (Exception slackEx) { + log.warn("슬랙 전송 실패: {}", slackEx.getMessage()); + } + } } diff --git a/src/test/java/ssu/eatssu/domain/auth/service/OAuthServiceTest.java b/src/test/java/ssu/eatssu/domain/auth/service/OAuthServiceTest.java index dab3e80f..b66bccee 100644 --- a/src/test/java/ssu/eatssu/domain/auth/service/OAuthServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/auth/service/OAuthServiceTest.java @@ -14,14 +14,6 @@ import org.springframework.security.core.Authentication; import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.annotation.Transactional; - -import javax.crypto.KeyGenerator; -import javax.crypto.SecretKey; -import java.security.NoSuchAlgorithmException; -import java.time.Instant; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.auth.dto.OAuthInfo; @@ -36,10 +28,16 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.user.service.UserService; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import java.security.NoSuchAlgorithmException; +import java.time.Instant; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; -import static org.mockito.ArgumentMatchers.anyString; @SpringBootTest @ActiveProfiles("test") @@ -66,7 +64,7 @@ void setUp() { private String createMockAppleIdentityToken(String email, String providerId) { try { SecretKey key = KeyGenerator.getInstance("HmacSHA256").generateKey(); - + Map claims = new HashMap<>(); claims.put("iss", "https://appleid.apple.com"); claims.put("aud", "com.example.testapp"); @@ -75,18 +73,18 @@ private String createMockAppleIdentityToken(String email, String providerId) { claims.put("sub", providerId); claims.put("email", email); claims.put("email_verified", "true"); - + Map header = new HashMap<>(); header.put("kid", "test-key-id"); header.put("alg", "HS256"); - + return Jwts.builder() - .setHeader(header) - .setClaims(claims) - .setIssuedAt(new Date()) - .setExpiration(new Date(System.currentTimeMillis() + 3600000)) - .signWith(key, SignatureAlgorithm.HS256) - .compact(); + .setHeader(header) + .setClaims(claims) + .setIssuedAt(new Date()) + .setExpiration(new Date(System.currentTimeMillis() + 3600000)) + .signWith(key, SignatureAlgorithm.HS256) + .compact(); } catch (NoSuchAlgorithmException e) { throw new RuntimeException("모의 Apple Identity Token 생성에 실패했습니다", e); } @@ -107,7 +105,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { assertThat(tokens).isNotNull(); assertThat(tokens.accessToken()).isNotBlank(); assertThat(tokens.refreshToken()).isNotBlank(); - + User savedUser = userRepository.findByProviderId(providerId).orElse(null); assertThat(savedUser).isNotNull(); assertThat(savedUser.getEmail()).isEqualTo(email); @@ -126,7 +124,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { User existingUser = userService.join(email, OAuthProvider.KAKAO, providerId); existingUser.updateNickname("테스트닉네임"); userRepository.save(existingUser); - + KakaoLoginRequest request = new KakaoLoginRequest(email, providerId); // when @@ -136,7 +134,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { assertThat(tokens).isNotNull(); assertThat(tokens.accessToken()).isNotBlank(); assertThat(tokens.refreshToken()).isNotBlank(); - + long userCount = userRepository.count(); assertThat(userCount).isEqualTo(1); } @@ -149,7 +147,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { String providerId = "apple123"; String identityToken = "mock.identity.token"; AppleLoginRequest request = new AppleLoginRequest(identityToken); - + OAuthInfo mockOAuthInfo = new OAuthInfo(email, providerId); given(appleAuthenticator.getOAuthInfoByIdentityToken(identityToken)).willReturn(mockOAuthInfo); @@ -160,7 +158,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { assertThat(tokens).isNotNull(); assertThat(tokens.accessToken()).isNotBlank(); assertThat(tokens.refreshToken()).isNotBlank(); - + User savedUser = userRepository.findByProviderId(providerId).orElse(null); assertThat(savedUser).isNotNull(); assertThat(savedUser.getEmail()).isEqualTo(email); @@ -175,11 +173,11 @@ private String createMockAppleIdentityToken(String email, String providerId) { String email = "existing@apple.com"; String providerId = "existing_apple123"; String identityToken = "mock.identity.token"; - + User existingUser = userService.join(email, OAuthProvider.APPLE, providerId); existingUser.updateNickname("기존애플사용자"); userRepository.save(existingUser); - + AppleLoginRequest request = new AppleLoginRequest(identityToken); OAuthInfo mockOAuthInfo = new OAuthInfo(email, providerId); given(appleAuthenticator.getOAuthInfoByIdentityToken(identityToken)).willReturn(mockOAuthInfo); @@ -191,7 +189,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { assertThat(tokens).isNotNull(); assertThat(tokens.accessToken()).isNotBlank(); assertThat(tokens.refreshToken()).isNotBlank(); - + long userCount = userRepository.count(); assertThat(userCount).isEqualTo(1); } @@ -204,11 +202,11 @@ private String createMockAppleIdentityToken(String email, String providerId) { String realEmail = "user@icloud.com"; String providerId = "apple_private123"; String identityToken = "mock.identity.token"; - + User existingUser = userService.join(privateEmail, OAuthProvider.APPLE, providerId); existingUser.updateNickname("프라이빗사용자"); userRepository.save(existingUser); - + AppleLoginRequest request = new AppleLoginRequest(identityToken); OAuthInfo mockOAuthInfo = new OAuthInfo(realEmail, providerId); given(appleAuthenticator.getOAuthInfoByIdentityToken(identityToken)).willReturn(mockOAuthInfo); @@ -218,7 +216,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { // then assertThat(tokens).isNotNull(); - + User updatedUser = userRepository.findByProviderId(providerId).orElse(null); assertThat(updatedUser).isNotNull(); assertThat(updatedUser.getEmail()).isEqualTo(realEmail); @@ -232,11 +230,11 @@ private String createMockAppleIdentityToken(String email, String providerId) { String privateEmail = "xyz789@privaterelay.appleid.com"; String providerId = "apple_real123"; String identityToken = "mock.identity.token"; - + User existingUser = userService.join(realEmail, OAuthProvider.APPLE, providerId); existingUser.updateNickname("실제사용자"); userRepository.save(existingUser); - + AppleLoginRequest request = new AppleLoginRequest(identityToken); OAuthInfo mockOAuthInfo = new OAuthInfo(privateEmail, providerId); given(appleAuthenticator.getOAuthInfoByIdentityToken(identityToken)).willReturn(mockOAuthInfo); @@ -246,7 +244,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { // then assertThat(tokens).isNotNull(); - + User updatedUser = userRepository.findByProviderId(providerId).orElse(null); assertThat(updatedUser).isNotNull(); assertThat(updatedUser.getEmail()).isEqualTo(realEmail); @@ -260,13 +258,13 @@ private String createMockAppleIdentityToken(String email, String providerId) { String providerId = "refresh123"; KakaoLoginRequest request = new KakaoLoginRequest(email, providerId); Tokens originalTokens = oAuthService.kakaoLogin(request); - + User user = userRepository.findByProviderId(providerId).orElseThrow(); CustomUserDetails userDetails = new CustomUserDetails(user); Authentication authentication = new UsernamePasswordAuthenticationToken( - userDetails, - userDetails.getCredentials(), - userDetails.getAuthorities() + userDetails, + userDetails.getCredentials(), + userDetails.getAuthorities() ); // when @@ -286,7 +284,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { String providerId = "valid123"; KakaoLoginRequest request = new KakaoLoginRequest(email, providerId); Tokens tokens = oAuthService.kakaoLogin(request); - + ValidRequest validRequest = new ValidRequest(tokens.accessToken()); // when @@ -352,7 +350,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { assertThat(tokens).isNotNull(); assertThat(tokens.accessToken()).isNotBlank(); assertThat(tokens.refreshToken()).isNotBlank(); - + User savedUser = userRepository.findByProviderId(providerId).orElse(null); assertThat(savedUser).isNotNull(); assertThat(savedUser.getProviderId()).isEqualTo(providerId); @@ -365,10 +363,10 @@ private String createMockAppleIdentityToken(String email, String providerId) { // given String email = "first@kakao.com"; String providerId = "duplicate123"; - + KakaoLoginRequest firstRequest = new KakaoLoginRequest(email, providerId); oAuthService.kakaoLogin(firstRequest); - + KakaoLoginRequest secondRequest = new KakaoLoginRequest("different@email.com", providerId); // when @@ -378,7 +376,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { assertThat(secondTokens).isNotNull(); long userCount = userRepository.count(); assertThat(userCount).isEqualTo(1); - + User user = userRepository.findByProviderId(providerId).orElse(null); assertThat(user).isNotNull(); assertThat(user.getEmail()).isEqualTo(email); @@ -395,7 +393,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { // given String providerId = "apple_private_test"; String identityToken = "mock.identity.token"; - + AppleLoginRequest request = new AppleLoginRequest(identityToken); OAuthInfo mockOAuthInfo = new OAuthInfo(privateEmail, providerId); given(appleAuthenticator.getOAuthInfoByIdentityToken(identityToken)).willReturn(mockOAuthInfo); @@ -405,7 +403,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { // then assertThat(tokens).isNotNull(); - + User savedUser = userRepository.findByProviderId(providerId).orElse(null); assertThat(savedUser).isNotNull(); assertThat(savedUser.getEmail()).isEqualTo(privateEmail); @@ -418,7 +416,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { String email = "realtest@icloud.com"; String providerId = "001234.abcd1234abcd1234abcd1234abcd1234.1234"; String realIdentityToken = createMockAppleIdentityToken(email, providerId); - + AppleLoginRequest request = new AppleLoginRequest(realIdentityToken); OAuthInfo mockOAuthInfo = new OAuthInfo(email, providerId); given(appleAuthenticator.getOAuthInfoByIdentityToken(realIdentityToken)).willReturn(mockOAuthInfo); @@ -430,7 +428,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { assertThat(tokens).isNotNull(); assertThat(tokens.accessToken()).isNotBlank(); assertThat(tokens.refreshToken()).isNotBlank(); - + User savedUser = userRepository.findByProviderId(providerId).orElse(null); assertThat(savedUser).isNotNull(); assertThat(savedUser.getEmail()).isEqualTo(email); @@ -445,7 +443,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { String privateEmail = "real123test@privaterelay.appleid.com"; String providerId = "001234.private1234private1234private1234.5678"; String realIdentityToken = createMockAppleIdentityToken(privateEmail, providerId); - + AppleLoginRequest request = new AppleLoginRequest(realIdentityToken); OAuthInfo mockOAuthInfo = new OAuthInfo(privateEmail, providerId); given(appleAuthenticator.getOAuthInfoByIdentityToken(realIdentityToken)).willReturn(mockOAuthInfo); @@ -457,7 +455,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { assertThat(tokens).isNotNull(); assertThat(tokens.accessToken()).isNotBlank(); assertThat(tokens.refreshToken()).isNotBlank(); - + User savedUser = userRepository.findByProviderId(providerId).orElse(null); assertThat(savedUser).isNotNull(); assertThat(savedUser.getEmail()).isEqualTo(privateEmail); @@ -472,15 +470,15 @@ private String createMockAppleIdentityToken(String email, String providerId) { String privateEmail = "update123test@privaterelay.appleid.com"; String realEmail = "updated.user@icloud.com"; String providerId = "001234.update1234update1234update1234.9012"; - + // 기존 사용자를 프라이빗 이메일로 생성 User existingUser = userService.join(privateEmail, OAuthProvider.APPLE, providerId); existingUser.updateNickname("업데이트테스트사용자"); userRepository.save(existingUser); - + // 실제 이메일이 포함된 Identity Token 생성 String realIdentityToken = createMockAppleIdentityToken(realEmail, providerId); - + AppleLoginRequest request = new AppleLoginRequest(realIdentityToken); OAuthInfo mockOAuthInfo = new OAuthInfo(realEmail, providerId); given(appleAuthenticator.getOAuthInfoByIdentityToken(realIdentityToken)).willReturn(mockOAuthInfo); @@ -490,13 +488,13 @@ private String createMockAppleIdentityToken(String email, String providerId) { // then assertThat(tokens).isNotNull(); - + User updatedUser = userRepository.findByProviderId(providerId).orElse(null); assertThat(updatedUser).isNotNull(); assertThat(updatedUser.getEmail()).isEqualTo(realEmail); // 프라이빗 이메일에서 실제 이메일로 업데이트 assertThat(updatedUser.getProvider()).isEqualTo(OAuthProvider.APPLE); assertThat(updatedUser.getProviderId()).isEqualTo(providerId); - + long userCount = userRepository.count(); assertThat(userCount).isEqualTo(1); // 사용자는 한 명만 존재 } @@ -505,7 +503,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { @DisplayName("다양한 실제 Identity Token 패턴 테스트") @ValueSource(strings = { "test1@icloud.com", - "user.name@me.com", + "user.name@me.com", "developer@mac.com", "testuser123@privaterelay.appleid.com", "a1b2c3d4e5@privaterelay.appleid.com" @@ -514,7 +512,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { // given String providerId = "001234.pattern" + email.hashCode() + ".test"; String realIdentityToken = createMockAppleIdentityToken(email, providerId); - + AppleLoginRequest request = new AppleLoginRequest(realIdentityToken); OAuthInfo mockOAuthInfo = new OAuthInfo(email, providerId); given(appleAuthenticator.getOAuthInfoByIdentityToken(realIdentityToken)).willReturn(mockOAuthInfo); @@ -526,7 +524,7 @@ private String createMockAppleIdentityToken(String email, String providerId) { assertThat(tokens).isNotNull(); assertThat(tokens.accessToken()).isNotBlank(); assertThat(tokens.refreshToken()).isNotBlank(); - + User savedUser = userRepository.findByProviderId(providerId).orElse(null); assertThat(savedUser).isNotNull(); assertThat(savedUser.getEmail()).isEqualTo(email); From b6a5e39433f3c18c58f778d5c12e3c0b04626387 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Tue, 1 Jul 2025 20:59:41 +0900 Subject: [PATCH 239/399] =?UTF-8?q?hotfix:=20=ED=86=A0=ED=81=B0=20401?= =?UTF-8?q?=EC=97=90=EB=9F=AC=20=ED=99=95=EC=9D=B8=EC=9D=84=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20=ED=86=A0=ED=81=B0=20=EC=8B=9C=EA=B0=84=20=EC=A1=B0?= =?UTF-8?q?=EC=A0=95=20=ED=95=AB=ED=94=BD=EC=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-dev.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 20b92233..a5043661 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -41,8 +41,8 @@ spring: jwt: secret: key: ${EATSSU_JWT_SECRET_DEV} - token-validity-in-seconds: 86400 - refresh-token-validity-in-seconds: 604800 + token-validity-in-seconds: 60 + refresh-token-validity-in-seconds: 180 #S3 cloud: From 2b2eeb61a4dde77e033cc745f0be4bb56b3cb811 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Tue, 1 Jul 2025 23:18:13 +0900 Subject: [PATCH 240/399] =?UTF-8?q?hotfix:=20jwt=20=EC=9C=A0=ED=9A=A8?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=20=EC=9B=90=EB=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-dev.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index a5043661..20b92233 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -41,8 +41,8 @@ spring: jwt: secret: key: ${EATSSU_JWT_SECRET_DEV} - token-validity-in-seconds: 60 - refresh-token-validity-in-seconds: 180 + token-validity-in-seconds: 86400 + refresh-token-validity-in-seconds: 604800 #S3 cloud: From 6faa04575132fc42ba79fcc01c4476cc0e98f552 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Wed, 2 Jul 2025 00:26:59 +0900 Subject: [PATCH 241/399] =?UTF-8?q?feat:=20250626=20=EB=A6=AC=EB=B7=B0v2?= =?UTF-8?q?=EC=88=98=EC=A0=95=EC=9A=94=EC=B2=AD=EC=82=AC=ED=95=AD=20(#189)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 리뷰 리스트 조회시 싫어요 제거 * feat: 싫어요 관련 필드 일괄 삭제 * feat: menu에 대한 리뷰에도 좋아요 기능 추가 * feat: 전체 메뉴 칩 필드 추가 * feat: my페이지 menu name 조회되게 추가 * feat: 마이페이지 전체 메뉴칩 npe 예외처리 * feat: mypage review dto 코드 포멧팅 * feat: 리뷰에 제외되는 메뉴 조회 api 개발 * feat: 단일메뉴 작성 transactional 어노테이션 추가 * feat: gemini pr 리뷰에 맞춰 수정 --- .../ssu/eatssu/domain/menu/entity/Menu.java | 18 ------ .../review/dto/CreateMealReviewRequest.java | 2 +- .../review/dto/CreateMenuReviewRequest.java | 59 +++++++++++++++++++ .../domain/review/dto/MealReviewResponse.java | 3 + .../review/dto/MealReviewsV2Response.java | 4 -- .../review/dto/MenuReviewsV2Response.java | 4 -- .../review/dto/ValidMenuForViewResponse.java | 22 +++++++ .../eatssu/domain/review/entity/Review.java | 4 -- .../presentation/ReviewControllerV2.java | 29 +++++---- .../review/service/ReviewServiceV2.java | 48 +++++++++++++-- .../domain/review/utils/MenuFilterUtil.java | 38 ++++++++++++ .../domain/user/dto/MyMealReviewResponse.java | 7 +++ 12 files changed, 192 insertions(+), 46 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java create mode 100644 src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java create mode 100644 src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index 8a1425d2..69619c12 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -104,13 +104,6 @@ public void increaseLikeCount() { this.likeCount++; } - public void increaseUnlikeCount() { - if (this.unlikeCount == null) { - this.unlikeCount = 0; - } - this.unlikeCount++; - } - public void decreaseLikeCount() { if (this.likeCount == null) { this.likeCount = 0; @@ -118,28 +111,17 @@ public void decreaseLikeCount() { this.likeCount--; } - public void decreaseUnlikeCount() { - if (this.unlikeCount == null) { - this.unlikeCount = 0; - } - unlikeCount--; - } - public void changeLikeStatus(Boolean isLike) { if (isLike) { - decreaseUnlikeCount(); increaseLikeCount(); } else { decreaseLikeCount(); - increaseUnlikeCount(); } } public void cancelLike(Boolean isLike) { if (isLike) { decreaseLikeCount(); - } else { - decreaseUnlikeCount(); } } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java index 15da5c9b..d510ca1a 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java @@ -11,7 +11,7 @@ import java.util.List; import java.util.stream.Collectors; -@Schema(title = "리뷰 작성") +@Schema(title = "meal에 대한 리뷰 작성") @Getter @AllArgsConstructor public class CreateMealReviewRequest { diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java new file mode 100644 index 00000000..3a39d4ea --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java @@ -0,0 +1,59 @@ +package ssu.eatssu.domain.review.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Max; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.util.Assert; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.rating.entity.Ratings; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.user.entity.User; + +@Getter +@Setter +@Schema(title = "menu에 대한 리뷰 작성") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class CreateMenuReviewRequest { + @Schema(description = "메뉴 식별자", example = "123") + private Long menuId; + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; + + @Schema(description = "평점-양", example = "4") + private Integer amountRating; + + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; + + @Max(150) + @Schema(description = "한줄평", example = "맛있어용") + private String content; + + @Schema(description = "리뷰 이미지 URL", example = "https://s3.~~~.jpg") + private String imageUrl; + private MenuLikeRequest menuLike; + + public CreateMenuReviewRequest(int mainRating, int amountRating, int tasteRating, String content) { + Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); + this.mainRating = mainRating; + this.amountRating = amountRating; + this.tasteRating = tasteRating; + this.content = content; + } + + public Review toReviewEntity(User user, Menu menu) { + Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + return Review.builder() + .user(user) + .content(this.content) + .ratings(ratings) + .menu(menu) + .build(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java index 0fdf0e52..633cb7c6 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java @@ -43,6 +43,8 @@ public class MealReviewResponse { @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") private List likedMenuNames; + @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") + private List menuNames; public static MealReviewResponse from(Review review, Long userId) { List imageUrls = new ArrayList<>(); @@ -59,6 +61,7 @@ public static MealReviewResponse from(Review review, Long userId) { .writtenAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imageUrls(imageUrls) + .menuNames(review.getMeal().getMenuNames()) .likedMenuNames(likedMenuNames); if (review.getUser() == null) { diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java index 33b314f9..2fa91875 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java @@ -23,10 +23,6 @@ public class MealReviewsV2Response implements ReviewInformationResponse { @Schema(description = "좋아요 개수", example = "4.4") private Integer likeCount; - - @Schema(description = "싫어요 개수", example = "4.4") - private Integer unlikeCount; - @Schema(description = "평점 별 갯수") private ReviewRatingCount reviewRatingCount; diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java index 93007cae..7c68fe56 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java @@ -23,9 +23,6 @@ public class MenuReviewsV2Response implements ReviewInformationResponse { @Schema(description = "좋아요 개수", example = "4.4") private Integer likeCount; - @Schema(description = "싫어요 개수", example = "4.4") - private Integer unlikeCount; - @Schema(description = "평점 별 갯수") private ReviewRatingCount reviewRatingCount; @@ -39,7 +36,6 @@ public static MenuReviewsV2Response of(Long totalReviewCount, .menuName(menuName) .mainRating(ratingAverages.mainRating()) .likeCount(menu.getLikeCount()) - .unlikeCount(menu.getUnlikeCount()) .totalReviewCount(totalReviewCount) .reviewRatingCount(reviewRatingCount) .build(); diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java new file mode 100644 index 00000000..c93aca8f --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java @@ -0,0 +1,22 @@ +package ssu.eatssu.domain.review.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +@Builder +@Schema(title = "리뷰에 포함되는 메뉴") +@AllArgsConstructor +public class ValidMenuForViewResponse { + @Schema(description = "리뷰에 포함되는 메뉴 리스트", example = "[김치볶음밥, 고구마치즈돈까스, 김자반]") + private List menuList; + +} diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index bd07c3f5..ce98406d 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -99,8 +99,6 @@ public void addReviewMenuLike(Menu menu, boolean isLike) { if (isLike) { menu.increaseLikeCount(); - } else { - menu.increaseUnlikeCount(); } } @@ -109,8 +107,6 @@ public void removeReviewMenuLike(ReviewMenuLike reviewMenuLike) { if (reviewMenuLike.getIsLike()) { reviewMenuLike.getMenu().decreaseLikeCount(); - } else { - reviewMenuLike.getMenu().decreaseUnlikeCount(); } } diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java index 2a545235..ab9ea8ab 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java @@ -27,17 +27,16 @@ import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; +import ssu.eatssu.domain.review.dto.CreateMenuReviewRequest; import ssu.eatssu.domain.review.dto.MealReviewResponse; import ssu.eatssu.domain.review.dto.MealReviewsV2Response; import ssu.eatssu.domain.review.dto.MenuReviewsV2Response; import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; import ssu.eatssu.domain.review.dto.ReviewDetail; import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; -import ssu.eatssu.domain.review.dto.UploadReviewRequest; -import ssu.eatssu.domain.review.service.ReviewService; +import ssu.eatssu.domain.review.dto.ValidMenuForViewResponse; import ssu.eatssu.domain.review.service.ReviewServiceV2; import ssu.eatssu.domain.slice.dto.SliceResponse; -import ssu.eatssu.domain.slice.service.SliceService; import ssu.eatssu.domain.user.dto.MyMealReviewResponse; import ssu.eatssu.global.handler.response.BaseResponse; @@ -47,8 +46,6 @@ @Tag(name = "Review V2", description = "리뷰 V2 API") public class ReviewControllerV2 { private final ReviewServiceV2 reviewServiceV2; - private final ReviewService reviewService; - private final SliceService sliceService; @Operation(summary = "meal(식단)에 대한 리뷰 작성", description = "리뷰를 작성하는 API 입니다.") @ApiResponses(value = { @@ -61,7 +58,7 @@ public class ReviewControllerV2 { public BaseResponse createMealReview( @RequestBody CreateMealReviewRequest createMealReviewRequest, @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewServiceV2.createReview(customUserDetails, createMealReviewRequest); + reviewServiceV2.createMealReview(customUserDetails, createMealReviewRequest); return BaseResponse.success(); } @@ -207,11 +204,10 @@ public BaseResponse> getMenuReviewList( @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), }) - @PostMapping("/menu/{menuId}") - public BaseResponse createMenuReview(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, - @RequestBody UploadReviewRequest uploadReviewRequest, + @PostMapping("/menu") + public BaseResponse createMenuReview(@RequestBody CreateMenuReviewRequest createMenuReviewRequest, @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewService.uploadReview(customUserDetails, menuId, uploadReviewRequest); + reviewServiceV2.createMenuReview(customUserDetails,createMenuReviewRequest); return BaseResponse.success(); } @@ -231,5 +227,18 @@ public BaseResponse> getMyReviews( return BaseResponse.success(myReviews); } + @Operation(summary = "식단 id를 통해 리뷰 작성할 수 있는 메뉴들 조회", description = "리뷰 작성할 수 있는 메뉴들 조회하는 API입니다. (노션 문서 > 리뷰v2 기능명세서> 리뷰에 제외되는 메뉴 참고") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성할 수 있는 메뉴들 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/meal/valid-for-review/{mealId}") + public BaseResponse getValidMenuForReview( + @Parameter(description = "mealId") + @PathVariable("mealId") Long mealId) { + ValidMenuForViewResponse validMenuForViewResponse = reviewServiceV2.validMenuForReview(mealId); + return BaseResponse.success(validMenuForViewResponse); + } + } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 7278d158..56c04f16 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -14,6 +14,7 @@ import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; +import ssu.eatssu.domain.review.dto.CreateMenuReviewRequest; import ssu.eatssu.domain.review.dto.MealReviewResponse; import ssu.eatssu.domain.review.dto.MealReviewsV2Response; import ssu.eatssu.domain.review.dto.MenuLikeRequest; @@ -22,14 +23,19 @@ import ssu.eatssu.domain.review.dto.ReviewDetail; import ssu.eatssu.domain.review.dto.ReviewRatingCount; import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; +import ssu.eatssu.domain.review.dto.ValidMenuForViewResponse; import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.entity.ReviewImage; +import ssu.eatssu.domain.review.repository.ReviewImageRepository; import ssu.eatssu.domain.review.repository.ReviewRepository; +import ssu.eatssu.domain.review.utils.MenuFilterUtil; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.domain.user.dto.MyMealReviewResponse; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; @@ -51,12 +57,13 @@ public class ReviewServiceV2 { private final MenuRepository menuRepository; private final MealRepository mealRepository; private final MealMenuRepository mealMenuRepository; + private final ReviewImageRepository reviewImageRepository; /** - * 리뷰 생성 + * meal에 대한 리뷰 생성 */ @Transactional - public void createReview(CustomUserDetails userDetails, CreateMealReviewRequest request) { + public void createMealReview(CustomUserDetails userDetails, CreateMealReviewRequest request) { User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); @@ -76,6 +83,27 @@ public void createReview(CustomUserDetails userDetails, CreateMealReviewRequest reviewRepository.save(review); } + /** + * menu에 대한 리뷰 작성 + */ + @Transactional + public void createMenuReview(CustomUserDetails userDetails, CreateMenuReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Menu menu = menuRepository.findById(request.getMenuId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + + Review review = request.toReviewEntity(user, menu); + review.addReviewMenuLike(menu, request.getMenuLike().getIsLike()); + reviewRepository.save(review); + + ReviewImage reviewImage = new ReviewImage(review, request.getImageUrl()); + reviewImageRepository.save(reviewImage); + + menu.addReview(review); + } + /** * 특정 식당 리뷰 조회 */ @@ -210,7 +238,6 @@ public MenuReviewsV2Response findMenuReviews(Long menuId) { .orElse(0.0); Integer likeCount = menu.getLikeCount(); - Integer unlikeCount = menu.getUnlikeCount(); ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); @@ -221,7 +248,6 @@ public MenuReviewsV2Response findMenuReviews(Long menuId) { .reviewRatingCount(reviewRatingCount) .mainRating(Math.round(averageRating * 10) / 10.0) .likeCount(likeCount != null ? likeCount : 0) - .unlikeCount(unlikeCount != null ? unlikeCount : 0) .build(); } @@ -275,7 +301,6 @@ public MealReviewsV2Response findMealReviews(Long mealId) { .reviewRatingCount(reviewRatingCount) .mainRating(Math.round(averageRating * 10) / 10.0) .likeCount(likeCount) - .unlikeCount(unlikeCount) .build(); } @@ -346,4 +371,17 @@ public SliceResponse findMyReviews(CustomUserDetails userD } + public ValidMenuForViewResponse validMenuForReview(Long mealId) { + Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + List menuNames = meal.getMenuNames(); + List validMenuNames = new ArrayList<>(); + for (String menu : menuNames) { + if (!MenuFilterUtil.isExcludedFromReview(menu)) { + validMenuNames.add(menu); + } + } + + return ValidMenuForViewResponse.builder() + .menuList(validMenuNames).build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java b/src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java new file mode 100644 index 00000000..a587501f --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java @@ -0,0 +1,38 @@ +package ssu.eatssu.domain.review.utils; + +import java.util.Set; +import java.util.regex.Pattern; + +public class MenuFilterUtil { + private static final Set EXCLUDED_KEYWORDS = Set.of( + "작은밥", "쌀밥", "잡곡밥", "찰흑미밥", "귀리밥", "백미밥", + "깍두기", "열무김치", "포기김치", "맛김치", "배추김치", + "단무지", "오이피클", "야쿠르트", "요구르트", "우동국물" + ); + private static final Pattern SAUCE_PATTERN = Pattern.compile(".*소스.*"); + + public static boolean isExcludedFromReview(String menuName) { + if (menuName == null || menuName.isBlank()) return true; + + menuName = menuName.trim(); + + for (String keyword : EXCLUDED_KEYWORDS) { + if (menuName.contains(keyword)) { + return true; + } + } + + if (menuName.contains("밥") + && !menuName.contains("볶음밥") + && !menuName.contains("비빔밥")) { + return true; + } + + if (menuName.contains("김치") + && !menuName.contains("김치볶음밥")) { + return true; + } + + return SAUCE_PATTERN.matcher(menuName).matches(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index 0278e652..ff8604c2 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -9,6 +9,7 @@ import java.time.LocalDate; import java.util.ArrayList; +import java.util.Collections; import java.util.List; @AllArgsConstructor @@ -33,6 +34,8 @@ public class MyMealReviewResponse { @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") private List likedMenuNames; + @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") + private List menuNames; public static MyMealReviewResponse from(Review review) { List imgUrlList = new ArrayList<>(); @@ -43,6 +46,9 @@ public static MyMealReviewResponse from(Review review) { .map(like -> like.getMenu().getName()) .toList(); + List menuNames = review.getMeal() == null ? Collections.singletonList(review.getMenu() + .getName()) : review.getMeal() + .getMenuNames(); return MyMealReviewResponse .builder() .reviewId(review.getId()) @@ -51,6 +57,7 @@ public static MyMealReviewResponse from(Review review) { .content(review.getContent()) .imageUrls(imgUrlList) .likedMenuNames(likedMenuNames) + .menuNames(menuNames) .build(); } } From 386a7c5bf61fc64877f6f87bbcf1f67c0d1019a2 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Fri, 4 Jul 2025 16:17:26 +0900 Subject: [PATCH 242/399] =?UTF-8?q?feat:=20=EC=A0=9C=ED=9C=B4=EC=A7=80?= =?UTF-8?q?=EB=8F=84250702=EC=88=98=EC=A0=95=20(#192)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 전체조회 API에 좋아요 수 필드 추가 * feat: 음식점 좋아요 했는지 필드 추가: * feat: PartnershipRestaurant 엔티티 추가 * feat: 식당<->단과대 n:m 매핑테이블을 Partnership으로 변경 * feat: 식당별 제휴 조회로 수정 * feat: gemini 리뷰 바탕으로 수정 * feat: 제휴 등록 로직 일괄 수정 * feat: likes 리스트 초기화 --- .../dto/CreatePartnershipRequest.java | 30 +++--- .../dto/PartnershipDetailResponse.java | 32 +++---- .../partnership/dto/PartnershipInfo.java | 41 +++++++++ .../partnership/dto/PartnershipResponse.java | 53 +++++------ .../partnership/entity/Partnership.java | 45 ++++----- .../entity/PartnershipCollege.java | 37 -------- .../entity/PartnershipDepartment.java | 37 -------- .../partnership/entity/PartnershipLike.java | 8 +- .../entity/PartnershipRestaurant.java | 45 +++++++++ .../PartnershipLikeRepository.java | 15 ++- .../persistence/PartnershipRepository.java | 8 +- .../PartnershipRestaurantRepository.java | 15 +++ .../presentation/PartnershipController.java | 6 +- .../service/PartnershipService.java | 91 +++++++++++-------- .../user/department/entity/College.java | 11 ++- .../user/department/entity/Department.java | 10 +- .../handler/response/BaseResponseStatus.java | 1 + src/main/resources/application-local.yml | 2 +- 18 files changed, 259 insertions(+), 228 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java delete mode 100644 src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java delete mode 100644 src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java create mode 100644 src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipRestaurant.java create mode 100644 src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java index 2d7e1957..4e544539 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java @@ -4,8 +4,10 @@ import lombok.AllArgsConstructor; import lombok.Getter; import ssu.eatssu.domain.partnership.entity.Partnership; +import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; import ssu.eatssu.domain.partnership.entity.PartnershipType; -import ssu.eatssu.domain.partnership.entity.RestaurantType; +import ssu.eatssu.domain.user.department.entity.College; +import ssu.eatssu.domain.user.department.entity.Department; import java.time.LocalDate; @@ -13,37 +15,27 @@ @Getter @AllArgsConstructor public class CreatePartnershipRequest { - @Schema(description = "제휴 가게 이름", example = "먹돼지") - private String storeName; + @Schema(description = "제휴 가게 식별자", example = "1") + private Long storeId; @Schema(description = "제휴 종류(DRINK, DISCOUNT, SIDE, OTHER)", example = "DISCOUNT") private PartnershipType partnershipType; - @Schema(description = "제휴 타겟 종류(college or department)", example = "college") - private String targetType; // college or department - @Schema(description = "제휴 타겟", example = "IT대") - private String targetName; + @Schema(description = "단과대", example = "IT대") + private String college; + @Schema(description = "학과", example = "컴퓨터학부") + private String department; @Schema(description = "제휴 내용", example = "IT대 학생증은 10% 할인") private String description; @Schema(description = "제휴 시작 날짜", example = "2025-03-01") private LocalDate startDate; @Schema(description = "제휴 종료 날짜", example = "2025-07-30") private LocalDate endDate; - @Schema(description = "제휴 가게 종류(RESTAURANT, CAFE)", example = "RESTAURANT") - private RestaurantType restaurantType; - @Schema(description = "경도(x축)", example = "126.9566592") - private Double longitude; - @Schema(description = "위도(y축)", example = "37.4949404") - private Double latitude; - - public Partnership toPartnershipEntity() { + public Partnership toPartnershipEntity(PartnershipRestaurant partnershipRestaurant) { return Partnership.builder() + .partnershipRestaurant(partnershipRestaurant) .partnershipType(partnershipType) - .storeName(storeName) .description(description) .startDate(startDate) .endDate(endDate) - .restaurantType(restaurantType) - .longitude(longitude) - .latitude(latitude) .build(); } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java index 1931e3ef..4febcf51 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java @@ -3,12 +3,11 @@ import lombok.AllArgsConstructor; import lombok.Getter; import ssu.eatssu.domain.partnership.entity.Partnership; +import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; import ssu.eatssu.domain.partnership.entity.PartnershipType; import ssu.eatssu.domain.partnership.entity.RestaurantType; import java.time.LocalDate; -import java.util.List; -import java.util.stream.Collectors; @Getter @AllArgsConstructor @@ -22,32 +21,29 @@ public class PartnershipDetailResponse { private RestaurantType restaurantType; private Double longitude; private Double latitude; - private List collegeNames; - private List departmentNames; + private String collegeName; + private String departmentName; private int partnershipLikeCount; private boolean likedByUser; - public static PartnershipDetailResponse fromEntity(Partnership partnership, boolean likedByUser) { - List collegeNames = partnership.getPartnershipColleges().stream() - .map(pc -> pc.getCollege().getName()) - .collect(Collectors.toList()); - List departmentNames = partnership.getPartnershipDepartments().stream() - .map(pc -> pc.getDepartment().getName()) - .collect(Collectors.toList()); + public static PartnershipDetailResponse fromEntity(PartnershipRestaurant partnershipRestaurant, + Partnership partnership, + boolean likedByUser) { return new PartnershipDetailResponse( partnership.getId(), partnership.getPartnershipType(), - partnership.getStoreName(), + partnershipRestaurant.getStoreName(), partnership.getDescription(), partnership.getStartDate(), partnership.getEndDate(), - partnership.getRestaurantType(), - partnership.getLongitude(), - partnership.getLatitude(), - collegeNames, - departmentNames, - partnership.getLikes().size(), + partnershipRestaurant.getRestaurantType(), + partnershipRestaurant.getLongitude(), + partnershipRestaurant.getLatitude(), + partnership.getPartnershipCollege() == null ? null : partnership.getPartnershipCollege().getName(), + partnership.getPartnershipDepartment() == null ? null : partnership.getPartnershipDepartment() + .getName(), + partnershipRestaurant.getLikes().size(), likedByUser ); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java new file mode 100644 index 00000000..282140ef --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java @@ -0,0 +1,41 @@ +package ssu.eatssu.domain.partnership.dto; + +import lombok.Builder; +import lombok.Getter; +import ssu.eatssu.domain.partnership.entity.Partnership; +import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; +import ssu.eatssu.domain.partnership.entity.PartnershipType; + +import java.time.LocalDate; + +@Builder +@Getter +public class PartnershipInfo { + private Long id; + private PartnershipType partnershipType; + private String collegeName; + private String departmentName; + private Integer likeCount; + private Boolean isLiked; + private String description; + private LocalDate startDate; + private LocalDate endDate; + + public static PartnershipInfo fromEntity(Partnership partnership, + PartnershipRestaurant restaurant, + boolean isLiked) { + return PartnershipInfo.builder() + .id(partnership.getId()) + .partnershipType(partnership.getPartnershipType()) + .description(partnership.getDescription()) + .startDate(partnership.getStartDate()) + .endDate(partnership.getEndDate()) + .collegeName(partnership.getPartnershipCollege() == null ? null : partnership.getPartnershipCollege() + .getName()) + .departmentName(partnership.getPartnershipDepartment() == null ? null : partnership.getPartnershipDepartment() + .getName()) + .likeCount(restaurant.getLikes() != null ? restaurant.getLikes().size() : 0) + .isLiked(isLiked) + .build(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java index 1f2fa966..1380c807 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java @@ -1,50 +1,41 @@ package ssu.eatssu.domain.partnership.dto; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.partnership.entity.Partnership; -import ssu.eatssu.domain.partnership.entity.PartnershipType; +import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; import ssu.eatssu.domain.partnership.entity.RestaurantType; -import java.time.LocalDate; import java.util.List; import java.util.stream.Collectors; @Getter +@Builder @AllArgsConstructor public class PartnershipResponse { - private Long id; - private PartnershipType partnershipType; private String storeName; - private String description; - private LocalDate startDate; - private LocalDate endDate; - private RestaurantType restaurantType; private Double longitude; private Double latitude; - private List collegeNames; - private List departmentNames; + private RestaurantType restaurantType; + private List partnershipInfos; - public static PartnershipResponse fromEntity(Partnership partnership) { - List collegeNames = partnership.getPartnershipColleges().stream() - .map(pc -> pc.getCollege().getName()) - .collect(Collectors.toList()); - List departmentNames = partnership.getPartnershipDepartments().stream() - .map(pc -> pc.getDepartment().getName()) - .collect(Collectors.toList()); + public static PartnershipResponse fromEntity(PartnershipRestaurant restaurant, Long userId) { + boolean isLiked = restaurant.getLikes().stream() + .anyMatch(like -> like.getUser().getId().equals(userId)); - return new PartnershipResponse( - partnership.getId(), - partnership.getPartnershipType(), - partnership.getStoreName(), - partnership.getDescription(), - partnership.getStartDate(), - partnership.getEndDate(), - partnership.getRestaurantType(), - partnership.getLongitude(), - partnership.getLatitude(), - collegeNames, - departmentNames - ); + List infos = restaurant.getPartnerships().stream() + .map(partnership -> PartnershipInfo.fromEntity(partnership, + restaurant, + isLiked)) + .collect(Collectors.toList()); + + return PartnershipResponse.builder() + .storeName(restaurant.getStoreName()) + .longitude(restaurant.getLongitude()) + .latitude(restaurant.getLatitude()) + .restaurantType(restaurant.getRestaurantType()) + .partnershipInfos(infos) + .build(); } } + diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java index 504b5826..d784217d 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java @@ -1,24 +1,25 @@ package ssu.eatssu.domain.partnership.entity; -import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import org.hibernate.annotations.Where; +import ssu.eatssu.domain.user.department.entity.College; +import ssu.eatssu.domain.user.department.entity.Department; import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; @Entity @Getter @@ -36,9 +37,6 @@ public class Partnership { @Column(name = "partnership_type", nullable = false) private PartnershipType partnershipType; - @Column(name = "store_name", nullable = false) - private String storeName; - @Column(name = "description", nullable = false) private String description; @@ -47,26 +45,23 @@ public class Partnership { @Column(name = "end_date", nullable = false) private LocalDate endDate; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "partnership_college_id") + private College partnershipCollege; - @Enumerated(EnumType.STRING) - @Column(name = "restaurant_type", nullable = false) - private RestaurantType restaurantType; - - @Column(name = "longitude", nullable = false) - private Double longitude; // 경도 == x축 - - @Column(name = "latitude", nullable = false) - private Double latitude; // 위도 == y축 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "partnership_department_id") + private Department partnershipDepartment; - @Builder.Default - @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) - private List partnershipColleges = new ArrayList<>(); + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "partnership_restaurant_id") + private PartnershipRestaurant partnershipRestaurant; - @Builder.Default - @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) - private List partnershipDepartments = new ArrayList<>(); + public void setPartnershipCollege(College partnershipCollege) { + this.partnershipCollege = partnershipCollege; + } - @Builder.Default - @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) - private List likes = new ArrayList<>(); + public void setPartnershipDepartment(Department partnershipDepartment) { + this.partnershipDepartment = partnershipDepartment; + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java deleted file mode 100644 index 2ba00666..00000000 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java +++ /dev/null @@ -1,37 +0,0 @@ -package ssu.eatssu.domain.partnership.entity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import ssu.eatssu.domain.user.department.entity.College; - -@Entity -@Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class PartnershipCollege { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "partnership_college_id") - private Long id; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "partnership_id") - private Partnership partnership; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "college_id") - private College college; - - public PartnershipCollege(Partnership partnership, College college) { - this.partnership = partnership; - this.college = college; - } -} diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java deleted file mode 100644 index 8b9c243b..00000000 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java +++ /dev/null @@ -1,37 +0,0 @@ -package ssu.eatssu.domain.partnership.entity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import ssu.eatssu.domain.user.department.entity.Department; - -@Entity -@Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class PartnershipDepartment { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "partnership_college_id") - private Long id; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "partnership_id") - private Partnership partnership; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "department_id") - private Department department; - - public PartnershipDepartment(Partnership partnership, Department department) { - this.partnership = partnership; - this.department = department; - } -} diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java index 210b4ac2..498ac070 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java @@ -27,11 +27,11 @@ public class PartnershipLike { private User user; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "partnership_id") - private Partnership partnership; + @JoinColumn(name = "partnership_restaurant_id") + private PartnershipRestaurant partnershipRestaurant; - public PartnershipLike(User user, Partnership partnership) { + public PartnershipLike(User user, PartnershipRestaurant partnershipRestaurant) { this.user = user; - this.partnership = partnership; + this.partnershipRestaurant = partnershipRestaurant; } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipRestaurant.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipRestaurant.java new file mode 100644 index 00000000..732837e8 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipRestaurant.java @@ -0,0 +1,45 @@ +package ssu.eatssu.domain.partnership.entity; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.BatchSize; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class PartnershipRestaurant { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "partnershipRestaurant_id") + private Long id; + @Enumerated(EnumType.STRING) + @Column(name = "restaurant_type", nullable = false) + private RestaurantType restaurantType; + + @Column(name = "longitude", nullable = false) + private Double longitude; // 경도 == x축 + + @Column(name = "latitude", nullable = false) + private Double latitude; // 위도 == y축 + @Column(name = "store_name", nullable = false) + private String storeName; + + @OneToMany(mappedBy = "partnershipRestaurant") + @BatchSize(size = 20) + private List likes = new ArrayList<>(); + @OneToMany(mappedBy = "partnershipRestaurant", cascade = CascadeType.ALL, orphanRemoval = true) + private List partnerships = new ArrayList<>(); +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java index 041de913..4d0b4b0f 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java @@ -1,15 +1,24 @@ package ssu.eatssu.domain.partnership.persistence; import org.springframework.data.jpa.repository.JpaRepository; -import ssu.eatssu.domain.partnership.entity.Partnership; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import ssu.eatssu.domain.partnership.entity.PartnershipLike; +import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; import ssu.eatssu.domain.user.entity.User; import java.util.List; import java.util.Optional; public interface PartnershipLikeRepository extends JpaRepository { - Optional findByUserAndPartnership(User user, Partnership partnership); + Optional findByUserAndPartnershipRestaurant(User user, + PartnershipRestaurant partnershipRestaurant); - List findAllByUser(User user); + @Query("SELECT pl FROM PartnershipLike pl " + + "JOIN FETCH pl.partnershipRestaurant pr " + + "JOIN FETCH pr.partnerships p " + + "LEFT JOIN FETCH p.partnershipCollege " + + "LEFT JOIN FETCH p.partnershipDepartment " + + "WHERE pl.user = :user") + List findAllByUserWithDetails(@Param("user") User user); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java index 120c7a24..786059e9 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java @@ -11,11 +11,9 @@ public interface PartnershipRepository extends JpaRepository { @Query("SELECT DISTINCT p FROM Partnership p " + - "LEFT JOIN p.partnershipColleges pc " + - "LEFT JOIN pc.college c " + - "LEFT JOIN p.partnershipDepartments pd " + - "LEFT JOIN pd.department d " + - "WHERE (c = :college OR d = :department OR (c IS NOT NULL AND c.name = '총학'))") + "LEFT JOIN p.partnershipCollege pc " + + "LEFT JOIN p.partnershipDepartment pd " + + "WHERE (pc = :college OR pd = :department OR (pc IS NOT NULL AND pc.name = '총학'))") List findRelevantPartnerships(@Param("college") College college, @Param("department") Department department); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java new file mode 100644 index 00000000..5fd32d87 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java @@ -0,0 +1,15 @@ +package ssu.eatssu.domain.partnership.persistence; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; + +import java.util.List; + +public interface PartnershipRestaurantRepository extends JpaRepository { + @Query("SELECT DISTINCT pr FROM PartnershipRestaurant pr " + + "LEFT JOIN FETCH pr.partnerships p " + + "LEFT JOIN FETCH p.partnershipCollege " + + "LEFT JOIN FETCH p.partnershipDepartment ") + List findAllWithDetails(); +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java index bf9103b9..2d3b9236 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java +++ b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java @@ -44,13 +44,13 @@ public BaseResponse createPartnership(@RequestBody CreatePartnershipRequest r return BaseResponse.success(); } - @Operation(summary = "전체 제휴 조회", description = "전체 제휴를 조회하는 API 입니다.") + @Operation(summary = "식당별 전체 제휴 조회", description = "식당별 전체 제휴를 조회하는 API 입니다.") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "제휴 조회 성공"), }) @GetMapping - public BaseResponse> getAllPartnerships() { - return BaseResponse.success(partnershipService.getAllPartnerships()); + public BaseResponse> getAllPartnerships( @AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(partnershipService.getAllPartnerships(userDetails)); } @Operation(summary = "개별 제휴 조회", description = "개별 제휴를 조회하는 API 입니다.") diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java index c02bcebd..1f938edc 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -8,9 +8,9 @@ import ssu.eatssu.domain.partnership.dto.PartnershipDetailResponse; import ssu.eatssu.domain.partnership.dto.PartnershipResponse; import ssu.eatssu.domain.partnership.entity.Partnership; -import ssu.eatssu.domain.partnership.entity.PartnershipCollege; -import ssu.eatssu.domain.partnership.entity.PartnershipDepartment; import ssu.eatssu.domain.partnership.entity.PartnershipLike; +import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; +import ssu.eatssu.domain.partnership.persistence.PartnershipRestaurantRepository; import ssu.eatssu.domain.partnership.persistence.PartnershipLikeRepository; import ssu.eatssu.domain.partnership.persistence.PartnershipRepository; import ssu.eatssu.domain.user.department.entity.College; @@ -30,6 +30,7 @@ import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_COLLEGE; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_DEPARTMENT; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_PARTNERSHIP; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_PARTNERSHIP_RESTAURANT; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; @Service @@ -40,45 +41,45 @@ public class PartnershipService { private final DepartmentRepository departmentRepository; private final UserRepository userRepository; private final PartnershipLikeRepository partnershipLikeRepository; + private final PartnershipRestaurantRepository partnerShipRestaurantRepository; @Transactional public void createPartnership(CreatePartnershipRequest request) { - Partnership partnership = request.toPartnershipEntity(); - - if ("college".equalsIgnoreCase(request.getTargetType())) { - College college = collegeRepository.findByName(request.getTargetName()) - .orElseThrow(() -> new BaseException(NOT_FOUND_COLLEGE)); - PartnershipCollege partnershipCollege = new PartnershipCollege(partnership, college); - partnership.getPartnershipColleges().add(partnershipCollege); - } else if ("department".equalsIgnoreCase(request.getTargetType())) { - Department department = departmentRepository.findByName(request.getTargetName()) - .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); - PartnershipDepartment partnershipDepartment = new PartnershipDepartment(partnership, department); - partnership.getPartnershipDepartments().add(partnershipDepartment); - } else { - throw new BaseException(INVALID_TARGET_TYPE); - } + PartnershipRestaurant partnershipRestaurant = partnerShipRestaurantRepository.findById(request.getStoreId()) + .orElseThrow(()->new BaseException(NOT_FOUND_PARTNERSHIP_RESTAURANT)); + Partnership partnership = request.toPartnershipEntity(partnershipRestaurant); + + College college = collegeRepository.findByName(request.getCollege()) + .orElseThrow(() -> new BaseException(NOT_FOUND_COLLEGE)); + partnership.setPartnershipCollege(college); + Department department = departmentRepository.findByName(request.getDepartment()) + .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); + partnership.setPartnershipDepartment(department); partnershipRepository.save(partnership); } - public List getAllPartnerships() { - List partnerships = partnershipRepository.findAll(); - return partnerships.stream().map(PartnershipResponse::fromEntity) - .collect(Collectors.toList()); + public List getAllPartnerships(CustomUserDetails customUserDetails) { + return partnerShipRestaurantRepository.findAllWithDetails().stream() + .map(restaurant -> PartnershipResponse.fromEntity(restaurant, + customUserDetails.getId())) + .collect(Collectors.toList()); } + public PartnershipDetailResponse getPartnership(Long partnershipId, CustomUserDetails userDetails) { Partnership partnership = partnershipRepository.findById(partnershipId) .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); + PartnershipRestaurant partnershipRestaurant = partnership.getPartnershipRestaurant(); boolean likedByUser = false; if (userDetails != null) { User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - likedByUser = partnershipLikeRepository.findByUserAndPartnership(user, partnership).isPresent(); + likedByUser = partnershipLikeRepository.findByUserAndPartnershipRestaurant(user, partnershipRestaurant) + .isPresent(); } - return PartnershipDetailResponse.fromEntity(partnership, likedByUser); + return PartnershipDetailResponse.fromEntity(partnershipRestaurant, partnership, likedByUser); } @Transactional @@ -87,34 +88,41 @@ public void togglePartnershipLike(Long partnershipId, CustomUserDetails userDeta .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + PartnershipRestaurant partnershipRestaurant = partnership.getPartnershipRestaurant(); - Optional optionalPartnershipLike = partnershipLikeRepository.findByUserAndPartnership(user, - partnership); + Optional optionalPartnershipLike = partnershipLikeRepository.findByUserAndPartnershipRestaurant( + user, + partnershipRestaurant); if (optionalPartnershipLike.isPresent()) { PartnershipLike partnershipLike = optionalPartnershipLike.get(); - partnership.getLikes().remove(partnershipLike); + partnershipRestaurant.getLikes().remove(partnershipLike); partnershipLikeRepository.delete(partnershipLike); } else { - PartnershipLike partnershipLike = new PartnershipLike(user, partnership); - partnership.getLikes().add(partnershipLike); + PartnershipLike partnershipLike = new PartnershipLike(user, partnershipRestaurant); + partnershipRestaurant.getLikes().add(partnershipLike); partnershipLikeRepository.save(partnershipLike); } } - public List getUserLikedPartnerships(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) + public List getUserLikedPartnerships(CustomUserDetails customUserDetails) { + User user = userRepository.findById(customUserDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - List likes = partnershipLikeRepository.findAllByUser(user); - return likes - .stream() - .map(PartnershipLike::getPartnership) - .map(PartnershipResponse::fromEntity) - .collect(Collectors.toList()); + List likes = partnershipLikeRepository.findAllByUserWithDetails(user); + + return likes.stream() + .flatMap(like -> { + PartnershipRestaurant restaurant = like.getPartnershipRestaurant(); + return restaurant.getPartnerships() + .stream() + .map(partnership -> PartnershipResponse.fromEntity(restaurant, + customUserDetails.getId())); + }).collect(Collectors.toList()); } - public List getUserDepartmentPartnerships(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) + + public List getUserDepartmentPartnerships(CustomUserDetails customUserDetails) { + User user = userRepository.findById(customUserDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Department department = user.getDepartment(); @@ -126,7 +134,12 @@ public List getUserDepartmentPartnerships(CustomUserDetails return partnershipRepository .findRelevantPartnerships(college, department) .stream() - .map(PartnershipResponse::fromEntity) + .map(partnership -> { + PartnershipRestaurant partnershipRestaurant = partnership.getPartnershipRestaurant(); + + return PartnershipResponse.fromEntity(partnershipRestaurant, + customUserDetails.getId()); + }) .collect(Collectors.toList()); } } diff --git a/src/main/java/ssu/eatssu/domain/user/department/entity/College.java b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java index a18edb55..3b60fae1 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/entity/College.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java @@ -8,9 +8,10 @@ import jakarta.persistence.Id; import jakarta.persistence.OneToMany; import lombok.AccessLevel; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import ssu.eatssu.domain.partnership.entity.PartnershipCollege; +import ssu.eatssu.domain.partnership.entity.Partnership; import java.util.ArrayList; import java.util.List; @@ -30,6 +31,10 @@ public class College { @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) private List departments = new ArrayList<>(); - @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) - private List partnershipColleges = new ArrayList<>(); + @OneToMany(mappedBy = "partnershipCollege", cascade = CascadeType.ALL, orphanRemoval = true) + private List partnerships = new ArrayList<>(); + + public College(String name) { + this.name = name; + } } diff --git a/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java index 05f4bdea..38765569 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java @@ -13,7 +13,7 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; -import ssu.eatssu.domain.partnership.entity.PartnershipDepartment; +import ssu.eatssu.domain.partnership.entity.Partnership; import java.util.ArrayList; import java.util.List; @@ -34,6 +34,10 @@ public class Department { @JoinColumn(name = "college_id") private College college; - @OneToMany(mappedBy = "department", cascade = CascadeType.ALL, orphanRemoval = true) - private List partnershipDepartments = new ArrayList<>(); + @OneToMany(mappedBy = "partnershipDepartment", cascade = CascadeType.ALL, orphanRemoval = true) + private List partnerships = new ArrayList<>(); + + public Department(String name) { + this.name = name; + } } diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index 059a7da1..30effec1 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -58,6 +58,7 @@ public enum BaseResponseStatus { NOT_FOUND_COLLEGE(false, HttpStatus.NOT_FOUND, 40408, "해당 대학을 찾을 수 없습니다."), NOT_FOUND_DEPARTMENT(false, HttpStatus.NOT_FOUND, 40409, "해당 학과를 찾을 수 없습니다."), NOT_FOUND_PARTNERSHIP(false, HttpStatus.NOT_FOUND, 40410, "해당 제휴를 찾을 수 없습니다."), + NOT_FOUND_PARTNERSHIP_RESTAURANT(false, HttpStatus.NOT_FOUND, 40411, "해당 제휴 식당을 찾을 수 없습니다."), /** * 405 METHOD_NOT_ALLOWED 지원하지 않은 method 호출 diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index fc610794..5133f6cb 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -12,7 +12,7 @@ spring: jpa: hibernate: - ddl-auto: none + ddl-auto: update properties: hibernate: jdbc: From 616c3e2487b5693cd2fd7f31564fa343d576540c Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Sat, 5 Jul 2025 21:13:37 +0900 Subject: [PATCH 243/399] =?UTF-8?q?fix:=20=EB=A7=8C=EB=A3=8C=20=ED=86=A0?= =?UTF-8?q?=ED=81=B0=20403=20=EC=BD=94=EB=93=9C=EB=A1=9C=20=EB=B0=98?= =?UTF-8?q?=ED=99=98=20(#193)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: whitelist uri는 토큰 유효성 검사 제외하게끔 변경 * feat: partnership url whitelist에서 제거 및 filter jwt 예외처리 추가 --- .../auth/infrastructure/SecurityConfig.java | 2 +- .../security/JwtAuthenticationFilter.java | 37 +++++++++++++++---- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index c7f11c5e..d70ae3fc 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -29,7 +29,7 @@ public class SecurityConfig { private static final String[] AUTH_WHITELIST = { "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics/**", - "/partnerships/**", "/v2/reviews/menus/**", "/v2/reviews/meals/**", "/actuator/**", "/error-test/**" + "/v2/reviews/menus/**", "/v2/reviews/meals/**", "/actuator/**", "/error-test/**" }; private static final String[] ADMIN_PAGE_LIST = { diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java index 5b1e5a7f..20e5c724 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java @@ -9,36 +9,57 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.util.AntPathMatcher; import org.springframework.util.StringUtils; import org.springframework.web.filter.GenericFilterBean; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponseStatus; import java.io.IOException; +import java.util.List; @Slf4j @RequiredArgsConstructor public class JwtAuthenticationFilter extends GenericFilterBean { private static final String AUTHORIZATION_HEADER = "Authorization"; private static final String BEARER_TYPE = "Bearer"; - private final JwtTokenProvider jwtTokenProvider; + private static final AntPathMatcher pathMatcher = new AntPathMatcher(); + private static final List AUTH_WHITELIST = List.of( + "/", "/oauths/kakao", "/oauths/apple", "/menus", "/meals", "/admin/login", + "/reviews", "/reviews/menus", "/reviews/meals", "/v2/reviews/statistics", + "/v2/reviews/menus", "/v2/reviews/meals", "/actuator", "/error-test" + ); + @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + HttpServletRequest httpRequest = (HttpServletRequest) request; + String requestURI = httpRequest.getRequestURI(); - // 1. Request Header 에서 JWT 토큰 추출 - String token = resolveToken((HttpServletRequest) request); + if (isWhiteListed(requestURI)) { + chain.doFilter(request, response); + return; + } - // 2. validateToken 으로 토큰 유효성 검사 - if (token != null && jwtTokenProvider.validateToken(token)) { - // 토큰이 유효할 경우 토큰에서 Authentication 객체를 가지고 와서 SecurityContext 에 저장 - Authentication authentication = jwtTokenProvider.getAuthentication(token); - SecurityContextHolder.getContext().setAuthentication(authentication); + String token = resolveToken(httpRequest); + + try { + if (token != null && jwtTokenProvider.validateToken(token)) { + Authentication authentication = jwtTokenProvider.getAuthentication(token); + SecurityContextHolder.getContext().setAuthentication(authentication); + } + } catch (Exception e) { + throw new BaseException(BaseResponseStatus.INVALID_TOKEN); } chain.doFilter(request, response); } + private boolean isWhiteListed(String requestURI) { + return AUTH_WHITELIST.stream().anyMatch(pattern -> pathMatcher.match(pattern, requestURI)); + } // Request Header 에서 토큰 정보 추출 private String resolveToken(HttpServletRequest request) { From e1c9c838090fd63933555cbd83ec0528a231005c Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Sat, 5 Jul 2025 22:35:14 +0900 Subject: [PATCH 244/399] =?UTF-8?q?fix:=20=EC=8B=9C=ED=81=90=EB=A6=AC?= =?UTF-8?q?=ED=8B=B0=20=ED=95=84=ED=84=B0=EC=97=90=EC=84=9C=EB=8F=84=20?= =?UTF-8?q?=EC=8A=AC=EB=9E=99=20=EC=95=8C=EB=A6=BC=20=EB=B3=B4=EB=82=BC=20?= =?UTF-8?q?=EC=88=98=20=EC=9E=88=EA=B2=8C=20=EC=88=98=EC=A0=95=20(#195)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: reformat code * feat: jwt 토큰 만료 로직 개선 및 화이트 리스트 필터 로직 일괄 수정 * feat: SlackErrorNotifier로 슬랙에러 알림 클래스 통합 * feat: 슬랙알림 메시지 null 나오는 문제 수정 * chore: local 알림 메시지 삭제 --- .../auth/infrastructure/SecurityConfig.java | 6 +- .../security/JwtAuthenticationFilter.java | 56 +++++++++++++------ .../auth/security/JwtTokenProvider.java | 19 +++++-- .../ssu/eatssu/domain/menu/entity/Meal.java | 9 +-- .../ssu/eatssu/domain/menu/entity/Menu.java | 18 ++---- .../dto/CreatePartnershipRequest.java | 3 +- .../presentation/PartnershipController.java | 2 +- .../service/PartnershipService.java | 6 +- .../review/dto/ValidMenuForViewResponse.java | 2 - .../presentation/ReviewControllerV2.java | 2 +- .../slack/entity/SlackMessageFormat.java | 9 +-- .../slack/service/SlackErrorNotifier.java | 33 +++++++++++ .../user/department/entity/College.java | 5 +- .../user/department/entity/Department.java | 2 +- .../ssu/eatssu/domain/user/entity/User.java | 35 ++++-------- .../handler/GlobalExceptionHandler.java | 24 ++------ .../handler/response/BaseResponseStatus.java | 2 +- src/main/resources/application-local.yml | 4 +- 18 files changed, 132 insertions(+), 105 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index d70ae3fc..77c3adfd 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -14,6 +14,7 @@ import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import ssu.eatssu.domain.auth.security.JwtAuthenticationFilter; import ssu.eatssu.domain.auth.security.JwtTokenProvider; +import ssu.eatssu.domain.slack.service.SlackErrorNotifier; import ssu.eatssu.global.handler.JwtAccessDeniedHandler; import ssu.eatssu.global.handler.JwtAuthenticationEntryPoint; @@ -29,7 +30,7 @@ public class SecurityConfig { private static final String[] AUTH_WHITELIST = { "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics/**", - "/v2/reviews/menus/**", "/v2/reviews/meals/**", "/actuator/**", "/error-test/**" + "/v2/reviews/menus/**", "/v2/reviews/meals/**", "/actuator/**", "/error-test/**" }; private static final String[] ADMIN_PAGE_LIST = { @@ -39,6 +40,7 @@ public class SecurityConfig { private final JwtTokenProvider jwtTokenProvider; private final JwtAccessDeniedHandler jwtAccessDeniedHandler; private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; + private final SlackErrorNotifier slackErrorNotifier; @Bean public PasswordEncoder passwordEncoder() { @@ -56,7 +58,7 @@ protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .requestMatchers(RESOURCE_LIST).permitAll() .requestMatchers(ADMIN_PAGE_LIST).hasRole("ADMIN") .anyRequest().authenticated() - .and().addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), + .and().addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider, slackErrorNotifier), UsernamePasswordAuthenticationFilter.class)) .exceptionHandling() .accessDeniedHandler(jwtAccessDeniedHandler) diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java index 20e5c724..27f28dc3 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java @@ -5,63 +5,85 @@ import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.util.AntPathMatcher; import org.springframework.util.StringUtils; import org.springframework.web.filter.GenericFilterBean; +import ssu.eatssu.domain.slack.service.SlackErrorNotifier; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; import java.io.IOException; import java.util.List; -@Slf4j @RequiredArgsConstructor +@Slf4j public class JwtAuthenticationFilter extends GenericFilterBean { private static final String AUTHORIZATION_HEADER = "Authorization"; private static final String BEARER_TYPE = "Bearer"; - private final JwtTokenProvider jwtTokenProvider; private static final AntPathMatcher pathMatcher = new AntPathMatcher(); + private static final List AUTH_WHITELIST = List.of( - "/", "/oauths/kakao", "/oauths/apple", "/menus", "/meals", "/admin/login", - "/reviews", "/reviews/menus", "/reviews/meals", "/v2/reviews/statistics", - "/v2/reviews/menus", "/v2/reviews/meals", "/actuator", "/error-test" + "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", + "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics/**", + "/v2/reviews/menus/**", "/v2/reviews/meals/**", "/actuator/**", "/error-test/**", + "/swagger-ui.html", "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**", + "/oauths/valid/token", "/admin/img/**", "/css/**", "/js/**", + "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" ); - + private final JwtTokenProvider jwtTokenProvider; + private final SlackErrorNotifier slackErrorNotifier; @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws - IOException, - ServletException { + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; + HttpServletResponse httpResponse = (HttpServletResponse) response; String requestURI = httpRequest.getRequestURI(); if (isWhiteListed(requestURI)) { + log.info("화이트리스트 통과: {}", requestURI); chain.doFilter(request, response); return; } String token = resolveToken(httpRequest); - try { - if (token != null && jwtTokenProvider.validateToken(token)) { - Authentication authentication = jwtTokenProvider.getAuthentication(token); - SecurityContextHolder.getContext().setAuthentication(authentication); - } - } catch (Exception e) { - throw new BaseException(BaseResponseStatus.INVALID_TOKEN); + if (token == null) { + log.warn("토큰 없음: {}", requestURI); + httpResponse.setStatus(HttpStatus.FORBIDDEN.value()); + httpResponse.setContentType("application/json;charset=UTF-8"); + httpResponse.setCharacterEncoding("UTF-8"); + httpResponse.getWriter().write("{\"success\":false,\"code\":403,\"message\":\"유효하지 않은 토큰입니다.\"}"); + slackErrorNotifier.notify(new BaseException(BaseResponseStatus.INVALID_TOKEN)); + return; + } + + if (!jwtTokenProvider.validateToken(token)) { + log.warn("토큰 유효하지 않음: {}", requestURI); + httpResponse.setStatus(HttpStatus.FORBIDDEN.value()); + httpResponse.setContentType("application/json;charset=UTF-8"); + httpResponse.setCharacterEncoding("UTF-8"); + httpResponse.getWriter().write("{\"success\":false,\"code\":403,\"message\":\"유효하지 않은 토큰입니다.\"}"); + slackErrorNotifier.notify(new BaseException(BaseResponseStatus.INVALID_TOKEN)); + return; } + Authentication authentication = jwtTokenProvider.getAuthentication(token); + SecurityContextHolder.getContext().setAuthentication(authentication); + chain.doFilter(request, response); } + private boolean isWhiteListed(String requestURI) { return AUTH_WHITELIST.stream().anyMatch(pattern -> pathMatcher.match(pattern, requestURI)); } - // Request Header 에서 토큰 정보 추출 private String resolveToken(HttpServletRequest request) { String bearerToken = request.getHeader(AUTHORIZATION_HEADER); if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(BEARER_TYPE)) { diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java index 52a7c6c6..e13ffaa1 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java @@ -3,6 +3,8 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.jsonwebtoken.Claims; +import io.jsonwebtoken.ExpiredJwtException; +import io.jsonwebtoken.JwtException; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.io.Decoders; @@ -158,13 +160,22 @@ private Claims getClaims(String token) { } //토큰 유효성 검증 - public boolean validateToken(String token) throws BaseException { + public boolean validateToken(String token) { try { - Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token); + Claims claims = Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody(); + Date expiration = claims.getExpiration(); + if (expiration.before(new Date())) { + log.warn("토큰 만료됨"); + return false; + } return true; - } catch (Exception e) { - log.warn("토큰 유효성 검증 실패: {}", e.getMessage()); + } catch (ExpiredJwtException e) { + log.warn("ExpiredJwtException: {}", e.getMessage()); + return false; + } catch (JwtException | IllegalArgumentException e) { + log.warn("JWT 검증 실패: {}", e.getMessage()); return false; } } + } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index 6519126e..7680ff3a 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -28,26 +28,21 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Meal { + @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private final List mealMenus = new ArrayList<>(); @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "meal_id") private Long id; - @DateTimeFormat(pattern = "yyyyMMdd") @Temporal(TemporalType.DATE) private Date date; - @Enumerated(EnumType.STRING) private Restaurant restaurant; - @Enumerated(EnumType.STRING) private TimePart timePart; - private Integer price; - @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL, fetch = FetchType.LAZY) - private final List mealMenus = new ArrayList<>(); - public Meal(Date date, TimePart timePart, Restaurant restaurant) { this.date = date; this.timePart = timePart; diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index 69619c12..b3346b03 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -28,25 +28,19 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Menu { + // TODO : 삭제되어야 함 + @Embedded + private final Reviews reviews = new Reviews(); + @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) + private final List mealMenus = new ArrayList<>(); @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "menu_id") private Long id; - private String name; - private Integer price; - @Enumerated(EnumType.STRING) private Restaurant restaurant; - - // TODO : 삭제되어야 함 - @Embedded - private final Reviews reviews = new Reviews(); - - @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) - private final List mealMenus = new ArrayList<>(); - @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "menu_category_id") private MenuCategory category; @@ -57,7 +51,7 @@ public class Menu { private Integer likeCount = 0; @Column(name = "unlike_count") - private Integer unlikeCount = 0; + private final Integer unlikeCount = 0; private Menu(String name, Restaurant restaurant, Integer price, MenuCategory category) { this.name = name; diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java index 4e544539..b5c061b9 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java @@ -6,8 +6,6 @@ import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; import ssu.eatssu.domain.partnership.entity.PartnershipType; -import ssu.eatssu.domain.user.department.entity.College; -import ssu.eatssu.domain.user.department.entity.Department; import java.time.LocalDate; @@ -29,6 +27,7 @@ public class CreatePartnershipRequest { private LocalDate startDate; @Schema(description = "제휴 종료 날짜", example = "2025-07-30") private LocalDate endDate; + public Partnership toPartnershipEntity(PartnershipRestaurant partnershipRestaurant) { return Partnership.builder() .partnershipRestaurant(partnershipRestaurant) diff --git a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java index 2d3b9236..0f9a4d8a 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java +++ b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java @@ -49,7 +49,7 @@ public BaseResponse createPartnership(@RequestBody CreatePartnershipRequest r @ApiResponse(responseCode = "200", description = "제휴 조회 성공"), }) @GetMapping - public BaseResponse> getAllPartnerships( @AuthenticationPrincipal CustomUserDetails userDetails) { + public BaseResponse> getAllPartnerships(@AuthenticationPrincipal CustomUserDetails userDetails) { return BaseResponse.success(partnershipService.getAllPartnerships(userDetails)); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java index 1f938edc..92d5f275 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -10,9 +10,9 @@ import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipLike; import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; -import ssu.eatssu.domain.partnership.persistence.PartnershipRestaurantRepository; import ssu.eatssu.domain.partnership.persistence.PartnershipLikeRepository; import ssu.eatssu.domain.partnership.persistence.PartnershipRepository; +import ssu.eatssu.domain.partnership.persistence.PartnershipRestaurantRepository; import ssu.eatssu.domain.user.department.entity.College; import ssu.eatssu.domain.user.department.entity.Department; import ssu.eatssu.domain.user.department.persistence.CollegeRepository; @@ -25,7 +25,6 @@ import java.util.Optional; import java.util.stream.Collectors; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.INVALID_TARGET_TYPE; import static ssu.eatssu.global.handler.response.BaseResponseStatus.MISSING_USER_DEPARTMENT; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_COLLEGE; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_DEPARTMENT; @@ -46,7 +45,8 @@ public class PartnershipService { @Transactional public void createPartnership(CreatePartnershipRequest request) { PartnershipRestaurant partnershipRestaurant = partnerShipRestaurantRepository.findById(request.getStoreId()) - .orElseThrow(()->new BaseException(NOT_FOUND_PARTNERSHIP_RESTAURANT)); + .orElseThrow(() -> new BaseException( + NOT_FOUND_PARTNERSHIP_RESTAURANT)); Partnership partnership = request.toPartnershipEntity(partnershipRestaurant); College college = collegeRepository.findByName(request.getCollege()) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java index c93aca8f..6cc2a4a2 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java @@ -1,11 +1,9 @@ package ssu.eatssu.domain.review.dto; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import lombok.NoArgsConstructor; import lombok.Setter; import java.util.List; diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java index ab9ea8ab..4efe696e 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java @@ -207,7 +207,7 @@ public BaseResponse> getMenuReviewList( @PostMapping("/menu") public BaseResponse createMenuReview(@RequestBody CreateMenuReviewRequest createMenuReviewRequest, @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewServiceV2.createMenuReview(customUserDetails,createMenuReviewRequest); + reviewServiceV2.createMenuReview(customUserDetails, createMenuReviewRequest); return BaseResponse.success(); } diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java index 80d3f9ed..adb4cb1d 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java @@ -6,6 +6,7 @@ import ssu.eatssu.domain.review.entity.Report; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.global.handler.response.BaseException; import java.text.MessageFormat; @@ -68,20 +69,20 @@ public static String sendUserInquiry(Inquiry inquiry) { } - public static String sendServerError(Exception ex) { + public static String sendServerError(BaseException ex) { MessageFormat messageFormat = new MessageFormat( """ =================== *서버 에러 발생* - - 예외 클래스: {0} + - 예외 상태코드: {0} - 예외 메시지: {1} - 개발환경: {2} =================== """ ); Object[] args = { - ex.getClass().getName(), - ex.getMessage(), + ex.getStatus(), + ex.getStatus().getMessage(), serverEnv, }; return messageFormat.format(args); diff --git a/src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java b/src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java new file mode 100644 index 00000000..b4b863b0 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java @@ -0,0 +1,33 @@ +package ssu.eatssu.domain.slack.service; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import ssu.eatssu.domain.slack.entity.SlackChannel; +import ssu.eatssu.domain.slack.entity.SlackMessageFormat; +import ssu.eatssu.global.handler.response.BaseException; + +@Service +@Slf4j +public class SlackErrorNotifier { + private final SlackService slackService; + @Value("${server.env:unknown}") + private String serverEnv; + + public SlackErrorNotifier(SlackService slackService) { + this.slackService = slackService; + } + + public void notify(BaseException ex) { + if (!("dev".equals(serverEnv) || "prod".equals(serverEnv))) { + return; + } + try { + String message = SlackMessageFormat.sendServerError(ex); + slackService.sendSlackMessage(message, SlackChannel.SERVER_ERROR); + } catch (Exception slackEx) { + log.warn("슬랙 전송 실패: {}", slackEx.getMessage()); + } + } +} + diff --git a/src/main/java/ssu/eatssu/domain/user/department/entity/College.java b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java index 3b60fae1..70ae0260 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/entity/College.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java @@ -8,7 +8,6 @@ import jakarta.persistence.Id; import jakarta.persistence.OneToMany; import lombok.AccessLevel; -import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import ssu.eatssu.domain.partnership.entity.Partnership; @@ -29,10 +28,10 @@ public class College { private String name; @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) - private List departments = new ArrayList<>(); + private final List departments = new ArrayList<>(); @OneToMany(mappedBy = "partnershipCollege", cascade = CascadeType.ALL, orphanRemoval = true) - private List partnerships = new ArrayList<>(); + private final List partnerships = new ArrayList<>(); public College(String name) { this.name = name; diff --git a/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java index 38765569..9c5f227c 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java @@ -35,7 +35,7 @@ public class Department { private College college; @OneToMany(mappedBy = "partnershipDepartment", cascade = CascadeType.ALL, orphanRemoval = true) - private List partnerships = new ArrayList<>(); + private final List partnerships = new ArrayList<>(); public Department(String name) { this.name = name; diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index 97ba385b..58e0c6f0 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -32,49 +32,36 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) public class User extends BaseTimeEntity { + @OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE + , CascadeType.REFRESH}) + private final List reviews = new ArrayList<>(); + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) + private final List reviewReports = new ArrayList<>(); + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) + private final List userInquiries = new ArrayList<>(); + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) + private final List reviewLikes = new ArrayList<>(); + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) + private final List partnershipLikes = new ArrayList<>(); @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "user_id") private Long id; - @Enumerated(EnumType.STRING) private Role role; - @Column(unique = true) private String email; - private String nickname; - @Enumerated(EnumType.STRING) private OAuthProvider provider; - private String providerId; - private String credentials; - @Enumerated(EnumType.STRING) private UserStatus status; - - @OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE - , CascadeType.REFRESH}) - private final List reviews = new ArrayList<>(); - - @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) - private final List reviewReports = new ArrayList<>(); - - @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) - private final List userInquiries = new ArrayList<>(); - - @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) - private final List reviewLikes = new ArrayList<>(); - @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "department_id") private Department department; - @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) - private final List partnershipLikes = new ArrayList<>(); - /** * Oauth 회원가입 용 생성자 */ diff --git a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java index 9abb4817..1935a8b4 100644 --- a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java @@ -25,8 +25,7 @@ import org.springframework.web.multipart.support.MissingServletRequestPartException; import org.springframework.web.servlet.NoHandlerFoundException; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; -import ssu.eatssu.domain.slack.entity.SlackMessageFormat; -import ssu.eatssu.domain.slack.service.SlackService; +import ssu.eatssu.domain.slack.service.SlackErrorNotifier; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.global.handler.response.BaseResponseStatus; @@ -38,7 +37,7 @@ @RestControllerAdvice @RequiredArgsConstructor public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { - private final SlackService slackService; + private final SlackErrorNotifier slackErrorNotifier; @Value("${server.env:unknown}") private String serverEnv; @@ -47,13 +46,13 @@ public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { */ @ExceptionHandler(BaseException.class) public ResponseEntity> handleBaseException(BaseException e) { - sendErrorToSlack(e); + slackErrorNotifier.notify(e); return ResponseEntity.status(e.getStatus().getHttpStatus()).body(BaseResponse.fail(e.getStatus())); } @ExceptionHandler(Exception.class) public ResponseEntity> handleAllUnhandledException(Exception ex) { - sendErrorToSlack(ex); + slackErrorNotifier.notify(new BaseException(BaseResponseStatus.BAD_REQUEST)); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); } @@ -241,7 +240,7 @@ protected ResponseEntity handleExceptionInternal( HttpStatus status = HttpStatus.valueOf(statusCode.value()); if (status.is4xxClientError() || status.is5xxServerError()) { - sendErrorToSlack(ex); + slackErrorNotifier.notify(new BaseException(BaseResponseStatus.BAD_REQUEST)); } BaseResponseStatus responseStatus = status.is4xxClientError() @@ -251,18 +250,5 @@ protected ResponseEntity handleExceptionInternal( return ResponseEntity.status(status).body(BaseResponse.fail(responseStatus)); } - private void sendErrorToSlack(Exception ex) { - if (!("dev".equals(serverEnv) || "prod".equals(serverEnv))) { - return; - } - - try { - String message = SlackMessageFormat.sendServerError(ex); - slackService.sendSlackMessage(message, ssu.eatssu.domain.slack.entity.SlackChannel.SERVER_ERROR); - } catch (Exception slackEx) { - log.warn("슬랙 전송 실패: {}", slackEx.getMessage()); - } - } - } diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index 30effec1..c17fc045 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -36,7 +36,7 @@ public enum BaseResponseStatus { * 401 UNAUTHORIZED 권한없음(인증 실패) */ UNAUTHORIZED(false, HttpStatus.UNAUTHORIZED, 401, "인증에 실패했습니다."), - INVALID_TOKEN(false, HttpStatus.UNAUTHORIZED, 40101, "유효하지 않은 토큰 입니다."), + INVALID_TOKEN(false, HttpStatus.UNAUTHORIZED, 401, "유효하지 않은 토큰 입니다."), /** * 403 FORBIDDEN 권한없음(인가 실패) diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 5133f6cb..a85011b2 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -29,8 +29,8 @@ spring: jwt: secret: key: ${EATSSU_JWT_SECRET_LOCAL} - token-validity-in-seconds: 86400 - refresh-token-validity-in-seconds: 259200 + token-validity-in-seconds: 10 + refresh-token-validity-in-seconds: 30 cloud: aws: From d3439b894c544941c00172446ec2ab991a452530 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sun, 6 Jul 2025 17:51:34 +0900 Subject: [PATCH 245/399] =?UTF-8?q?hotfix:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EB=A1=9C=EA=B7=B8=20=EC=82=AD=EC=A0=9C=20=EB=B0=8F?= =?UTF-8?q?=20=EC=8A=AC=EB=9E=99=20=EC=95=8C=EB=A6=BC=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/auth/security/JwtAuthenticationFilter.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java index 27f28dc3..77332958 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java @@ -47,7 +47,6 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha String requestURI = httpRequest.getRequestURI(); if (isWhiteListed(requestURI)) { - log.info("화이트리스트 통과: {}", requestURI); chain.doFilter(request, response); return; } @@ -55,12 +54,10 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha String token = resolveToken(httpRequest); if (token == null) { - log.warn("토큰 없음: {}", requestURI); httpResponse.setStatus(HttpStatus.FORBIDDEN.value()); httpResponse.setContentType("application/json;charset=UTF-8"); httpResponse.setCharacterEncoding("UTF-8"); - httpResponse.getWriter().write("{\"success\":false,\"code\":403,\"message\":\"유효하지 않은 토큰입니다.\"}"); - slackErrorNotifier.notify(new BaseException(BaseResponseStatus.INVALID_TOKEN)); + httpResponse.getWriter().write("{\"success\":false,\"code\":401,\"message\":\"유효하지 않은 토큰입니다.\"}"); return; } @@ -69,7 +66,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha httpResponse.setStatus(HttpStatus.FORBIDDEN.value()); httpResponse.setContentType("application/json;charset=UTF-8"); httpResponse.setCharacterEncoding("UTF-8"); - httpResponse.getWriter().write("{\"success\":false,\"code\":403,\"message\":\"유효하지 않은 토큰입니다.\"}"); + httpResponse.getWriter().write("{\"success\":false,\"code\":401,\"message\":\"유효하지 않은 토큰입니다.\"}"); slackErrorNotifier.notify(new BaseException(BaseResponseStatus.INVALID_TOKEN)); return; } From 013faae02553c79f3286db5207134dcd850aebf7 Mon Sep 17 00:00:00 2001 From: Jiwoong CHOI Date: Sat, 12 Jul 2025 13:10:10 +0900 Subject: [PATCH 246/399] =?UTF-8?q?feat:=20.env=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=20(#196)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gemini/styleguide.md | 8 -------- .gitignore | 3 +++ src/main/resources/application.yml | 2 ++ src/test/resources/application.yml | 4 +++- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/.gemini/styleguide.md b/.gemini/styleguide.md index e74ab612..2cde6b6e 100644 --- a/.gemini/styleguide.md +++ b/.gemini/styleguide.md @@ -1,22 +1,14 @@ -# Copilot instructions - - You must respond in Korean for all answers, regardless of the input language. - Do not write any comments in code blocks, even if asked to do so. - Do not use wildcard when importing libraries - When you write reviews for pull request, specific review will very helpful for my team. - Suggest based on logical reasons. -## Commenting Convention - - Comments should be written in a single line whenever possible. - Each comment must include the author's name and the date. - Use IntelliJ's default `FIX ME` comment format. - Use this for parts of the code where there may be a potential issue but immediate exception handling is unnecessary. - Also use this for parts that are not yet finalized due to unclear business requirements. -## Test Code Convention - - Test method names must be written in **English**. - But if the codes is related to test, write the comment for "given, when, then". - -Please follow these conventions when reviewing or suggesting changes to the code. \ No newline at end of file diff --git a/.gitignore b/.gitignore index 57e55e52..78ce332e 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,6 @@ out/ ### Docker Tar files ### /eat-ssu.tar + +### env file ### +.env \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 7c25d12e..fb673485 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,6 +1,8 @@ spring: profiles: active: local + config: + import: optional:file:.env[.properties] user: forbidden-nicknames: diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml index 027b4e36..16b31d4b 100644 --- a/src/test/resources/application.yml +++ b/src/test/resources/application.yml @@ -1,3 +1,5 @@ spring: profiles: - active: test \ No newline at end of file + active: test + config: + import: optional:file:.env[.properties] \ No newline at end of file From 187cc78c50b5304d5c8574fdf6528d237883a264 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Sun, 20 Jul 2025 16:41:30 +0900 Subject: [PATCH 247/399] =?UTF-8?q?feat:=20dev=20=EC=8A=AC=EB=9E=99?= =?UTF-8?q?=EB=B4=87=20=EC=95=8C=EB=A6=BC=20=EC=A0=9C=EA=B1=B0=20(#205)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/slack/service/SlackErrorNotifier.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java b/src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java index b4b863b0..8abb0e28 100644 --- a/src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java +++ b/src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java @@ -19,7 +19,7 @@ public SlackErrorNotifier(SlackService slackService) { } public void notify(BaseException ex) { - if (!("dev".equals(serverEnv) || "prod".equals(serverEnv))) { + if ("prod".equals(serverEnv)) { return; } try { From 66fa2df293d3daeff310b649a7f958ac0a5a77c8 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Sun, 20 Jul 2025 18:29:04 +0900 Subject: [PATCH 248/399] =?UTF-8?q?feat:=20=EC=8B=9D=EB=8B=A8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20api=EC=97=90=20FACULTY=20enum=EC=B6=94=EA=B0=80=20(?= =?UTF-8?q?#206)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ssu/eatssu/domain/restaurant/entity/Restaurant.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index 8ac11487..553e53bd 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -14,7 +14,8 @@ public enum Restaurant { DORMITORY("DORMITORY", 5500), FOOD_COURT("FOOD_COURT", null), SNACK_CORNER("SNACK_CORNER", null), - HAKSIK("HAKSIK", 5000); + HAKSIK("HAKSIK", 5000), + FACULTY("FACULTY",null); private final String restaurantName; private final Integer restaurantPrice; From da212023e46ea5388e40ee5947ca618a6f5297e7 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Sun, 20 Jul 2025 19:43:03 +0900 Subject: [PATCH 249/399] =?UTF-8?q?feat:=20=EC=A0=9C=ED=9C=B4=EC=A7=80?= =?UTF-8?q?=EB=8F=84=20250710=EC=9A=94=EC=B2=AD=EC=82=AC=ED=95=AD=20(#207)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 개별제휴 조회 API 삭제 * feat: slack 알림 local에서도 나가는 문제 수정 * feat: 학과기입여부 API 삭제 * feat: 유저 학과조회 API에 학과가 없으면 빈문자열 return하게끔 수정 * feat: [gemini] - 슬랙 알림 에러 메시지 생성 로직 개선 * feat: [gemini] - 학과 조회 삼항연산자로 로직 개선 --- .../presentation/PartnershipController.java | 14 -------------- .../partnership/service/PartnershipService.java | 17 ----------------- .../slack/service/SlackErrorNotifier.java | 2 +- .../user/presentation/UserController.java | 11 ----------- .../eatssu/domain/user/service/UserService.java | 12 +----------- src/main/resources/application-local.yml | 4 ++-- 6 files changed, 4 insertions(+), 56 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java index 0f9a4d8a..0e76475e 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java +++ b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java @@ -16,7 +16,6 @@ import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.CreatePartnershipRequest; -import ssu.eatssu.domain.partnership.dto.PartnershipDetailResponse; import ssu.eatssu.domain.partnership.dto.PartnershipResponse; import ssu.eatssu.domain.partnership.service.PartnershipService; import ssu.eatssu.global.handler.response.BaseResponse; @@ -53,19 +52,6 @@ public BaseResponse> getAllPartnerships(@Authenticatio return BaseResponse.success(partnershipService.getAllPartnerships(userDetails)); } - @Operation(summary = "개별 제휴 조회", description = "개별 제휴를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "제휴 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 제휴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/{partnershipId}") - public BaseResponse getPartnership( - @PathVariable Long partnershipId, - @AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(partnershipService.getPartnership(partnershipId, userDetails)); - } @Operation(summary = "제휴 찜 등록하기/취소하기", description = "제휴 찜 등록하기/취소하기(토글) API 입니다.") @ApiResponses(value = { diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java index 92d5f275..6e1bd075 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -5,7 +5,6 @@ import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.CreatePartnershipRequest; -import ssu.eatssu.domain.partnership.dto.PartnershipDetailResponse; import ssu.eatssu.domain.partnership.dto.PartnershipResponse; import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipLike; @@ -66,22 +65,6 @@ public List getAllPartnerships(CustomUserDetails customUser } - public PartnershipDetailResponse getPartnership(Long partnershipId, CustomUserDetails userDetails) { - Partnership partnership = partnershipRepository.findById(partnershipId) - .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); - PartnershipRestaurant partnershipRestaurant = partnership.getPartnershipRestaurant(); - - boolean likedByUser = false; - if (userDetails != null) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - likedByUser = partnershipLikeRepository.findByUserAndPartnershipRestaurant(user, partnershipRestaurant) - .isPresent(); - } - - return PartnershipDetailResponse.fromEntity(partnershipRestaurant, partnership, likedByUser); - } - @Transactional public void togglePartnershipLike(Long partnershipId, CustomUserDetails userDetails) { Partnership partnership = partnershipRepository.findById(partnershipId) diff --git a/src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java b/src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java index 8abb0e28..e9c1d316 100644 --- a/src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java +++ b/src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java @@ -19,7 +19,7 @@ public SlackErrorNotifier(SlackService slackService) { } public void notify(BaseException ex) { - if ("prod".equals(serverEnv)) { + if (!"prod".equals(serverEnv)) { return; } try { diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 2d57819a..83f064a1 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -167,17 +167,6 @@ public BaseResponse> getUserDepartmentPartnerships( return BaseResponse.success(partnershipService.getUserDepartmentPartnerships(userDetails)); } - @Operation(summary = "학과 기입 여부 체크", description = """ - 학과 기입 여부 체크 API 입니다.

- 학과를 기입했으면 true, 아니면 false 를 반환합니다 - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "학과 기입함") - }) - @GetMapping("/validate/department") - public BaseResponse validateDepartmentExists(@AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(userService.validateDepartmentExists(userDetails)); - } @Operation(summary = "유저의 학과 조회", description = "유저의 학과를 조회하는 API 입니다.") @ApiResponses(value = { diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index 19c2eef3..8dd68dc8 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -23,7 +23,6 @@ import java.util.UUID; import static ssu.eatssu.global.handler.response.BaseResponseStatus.DUPLICATE_NICKNAME; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.MISSING_USER_DEPARTMENT; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_DEPARTMENT; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; @@ -105,20 +104,11 @@ public void registerDepartment(UpdateDepartmentRequest request, CustomUserDetail user.updateDepartment(department); } - public Boolean validateDepartmentExists(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - return user.getDepartment() != null; - } - public DepartmentResponse getDepartment(CustomUserDetails userDetails) { User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Department department = user.getDepartment(); - if (department == null) { - throw new BaseException(MISSING_USER_DEPARTMENT); - } - return new DepartmentResponse(department.getName()); + return new DepartmentResponse(department != null ? department.getName() : ""); } private boolean isForbiddenNickname(String nickname) { diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index a85011b2..399b9d53 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -29,8 +29,8 @@ spring: jwt: secret: key: ${EATSSU_JWT_SECRET_LOCAL} - token-validity-in-seconds: 10 - refresh-token-validity-in-seconds: 30 + token-validity-in-seconds: 86400 + refresh-token-validity-in-seconds: 604800 cloud: aws: From e0ac8b8668fa13013fbae57f52e2a28b73d74a0f Mon Sep 17 00:00:00 2001 From: Jiwoong CHOI Date: Sun, 20 Jul 2025 21:29:59 +0900 Subject: [PATCH 250/399] =?UTF-8?q?fix:=20Java=20Toolchain=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EC=B6=94=EA=B0=80=20(Java=2017)=20(#198)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: Java Toolchain 설정 추가 (Java 17) * fix: Java 17 소스 호환성 설정 제거 --- build.gradle | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 5d72192e..6cad98bb 100644 --- a/build.gradle +++ b/build.gradle @@ -4,9 +4,14 @@ plugins { id 'io.spring.dependency-management' version '1.1.0' } +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(17)) + } +} + group = 'ssu' version = '0.0.1-SNAPSHOT' -sourceCompatibility = '17' bootJar { archivesBaseName = 'EatSsu' From 1c47c23d6ee716103523ae034add92bc7f06f654 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Mon, 21 Jul 2025 19:57:55 +0900 Subject: [PATCH 251/399] =?UTF-8?q?hotfix:=20=ED=86=A0=ED=81=B0=20?= =?UTF-8?q?=EC=9E=AC=EB=B0=9C=EA=B8=89=20=EC=8B=9C=EA=B0=84=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 --- src/main/resources/application-dev.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 20b92233..a5043661 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -41,8 +41,8 @@ spring: jwt: secret: key: ${EATSSU_JWT_SECRET_DEV} - token-validity-in-seconds: 86400 - refresh-token-validity-in-seconds: 604800 + token-validity-in-seconds: 60 + refresh-token-validity-in-seconds: 180 #S3 cloud: From 1b15a34f2c441e48e0651a48ff89d1e690b6586d Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Sun, 27 Jul 2025 12:19:08 +0900 Subject: [PATCH 252/399] =?UTF-8?q?feat:=20=ED=86=A0=ED=81=B0=20=EB=A7=8C?= =?UTF-8?q?=EB=A3=8C=EC=8B=9C=20401=EB=A1=9C=20=EB=B0=98=ED=99=98=ED=95=98?= =?UTF-8?q?=EA=B2=8C=EB=81=94=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/auth/security/JwtAuthenticationFilter.java | 4 ++-- src/main/resources/application-local.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java index 77332958..4c577027 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java @@ -54,7 +54,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha String token = resolveToken(httpRequest); if (token == null) { - httpResponse.setStatus(HttpStatus.FORBIDDEN.value()); + httpResponse.setStatus(HttpStatus.UNAUTHORIZED.value()); httpResponse.setContentType("application/json;charset=UTF-8"); httpResponse.setCharacterEncoding("UTF-8"); httpResponse.getWriter().write("{\"success\":false,\"code\":401,\"message\":\"유효하지 않은 토큰입니다.\"}"); @@ -63,7 +63,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha if (!jwtTokenProvider.validateToken(token)) { log.warn("토큰 유효하지 않음: {}", requestURI); - httpResponse.setStatus(HttpStatus.FORBIDDEN.value()); + httpResponse.setStatus(HttpStatus.UNAUTHORIZED.value()); httpResponse.setContentType("application/json;charset=UTF-8"); httpResponse.setCharacterEncoding("UTF-8"); httpResponse.getWriter().write("{\"success\":false,\"code\":401,\"message\":\"유효하지 않은 토큰입니다.\"}"); diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 399b9d53..a85011b2 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -29,8 +29,8 @@ spring: jwt: secret: key: ${EATSSU_JWT_SECRET_LOCAL} - token-validity-in-seconds: 86400 - refresh-token-validity-in-seconds: 604800 + token-validity-in-seconds: 10 + refresh-token-validity-in-seconds: 30 cloud: aws: From 6bd7ac37f703e90d03aef84a319c7f862a79f769 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Sun, 3 Aug 2025 21:41:34 +0900 Subject: [PATCH 253/399] =?UTF-8?q?[Release]=20V2.0.0=20=EC=A0=9C=ED=9C=B4?= =?UTF-8?q?=EC=A7=80=EB=8F=84=20=EB=B0=B0=ED=8F=AC=20(#209)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 다양한 도메인 및 서비스에 대한 기능 추가 및 수정 (#170) * fix: 리뷰v2 0601 수정사항 (#171) * feat: 리뷰 좋아요, 싫어요 API 삭제 * feat: 리뷰v2 uri 직관적으로 네이밍 수정 * feat: dev, prod에서만 서버에러 슬랙 알림가게 수정 * feat: menu에 대한 리뷰리스트 조회 추가 * feat: likeCount, alias 제거 * feat: menu에 대한 리뷰 추가 * chore: 내가 쓴 리뷰 조회 user -> review로 위치 이동 * feat: /statistics/menu api 조회시 npe 나는 문제 해결 * feat: ReviewMenuRepository 원복 * feat: meal, menu 정보 조회 시 menuName / menuNames null로 나오는 문제 해결 * feat: 좋아요, 싫어요 산정 기준에 맞춰서 로직 변경 * feat: /users/reviews NPE 문제 나는 부분 예외처리 * feat: 마이페이지 좋아한 메뉴 칩 추가되게 dto, 로직 일괄 변경 * feat: 특정 메뉴 리스트 조회 로직 변경 * Merge pull request #178 from EAT-SSU/feat/add-ai-rules feat: .gitignore 및 코드컨벤션에 맞는 AI Rules 작성 * feat: 테스트 코드 구조 개선 및 OAuthService 테스트 케이스 추가 (#177) * feat: 테스트 코드 구조 개선 및 OAuthService 테스트 케이스 추가 - 기존 `OauthServiceTest` 및 Apple 관련 Mock 클래스 제거 - `OAuthServiceUnitTest` 작성으로 단위 테스트 강화 - 테스트 프로필 활성화를 위한 설정 및 application.yml 정리 - 테스트 환경(application-test.yml) 개선 - 빌드 환경 관련 build.gradle 의존성 간소화 및 필요한 테스트 의존성 추가 * feat: Tokens 클래스 리팩토링 및 OAuthService 테스트 추가 - Tokens 클래스를 record로 변경하여 간결하게 리팩토링 - OAuthService에 대한 통합 테스트 추가 - 기존 OAuthServiceUnitTest 파일 삭제 및 테스트 구조 개선 - GitHub Actions에서 테스트 환경 설정 강화 * fix: 변수를 거치지 않고 리턴하게 코드 수정 Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * feat: 금지된 닉네임 목록에 추가 항목 추가 (#179) * feat: Gemini 설정 및 스타일 가이드 문서 추가 (#181) * feat: Gemini 설정 및 스타일 가이드 문서 추가 * fix: 영어 문법 수정 * feat: Copilot 지침 및 주석, 테스트 코드 규칙 추가 * feat: Review 엔티티 필드 및 메서드 정리 (#180) * feat: eatssu scheme에 따른 코드 재정렬 (#185) * hotfix: 토큰 401에러 확인을 위한 토큰 시간 조정 핫픽스 * hotfix: jwt 유효시간 원복 * feat: 250626 리뷰v2수정요청사항 (#189) * feat: 리뷰 리스트 조회시 싫어요 제거 * feat: 싫어요 관련 필드 일괄 삭제 * feat: menu에 대한 리뷰에도 좋아요 기능 추가 * feat: 전체 메뉴 칩 필드 추가 * feat: my페이지 menu name 조회되게 추가 * feat: 마이페이지 전체 메뉴칩 npe 예외처리 * feat: mypage review dto 코드 포멧팅 * feat: 리뷰에 제외되는 메뉴 조회 api 개발 * feat: 단일메뉴 작성 transactional 어노테이션 추가 * feat: gemini pr 리뷰에 맞춰 수정 * feat: 제휴지도250702수정 (#192) * feat: 전체조회 API에 좋아요 수 필드 추가 * feat: 음식점 좋아요 했는지 필드 추가: * feat: PartnershipRestaurant 엔티티 추가 * feat: 식당<->단과대 n:m 매핑테이블을 Partnership으로 변경 * feat: 식당별 제휴 조회로 수정 * feat: gemini 리뷰 바탕으로 수정 * feat: 제휴 등록 로직 일괄 수정 * feat: likes 리스트 초기화 * fix: 만료 토큰 403 코드로 반환 (#193) * feat: whitelist uri는 토큰 유효성 검사 제외하게끔 변경 * feat: partnership url whitelist에서 제거 및 filter jwt 예외처리 추가 * fix: 시큐리티 필터에서도 슬랙 알림 보낼 수 있게 수정 (#195) * chore: reformat code * feat: jwt 토큰 만료 로직 개선 및 화이트 리스트 필터 로직 일괄 수정 * feat: SlackErrorNotifier로 슬랙에러 알림 클래스 통합 * feat: 슬랙알림 메시지 null 나오는 문제 수정 * chore: local 알림 메시지 삭제 * hotfix: 불필요한 로그 삭제 및 슬랙 알림 제거 * feat: .env 파일 사용 (#196) * feat: dev 슬랙봇 알림 제거 (#205) * feat: 식단 추가 api에 FACULTY enum추가 (#206) * feat: 제휴지도 250710요청사항 (#207) * feat: 개별제휴 조회 API 삭제 * feat: slack 알림 local에서도 나가는 문제 수정 * feat: 학과기입여부 API 삭제 * feat: 유저 학과조회 API에 학과가 없으면 빈문자열 return하게끔 수정 * feat: [gemini] - 슬랙 알림 에러 메시지 생성 로직 개선 * feat: [gemini] - 학과 조회 삼항연산자로 로직 개선 * fix: Java Toolchain 설정 추가 (Java 17) (#198) * fix: Java Toolchain 설정 추가 (Java 17) * fix: Java 17 소스 호환성 설정 제거 * hotfix: 토큰 재발급 시간 수정 * feat: 토큰 만료시 401로 반환하게끔 수정 --------- Co-authored-by: Jiwoong CHOI Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .cursor/rules/eatssu-server-rule.mdc | 27 + .gemini/config.yaml | 10 + .gemini/styleguide.md | 14 + .github/copilot-instructions.md | 22 + .gitignore | 13 +- CLAUDE.md | 22 + GEMINI.md | 22 + build.gradle | 19 +- .../java/ssu/eatssu/EatSsuApplication.java | 6 +- .../controller/AuthenticationController.java | 17 +- .../controller/ManageCategoryController.java | 19 +- .../controller/ManageFixMenuController.java | 67 +- .../controller/ManageInquiryController.java | 43 +- .../controller/ManageMealController.java | 65 +- .../controller/ManageReportController.java | 31 +- .../controller/ManageReviewController.java | 17 +- .../eatssu/domain/admin/dto/InquiryLine.java | 10 +- .../ssu/eatssu/domain/admin/dto/MealInfo.java | 4 +- .../eatssu/domain/admin/dto/MealSection.java | 20 +- .../eatssu/domain/admin/dto/MenuBoard.java | 12 +- .../eatssu/domain/admin/dto/MenuBoards.java | 12 +- .../eatssu/domain/admin/dto/MenuSection.java | 18 +- .../eatssu/domain/admin/dto/PageWrapper.java | 16 +- .../domain/admin/dto/RegisterMealRequest.java | 6 +- .../eatssu/domain/admin/dto/ReportLine.java | 12 +- .../domain/admin/dto/SectionInBoard.java | 2 +- .../AdminAuthConfigurationProperties.java | 5 +- .../infrastructure/AdminConfiguration.java | 9 +- .../admin/listener/ReportEventListener.java | 13 +- .../persistence/LoadCategoryRepository.java | 22 +- .../persistence/LoadFixMenuRepository.java | 118 ++-- .../persistence/LoadInquiryRepository.java | 84 ++- .../admin/persistence/LoadMealRepository.java | 204 +++--- .../persistence/LoadReportRepository.java | 78 +-- .../persistence/ManageCategoryRepository.java | 1 - .../persistence/ManageInquiryRepository.java | 1 - .../persistence/ManageMealMenuRepository.java | 1 - .../persistence/ManageMealRepository.java | 1 - .../persistence/ManageMenuRepository.java | 7 +- .../persistence/ManageReportRepository.java | 1 - .../persistence/ManageReviewRepository.java | 1 - .../persistence/MenuRatingRepository.java | 36 +- .../admin/service/AuthenticationService.java | 35 +- .../admin/service/ManageCategoryService.java | 29 +- .../admin/service/ManageFixMenuService.java | 165 +++-- .../admin/service/ManageInquiryService.java | 35 +- .../admin/service/ManageMealService.java | 217 +++--- .../admin/service/ManageReportService.java | 33 +- .../admin/service/ManageReviewService.java | 19 +- .../ssu/eatssu/domain/auth/dto/AppleKeys.java | 38 +- .../domain/auth/dto/AppleLoginRequest.java | 4 +- .../domain/auth/dto/KakaoLoginRequest.java | 12 +- .../eatssu/domain/auth/dto/ValidRequest.java | 6 +- .../auth/entity/AppleAuthenticator.java | 2 +- .../domain/auth/entity/OAuthProvider.java | 2 +- .../auth/entity/SystemAppleAuthenticator.java | 234 ++++--- .../auth/infrastructure/OAuthConfig.java | 16 +- .../auth/infrastructure/SecurityConfig.java | 105 +-- .../auth/infrastructure/SecurityUtil.java | 39 +- .../auth/presentation/OAuthController.java | 114 ++- .../auth/security/CustomUserDetails.java | 91 ++- .../security/CustomUserDetailsService.java | 19 +- .../security/JwtAuthenticationFilter.java | 117 ++-- .../auth/security/JwtTokenProvider.java | 313 +++++---- .../security/UserAuthenticationProvider.java | 21 +- .../auth/security/UserPrincipalDto.java | 20 +- .../domain/auth/service/OAuthService.java | 181 ++--- .../inquiry/dto/CreateInquiryRequest.java | 8 +- .../inquiry/dto/InquiryDetailResponse.java | 32 +- .../eatssu/domain/inquiry/entity/Inquiry.java | 46 +- .../domain/inquiry/entity/InquiryStatus.java | 2 +- .../presentation/InquiryController.java | 41 +- .../inquiry/repository/InquiryRepository.java | 1 - .../inquiry/service/InquiryService.java | 23 +- .../ssu/eatssu/domain/menu/entity/Meal.java | 80 +-- .../eatssu/domain/menu/entity/MealMenu.java | 20 +- .../ssu/eatssu/domain/menu/entity/Menu.java | 211 +++--- .../domain/menu/entity/MenuCategory.java | 14 +- .../menu/entity/constants/MenuType.java | 49 +- .../menu/entity/constants/TimePart.java | 33 +- .../persistence/MealMenuQueryRepository.java | 34 +- .../menu/persistence/MealMenuRepository.java | 21 +- .../menu/persistence/MealRepository.java | 11 +- .../persistence/MenuCategoryRepository.java | 7 +- .../menu/persistence/MenuRepository.java | 15 +- .../QuerydslMealRatingCalculator.java | 100 ++- .../QuerydslMealRatingCounter.java | 84 ++- .../QuerydslMenuRatingCalculator.java | 84 ++- .../QuerydslMenuRatingCounter.java | 62 +- .../dto/request/CreateMealRequest.java | 8 +- .../request/MealCreateWithPriceRequest.java | 12 +- .../dto/response/BriefMenuResponse.java | 16 +- .../response/CategoryWithMenusResponse.java | 26 +- .../dto/response/MealDetailResponse.java | 44 +- .../dto/response/MenuResponse.java | 22 +- .../dto/response/MenuRestaurantResponse.java | 30 +- .../dto/response/MenusInMealResponse.java | 22 +- .../presentation/rest/MealController.java | 207 +++--- .../presentation/rest/MenuController.java | 45 +- .../menu/service/MealRatingService.java | 11 +- .../domain/menu/service/MealService.java | 255 ++++--- .../menu/service/MenuRatingService.java | 11 +- .../domain/menu/service/MenuService.java | 129 ++-- .../QuerydslMenuRatingCountProvider.java | 44 +- .../dto/CreatePartnershipRequest.java | 61 +- .../dto/PartnershipDetailResponse.java | 76 +- .../partnership/dto/PartnershipInfo.java | 41 ++ .../partnership/dto/PartnershipResponse.java | 67 +- .../partnership/entity/Partnership.java | 78 +-- .../entity/PartnershipCollege.java | 37 - .../entity/PartnershipDepartment.java | 37 - .../partnership/entity/PartnershipLike.java | 28 +- .../entity/PartnershipRestaurant.java | 45 ++ .../partnership/entity/PartnershipType.java | 16 +- .../partnership/entity/RestaurantType.java | 12 +- .../PartnershipLikeRepository.java | 22 +- .../persistence/PartnershipRepository.java | 19 +- .../PartnershipRestaurantRepository.java | 15 + .../presentation/PartnershipController.java | 105 ++- .../service/PartnershipService.java | 210 +++--- .../JpaLoadCollectionRatingCalculator.java | 240 +++---- .../entity/JpaProjectionRatingCalculator.java | 116 ++-- .../rating/entity/RatingCalculator.java | 64 +- .../domain/rating/entity/RatingCountMap.java | 54 +- .../eatssu/domain/rating/entity/Ratings.java | 28 +- .../domain/rating/entity/ReviewRating.java | 100 +-- .../report/dto/ReportCreateRequest.java | 12 +- .../report/dto/ReportTypeInformation.java | 16 +- .../domain/report/dto/ReportTypeList.java | 26 +- .../domain/report/entity/ReportStatus.java | 37 +- .../domain/report/entity/ReportType.java | 33 +- .../report/presentation/ReportController.java | 61 +- .../report/repository/ReportRepository.java | 1 - .../domain/report/service/ReportService.java | 36 +- .../domain/restaurant/entity/Restaurant.java | 48 +- .../restaurant/entity/RestaurantType.java | 32 +- .../review/dto/CreateMealReviewRequest.java | 52 +- .../review/dto/CreateMenuReviewRequest.java | 59 ++ .../domain/review/dto/MealReviewResponse.java | 158 ++--- .../review/dto/MealReviewsResponse.java | 50 +- .../review/dto/MealReviewsV2Response.java | 59 +- .../domain/review/dto/MenuLikeRequest.java | 8 +- .../domain/review/dto/MenuReviewResponse.java | 60 +- .../review/dto/MenuReviewsV2Response.java | 62 +- .../domain/review/dto/RatingAverages.java | 6 +- .../eatssu/domain/review/dto/RatingsDto.java | 18 +- .../review/dto/RestaurantReviewResponse.java | 20 +- .../review/dto/ReviewCreateRequest.java | 69 +- .../domain/review/dto/ReviewDetail.java | 146 ++-- .../domain/review/dto/ReviewRatingCount.java | 37 +- .../review/dto/ReviewUpdateRequest.java | 18 +- .../domain/review/dto/SavedReviewImage.java | 4 +- .../review/dto/UpdateMealReviewRequest.java | 16 +- .../review/dto/UploadReviewRequest.java | 75 +- .../review/dto/ValidMenuForViewResponse.java | 20 + .../eatssu/domain/review/entity/Report.java | 62 +- .../eatssu/domain/review/entity/Review.java | 225 +++--- .../domain/review/entity/ReviewImage.java | 24 +- .../domain/review/entity/ReviewLike.java | 26 +- .../domain/review/entity/ReviewMenuLike.java | 62 +- .../eatssu/domain/review/entity/Reviews.java | 86 ++- .../review/presentation/ReviewController.java | 315 +++++---- .../presentation/ReviewControllerV2.java | 366 +++++----- .../repository/ReviewImageRepository.java | 1 - .../repository/ReviewLikeRepository.java | 13 - .../repository/ReviewMenuLikeRepository.java | 9 +- .../review/repository/ReviewRepository.java | 31 +- .../repository/ReviewRepositoryCustom.java | 21 +- .../repository/ReviewRepositoryImpl.java | 212 +++--- .../review/service/ReviewRatingService.java | 109 ++- .../domain/review/service/ReviewService.java | 278 ++++---- .../review/service/ReviewServiceV2.java | 648 ++++++++++-------- .../domain/review/utils/MenuFilterUtil.java | 38 + .../domain/slack/entity/SlackChannel.java | 20 +- .../slack/entity/SlackMessageFormat.java | 144 ++-- .../slack/service/SlackErrorNotifier.java | 33 + .../domain/slack/service/SlackService.java | 43 +- .../domain/slice/dto/SliceResponse.java | 24 +- .../domain/slice/service/SliceService.java | 155 +++-- .../user/department/entity/College.java | 32 +- .../user/department/entity/Department.java | 34 +- .../persistence/CollegeRepository.java | 7 +- .../persistence/DepartmentRepository.java | 7 +- .../domain/user/dto/DepartmentResponse.java | 2 +- .../domain/user/dto/MyMealReviewResponse.java | 80 ++- .../domain/user/dto/MyPageResponse.java | 8 +- .../domain/user/dto/MyReviewDetail.java | 89 ++- .../user/dto/NicknameUpdateRequest.java | 2 +- .../ssu/eatssu/domain/user/dto/Tokens.java | 21 +- .../user/dto/UpdateDepartmentRequest.java | 4 +- .../domain/user/entity/BaseTimeEntity.java | 23 +- .../ssu/eatssu/domain/user/entity/Role.java | 27 +- .../ssu/eatssu/domain/user/entity/User.java | 170 +++-- .../eatssu/domain/user/entity/UserStatus.java | 2 +- .../user/presentation/UserController.java | 324 ++++----- .../user/repository/UserRepository.java | 13 +- .../domain/user/service/UserService.java | 190 +++-- .../domain/user/util/UserAliasUtil.java | 37 - .../eatssu/global/config/QueryDslConfig.java | 18 +- .../ssu/eatssu/global/config/S3Config.java | 37 +- .../eatssu/global/config/SwaggerConfig.java | 77 +-- .../global/handler/ErrorTestController.java | 8 +- .../handler/GlobalExceptionHandler.java | 440 ++++++------ .../handler/JwtAccessDeniedHandler.java | 40 +- .../handler/JwtAuthenticationEntryPoint.java | 40 +- .../handler/response/BaseException.java | 2 +- .../global/handler/response/BaseResponse.java | 85 ++- .../handler/response/BaseResponseStatus.java | 194 +++--- .../eatssu/global/runner/WarmUpRunner.java | 25 +- .../ssu/eatssu/global/util/S3Uploader.java | 96 ++- src/main/resources/application-dev.yml | 22 +- src/main/resources/application-local.yml | 36 +- src/main/resources/application-prod.yml | 18 +- src/main/resources/application.yml | 37 +- .../ssu/eatssu/EatSsuApplicationTests.java | 8 +- .../TestAppleAuthenticator.java | 12 - .../domain/auth/service/OAuthServiceTest.java | 533 ++++++++++++++ .../domain/auth/service/OauthServiceTest.java | 43 -- .../domain/menu/service/MealServiceTest.java | 145 ++-- .../domain/menu/service/MenuServiceTest.java | 69 +- .../report/service/ReportServiceTest.java | 89 ++- .../review/service/ReviewServiceTest.java | 175 +++-- .../domain/user/service/UserServiceTest.java | 143 ++-- .../resources/application-test.yml | 56 +- src/test/resources/application.yml | 5 + 225 files changed, 7331 insertions(+), 6684 deletions(-) create mode 100644 .cursor/rules/eatssu-server-rule.mdc create mode 100644 .gemini/config.yaml create mode 100644 .gemini/styleguide.md create mode 100644 .github/copilot-instructions.md create mode 100644 CLAUDE.md create mode 100644 GEMINI.md create mode 100644 src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java delete mode 100644 src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java delete mode 100644 src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java create mode 100644 src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipRestaurant.java create mode 100644 src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java create mode 100644 src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java create mode 100644 src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java delete mode 100644 src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java create mode 100644 src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java create mode 100644 src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java delete mode 100644 src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java delete mode 100644 src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java create mode 100644 src/test/java/ssu/eatssu/domain/auth/service/OAuthServiceTest.java delete mode 100644 src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java rename src/{main => test}/resources/application-test.yml (57%) create mode 100644 src/test/resources/application.yml diff --git a/.cursor/rules/eatssu-server-rule.mdc b/.cursor/rules/eatssu-server-rule.mdc new file mode 100644 index 00000000..c83a97fc --- /dev/null +++ b/.cursor/rules/eatssu-server-rule.mdc @@ -0,0 +1,27 @@ +--- +description: +globs: +alwaysApply: true +--- +# Copilot instructions + +- You must respond in Korean for all answers, regardless of the input language. +- Do not write any comments in code blocks, even if asked to do so. +- Do not use wildcard when importing libraries +- When you write reviews for pull request, specific review will very helpful for my team. +- Suggest based on logical reasons. + +## Commenting Convention + +- Comments should be written in a single line whenever possible. +- Each comment must include the author's name and the date. +- Use IntelliJ's default `FIX ME` comment format. + - Use this for parts of the code where there may be a potential issue but immediate exception handling is unnecessary. + - Also use this for parts that are not yet finalized due to unclear business requirements. + +## Test Code Convention + +- Test method names must be written in **English**. +- But if the codes is related to test, write the comment for "given, when, then". + +Please follow these conventions when reviewing or suggesting changes to the code. \ No newline at end of file diff --git a/.gemini/config.yaml b/.gemini/config.yaml new file mode 100644 index 00000000..e8560858 --- /dev/null +++ b/.gemini/config.yaml @@ -0,0 +1,10 @@ +have_fun: true +code_review: + disable: false + comment_severity_threshold: MEDIUM + max_review_comments: -1 + pull_request_opened: + help: false + summary: true + code_review: true +ignore_patterns: [] \ No newline at end of file diff --git a/.gemini/styleguide.md b/.gemini/styleguide.md new file mode 100644 index 00000000..2cde6b6e --- /dev/null +++ b/.gemini/styleguide.md @@ -0,0 +1,14 @@ +- You must respond in Korean for all answers, regardless of the input language. +- Do not write any comments in code blocks, even if asked to do so. +- Do not use wildcard when importing libraries +- When you write reviews for pull request, specific review will very helpful for my team. +- Suggest based on logical reasons. + +- Comments should be written in a single line whenever possible. +- Each comment must include the author's name and the date. +- Use IntelliJ's default `FIX ME` comment format. + - Use this for parts of the code where there may be a potential issue but immediate exception handling is unnecessary. + - Also use this for parts that are not yet finalized due to unclear business requirements. + +- Test method names must be written in **English**. +- But if the codes is related to test, write the comment for "given, when, then". diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 00000000..e74ab612 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,22 @@ +# Copilot instructions + +- You must respond in Korean for all answers, regardless of the input language. +- Do not write any comments in code blocks, even if asked to do so. +- Do not use wildcard when importing libraries +- When you write reviews for pull request, specific review will very helpful for my team. +- Suggest based on logical reasons. + +## Commenting Convention + +- Comments should be written in a single line whenever possible. +- Each comment must include the author's name and the date. +- Use IntelliJ's default `FIX ME` comment format. + - Use this for parts of the code where there may be a potential issue but immediate exception handling is unnecessary. + - Also use this for parts that are not yet finalized due to unclear business requirements. + +## Test Code Convention + +- Test method names must be written in **English**. +- But if the codes is related to test, write the comment for "given, when, then". + +Please follow these conventions when reviewing or suggesting changes to the code. \ No newline at end of file diff --git a/.gitignore b/.gitignore index 4ec9ead9..78ce332e 100644 --- a/.gitignore +++ b/.gitignore @@ -42,14 +42,5 @@ out/ ### Docker Tar files ### /eat-ssu.tar -### SDKMAN ### -.sdkmanrc - -### Junie guideline ### -.junie - -### Cursor guideline ### -eatssu-server-rule.mdc - -### Copilot guildline ### -copilot-instructions.md \ No newline at end of file +### env file ### +.env \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..e74ab612 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,22 @@ +# Copilot instructions + +- You must respond in Korean for all answers, regardless of the input language. +- Do not write any comments in code blocks, even if asked to do so. +- Do not use wildcard when importing libraries +- When you write reviews for pull request, specific review will very helpful for my team. +- Suggest based on logical reasons. + +## Commenting Convention + +- Comments should be written in a single line whenever possible. +- Each comment must include the author's name and the date. +- Use IntelliJ's default `FIX ME` comment format. + - Use this for parts of the code where there may be a potential issue but immediate exception handling is unnecessary. + - Also use this for parts that are not yet finalized due to unclear business requirements. + +## Test Code Convention + +- Test method names must be written in **English**. +- But if the codes is related to test, write the comment for "given, when, then". + +Please follow these conventions when reviewing or suggesting changes to the code. \ No newline at end of file diff --git a/GEMINI.md b/GEMINI.md new file mode 100644 index 00000000..e74ab612 --- /dev/null +++ b/GEMINI.md @@ -0,0 +1,22 @@ +# Copilot instructions + +- You must respond in Korean for all answers, regardless of the input language. +- Do not write any comments in code blocks, even if asked to do so. +- Do not use wildcard when importing libraries +- When you write reviews for pull request, specific review will very helpful for my team. +- Suggest based on logical reasons. + +## Commenting Convention + +- Comments should be written in a single line whenever possible. +- Each comment must include the author's name and the date. +- Use IntelliJ's default `FIX ME` comment format. + - Use this for parts of the code where there may be a potential issue but immediate exception handling is unnecessary. + - Also use this for parts that are not yet finalized due to unclear business requirements. + +## Test Code Convention + +- Test method names must be written in **English**. +- But if the codes is related to test, write the comment for "given, when, then". + +Please follow these conventions when reviewing or suggesting changes to the code. \ No newline at end of file diff --git a/build.gradle b/build.gradle index 5094e40a..6cad98bb 100644 --- a/build.gradle +++ b/build.gradle @@ -4,9 +4,14 @@ plugins { id 'io.spring.dependency-management' version '1.1.0' } +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(17)) + } +} + group = 'ssu' version = '0.0.1-SNAPSHOT' -sourceCompatibility = '17' bootJar { archivesBaseName = 'EatSsu' @@ -31,49 +36,39 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.hibernate.validator:hibernate-validator:8.0.0.Final' - // Lombok annotationProcessor 'org.projectlombok:lombok' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'com.mysql:mysql-connector-j' + testRuntimeOnly 'com.mysql:mysql-connector-j' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' - - //openApi implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' - //jwt implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.2' runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2' runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2' - //httpClient implementation 'org.apache.httpcomponents.client5:httpclient5:5.3-alpha1' - // Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" - //S3 implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' - //slack implementation("com.slack.api:bolt:1.35.0") implementation("com.slack.api:bolt-servlet:1.35.0") implementation("com.slack.api:bolt-jetty:1.35.0") implementation("org.slf4j:slf4j-simple:1.7.36") - - // Spring Actuator implementation 'org.springframework.boot:spring-boot-starter-actuator' - // Prometheus runtimeOnly 'io.micrometer:micrometer-registry-prometheus' } diff --git a/src/main/java/ssu/eatssu/EatSsuApplication.java b/src/main/java/ssu/eatssu/EatSsuApplication.java index 36cb653b..aa937ee8 100644 --- a/src/main/java/ssu/eatssu/EatSsuApplication.java +++ b/src/main/java/ssu/eatssu/EatSsuApplication.java @@ -8,8 +8,8 @@ @SpringBootApplication public class EatSsuApplication { - public static void main(String[] args) { - SpringApplication.run(EatSsuApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(EatSsuApplication.class, args); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java b/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java index 20c8b38a..8291506c 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/AuthenticationController.java @@ -1,13 +1,12 @@ package ssu.eatssu.domain.admin.controller; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.admin.dto.LoginRequest; import ssu.eatssu.domain.admin.service.AuthenticationService; import ssu.eatssu.domain.user.dto.Tokens; @@ -19,12 +18,12 @@ @RequiredArgsConstructor public class AuthenticationController { - private final AuthenticationService authenticationService; + private final AuthenticationService authenticationService; - @ResponseBody - @PostMapping("/login") - public BaseResponse login(@RequestBody LoginRequest request) { - return BaseResponse.success(authenticationService.login(request)); - } + @ResponseBody + @PostMapping("/login") + public BaseResponse login(@RequestBody LoginRequest request) { + return BaseResponse.success(authenticationService.login(request)); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java index c8b99234..66836d02 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageCategoryController.java @@ -1,13 +1,12 @@ package ssu.eatssu.domain.admin.controller; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.RegisterCategoryRequest; import ssu.eatssu.domain.admin.service.ManageCategoryService; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -18,13 +17,13 @@ @RequiredArgsConstructor public class ManageCategoryController { - private final ManageCategoryService manageCategoryService; + private final ManageCategoryService manageCategoryService; - @ResponseBody - @PostMapping("/") - public BaseResponse register(@RequestParam Restaurant restaurant, - @RequestBody RegisterCategoryRequest request) { - manageCategoryService.register(restaurant, request); - return BaseResponse.success(); - } + @ResponseBody + @PostMapping("/") + public BaseResponse register(@RequestParam Restaurant restaurant, + @RequestBody RegisterCategoryRequest request) { + manageCategoryService.register(restaurant, request); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java index 5acefb1d..8b2ac2aa 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageFixMenuController.java @@ -1,5 +1,6 @@ package ssu.eatssu.domain.admin.controller; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -10,8 +11,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.MenuBoards; import ssu.eatssu.domain.admin.dto.RegisterFixMenuRequest; import ssu.eatssu.domain.admin.dto.UpdateFixMenuRequest; @@ -24,42 +23,42 @@ @RequiredArgsConstructor public class ManageFixMenuController { - private final ManageFixMenuService manageFixMenuService; + private final ManageFixMenuService manageFixMenuService; - @ResponseBody - @GetMapping("") - public BaseResponse fixMenuPage() { - MenuBoards menuBoards = manageFixMenuService.getMenuBoards(); - return BaseResponse.success(menuBoards); - } + @ResponseBody + @GetMapping("") + public BaseResponse fixMenuPage() { + MenuBoards menuBoards = manageFixMenuService.getMenuBoards(); + return BaseResponse.success(menuBoards); + } - @ResponseBody - @PostMapping("") - public BaseResponse register(@RequestParam Restaurant restaurant, - @RequestBody RegisterFixMenuRequest request) { - manageFixMenuService.register(restaurant, request); - return BaseResponse.success(); - } + @ResponseBody + @PostMapping("") + public BaseResponse register(@RequestParam Restaurant restaurant, + @RequestBody RegisterFixMenuRequest request) { + manageFixMenuService.register(restaurant, request); + return BaseResponse.success(); + } - @ResponseBody - @PatchMapping("/{menuId}") - public BaseResponse update(@PathVariable Long menuId, - @RequestBody UpdateFixMenuRequest request) { - manageFixMenuService.updateMenu(menuId, request); - return BaseResponse.success(); - } + @ResponseBody + @PatchMapping("/{menuId}") + public BaseResponse update(@PathVariable Long menuId, + @RequestBody UpdateFixMenuRequest request) { + manageFixMenuService.updateMenu(menuId, request); + return BaseResponse.success(); + } - @ResponseBody - @DeleteMapping("/{menuId}") - public BaseResponse delete(@PathVariable Long menuId) { - manageFixMenuService.delete(menuId); - return BaseResponse.success(); - } + @ResponseBody + @DeleteMapping("/{menuId}") + public BaseResponse delete(@PathVariable Long menuId) { + manageFixMenuService.delete(menuId); + return BaseResponse.success(); + } - @ResponseBody - @PatchMapping("/{menuId}/discontinued-status") - public BaseResponse toggleDiscontinuedStatus(@PathVariable Long menuId) { - return BaseResponse.success(manageFixMenuService.changeDiscontinuedStatus(menuId)); - } + @ResponseBody + @PatchMapping("/{menuId}/discontinued-status") + public BaseResponse toggleDiscontinuedStatus(@PathVariable Long menuId) { + return BaseResponse.success(manageFixMenuService.changeDiscontinuedStatus(menuId)); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java index fe15516d..f12c4be3 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageInquiryController.java @@ -1,5 +1,6 @@ package ssu.eatssu.domain.admin.controller; +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.stereotype.Controller; @@ -11,8 +12,6 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.InquiryLine; import ssu.eatssu.domain.admin.dto.PageWrapper; import ssu.eatssu.domain.admin.dto.UpdateStatusRequest; @@ -23,27 +22,27 @@ @RequestMapping("/admin/inquiries") @RequiredArgsConstructor public class ManageInquiryController { - private final ManageInquiryService manageInquiryService; + private final ManageInquiryService manageInquiryService; - @ResponseBody - @GetMapping("") - public BaseResponse> inquiryPage(@PageableDefault(size = 20) Pageable pageable, - Model model) { - PageWrapper inquiryLinePage = manageInquiryService.getInquiryBoard(pageable); - return BaseResponse.success(inquiryLinePage); - } + @ResponseBody + @GetMapping("") + public BaseResponse> inquiryPage(@PageableDefault(size = 20) Pageable pageable, + Model model) { + PageWrapper inquiryLinePage = manageInquiryService.getInquiryBoard(pageable); + return BaseResponse.success(inquiryLinePage); + } - @ResponseBody - @PatchMapping("{inquiryId}/status") - public BaseResponse updateStatus(@PathVariable Long inquiryId, @RequestBody UpdateStatusRequest request) { - manageInquiryService.updateStatus(inquiryId, request); - return BaseResponse.success(); - } + @ResponseBody + @PatchMapping("{inquiryId}/status") + public BaseResponse updateStatus(@PathVariable Long inquiryId, @RequestBody UpdateStatusRequest request) { + manageInquiryService.updateStatus(inquiryId, request); + return BaseResponse.success(); + } - @ResponseBody - @DeleteMapping("{inquiryId}") - public BaseResponse delete(@PathVariable Long inquiryId) { - manageInquiryService.delete(inquiryId); - return BaseResponse.success(); - } + @ResponseBody + @DeleteMapping("{inquiryId}") + public BaseResponse delete(@PathVariable Long inquiryId) { + manageInquiryService.delete(inquiryId); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java index e2b57669..943929eb 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageMealController.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.admin.controller; -import java.util.Date; - +import lombok.RequiredArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -13,8 +12,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.MealInfo; import ssu.eatssu.domain.admin.dto.MenuBoards; import ssu.eatssu.domain.admin.dto.RegisterMealRequest; @@ -23,39 +20,41 @@ import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.global.handler.response.BaseResponse; +import java.util.Date; + @Controller @RequestMapping("/admin/meals") @RequiredArgsConstructor public class ManageMealController { - private final ManageMealService manageMealService; - - @ResponseBody - @GetMapping("") - public BaseResponse mealPage(@RequestParam @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @RequestParam TimePart timePart, - Model model) { - MenuBoards menuBoards = manageMealService.getMenuBoards(date, timePart); - return BaseResponse.success(menuBoards); - } - - @ResponseBody - @PostMapping("") - public BaseResponse register(@RequestParam Restaurant restaurant, - @RequestParam @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @RequestParam TimePart timePart, - @RequestBody RegisterMealRequest request, - Model model) { - MealInfo mealInfo = new MealInfo(restaurant, date, timePart); - manageMealService.register(mealInfo, request); - return BaseResponse.success(); - } - - @ResponseBody - @DeleteMapping("/{mealId}") - public BaseResponse delete(@PathVariable Long mealId) { - manageMealService.delete(mealId); - return BaseResponse.success(); - } + private final ManageMealService manageMealService; + + @ResponseBody + @GetMapping("") + public BaseResponse mealPage(@RequestParam @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @RequestParam TimePart timePart, + Model model) { + MenuBoards menuBoards = manageMealService.getMenuBoards(date, timePart); + return BaseResponse.success(menuBoards); + } + + @ResponseBody + @PostMapping("") + public BaseResponse register(@RequestParam Restaurant restaurant, + @RequestParam @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @RequestParam TimePart timePart, + @RequestBody RegisterMealRequest request, + Model model) { + MealInfo mealInfo = new MealInfo(restaurant, date, timePart); + manageMealService.register(mealInfo, request); + return BaseResponse.success(); + } + + @ResponseBody + @DeleteMapping("/{mealId}") + public BaseResponse delete(@PathVariable Long mealId) { + manageMealService.delete(mealId); + return BaseResponse.success(); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java index 4e04532e..5b870491 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReportController.java @@ -1,5 +1,6 @@ package ssu.eatssu.domain.admin.controller; +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.stereotype.Controller; @@ -9,8 +10,6 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.PageWrapper; import ssu.eatssu.domain.admin.dto.ReportLine; import ssu.eatssu.domain.admin.service.ManageReportService; @@ -20,21 +19,21 @@ @RequestMapping("/admin/reports") @RequiredArgsConstructor public class ManageReportController { - private final ManageReportService manageReportService; + private final ManageReportService manageReportService; - @ResponseBody - @GetMapping("") - public BaseResponse> reportPage(@PageableDefault(size = 20) Pageable pageable, - Model model) { - PageWrapper reportLinePage = manageReportService.getReportBoard(pageable); - return BaseResponse.success(reportLinePage); - } + @ResponseBody + @GetMapping("") + public BaseResponse> reportPage(@PageableDefault(size = 20) Pageable pageable, + Model model) { + PageWrapper reportLinePage = manageReportService.getReportBoard(pageable); + return BaseResponse.success(reportLinePage); + } - @ResponseBody - @DeleteMapping("/{reportId}") - public BaseResponse delete(@PathVariable Long reportId) { - manageReportService.delete(reportId); - return BaseResponse.success(); - } + @ResponseBody + @DeleteMapping("/{reportId}") + public BaseResponse delete(@PathVariable Long reportId) { + manageReportService.delete(reportId); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java index 612fcc3d..b0aa1c05 100644 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageReviewController.java @@ -1,12 +1,11 @@ package ssu.eatssu.domain.admin.controller; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.service.ManageReviewService; import ssu.eatssu.global.handler.response.BaseResponse; @@ -14,12 +13,12 @@ @RequestMapping("/admin/reviews") @RequiredArgsConstructor public class ManageReviewController { - private final ManageReviewService manageReviewService; + private final ManageReviewService manageReviewService; - @ResponseBody - @DeleteMapping("/{reviewId}") - public BaseResponse delete(@PathVariable Long reviewId) { - manageReviewService.delete(reviewId); - return BaseResponse.success(); - } + @ResponseBody + @DeleteMapping("/{reviewId}") + public BaseResponse delete(@PathVariable Long reviewId) { + manageReviewService.delete(reviewId); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java b/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java index 93bbc9d6..34158f29 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/InquiryLine.java @@ -1,12 +1,12 @@ package ssu.eatssu.domain.admin.dto; -import java.time.LocalDateTime; - import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.inquiry.entity.InquiryStatus; +import java.time.LocalDateTime; + public record InquiryLine(Long inquiryId, LocalDateTime date, String email, String content, InquiryStatus status) { - public InquiryLine(Inquiry inquiry) { - this(inquiry.getId(), inquiry.getCreatedDate(), inquiry.getEmail(), inquiry.getContent(), inquiry.getStatus()); - } + public InquiryLine(Inquiry inquiry) { + this(inquiry.getId(), inquiry.getCreatedDate(), inquiry.getEmail(), inquiry.getContent(), inquiry.getStatus()); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java b/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java index d6a015fc..56cc82b3 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MealInfo.java @@ -1,9 +1,9 @@ package ssu.eatssu.domain.admin.dto; -import java.util.Date; - import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.util.Date; + public record MealInfo(Restaurant restaurant, Date date, TimePart timePart) { } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MealSection.java b/src/main/java/ssu/eatssu/domain/admin/dto/MealSection.java index 44647533..b0095afd 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MealSection.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MealSection.java @@ -5,16 +5,16 @@ public record MealSection(Long mealId, String title, List menuLines) implements SectionInBoard { - public MealSection(Long mealId, String title) { - this(mealId, title, new ArrayList<>()); - } + public MealSection(Long mealId, String title) { + this(mealId, title, new ArrayList<>()); + } - public MealSection(Long mealId) { - this(mealId, null, new ArrayList<>()); - } + public MealSection(Long mealId) { + this(mealId, null, new ArrayList<>()); + } - @Override - public void addMenuLine(MenuLine menuLine) { - menuLines.add(menuLine); - } + @Override + public void addMenuLine(MenuLine menuLine) { + menuLines.add(menuLine); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java index 2d25bc3d..af033a63 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoard.java @@ -4,11 +4,11 @@ import java.util.List; public record MenuBoard(String restaurantName, List sections) { - public MenuBoard(String restaurantName) { - this(restaurantName, new ArrayList<>()); - } + public MenuBoard(String restaurantName) { + this(restaurantName, new ArrayList<>()); + } - public void addSection(SectionInBoard section) { - sections.add(section); - } + public void addSection(SectionInBoard section) { + sections.add(section); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java index b4f95f19..8a65cecc 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuBoards.java @@ -4,11 +4,11 @@ import java.util.List; public record MenuBoards(List menuBoards) { - public MenuBoards() { - this(new ArrayList<>()); - } + public MenuBoards() { + this(new ArrayList<>()); + } - public void add(MenuBoard menuBoard) { - menuBoards.add(menuBoard); - } + public void add(MenuBoard menuBoard) { + menuBoards.add(menuBoard); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java b/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java index c080b7b7..48aeaad0 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/MenuSection.java @@ -1,17 +1,17 @@ package ssu.eatssu.domain.admin.dto; +import ssu.eatssu.domain.menu.entity.MenuCategory; + import java.util.ArrayList; import java.util.List; -import ssu.eatssu.domain.menu.entity.MenuCategory; - public record MenuSection(Long categoryId, String categoryName, List menuLines) implements SectionInBoard { - public MenuSection(MenuCategory category) { - this(category.getId(), category.getName(), new ArrayList<>()); - } + public MenuSection(MenuCategory category) { + this(category.getId(), category.getName(), new ArrayList<>()); + } - @Override - public void addMenuLine(MenuLine menuLine) { - menuLines.add(menuLine); - } + @Override + public void addMenuLine(MenuLine menuLine) { + menuLines.add(menuLine); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java b/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java index 5fa7d3a7..b4898ef6 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/PageWrapper.java @@ -1,14 +1,14 @@ package ssu.eatssu.domain.admin.dto; -import java.util.List; - import org.springframework.data.domain.Page; +import java.util.List; + public record PageWrapper(List content, int totalPages, long totalElements, int number, int size, - int numberOfElements, - boolean isFirst, boolean isLast) { - public PageWrapper(Page page) { - this(page.getContent(), page.getTotalPages(), page.getTotalElements(), page.getNumber(), page.getSize(), - page.getNumberOfElements(), page.isFirst(), page.isLast()); - } + int numberOfElements, + boolean isFirst, boolean isLast) { + public PageWrapper(Page page) { + this(page.getContent(), page.getTotalPages(), page.getTotalElements(), page.getNumber(), page.getSize(), + page.getNumberOfElements(), page.isFirst(), page.isLast()); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMealRequest.java b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMealRequest.java index 4147cc02..efd33a83 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMealRequest.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/RegisterMealRequest.java @@ -3,7 +3,7 @@ import java.util.List; public record RegisterMealRequest(List menuNames) { - public RegisterMealRequest { - menuNames.sort(String::compareTo); - } + public RegisterMealRequest { + menuNames.sort(String::compareTo); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java b/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java index 8948d13d..5fcd7831 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/ReportLine.java @@ -1,13 +1,13 @@ package ssu.eatssu.domain.admin.dto; -import java.time.LocalDateTime; - import ssu.eatssu.domain.review.entity.Report; import ssu.eatssu.domain.review.entity.Review; +import java.time.LocalDateTime; + public record ReportLine(Long reportId, LocalDateTime date, String type, Long reviewId, String reviewText) { - public ReportLine(Report report, Review review) { - this(report.getId(), report.getCreatedDate(), report.getReportType().getDescription(), - review.getId(), review.getContent()); - } + public ReportLine(Report report, Review review) { + this(report.getId(), report.getCreatedDate(), report.getReportType().getDescription(), + review.getId(), review.getContent()); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/SectionInBoard.java b/src/main/java/ssu/eatssu/domain/admin/dto/SectionInBoard.java index aa3f566c..54eb1600 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/SectionInBoard.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/SectionInBoard.java @@ -1,5 +1,5 @@ package ssu.eatssu.domain.admin.dto; public interface SectionInBoard { - void addMenuLine(MenuLine menuLine); + void addMenuLine(MenuLine menuLine); } diff --git a/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java b/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java index 4c2f7ea0..29cca058 100644 --- a/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java +++ b/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminAuthConfigurationProperties.java @@ -1,11 +1,10 @@ package ssu.eatssu.domain.admin.infrastructure; -import org.springframework.boot.context.properties.ConfigurationProperties; - import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; @Data @ConfigurationProperties(prefix = "admin") public class AdminAuthConfigurationProperties { - private String loginId; + private String loginId; } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminConfiguration.java b/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminConfiguration.java index 0eb3ea08..01309549 100644 --- a/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminConfiguration.java +++ b/src/main/java/ssu/eatssu/domain/admin/infrastructure/AdminConfiguration.java @@ -3,15 +3,14 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; - import ssu.eatssu.domain.admin.controller.AdminAuth; @Configuration @EnableConfigurationProperties(AdminAuthConfigurationProperties.class) public class AdminConfiguration { - @Bean - public AdminAuth adminAuthConfigurationProperties(AdminAuthConfigurationProperties properties) { - return new AdminAuth(properties.getLoginId()); - } + @Bean + public AdminAuth adminAuthConfigurationProperties(AdminAuthConfigurationProperties properties) { + return new AdminAuth(properties.getLoginId()); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java b/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java index 5219f6ae..d357cdc9 100644 --- a/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java +++ b/src/main/java/ssu/eatssu/domain/admin/listener/ReportEventListener.java @@ -1,9 +1,8 @@ package ssu.eatssu.domain.admin.listener; +import lombok.RequiredArgsConstructor; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.event.ReviewDeleteEvent; import ssu.eatssu.domain.admin.service.ManageReportService; @@ -11,10 +10,10 @@ @RequiredArgsConstructor public class ReportEventListener { - private final ManageReportService manageReportService; + private final ManageReportService manageReportService; - @EventListener - public void deleteReport(ReviewDeleteEvent event) { - manageReportService.deleteAllByReviewId(event.reviewId()); - } + @EventListener + public void deleteReport(ReviewDeleteEvent event) { + manageReportService.deleteAllByReviewId(event.reviewId()); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java index 7ae755f2..102f5114 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadCategoryRepository.java @@ -1,10 +1,8 @@ package ssu.eatssu.domain.admin.persistence; -import org.springframework.stereotype.Repository; - import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.menu.entity.QMenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -12,14 +10,14 @@ @RequiredArgsConstructor public class LoadCategoryRepository { - private final JPAQueryFactory queryFactory; - private final QMenuCategory category = QMenuCategory.menuCategory; + private final JPAQueryFactory queryFactory; + private final QMenuCategory category = QMenuCategory.menuCategory; - public boolean existsCategory(Restaurant restaurant, String name) { - return queryFactory.select(category.id) - .from(category) - .where(category.name.eq(name), - category.restaurant.eq(restaurant)) - .fetchFirst() != null; - } + public boolean existsCategory(Restaurant restaurant, String name) { + return queryFactory.select(category.id) + .from(category) + .where(category.name.eq(name), + category.restaurant.eq(restaurant)) + .fetchFirst() != null; + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java index 470d76f4..217f7578 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadFixMenuRepository.java @@ -1,85 +1,83 @@ package ssu.eatssu.domain.admin.persistence; -import java.util.List; - -import org.springframework.stereotype.Repository; - import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.admin.dto.BriefMenu; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.menu.entity.QMenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.util.List; + @Repository @RequiredArgsConstructor public class LoadFixMenuRepository { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - private final QMenuCategory category = QMenuCategory.menuCategory; + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QMenuCategory category = QMenuCategory.menuCategory; - public List findBriefMenusByCategoryId(Long categoryId) { - return queryFactory - .select(Projections.constructor(BriefMenu.class, - menu.id, - menu.name, - menu.price)) - .from(menu) - .join(menu.category, category) - .where( - menuCategoryIdEq(categoryId) - ) - .orderBy(menu.name.asc()) - .fetch(); - } + public List findBriefMenusByCategoryId(Long categoryId) { + return queryFactory + .select(Projections.constructor(BriefMenu.class, + menu.id, + menu.name, + menu.price)) + .from(menu) + .join(menu.category, category) + .where( + menuCategoryIdEq(categoryId) + ) + .orderBy(menu.name.asc()) + .fetch(); + } - public boolean existsMenu(String name, Restaurant restaurant) { - return queryFactory - .select(menu.id) - .from(menu) - .where( - menuNameEq(name), - restaurantNameEq(restaurant) - ) - .fetchFirst() != null; - } + public boolean existsMenu(String name, Restaurant restaurant) { + return queryFactory + .select(menu.id) + .from(menu) + .where( + menuNameEq(name), + restaurantNameEq(restaurant) + ) + .fetchFirst() != null; + } - public Restaurant getRestaurant(Long menuId) { - return queryFactory - .select(menu.restaurant) - .from(menu) - .where( - menu.id.eq(menuId) - ) - .fetchFirst(); - } + public Restaurant getRestaurant(Long menuId) { + return queryFactory + .select(menu.restaurant) + .from(menu) + .where( + menu.id.eq(menuId) + ) + .fetchFirst(); + } - public List findMenuCategoriesByRestaurant(Restaurant restaurant) { - return queryFactory - .selectFrom(category) - .where( - categoryRestaurantNameEq(restaurant) - ).fetch(); - } + public List findMenuCategoriesByRestaurant(Restaurant restaurant) { + return queryFactory + .selectFrom(category) + .where( + categoryRestaurantNameEq(restaurant) + ).fetch(); + } - private BooleanExpression menuNameEq(String menuName) { - return menu.name.eq(menuName); - } + private BooleanExpression menuNameEq(String menuName) { + return menu.name.eq(menuName); + } - private BooleanExpression restaurantNameEq(Restaurant restaurant) { - return menu.restaurant.eq(restaurant); - } + private BooleanExpression restaurantNameEq(Restaurant restaurant) { + return menu.restaurant.eq(restaurant); + } - private BooleanExpression categoryRestaurantNameEq(Restaurant restaurant) { - return category.restaurant.eq(restaurant); - } + private BooleanExpression categoryRestaurantNameEq(Restaurant restaurant) { + return category.restaurant.eq(restaurant); + } - private BooleanExpression menuCategoryIdEq(Long categoryId) { - return category.id.eq(categoryId); - } + private BooleanExpression menuCategoryIdEq(Long categoryId) { + return category.id.eq(categoryId); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java index ccc0b3c2..361ff218 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadInquiryRepository.java @@ -1,58 +1,56 @@ package ssu.eatssu.domain.admin.persistence; -import java.util.List; - -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.support.PageableExecutionUtils; -import org.springframework.stereotype.Repository; - import com.querydsl.core.types.dsl.CaseBuilder; import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.support.PageableExecutionUtils; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.inquiry.entity.InquiryStatus; import ssu.eatssu.domain.inquiry.entity.QInquiry; +import java.util.List; + @RequiredArgsConstructor @Repository public class LoadInquiryRepository { - private final JPAQueryFactory queryFactory; - - private final QInquiry inquiry = QInquiry.inquiry; - - public Page findAllInquiries(Pageable pageable) { - return PageableExecutionUtils.getPage(fetchInquiries(pageable), pageable, () -> countInquiries().fetchOne()); - } - - private JPAQuery countInquiries() { - return queryFactory - .select(inquiry.count()) - .from(inquiry); - } - - private List fetchInquiries(Pageable pageable) { - return queryFactory - .selectFrom(inquiry) - .orderBy(statusPath().asc(), inquiry.createdDate.desc()) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .fetch(); - } - - private NumberExpression statusPath() { - - /** - * Inquiry Status 에 따라 정렬 - * WAITING -> HOLD -> ANSWERED - */ - return new CaseBuilder() - .when(inquiry.status.eq(InquiryStatus.WAITING)).then(1) - .when(inquiry.status.eq(InquiryStatus.HOLD)).then(2) - .when(inquiry.status.eq(InquiryStatus.ANSWERED)).then(3) - .otherwise(4); - } + private final JPAQueryFactory queryFactory; + + private final QInquiry inquiry = QInquiry.inquiry; + + public Page findAllInquiries(Pageable pageable) { + return PageableExecutionUtils.getPage(fetchInquiries(pageable), pageable, () -> countInquiries().fetchOne()); + } + + private JPAQuery countInquiries() { + return queryFactory + .select(inquiry.count()) + .from(inquiry); + } + + private List fetchInquiries(Pageable pageable) { + return queryFactory + .selectFrom(inquiry) + .orderBy(statusPath().asc(), inquiry.createdDate.desc()) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .fetch(); + } + + private NumberExpression statusPath() { + + /** + * Inquiry Status 에 따라 정렬 + * WAITING -> HOLD -> ANSWERED + */ + return new CaseBuilder() + .when(inquiry.status.eq(InquiryStatus.WAITING)).then(1) + .when(inquiry.status.eq(InquiryStatus.HOLD)).then(2) + .when(inquiry.status.eq(InquiryStatus.ANSWERED)).then(3) + .otherwise(4); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java index 73f6e7d0..feb3e9fe 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadMealRepository.java @@ -1,15 +1,10 @@ package ssu.eatssu.domain.admin.persistence; -import java.util.Date; -import java.util.List; - -import org.springframework.stereotype.Repository; - import com.querydsl.core.types.Projections; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.admin.dto.BriefMenu; import ssu.eatssu.domain.admin.dto.MealInfo; import ssu.eatssu.domain.menu.entity.Menu; @@ -19,104 +14,107 @@ import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.util.Date; +import java.util.List; + @Repository @RequiredArgsConstructor public class LoadMealRepository { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - private final QMeal meal = QMeal.meal; - private final QMealMenu mealMenu = QMealMenu.mealMenu; - - public List existsMeal(MealInfo query) { - return queryFactory.select(meal.id) - .from(meal) - .where( - mealRestaurantEq(query.restaurant()), - mealDateEq(query.date()), - mealTimePartEq(query.timePart()) - ) - .fetch(); - } - - public List findMenuNamesByMealId(Long mealId) { - return queryFactory - .select(menu.name) - .from(mealMenu) - .join(mealMenu.meal, meal) - .on(mealIdEq(mealId)) - .join(mealMenu.menu, menu) - .orderBy(menu.name.asc()) - .fetch(); - } - - public List getAllMealIdsByInfo(MealInfo query) { - return queryFactory.select(meal.id) - .from(meal) - .where( - mealRestaurantEq(query.restaurant()), - mealDateEq(query.date()), - mealTimePartEq(query.timePart()) - ) - .fetch(); - } - - public List findBriefMenusByMealId(Long mealId) { - return queryFactory - .select(Projections.constructor(BriefMenu.class, - menu.id, - menu.name, - menu.price)) - .from(mealMenu) - .join(mealMenu.meal, meal) - .on(mealIdEq(mealId)) - .join(mealMenu.menu, menu) - .orderBy(menu.name.asc()) - .fetch(); - } - - public Menu findMenu(String menuName, Restaurant restaurant) { - return queryFactory.selectFrom(menu) - .where( - menuNameEq(menuName), - menuRestaurantEq(restaurant) - ) - .fetchFirst(); - } - - public List getAllMenuIds(Long mealId) { - return queryFactory.select(mealMenu.menu.id) - .from(mealMenu) - .where(mealIdEq(mealId)) - .fetch(); - } - - private BooleanExpression mealIdEq(Long mealId) { - return meal.id.eq(mealId); - } - - private BooleanExpression mealTimePartEq(TimePart timePart) { - return meal.timePart.eq(timePart); - } - - private BooleanExpression mealDateEq(Date date) { - return meal.date.eq(date); - } - - private BooleanExpression mealRestaurantEq(Restaurant restaurant) { - return meal.restaurant.eq(restaurant); - } - - private BooleanExpression menuRestaurantEq(Restaurant restaurant) { - return menu.restaurant.eq(restaurant); - } - - private BooleanExpression menuNameEq(String menuName) { - return menu.name.eq(menuName); - } - - public int countMealMenuByMenuId(Long menuId) { - return (int)queryFactory.selectFrom(mealMenu) - .where(mealMenu.menu.id.eq(menuId)) - .fetchCount(); - } + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QMeal meal = QMeal.meal; + private final QMealMenu mealMenu = QMealMenu.mealMenu; + + public List existsMeal(MealInfo query) { + return queryFactory.select(meal.id) + .from(meal) + .where( + mealRestaurantEq(query.restaurant()), + mealDateEq(query.date()), + mealTimePartEq(query.timePart()) + ) + .fetch(); + } + + public List findMenuNamesByMealId(Long mealId) { + return queryFactory + .select(menu.name) + .from(mealMenu) + .join(mealMenu.meal, meal) + .on(mealIdEq(mealId)) + .join(mealMenu.menu, menu) + .orderBy(menu.name.asc()) + .fetch(); + } + + public List getAllMealIdsByInfo(MealInfo query) { + return queryFactory.select(meal.id) + .from(meal) + .where( + mealRestaurantEq(query.restaurant()), + mealDateEq(query.date()), + mealTimePartEq(query.timePart()) + ) + .fetch(); + } + + public List findBriefMenusByMealId(Long mealId) { + return queryFactory + .select(Projections.constructor(BriefMenu.class, + menu.id, + menu.name, + menu.price)) + .from(mealMenu) + .join(mealMenu.meal, meal) + .on(mealIdEq(mealId)) + .join(mealMenu.menu, menu) + .orderBy(menu.name.asc()) + .fetch(); + } + + public Menu findMenu(String menuName, Restaurant restaurant) { + return queryFactory.selectFrom(menu) + .where( + menuNameEq(menuName), + menuRestaurantEq(restaurant) + ) + .fetchFirst(); + } + + public List getAllMenuIds(Long mealId) { + return queryFactory.select(mealMenu.menu.id) + .from(mealMenu) + .where(mealIdEq(mealId)) + .fetch(); + } + + private BooleanExpression mealIdEq(Long mealId) { + return meal.id.eq(mealId); + } + + private BooleanExpression mealTimePartEq(TimePart timePart) { + return meal.timePart.eq(timePart); + } + + private BooleanExpression mealDateEq(Date date) { + return meal.date.eq(date); + } + + private BooleanExpression mealRestaurantEq(Restaurant restaurant) { + return meal.restaurant.eq(restaurant); + } + + private BooleanExpression menuRestaurantEq(Restaurant restaurant) { + return menu.restaurant.eq(restaurant); + } + + private BooleanExpression menuNameEq(String menuName) { + return menu.name.eq(menuName); + } + + public int countMealMenuByMenuId(Long menuId) { + return (int) queryFactory.selectFrom(mealMenu) + .where(mealMenu.menu.id.eq(menuId)) + .fetchCount(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java index 6bfde01f..0e3c3491 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/LoadReportRepository.java @@ -1,54 +1,52 @@ package ssu.eatssu.domain.admin.persistence; -import java.util.List; - -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.support.PageableExecutionUtils; -import org.springframework.stereotype.Repository; - import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.support.PageableExecutionUtils; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.admin.dto.ReportLine; import ssu.eatssu.domain.review.entity.QReport; import ssu.eatssu.domain.review.entity.QReview; +import java.util.List; + @Repository @RequiredArgsConstructor public class LoadReportRepository { - private final JPAQueryFactory queryFactory; - private final QReport report = QReport.report; - private final QReview review = QReview.review; - - public Page findAll(Pageable pageable) { - return PageableExecutionUtils.getPage(fetchReportLines(pageable), pageable, () -> countReports().fetchOne()); - } - - private JPAQuery countReports() { - return queryFactory - .select(report.count()) - .from(report); - } - - private List fetchReportLines(Pageable pageable) { - return queryFactory - .select(Projections.constructor(ReportLine.class, report, review)) - .from(report) - .join(report.review, review) - .orderBy(report.createdDate.desc()) - .offset(pageable.getOffset()) - .limit(pageable.getPageSize()) - .fetch(); - } - - public List findAllByReviewId(Long reviewId) { - return queryFactory - .select(report.id) - .from(report) - .where(report.review.id.eq(reviewId)) - .fetch(); - } + private final JPAQueryFactory queryFactory; + private final QReport report = QReport.report; + private final QReview review = QReview.review; + + public Page findAll(Pageable pageable) { + return PageableExecutionUtils.getPage(fetchReportLines(pageable), pageable, () -> countReports().fetchOne()); + } + + private JPAQuery countReports() { + return queryFactory + .select(report.count()) + .from(report); + } + + private List fetchReportLines(Pageable pageable) { + return queryFactory + .select(Projections.constructor(ReportLine.class, report, review)) + .from(report) + .join(report.review, review) + .orderBy(report.createdDate.desc()) + .offset(pageable.getOffset()) + .limit(pageable.getPageSize()) + .fetch(); + } + + public List findAllByReviewId(Long reviewId) { + return queryFactory + .select(report.id) + .from(report) + .where(report.review.id.eq(reviewId)) + .fetch(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageCategoryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageCategoryRepository.java index c25686a9..21847438 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageCategoryRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageCategoryRepository.java @@ -2,7 +2,6 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; - import ssu.eatssu.domain.menu.entity.MenuCategory; @Repository diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageInquiryRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageInquiryRepository.java index 1a9adc10..590e2657 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageInquiryRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageInquiryRepository.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.admin.persistence; import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.inquiry.entity.Inquiry; public interface ManageInquiryRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealMenuRepository.java index 3b136e24..4478ea9f 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealMenuRepository.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.admin.persistence; import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.menu.entity.MealMenu; public interface ManageMealMenuRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealRepository.java index 831a89d2..09dd9f84 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMealRepository.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.admin.persistence; import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.menu.entity.Meal; public interface ManageMealRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java index 6e7cb30e..25be2987 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageMenuRepository.java @@ -1,13 +1,12 @@ package ssu.eatssu.domain.admin.persistence; -import java.util.Optional; - import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; - import ssu.eatssu.domain.menu.entity.Menu; +import java.util.Optional; + @Repository public interface ManageMenuRepository extends JpaRepository { - Optional findById(Long id); + Optional findById(Long id); } diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReportRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReportRepository.java index f3dce349..9acce379 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReportRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReportRepository.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.admin.persistence; import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.review.entity.Report; public interface ManageReportRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReviewRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReviewRepository.java index ad3b21f2..598c4876 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/ManageReviewRepository.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.admin.persistence; import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.review.entity.Review; public interface ManageReviewRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java b/src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java index e90ff3fb..17c8c020 100644 --- a/src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java +++ b/src/main/java/ssu/eatssu/domain/admin/persistence/MenuRatingRepository.java @@ -1,34 +1,32 @@ package ssu.eatssu.domain.admin.persistence; -import org.springframework.stereotype.Repository; - import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; @Repository @RequiredArgsConstructor public class MenuRatingRepository { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - private final QReview review = QReview.review; + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QReview review = QReview.review; - public Double getMainRatingAverage(Long menuId) { - return queryFactory - .select(review.ratings.mainRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId) - ) - .fetchOne(); - } + public Double getMainRatingAverage(Long menuId) { + return queryFactory + .select(review.ratings.mainRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId) + ) + .fetchOne(); + } - private BooleanExpression menuIdEq(Long menuId) { - return menu.id.eq(menuId); - } + private BooleanExpression menuIdEq(Long menuId) { + return menu.id.eq(menuId); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java b/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java index f16bc8c6..a5372fdd 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/AuthenticationService.java @@ -1,9 +1,8 @@ package ssu.eatssu.domain.admin.service; +import lombok.RequiredArgsConstructor; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.controller.AdminAuth; import ssu.eatssu.domain.admin.dto.LoginRequest; import ssu.eatssu.domain.auth.security.JwtTokenProvider; @@ -14,24 +13,24 @@ @RequiredArgsConstructor @Service public class AuthenticationService { - private final JwtTokenProvider tokenProvider; - private final PasswordEncoder passwordEncoder; - private final UserRepository userRepository; - private final AdminAuth adminAuth; + private final JwtTokenProvider tokenProvider; + private final PasswordEncoder passwordEncoder; + private final UserRepository userRepository; + private final AdminAuth adminAuth; - public Tokens login(LoginRequest request) { - return tokenProvider.generateTokens(request.loginId(), request.password()); - } + public Tokens login(LoginRequest request) { + return tokenProvider.generateTokens(request.loginId(), request.password()); + } - private void join(String loginId, String password) { - String credentials = createCredentials(password); + private void join(String loginId, String password) { + String credentials = createCredentials(password); - //회원가입 - User user = User.adminJoin(loginId, credentials); - userRepository.save(user); - } + //회원가입 + User user = User.adminJoin(loginId, credentials); + userRepository.save(user); + } - private String createCredentials(String password) { - return passwordEncoder.encode(password); - } + private String createCredentials(String password) { + return passwordEncoder.encode(password); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java index 249b1a87..a4e5a7f7 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageCategoryService.java @@ -1,9 +1,8 @@ package ssu.eatssu.domain.admin.service; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.RegisterCategoryRequest; import ssu.eatssu.domain.admin.persistence.LoadCategoryRepository; import ssu.eatssu.domain.admin.persistence.ManageCategoryRepository; @@ -17,20 +16,20 @@ @RequiredArgsConstructor public class ManageCategoryService { - private final LoadCategoryRepository loadCategoryRepository; - private final ManageCategoryRepository manageCategoryRepository; + private final LoadCategoryRepository loadCategoryRepository; + private final ManageCategoryRepository manageCategoryRepository; - public void register(Restaurant restaurant, RegisterCategoryRequest request) { - // 해당 식당에 이미 존재하는 카테고리인지 확인 - if (loadCategoryRepository.existsCategory(restaurant, request.name())) { - throw new BaseException(BaseResponseStatus.CONFLICT); - } + public void register(Restaurant restaurant, RegisterCategoryRequest request) { + // 해당 식당에 이미 존재하는 카테고리인지 확인 + if (loadCategoryRepository.existsCategory(restaurant, request.name())) { + throw new BaseException(BaseResponseStatus.CONFLICT); + } - MenuCategory category = MenuCategory.builder() - .restaurant(restaurant) - .name(request.name()) - .build(); + MenuCategory category = MenuCategory.builder() + .restaurant(restaurant) + .name(request.name()) + .build(); - manageCategoryRepository.save(category); - } + manageCategoryRepository.save(category); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java index fdfa44aa..542361dc 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageFixMenuService.java @@ -1,11 +1,8 @@ package ssu.eatssu.domain.admin.service; -import java.util.List; - +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.BriefMenu; import ssu.eatssu.domain.admin.dto.MenuBoard; import ssu.eatssu.domain.admin.dto.MenuBoards; @@ -23,114 +20,116 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.util.List; + @Service @Transactional @RequiredArgsConstructor public class ManageFixMenuService { - private final LoadFixMenuRepository loadMenuRepository; - private final ManageMenuRepository manageMenuRepository; - private final MenuRatingRepository menuRatingRepository; + private final LoadFixMenuRepository loadMenuRepository; + private final ManageMenuRepository manageMenuRepository; + private final MenuRatingRepository menuRatingRepository; - public MenuBoards getMenuBoards() { - MenuBoards menuBoards = new MenuBoards(); + public MenuBoards getMenuBoards() { + MenuBoards menuBoards = new MenuBoards(); - RestaurantType.FIXED.getRestaurants() - .forEach(restaurant -> menuBoards.add(getMenuBoard(restaurant))); + RestaurantType.FIXED.getRestaurants() + .forEach(restaurant -> menuBoards.add(getMenuBoard(restaurant))); - return menuBoards; - } + return menuBoards; + } - private MenuBoard getMenuBoard(Restaurant restaurant) { - MenuBoard menuBoard = new MenuBoard(restaurant.getRestaurantName()); + private MenuBoard getMenuBoard(Restaurant restaurant) { + MenuBoard menuBoard = new MenuBoard(restaurant.getRestaurantName()); - getMenuSections(restaurant).forEach(menuBoard::addSection); + getMenuSections(restaurant).forEach(menuBoard::addSection); - return menuBoard; - } + return menuBoard; + } - private List getMenuSections(Restaurant restaurant) { - List menuCategories = loadMenuRepository.findMenuCategoriesByRestaurant(restaurant); - return menuCategories.stream() - .map(this::getMenuSection) - .toList(); - } + private List getMenuSections(Restaurant restaurant) { + List menuCategories = loadMenuRepository.findMenuCategoriesByRestaurant(restaurant); + return menuCategories.stream() + .map(this::getMenuSection) + .toList(); + } - private MenuSection getMenuSection(MenuCategory category) { - MenuSection menuSection = new MenuSection(category); + private MenuSection getMenuSection(MenuCategory category) { + MenuSection menuSection = new MenuSection(category); - List briefMenus = loadMenuRepository.findBriefMenusByCategoryId(category.getId()); + List briefMenus = loadMenuRepository.findBriefMenusByCategoryId(category.getId()); - briefMenus.forEach(briefMenu -> - menuSection.addMenuLine(new MenuLine( - briefMenu.id(), - briefMenu.name(), - briefMenu.price(), - menuRatingRepository.getMainRatingAverage(briefMenu.id()) - )) - ); - return menuSection; - } + briefMenus.forEach(briefMenu -> + menuSection.addMenuLine(new MenuLine( + briefMenu.id(), + briefMenu.name(), + briefMenu.price(), + menuRatingRepository.getMainRatingAverage(briefMenu.id()) + )) + ); + return menuSection; + } - public void register(Restaurant restaurant, RegisterFixMenuRequest request) { + public void register(Restaurant restaurant, RegisterFixMenuRequest request) { - // 해당 식당에 이미 존재하는 메뉴인지 확인 - if (loadMenuRepository.existsMenu(request.name(), restaurant)) { - throw new BaseException(BaseResponseStatus.CONFLICT); - } + // 해당 식당에 이미 존재하는 메뉴인지 확인 + if (loadMenuRepository.existsMenu(request.name(), restaurant)) { + throw new BaseException(BaseResponseStatus.CONFLICT); + } - // 해당 식당의 메뉴 카테고리들 중에 요청받은 카테고리가 존재하는지 확인 - List menuCategories = loadMenuRepository.findMenuCategoriesByRestaurant(restaurant); - MenuCategory category = menuCategories.stream() - .filter(menuCategory -> menuCategory.getId().equals(request.categoryId())) - .findFirst() - .orElseThrow(() -> new BaseException(BaseResponseStatus.BAD_REQUEST)); + // 해당 식당의 메뉴 카테고리들 중에 요청받은 카테고리가 존재하는지 확인 + List menuCategories = loadMenuRepository.findMenuCategoriesByRestaurant(restaurant); + MenuCategory category = menuCategories.stream() + .filter(menuCategory -> menuCategory.getId().equals(request.categoryId())) + .findFirst() + .orElseThrow(() -> new BaseException(BaseResponseStatus.BAD_REQUEST)); - manageMenuRepository.save(Menu.createFixed(request.name(), restaurant, request.price(), category)); - } + manageMenuRepository.save(Menu.createFixed(request.name(), restaurant, request.price(), category)); + } - public void updateMenu(Long menuId, UpdateFixMenuRequest request) { - if (isFixedMenu(menuId)) { - throw new BaseException(BaseResponseStatus.NOT_SUPPORT_RESTAURANT); - } + public void updateMenu(Long menuId, UpdateFixMenuRequest request) { + if (isFixedMenu(menuId)) { + throw new BaseException(BaseResponseStatus.NOT_SUPPORT_RESTAURANT); + } - Menu menu = manageMenuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + Menu menu = manageMenuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); - // 식당에 같은 이름의 메뉴가 있는 지 확인 - Restaurant restaurant = loadMenuRepository.getRestaurant(menuId); - duplicateCheck(request.name(), restaurant); - menu.update(request.name(), request.price()); + // 식당에 같은 이름의 메뉴가 있는 지 확인 + Restaurant restaurant = loadMenuRepository.getRestaurant(menuId); + duplicateCheck(request.name(), restaurant); + menu.update(request.name(), request.price()); - manageMenuRepository.save(menu); - } + manageMenuRepository.save(menu); + } - private void duplicateCheck(String name, Restaurant restaurant) { - if (loadMenuRepository.existsMenu(name, restaurant)) { - throw new BaseException(BaseResponseStatus.CONFLICT); - } - } + private void duplicateCheck(String name, Restaurant restaurant) { + if (loadMenuRepository.existsMenu(name, restaurant)) { + throw new BaseException(BaseResponseStatus.CONFLICT); + } + } - private boolean isFixedMenu(Long menuId) { - Restaurant restaurant = loadMenuRepository.getRestaurant(menuId); - return RestaurantType.isVariableType(restaurant); - } + private boolean isFixedMenu(Long menuId) { + Restaurant restaurant = loadMenuRepository.getRestaurant(menuId); + return RestaurantType.isVariableType(restaurant); + } - public void delete(Long menuId) { - manageMenuRepository.deleteById(menuId); - } + public void delete(Long menuId) { + manageMenuRepository.deleteById(menuId); + } - public Boolean changeDiscontinuedStatus(Long menuId) { - if (isFixedMenu(menuId)) { - throw new BaseException(BaseResponseStatus.NOT_SUPPORT_RESTAURANT); - } + public Boolean changeDiscontinuedStatus(Long menuId) { + if (isFixedMenu(menuId)) { + throw new BaseException(BaseResponseStatus.NOT_SUPPORT_RESTAURANT); + } - Menu menu = manageMenuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + Menu menu = manageMenuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); - menu.changeDiscontinuedStatus(); + menu.changeDiscontinuedStatus(); - return menu.isDiscontinued(); - } + return menu.isDiscontinued(); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java index cf0981da..e9c765b1 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageInquiryService.java @@ -1,10 +1,9 @@ package ssu.eatssu.domain.admin.service; +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.InquiryLine; import ssu.eatssu.domain.admin.dto.PageWrapper; import ssu.eatssu.domain.admin.dto.UpdateStatusRequest; @@ -18,23 +17,23 @@ @RequiredArgsConstructor public class ManageInquiryService { - private final LoadInquiryRepository loadInquiryRepository; - private final ManageInquiryRepository manageInquiryRepository; + private final LoadInquiryRepository loadInquiryRepository; + private final ManageInquiryRepository manageInquiryRepository; - public PageWrapper getInquiryBoard(Pageable pageable) { - Page inquiries = loadInquiryRepository.findAllInquiries(pageable); - return new PageWrapper<>(inquiries.map(InquiryLine::new)); - } + public PageWrapper getInquiryBoard(Pageable pageable) { + Page inquiries = loadInquiryRepository.findAllInquiries(pageable); + return new PageWrapper<>(inquiries.map(InquiryLine::new)); + } - public void updateStatus(Long inquiryId, UpdateStatusRequest request) { - Inquiry inquiry = manageInquiryRepository.findById(inquiryId) - .orElseThrow(() -> new BaseException( - BaseResponseStatus.NOT_FOUND_USER_INQUIRY)); - inquiry.updateStatus(request.status()); - manageInquiryRepository.save(inquiry); - } + public void updateStatus(Long inquiryId, UpdateStatusRequest request) { + Inquiry inquiry = manageInquiryRepository.findById(inquiryId) + .orElseThrow(() -> new BaseException( + BaseResponseStatus.NOT_FOUND_USER_INQUIRY)); + inquiry.updateStatus(request.status()); + manageInquiryRepository.save(inquiry); + } - public void delete(Long inquiryId) { - manageInquiryRepository.deleteById(inquiryId); - } + public void delete(Long inquiryId) { + manageInquiryRepository.deleteById(inquiryId); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java index 3a27dc8b..24397d23 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageMealService.java @@ -1,11 +1,7 @@ package ssu.eatssu.domain.admin.service; -import java.util.Date; -import java.util.List; - -import org.springframework.stereotype.Service; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; import ssu.eatssu.domain.admin.dto.BriefMenu; import ssu.eatssu.domain.admin.dto.MealInfo; import ssu.eatssu.domain.admin.dto.MealSection; @@ -26,112 +22,115 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.util.Date; +import java.util.List; + @RequiredArgsConstructor @Service public class ManageMealService { - private final LoadMealRepository loadMealRepository; - private final MenuRatingRepository menuRatingRepository; - private final ManageMealRepository manageMealRepository; - private final ManageMealMenuRepository manageMealMenuRepository; - private final ManageMenuRepository manageMenuRepository; - - public MenuBoards getMenuBoards(Date date, TimePart timePart) { - MenuBoards menuBoards = new MenuBoards(); - - RestaurantType.VARIABLE.getRestaurants() - .forEach(restaurant -> menuBoards.add( - getMealBoard(new MealInfo(restaurant, date, timePart)))); - - return menuBoards; - } - - private MenuBoard getMealBoard(MealInfo mealInfo) { - MenuBoard menuBoard = new MenuBoard(mealInfo.restaurant().getRestaurantName()); - - getMenuSections(mealInfo).forEach(menuBoard::addSection); - - return menuBoard; - } - - private List getMenuSections(MealInfo mealInfo) { - List mealIds = loadMealRepository.getAllMealIdsByInfo(mealInfo); - - return mealIds.stream().map(this::getMenuSection).toList(); - } - - private MealSection getMenuSection(Long mealId) { - MealSection mealSection = new MealSection(mealId); - - List briefMenus = loadMealRepository.findBriefMenusByMealId(mealId); - - briefMenus.forEach(briefMenu -> - mealSection.addMenuLine(new MenuLine( - briefMenu.id(), - briefMenu.name(), - briefMenu.price(), - menuRatingRepository.getMainRatingAverage(briefMenu.id()) - )) - ); - - return mealSection; - } - - public void register(MealInfo mealInfo, RegisterMealRequest request) { - // 중복 체크 - duplicateCheck(mealInfo, request); - - // 식단 등록 - Meal meal = new Meal(mealInfo.date(), mealInfo.timePart(), mealInfo.restaurant()); - manageMealRepository.save(meal); - - //식단에 메뉴 추가 - addMenusToMeal(meal, request.menuNames()); - - } - - private void addMenusToMeal(Meal meal, List menuNames) { - menuNames.forEach(menuName -> { - Menu menu = loadMealRepository.findMenu(menuName, meal.getRestaurant()); - if (menu == null) { - menu = Menu.createVariable(menuName, meal.getRestaurant()); - manageMenuRepository.save(menu); - } - manageMealMenuRepository.save(MealMenu.builder().meal(meal).menu(menu).build()); - }); - } - - private void duplicateCheck(MealInfo mealInfo, RegisterMealRequest request) { - List mealIds = loadMealRepository.existsMeal(mealInfo); - mealIds.forEach(mealId -> { - if (hasMenus(mealId, request.menuNames())) { - throw new BaseException(BaseResponseStatus.CONFLICT); - } - }); - } - - private boolean hasMenus(Long mealId, List menuNames) { - List menuNamesInMeal = loadMealRepository.findMenuNamesByMealId(mealId); - - /** - * menuNamesInMeal 과 menuNames 는 오름차순 정렬된 상태 - * @see LoadMealRepository#findMenuNamesByMealId(Long) - * @see RegisterMealRequest#RegisterMealRequest - */ - return menuNamesInMeal.equals(menuNames); - } - - public void delete(Long mealId) { - List menuIds = loadMealRepository.getAllMenuIds(mealId); - manageMealRepository.deleteById(mealId); - deleteUnusedMenus(menuIds); - } - - private void deleteUnusedMenus(List menuIds) { - menuIds.forEach(menuId -> { - if (loadMealRepository.countMealMenuByMenuId(menuId) == 0) { - manageMenuRepository.deleteById(menuId); - } - }); - } + private final LoadMealRepository loadMealRepository; + private final MenuRatingRepository menuRatingRepository; + private final ManageMealRepository manageMealRepository; + private final ManageMealMenuRepository manageMealMenuRepository; + private final ManageMenuRepository manageMenuRepository; + + public MenuBoards getMenuBoards(Date date, TimePart timePart) { + MenuBoards menuBoards = new MenuBoards(); + + RestaurantType.VARIABLE.getRestaurants() + .forEach(restaurant -> menuBoards.add( + getMealBoard(new MealInfo(restaurant, date, timePart)))); + + return menuBoards; + } + + private MenuBoard getMealBoard(MealInfo mealInfo) { + MenuBoard menuBoard = new MenuBoard(mealInfo.restaurant().getRestaurantName()); + + getMenuSections(mealInfo).forEach(menuBoard::addSection); + + return menuBoard; + } + + private List getMenuSections(MealInfo mealInfo) { + List mealIds = loadMealRepository.getAllMealIdsByInfo(mealInfo); + + return mealIds.stream().map(this::getMenuSection).toList(); + } + + private MealSection getMenuSection(Long mealId) { + MealSection mealSection = new MealSection(mealId); + + List briefMenus = loadMealRepository.findBriefMenusByMealId(mealId); + + briefMenus.forEach(briefMenu -> + mealSection.addMenuLine(new MenuLine( + briefMenu.id(), + briefMenu.name(), + briefMenu.price(), + menuRatingRepository.getMainRatingAverage(briefMenu.id()) + )) + ); + + return mealSection; + } + + public void register(MealInfo mealInfo, RegisterMealRequest request) { + // 중복 체크 + duplicateCheck(mealInfo, request); + + // 식단 등록 + Meal meal = new Meal(mealInfo.date(), mealInfo.timePart(), mealInfo.restaurant()); + manageMealRepository.save(meal); + + //식단에 메뉴 추가 + addMenusToMeal(meal, request.menuNames()); + + } + + private void addMenusToMeal(Meal meal, List menuNames) { + menuNames.forEach(menuName -> { + Menu menu = loadMealRepository.findMenu(menuName, meal.getRestaurant()); + if (menu == null) { + menu = Menu.createVariable(menuName, meal.getRestaurant()); + manageMenuRepository.save(menu); + } + manageMealMenuRepository.save(MealMenu.builder().meal(meal).menu(menu).build()); + }); + } + + private void duplicateCheck(MealInfo mealInfo, RegisterMealRequest request) { + List mealIds = loadMealRepository.existsMeal(mealInfo); + mealIds.forEach(mealId -> { + if (hasMenus(mealId, request.menuNames())) { + throw new BaseException(BaseResponseStatus.CONFLICT); + } + }); + } + + private boolean hasMenus(Long mealId, List menuNames) { + List menuNamesInMeal = loadMealRepository.findMenuNamesByMealId(mealId); + + /** + * menuNamesInMeal 과 menuNames 는 오름차순 정렬된 상태 + * @see LoadMealRepository#findMenuNamesByMealId(Long) + * @see RegisterMealRequest#RegisterMealRequest + */ + return menuNamesInMeal.equals(menuNames); + } + + public void delete(Long mealId) { + List menuIds = loadMealRepository.getAllMenuIds(mealId); + manageMealRepository.deleteById(mealId); + deleteUnusedMenus(menuIds); + } + + private void deleteUnusedMenus(List menuIds) { + menuIds.forEach(menuId -> { + if (loadMealRepository.countMealMenuByMenuId(menuId) == 0) { + manageMenuRepository.deleteById(menuId); + } + }); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java index 1495698f..dff28a17 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageReportService.java @@ -1,35 +1,34 @@ package ssu.eatssu.domain.admin.service; -import java.util.List; - +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.admin.dto.PageWrapper; import ssu.eatssu.domain.admin.dto.ReportLine; import ssu.eatssu.domain.admin.persistence.LoadReportRepository; import ssu.eatssu.domain.admin.persistence.ManageReportRepository; +import java.util.List; + @Service @RequiredArgsConstructor public class ManageReportService { - private final LoadReportRepository loadReportRepository; - private final ManageReportRepository manageReportRepository; + private final LoadReportRepository loadReportRepository; + private final ManageReportRepository manageReportRepository; - public PageWrapper getReportBoard(Pageable pageable) { - Page reports = loadReportRepository.findAll(pageable); - return new PageWrapper<>(reports); - } + public PageWrapper getReportBoard(Pageable pageable) { + Page reports = loadReportRepository.findAll(pageable); + return new PageWrapper<>(reports); + } - public void delete(Long reportId) { - manageReportRepository.deleteById(reportId); - } + public void delete(Long reportId) { + manageReportRepository.deleteById(reportId); + } - public void deleteAllByReviewId(Long reviewId) { - List reportIds = loadReportRepository.findAllByReviewId(reviewId); - manageReportRepository.deleteAllByIdInBatch(reportIds); - } + public void deleteAllByReviewId(Long reviewId) { + List reportIds = loadReportRepository.findAllByReviewId(reviewId); + manageReportRepository.deleteAllByIdInBatch(reportIds); + } } diff --git a/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java b/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java index 2e158888..fc3b92fb 100644 --- a/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java +++ b/src/main/java/ssu/eatssu/domain/admin/service/ManageReviewService.java @@ -1,10 +1,9 @@ package ssu.eatssu.domain.admin.service; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.stereotype.Service; - import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Service; import ssu.eatssu.domain.admin.event.ReviewDeleteEvent; import ssu.eatssu.domain.admin.persistence.ManageReviewRepository; @@ -12,13 +11,13 @@ @Transactional @RequiredArgsConstructor public class ManageReviewService { - private final ManageReviewRepository manageReviewRepository; - private final ApplicationEventPublisher publisher; + private final ManageReviewRepository manageReviewRepository; + private final ApplicationEventPublisher publisher; - public void delete(Long reviewId) { - // 리뷰 삭제하기 전에 해당 리뷰를 참조하는 신고들을 모두 삭제한다. - publisher.publishEvent(new ReviewDeleteEvent(reviewId)); + public void delete(Long reviewId) { + // 리뷰 삭제하기 전에 해당 리뷰를 참조하는 신고들을 모두 삭제한다. + publisher.publishEvent(new ReviewDeleteEvent(reviewId)); - manageReviewRepository.deleteById(reviewId); - } + manageReviewRepository.deleteById(reviewId); + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java b/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java index a4a9b42b..57dc09b2 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/AppleKeys.java @@ -1,31 +1,31 @@ package ssu.eatssu.domain.auth.dto; -import java.util.List; -import java.util.Optional; - import lombok.Getter; import lombok.NoArgsConstructor; +import java.util.List; +import java.util.Optional; + @Getter @NoArgsConstructor public class AppleKeys { - private List keys; + private List keys; - public Optional findKeyBy(String kid, String alg) { - return this.keys.stream() - .filter(key -> key.getKid().equals(kid) && key.getAlg().equals(alg)) - .findFirst(); - } + public Optional findKeyBy(String kid, String alg) { + return this.keys.stream() + .filter(key -> key.getKid().equals(kid) && key.getAlg().equals(alg)) + .findFirst(); + } - @Getter - @NoArgsConstructor - public static class Key { - private String kty; - private String kid; - private String use; - private String alg; - private String n; - private String e; + @Getter + @NoArgsConstructor + public static class Key { + private String kty; + private String kid; + private String use; + private String alg; + private String n; + private String e; - } + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java b/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java index 78beecd1..2d5416ad 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java @@ -4,8 +4,8 @@ @Schema(title = "애플 로그인 및 회원가입") public record AppleLoginRequest( - @Schema(description = "identityToken", example = "eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi...") - String identityToken + @Schema(description = "identityToken", example = "eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi...") + String identityToken ) { } diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java b/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java index 211677b1..eacf8e65 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java @@ -6,13 +6,13 @@ @Schema(title = "카카오 로그인 및 회원가입") public record KakaoLoginRequest( - @NotBlank(message = "이메일을 입력해주세요.") - @Email(message = "올바른 이메일 주소를 입력해주세요.") - @Schema(description = "이메일", example = "test@email.com") - String email, + @NotBlank(message = "이메일을 입력해주세요.") + @Email(message = "올바른 이메일 주소를 입력해주세요.") + @Schema(description = "이메일", example = "test@email.com") + String email, - @Schema(description = "providerId", example = "10378247832195") - String providerId + @Schema(description = "providerId", example = "10378247832195") + String providerId ) { } diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/ValidRequest.java b/src/main/java/ssu/eatssu/domain/auth/dto/ValidRequest.java index e2f85ce2..748028e6 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/ValidRequest.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/ValidRequest.java @@ -5,9 +5,9 @@ @Schema(title = "유효한 토큰 확인") public record ValidRequest( - @NotBlank(message = "토큰을 입력해주세요") - @Schema(description = "토큰", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjcsXCJlbWFpbFwiOlwidGVzdEBlbWFpbC5jb21cIixcInJvbGVcIjpcIlJPTEVfVVNFUlwifSIsImF1dGgiOiJST0xFX1VTRVIiLCJleHAiOjE3NDQzNzQ0MjB9.mhIWYX_Vj3xW1eXuVflbzpH6vLTcC9b1twbIcqovVjDVnS7tjegu3nQHGXUsUa_WG2DIAtJMFZT_Q1XcVq1jPw") - String token + @NotBlank(message = "토큰을 입력해주세요") + @Schema(description = "토큰", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjcsXCJlbWFpbFwiOlwidGVzdEBlbWFpbC5jb21cIixcInJvbGVcIjpcIlJPTEVfVVNFUlwifSIsImF1dGgiOiJST0xFX1VTRVIiLCJleHAiOjE3NDQzNzQ0MjB9.mhIWYX_Vj3xW1eXuVflbzpH6vLTcC9b1twbIcqovVjDVnS7tjegu3nQHGXUsUa_WG2DIAtJMFZT_Q1XcVq1jPw") + String token ) { } diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/AppleAuthenticator.java b/src/main/java/ssu/eatssu/domain/auth/entity/AppleAuthenticator.java index e56acb4f..f150fb37 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/AppleAuthenticator.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/AppleAuthenticator.java @@ -4,5 +4,5 @@ public interface AppleAuthenticator { - OAuthInfo getOAuthInfoByIdentityToken(String identityToken); + OAuthInfo getOAuthInfoByIdentityToken(String identityToken); } diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java b/src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java index 641d1bb3..5c8a22fc 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/OAuthProvider.java @@ -1,5 +1,5 @@ package ssu.eatssu.domain.auth.entity; public enum OAuthProvider { - EATSSU, KAKAO, APPLE; + EATSSU, KAKAO, APPLE } diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java index 34300152..904c99b6 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java @@ -1,6 +1,19 @@ package ssu.eatssu.domain.auth.entity; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.ExpiredJwtException; +import io.jsonwebtoken.Jwts; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; +import ssu.eatssu.domain.auth.dto.AppleKeys; +import ssu.eatssu.domain.auth.dto.OAuthInfo; +import ssu.eatssu.global.handler.response.BaseException; import java.math.BigInteger; import java.net.URI; @@ -12,126 +25,111 @@ import java.util.Base64; import java.util.Map; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Component; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.UriComponentsBuilder; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.jsonwebtoken.Claims; -import io.jsonwebtoken.ExpiredJwtException; -import io.jsonwebtoken.Jwts; -import lombok.RequiredArgsConstructor; -import ssu.eatssu.domain.auth.dto.AppleKeys; -import ssu.eatssu.domain.auth.dto.OAuthInfo; -import ssu.eatssu.global.handler.response.BaseException; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.INVALID_IDENTITY_TOKEN; @Component @RequiredArgsConstructor public class SystemAppleAuthenticator implements AppleAuthenticator { - private final RestTemplate restTemplate; - - public OAuthInfo getOAuthInfoByIdentityToken(String identityToken) { - PublicKey publicKey = generatePublicKey(identityToken); - return getOAuthInfoByPublicKey(identityToken, publicKey); - } - - /** - * 애플 로그인 - PublicKey 를 통해 유저 정보(providerId, email) 조회 - */ - private OAuthInfo getOAuthInfoByPublicKey(String identityToken, PublicKey publicKey) { - // identityToken 에서 publicKey 서명을 통해 Claims 를 추출한다. - Claims claims = Jwts.parserBuilder() - .setSigningKey(publicKey) - .build() - .parseClaimsJws(identityToken) - .getBody(); - - //Claims 에서 email, providerId(사용자 식별값) 를 추출한다. - try { - String email = claims.get("email").toString(); - String providerId = claims.get("sub").toString(); - return new OAuthInfo(email, providerId); - } catch (ExpiredJwtException exception) { - throw new BaseException(INVALID_IDENTITY_TOKEN); - } - } - - private PublicKey generatePublicKey(String identityToken) { - //PublicKey 를 만들기 위한 재료가 되는 후보 Key 목록을 가져온다. - AppleKeys keys = getAppleKeys(); - - //후보 Key 에서 정답 Key 를 찾는다. - AppleKeys.Key matchedKey = selectMatchedKey(identityToken, keys); - - //정답 Key 를 통해 PublicKey 를 생성한다. - return generatePublicKeyWithApplePublicKey(matchedKey); - } - - /** - * 애플 로그인 - 헤더에서 뽑은 정보를 통해 후보 Key 에서 정답 Key 를 찾아서 반환한다. - */ - private AppleKeys.Key selectMatchedKey(String identityToken, AppleKeys candidateKeys) { - - //identity token 에서 header 를 뽑아서 decode 한다. - String header = identityToken.split("\\.")[0]; - String decodedHeader = new String(Base64.getDecoder().decode(header)); - - //decode 된 header 정보를 통해 정답키의 key id, algorithm 정보를 가져온다. - Map headerMap; - try { - headerMap = new ObjectMapper().readValue(decodedHeader, - new TypeReference>() { - }); - } catch (JsonProcessingException e) { - throw new BaseException(INVALID_IDENTITY_TOKEN); - } - - //후보키 중에서 정답키를 찾아서 반환한다. - return candidateKeys.findKeyBy(headerMap.get("kid"), headerMap.get("alg")) - .orElseThrow(() -> new BaseException(INVALID_IDENTITY_TOKEN)); - } - - /** - * 애플 로그인 - 정답 Key 를 통해 PublicKey 를 생성한다. - */ - private PublicKey generatePublicKeyWithApplePublicKey(AppleKeys.Key matchedKey) { - - //정답 키에서 PublicKey 의 재료가 될 n, e 값을 가져온다. - byte[] nBytes = Base64.getUrlDecoder().decode(matchedKey.getN()); - byte[] eBytes = Base64.getUrlDecoder().decode(matchedKey.getE()); - - BigInteger n = new BigInteger(1, nBytes); - BigInteger e = new BigInteger(1, eBytes); - - // n, e 값을 통해 PublicKeySpec 을 세팅한다. - RSAPublicKeySpec publicKeySpec = new RSAPublicKeySpec(n, e); - - //PublicKeySpec 을 통해 PublicKey 를 생성한다. - try { - KeyFactory keyFactory = KeyFactory.getInstance(matchedKey.getKty()); - return keyFactory.generatePublic(publicKeySpec); - } catch (NoSuchAlgorithmException | InvalidKeySpecException ex) { - throw new BaseException(INVALID_IDENTITY_TOKEN); - } - } - - /** - * 애플 로그인 - Apple api 호출을 통해 apple 후보 key 리스트를 받아온다. - */ - private AppleKeys getAppleKeys() { - URI uri = UriComponentsBuilder - .fromUriString("https://appleid.apple.com") - .path("/auth/keys") - .encode() - .build() - .toUri(); - - ResponseEntity response = restTemplate.getForEntity(uri, AppleKeys.class); - return response.getBody(); - } + private final RestTemplate restTemplate; + + public OAuthInfo getOAuthInfoByIdentityToken(String identityToken) { + PublicKey publicKey = generatePublicKey(identityToken); + return getOAuthInfoByPublicKey(identityToken, publicKey); + } + + /** + * 애플 로그인 - PublicKey 를 통해 유저 정보(providerId, email) 조회 + */ + private OAuthInfo getOAuthInfoByPublicKey(String identityToken, PublicKey publicKey) { + // identityToken 에서 publicKey 서명을 통해 Claims 를 추출한다. + Claims claims = Jwts.parserBuilder() + .setSigningKey(publicKey) + .build() + .parseClaimsJws(identityToken) + .getBody(); + + //Claims 에서 email, providerId(사용자 식별값) 를 추출한다. + try { + String email = claims.get("email").toString(); + String providerId = claims.get("sub").toString(); + return new OAuthInfo(email, providerId); + } catch (ExpiredJwtException exception) { + throw new BaseException(INVALID_IDENTITY_TOKEN); + } + } + + private PublicKey generatePublicKey(String identityToken) { + //PublicKey 를 만들기 위한 재료가 되는 후보 Key 목록을 가져온다. + AppleKeys keys = getAppleKeys(); + + //후보 Key 에서 정답 Key 를 찾는다. + AppleKeys.Key matchedKey = selectMatchedKey(identityToken, keys); + + //정답 Key 를 통해 PublicKey 를 생성한다. + return generatePublicKeyWithApplePublicKey(matchedKey); + } + + /** + * 애플 로그인 - 헤더에서 뽑은 정보를 통해 후보 Key 에서 정답 Key 를 찾아서 반환한다. + */ + private AppleKeys.Key selectMatchedKey(String identityToken, AppleKeys candidateKeys) { + + //identity token 에서 header 를 뽑아서 decode 한다. + String header = identityToken.split("\\.")[0]; + String decodedHeader = new String(Base64.getDecoder().decode(header)); + + //decode 된 header 정보를 통해 정답키의 key id, algorithm 정보를 가져온다. + Map headerMap; + try { + headerMap = new ObjectMapper().readValue(decodedHeader, + new TypeReference>() { + }); + } catch (JsonProcessingException e) { + throw new BaseException(INVALID_IDENTITY_TOKEN); + } + + //후보키 중에서 정답키를 찾아서 반환한다. + return candidateKeys.findKeyBy(headerMap.get("kid"), headerMap.get("alg")) + .orElseThrow(() -> new BaseException(INVALID_IDENTITY_TOKEN)); + } + + /** + * 애플 로그인 - 정답 Key 를 통해 PublicKey 를 생성한다. + */ + private PublicKey generatePublicKeyWithApplePublicKey(AppleKeys.Key matchedKey) { + + //정답 키에서 PublicKey 의 재료가 될 n, e 값을 가져온다. + byte[] nBytes = Base64.getUrlDecoder().decode(matchedKey.getN()); + byte[] eBytes = Base64.getUrlDecoder().decode(matchedKey.getE()); + + BigInteger n = new BigInteger(1, nBytes); + BigInteger e = new BigInteger(1, eBytes); + + // n, e 값을 통해 PublicKeySpec 을 세팅한다. + RSAPublicKeySpec publicKeySpec = new RSAPublicKeySpec(n, e); + + //PublicKeySpec 을 통해 PublicKey 를 생성한다. + try { + KeyFactory keyFactory = KeyFactory.getInstance(matchedKey.getKty()); + return keyFactory.generatePublic(publicKeySpec); + } catch (NoSuchAlgorithmException | InvalidKeySpecException ex) { + throw new BaseException(INVALID_IDENTITY_TOKEN); + } + } + + /** + * 애플 로그인 - Apple api 호출을 통해 apple 후보 key 리스트를 받아온다. + */ + private AppleKeys getAppleKeys() { + URI uri = UriComponentsBuilder + .fromUriString("https://appleid.apple.com") + .path("/auth/keys") + .encode() + .build() + .toUri(); + + ResponseEntity response = restTemplate.getForEntity(uri, AppleKeys.class); + return response.getBody(); + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/OAuthConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/OAuthConfig.java index 56674dc6..7e70e0b6 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/OAuthConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/OAuthConfig.java @@ -10,12 +10,12 @@ @Configuration public class OAuthConfig { - @Bean - public RestTemplate restTemplate() { - HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); - CloseableHttpClient client = HttpClientBuilder.create().build(); - factory.setConnectTimeout(3000); //3s - factory.setHttpClient(client); - return new RestTemplate(factory); - } + @Bean + public RestTemplate restTemplate() { + HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); + CloseableHttpClient client = HttpClientBuilder.create().build(); + factory.setConnectTimeout(3000); //3s + factory.setHttpClient(client); + return new RestTemplate(factory); + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 3804b923..77c3adfd 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -1,5 +1,6 @@ package ssu.eatssu.domain.auth.infrastructure; +import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -11,10 +12,9 @@ import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.JwtAuthenticationFilter; import ssu.eatssu.domain.auth.security.JwtTokenProvider; +import ssu.eatssu.domain.slack.service.SlackErrorNotifier; import ssu.eatssu.global.handler.JwtAccessDeniedHandler; import ssu.eatssu.global.handler.JwtAuthenticationEntryPoint; @@ -22,64 +22,65 @@ @Configuration @RequiredArgsConstructor public class SecurityConfig { - private static final String[] RESOURCE_LIST = { - "/swagger-ui.html", "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**","/oauths/valid/token", "/admin/img/**", "/css/**", "/js/**", - "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" - }; + private static final String[] RESOURCE_LIST = { + "/swagger-ui.html", "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**", "/oauths/valid/token", "/admin/img/**", "/css/**", "/js/**", + "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" + }; - private static final String[] AUTH_WHITELIST = { - "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", - "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics", "/v2/reviews", - "/partnerships/**","/v2/reviews/menus/**","/v2/reviews/meals/**","/actuator/**","/error-test/**" - }; + private static final String[] AUTH_WHITELIST = { + "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", + "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics/**", + "/v2/reviews/menus/**", "/v2/reviews/meals/**", "/actuator/**", "/error-test/**" + }; - private static final String[] ADMIN_PAGE_LIST = { - "/admin/**" - }; + private static final String[] ADMIN_PAGE_LIST = { + "/admin/**" + }; - private final JwtTokenProvider jwtTokenProvider; - private final JwtAccessDeniedHandler jwtAccessDeniedHandler; - private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; + private final JwtTokenProvider jwtTokenProvider; + private final JwtAccessDeniedHandler jwtAccessDeniedHandler; + private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; + private final SlackErrorNotifier slackErrorNotifier; - @Bean - public PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(); - } + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } - @Bean - protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - http - .csrf().disable() - .authorizeHttpRequests(authorize -> authorize - .shouldFilterAllDispatcherTypes(false) - .requestMatchers("/partnerships/*/like").authenticated() - .requestMatchers(AUTH_WHITELIST).permitAll() - .requestMatchers(RESOURCE_LIST).permitAll() - .requestMatchers(ADMIN_PAGE_LIST).hasRole("ADMIN") - .anyRequest().authenticated() - .and().addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), - UsernamePasswordAuthenticationFilter.class)) - .exceptionHandling() - .accessDeniedHandler(jwtAccessDeniedHandler) - .authenticationEntryPoint(jwtAuthenticationEntryPoint); + @Bean + protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { + http + .csrf().disable() + .authorizeHttpRequests(authorize -> authorize + .shouldFilterAllDispatcherTypes(false) + .requestMatchers("/partnerships/*/like").authenticated() + .requestMatchers(AUTH_WHITELIST).permitAll() + .requestMatchers(RESOURCE_LIST).permitAll() + .requestMatchers(ADMIN_PAGE_LIST).hasRole("ADMIN") + .anyRequest().authenticated() + .and().addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider, slackErrorNotifier), + UsernamePasswordAuthenticationFilter.class)) + .exceptionHandling() + .accessDeniedHandler(jwtAccessDeniedHandler) + .authenticationEntryPoint(jwtAuthenticationEntryPoint); - http - .cors().configurationSource(corsConfigurationSource()); - return http.build(); - } + http + .cors().configurationSource(corsConfigurationSource()); + return http.build(); + } - @Bean - public CorsConfigurationSource corsConfigurationSource() { - CorsConfiguration configuration = new CorsConfiguration(); + @Bean + public CorsConfigurationSource corsConfigurationSource() { + CorsConfiguration configuration = new CorsConfiguration(); - configuration.addAllowedOriginPattern("*"); - configuration.addAllowedHeader("*"); - configuration.addAllowedMethod("*"); - configuration.setAllowCredentials(true); + configuration.addAllowedOriginPattern("*"); + configuration.addAllowedHeader("*"); + configuration.addAllowedMethod("*"); + configuration.setAllowCredentials(true); - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - source.registerCorsConfiguration("/**", configuration); - return source; - } + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", configuration); + return source; + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java index 31f6a34f..62e3f845 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityUtil.java @@ -4,36 +4,35 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Component; - import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.auth.security.UserPrincipalDto; @Component public class SecurityUtil { - public static UserPrincipalDto getLoginUserPrincipal() { - Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - if (principal instanceof UserDetails) { - return toDto(principal); - } else { - return null; - } - } + public static UserPrincipalDto getLoginUserPrincipal() { + Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + if (principal instanceof UserDetails) { + return toDto(principal); + } else { + return null; + } + } - public static Authentication getLoginUser() { - return SecurityContextHolder.getContext().getAuthentication(); - } + public static Authentication getLoginUser() { + return SecurityContextHolder.getContext().getAuthentication(); + } - public static Long getLoginUserId() { - UserPrincipalDto loginUser = getLoginUserPrincipal(); - return loginUser != null ? loginUser.getId() : null; - } + public static Long getLoginUserId() { + UserPrincipalDto loginUser = getLoginUserPrincipal(); + return loginUser != null ? loginUser.getId() : null; + } - private static UserPrincipalDto toDto(Object principal) { - CustomUserDetails user = (CustomUserDetails)principal; + private static UserPrincipalDto toDto(Object principal) { + CustomUserDetails user = (CustomUserDetails) principal; - return UserPrincipalDto.from(user); + return UserPrincipalDto.from(user); - } + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java index c7b19817..d80b88fd 100644 --- a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java @@ -1,17 +1,5 @@ package ssu.eatssu.domain.auth.presentation; -import static ssu.eatssu.domain.auth.infrastructure.SecurityUtil.*; - -import java.net.http.HttpRequest; - -import javax.servlet.http.HttpServletRequest; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -21,6 +9,10 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.auth.dto.ValidRequest; @@ -28,6 +20,8 @@ import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.global.handler.response.BaseResponse; +import static ssu.eatssu.domain.auth.infrastructure.SecurityUtil.getLoginUser; + @Slf4j @RestController @RequestMapping("/oauths") @@ -35,58 +29,58 @@ @Tag(name = "Oauth", description = "Oauth API") public class OAuthController { - private final OAuthService oauthService; + private final OAuthService oauthService; - @Operation(summary = "카카오 회원가입, 로그인 [인증 토큰 필요 X]", description = """ - 카카오 회원가입, 로그인 API 입니다.

- 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "카카오 회원가입/로그인 성공") - }) - @PostMapping("/kakao") - public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest request) { - long startTime = System.currentTimeMillis(); - Tokens tokens = oauthService.kakaoLogin(request); - long endTime = System.currentTimeMillis(); - long duration = endTime - startTime; - log.info("OAuthWarmupRunner 완료 - 소요 시간: {} ms", duration); + @Operation(summary = "카카오 회원가입, 로그인 [인증 토큰 필요 X]", description = """ + 카카오 회원가입, 로그인 API 입니다.

+ 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "카카오 회원가입/로그인 성공") + }) + @PostMapping("/kakao") + public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest request) { + long startTime = System.currentTimeMillis(); + Tokens tokens = oauthService.kakaoLogin(request); + long endTime = System.currentTimeMillis(); + long duration = endTime - startTime; + log.info("OAuthWarmupRunner 완료 - 소요 시간: {} ms", duration); - return BaseResponse.success(tokens); - } + return BaseResponse.success(tokens); + } - @Operation(summary = "애플 회원가입, 로그인 [인증 토큰 필요 X]", description = """ - 애플 로그인, 회원가입 API 입니다.

- 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "애플 회원가입/로그인 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/apple") - public BaseResponse appleLogin(@Valid @RequestBody AppleLoginRequest request) { - Tokens tokens = oauthService.appleLogin(request); - return BaseResponse.success(tokens); - } + @Operation(summary = "애플 회원가입, 로그인 [인증 토큰 필요 X]", description = """ + 애플 로그인, 회원가입 API 입니다.

+ 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "애플 회원가입/로그인 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/apple") + public BaseResponse appleLogin(@Valid @RequestBody AppleLoginRequest request) { + Tokens tokens = oauthService.appleLogin(request); + return BaseResponse.success(tokens); + } - @Operation(summary = "토큰 재발급", description = "accessToken, refreshToken 재발급 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "토큰 재발급 성공") - }) - @PostMapping("/reissue/token") - public BaseResponse refreshToken() { - Tokens tokens = oauthService.refreshTokens(getLoginUser()); - return BaseResponse.success(tokens); - } + @Operation(summary = "토큰 재발급", description = "accessToken, refreshToken 재발급 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "토큰 재발급 성공") + }) + @PostMapping("/reissue/token") + public BaseResponse refreshToken() { + Tokens tokens = oauthService.refreshTokens(getLoginUser()); + return BaseResponse.success(tokens); + } - @Operation(summary = "유효한 토큰 확인 [인증 토큰 필요 X]", description = "해당 토큰이 유효하면 true 반환하는, 유효하지 않은 false 반환하는 API 입니다") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유효한 토큰인지 확인 성공") - }) - @PostMapping("/valid/token") - public BaseResponse validToken(@Valid @RequestBody ValidRequest request) { - Boolean response = oauthService.validToken(request); - return BaseResponse.success(response); - } + @Operation(summary = "유효한 토큰 확인 [인증 토큰 필요 X]", description = "해당 토큰이 유효하면 true 반환하는, 유효하지 않은 false 반환하는 API 입니다") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유효한 토큰인지 확인 성공") + }) + @PostMapping("/valid/token") + public BaseResponse validToken(@Valid @RequestBody ValidRequest request) { + Boolean response = oauthService.validToken(request); + return BaseResponse.success(response); + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java index 285b26a2..eb05c2a5 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java @@ -1,66 +1,65 @@ package ssu.eatssu.domain.auth.security; -import java.util.ArrayList; -import java.util.Collection; - +import lombok.Getter; +import lombok.RequiredArgsConstructor; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.user.entity.User; +import java.util.ArrayList; +import java.util.Collection; + @RequiredArgsConstructor @Getter public class CustomUserDetails implements UserDetails { - private final Long id; - private final String email; - private final String credentials; - private final GrantedAuthority role; + private final Long id; + private final String email; + private final String credentials; + private final GrantedAuthority role; - public CustomUserDetails(User user) { - this.id = user.getId(); - this.email = user.getEmail(); - this.credentials = user.getCredentials(); - this.role = user.getRole(); - } + public CustomUserDetails(User user) { + this.id = user.getId(); + this.email = user.getEmail(); + this.credentials = user.getCredentials(); + this.role = user.getRole(); + } - @Override - public Collection getAuthorities() { - ArrayList authorities = new ArrayList<>(); - authorities.add(new SimpleGrantedAuthority(role.getAuthority())); - return authorities; - } + @Override + public Collection getAuthorities() { + ArrayList authorities = new ArrayList<>(); + authorities.add(new SimpleGrantedAuthority(role.getAuthority())); + return authorities; + } - @Override - public String getPassword() { - return credentials; - } + @Override + public String getPassword() { + return credentials; + } - @Override - public String getUsername() { - return email; - } + @Override + public String getUsername() { + return email; + } - @Override - public boolean isAccountNonExpired() { - return true; - } + @Override + public boolean isAccountNonExpired() { + return true; + } - @Override - public boolean isAccountNonLocked() { - return true; - } + @Override + public boolean isAccountNonLocked() { + return true; + } - @Override - public boolean isCredentialsNonExpired() { - return true; - } + @Override + public boolean isCredentialsNonExpired() { + return true; + } - @Override - public boolean isEnabled() { - return true; - } + @Override + public boolean isEnabled() { + return true; + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java index 0bf9f65e..3e528821 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java @@ -1,11 +1,10 @@ package ssu.eatssu.domain.auth.security; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.stereotype.Component; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; @@ -16,13 +15,13 @@ @RequiredArgsConstructor public class CustomUserDetailsService implements UserDetailsService { - private final UserRepository userRepository; + private final UserRepository userRepository; - @Override - public UserDetails loadUserByUsername(String username) { - User user = userRepository.findByEmail(username) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_USER)); - return new CustomUserDetails(user); - } + @Override + public UserDetails loadUserByUsername(String username) { + User user = userRepository.findByEmail(username) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_USER)); + return new CustomUserDetails(user); + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java index fcbf573e..4c577027 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java @@ -1,52 +1,91 @@ package ssu.eatssu.domain.auth.security; -import java.io.IOException; - -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.util.StringUtils; -import org.springframework.web.filter.GenericFilterBean; - import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.util.AntPathMatcher; +import org.springframework.util.StringUtils; +import org.springframework.web.filter.GenericFilterBean; +import ssu.eatssu.domain.slack.service.SlackErrorNotifier; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponseStatus; + +import java.io.IOException; +import java.util.List; -@Slf4j @RequiredArgsConstructor +@Slf4j public class JwtAuthenticationFilter extends GenericFilterBean { - private static final String AUTHORIZATION_HEADER = "Authorization"; - private static final String BEARER_TYPE = "Bearer"; - - private final JwtTokenProvider jwtTokenProvider; - - @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws - IOException, - ServletException { - - // 1. Request Header 에서 JWT 토큰 추출 - String token = resolveToken((HttpServletRequest)request); - - // 2. validateToken 으로 토큰 유효성 검사 - if (token != null && jwtTokenProvider.validateToken(token)) { - // 토큰이 유효할 경우 토큰에서 Authentication 객체를 가지고 와서 SecurityContext 에 저장 - Authentication authentication = jwtTokenProvider.getAuthentication(token); - SecurityContextHolder.getContext().setAuthentication(authentication); - } - - chain.doFilter(request, response); - } - - // Request Header 에서 토큰 정보 추출 - private String resolveToken(HttpServletRequest request) { - String bearerToken = request.getHeader(AUTHORIZATION_HEADER); - if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(BEARER_TYPE)) { - return bearerToken.substring(7); - } - return null; - } + private static final String AUTHORIZATION_HEADER = "Authorization"; + private static final String BEARER_TYPE = "Bearer"; + private static final AntPathMatcher pathMatcher = new AntPathMatcher(); + + private static final List AUTH_WHITELIST = List.of( + "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", + "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics/**", + "/v2/reviews/menus/**", "/v2/reviews/meals/**", "/actuator/**", "/error-test/**", + "/swagger-ui.html", "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**", + "/oauths/valid/token", "/admin/img/**", "/css/**", "/js/**", + "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" + ); + private final JwtTokenProvider jwtTokenProvider; + private final SlackErrorNotifier slackErrorNotifier; + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + HttpServletRequest httpRequest = (HttpServletRequest) request; + HttpServletResponse httpResponse = (HttpServletResponse) response; + String requestURI = httpRequest.getRequestURI(); + + if (isWhiteListed(requestURI)) { + chain.doFilter(request, response); + return; + } + + String token = resolveToken(httpRequest); + + if (token == null) { + httpResponse.setStatus(HttpStatus.UNAUTHORIZED.value()); + httpResponse.setContentType("application/json;charset=UTF-8"); + httpResponse.setCharacterEncoding("UTF-8"); + httpResponse.getWriter().write("{\"success\":false,\"code\":401,\"message\":\"유효하지 않은 토큰입니다.\"}"); + return; + } + + if (!jwtTokenProvider.validateToken(token)) { + log.warn("토큰 유효하지 않음: {}", requestURI); + httpResponse.setStatus(HttpStatus.UNAUTHORIZED.value()); + httpResponse.setContentType("application/json;charset=UTF-8"); + httpResponse.setCharacterEncoding("UTF-8"); + httpResponse.getWriter().write("{\"success\":false,\"code\":401,\"message\":\"유효하지 않은 토큰입니다.\"}"); + slackErrorNotifier.notify(new BaseException(BaseResponseStatus.INVALID_TOKEN)); + return; + } + + Authentication authentication = jwtTokenProvider.getAuthentication(token); + SecurityContextHolder.getContext().setAuthentication(authentication); + + chain.doFilter(request, response); + } + + private boolean isWhiteListed(String requestURI) { + return AUTH_WHITELIST.stream().anyMatch(pattern -> pathMatcher.match(pattern, requestURI)); + } + + private String resolveToken(HttpServletRequest request) { + String bearerToken = request.getHeader(AUTHORIZATION_HEADER); + if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(BEARER_TYPE)) { + return bearerToken.substring(7); + } + return null; + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java index 924b9cc1..e13ffaa1 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java @@ -1,172 +1,181 @@ package ssu.eatssu.domain.auth.security; -import java.security.Key; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.stereotype.Component; - import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; - import io.jsonwebtoken.Claims; +import io.jsonwebtoken.ExpiredJwtException; +import io.jsonwebtoken.JwtException; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.io.Decoders; import io.jsonwebtoken.security.Keys; import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.stereotype.Component; import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.security.Key; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + @Slf4j @Component public class JwtTokenProvider { - private static final String AUTHORITIES_KEY = "auth"; - private final String secret; - private final long accessTokenValidityInMilliseconds; - private final long refreshTokenValidityInMilliseconds; - private final ObjectMapper objectMapper = new ObjectMapper(); - private final UserAuthenticationProvider authenticationProvider; - - private Key key; - - @Autowired - public JwtTokenProvider(@Value("${jwt.secret.key}") String secret, - @Value("${jwt.token-validity-in-seconds}") long accessTokenValidityInSeconds, - @Value("${jwt.refresh-token-validity-in-seconds}") long refreshTokenValidityInMilliseconds, - UserAuthenticationProvider authenticationProvider - //RedisTemplate redisTemplate* - ) { - this.secret = secret; - this.accessTokenValidityInMilliseconds = accessTokenValidityInSeconds * 1000; - this.refreshTokenValidityInMilliseconds = refreshTokenValidityInMilliseconds * 1000; - this.authenticationProvider = authenticationProvider; - } - - @PostConstruct - public void setKey() { //jwt.secret을 이요하여 key생성 - byte[] keyBytes = Decoders.BASE64.decode(secret); - this.key = Keys.hmacShaKeyFor(keyBytes); - } - - //토큰 발급 - public Tokens generateTokens(String providerId, String password) { - - Authentication authentication = authenticationProvider.getAuthentication(providerId, password); - - // 권한 가져오기 - String authorities = authentication.getAuthorities().stream() - .map(GrantedAuthority::getAuthority) - .collect(Collectors.joining(",")); - - UserPrincipalDto userPrincipalDto = UserPrincipalDto.from((CustomUserDetails)authentication.getPrincipal()); - - Claims claims = createClaims(userPrincipalDto, authorities); - - return new Tokens(createAccessToken(claims), createRefreshToken(claims)); - } - - //토큰 발급 - public Tokens generateTokens(Authentication authentication) { - - // 권한 가져오기 - String authorities = authentication.getAuthorities().stream() - .map(GrantedAuthority::getAuthority) - .collect(Collectors.joining(",")); - - UserPrincipalDto userPrincipalDto = UserPrincipalDto.from((CustomUserDetails)authentication.getPrincipal()); - - Claims claims = createClaims(userPrincipalDto, authorities); - - return new Tokens(createAccessToken(claims), createRefreshToken(claims)); - } - - private Claims createClaims(UserPrincipalDto userPrincipalDto, String authorities) { - - String subject; - try { - subject = objectMapper.writeValueAsString(userPrincipalDto); - } catch (JsonProcessingException e) { - log.error("Cannot generate JWT Tokens because an error occurred during json parsing."); - log.error("errorTrackStace: {}", (Object)e.getStackTrace()); - throw new BaseException(BaseResponseStatus.INTERNAL_SERVER_ERROR); - } - - Claims claims = Jwts.claims() - .setSubject(subject); - claims.put(AUTHORITIES_KEY, authorities); - - return claims; - } - - //accessToken 생성 - private String createAccessToken(Claims claims) { - long now = new Date().getTime(); //밀리세컨드 - Date accessTokenValidity = new Date(now + this.accessTokenValidityInMilliseconds); - claims.setExpiration(accessTokenValidity); - - return Jwts.builder() - .setClaims(claims) - .signWith(key, SignatureAlgorithm.HS512) - .compact(); - } - - //refreshToken 생성 - private String createRefreshToken(Claims claims) { - long now = new Date().getTime(); //밀리세컨드 - Date refreshTokenValidity = new Date(now + this.refreshTokenValidityInMilliseconds); - claims.setExpiration(refreshTokenValidity); - - return Jwts.builder() - .setClaims(claims) - .signWith(key, SignatureAlgorithm.HS512) - .compact(); - } - - //token 에서 Authentication 추출 - public Authentication getAuthentication(String token) throws JsonProcessingException { - Claims claims = getClaims(token); - - List authorities = - Arrays.stream(claims.get(AUTHORITIES_KEY).toString().split(",")) - .map(SimpleGrantedAuthority::new) - .toList(); - - UserPrincipalDto userPrincipalDto = objectMapper.readValue(claims.getSubject(), UserPrincipalDto.class); - - CustomUserDetails principal = new CustomUserDetails(userPrincipalDto.getId(), userPrincipalDto.getEmail(), "", - authorities.get(0)); - - return new UsernamePasswordAuthenticationToken(principal, token, authorities); - } - - private Claims getClaims(String token) { - return Jwts.parserBuilder() - .setSigningKey(key) - .build() - .parseClaimsJws(token) - .getBody(); - } - - //토큰 유효성 검증 - public boolean validateToken(String token) throws BaseException { - try { - Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token); - return true; - } catch (Exception e) { - log.warn("토큰 유효성 검증 실패: {}", e.getMessage()); - return false; - } - } + private static final String AUTHORITIES_KEY = "auth"; + private final String secret; + private final long accessTokenValidityInMilliseconds; + private final long refreshTokenValidityInMilliseconds; + private final ObjectMapper objectMapper = new ObjectMapper(); + private final UserAuthenticationProvider authenticationProvider; + + private Key key; + + @Autowired + public JwtTokenProvider(@Value("${jwt.secret.key}") String secret, + @Value("${jwt.token-validity-in-seconds}") long accessTokenValidityInSeconds, + @Value("${jwt.refresh-token-validity-in-seconds}") long refreshTokenValidityInMilliseconds, + UserAuthenticationProvider authenticationProvider + //RedisTemplate redisTemplate* + ) { + this.secret = secret; + this.accessTokenValidityInMilliseconds = accessTokenValidityInSeconds * 1000; + this.refreshTokenValidityInMilliseconds = refreshTokenValidityInMilliseconds * 1000; + this.authenticationProvider = authenticationProvider; + } + + @PostConstruct + public void setKey() { //jwt.secret을 이요하여 key생성 + byte[] keyBytes = Decoders.BASE64.decode(secret); + this.key = Keys.hmacShaKeyFor(keyBytes); + } + + //토큰 발급 + public Tokens generateTokens(String providerId, String password) { + + Authentication authentication = authenticationProvider.getAuthentication(providerId, password); + + // 권한 가져오기 + String authorities = authentication.getAuthorities().stream() + .map(GrantedAuthority::getAuthority) + .collect(Collectors.joining(",")); + + UserPrincipalDto userPrincipalDto = UserPrincipalDto.from((CustomUserDetails) authentication.getPrincipal()); + + Claims claims = createClaims(userPrincipalDto, authorities); + + return new Tokens(createAccessToken(claims), createRefreshToken(claims)); + } + + //토큰 발급 + public Tokens generateTokens(Authentication authentication) { + + // 권한 가져오기 + String authorities = authentication.getAuthorities().stream() + .map(GrantedAuthority::getAuthority) + .collect(Collectors.joining(",")); + + UserPrincipalDto userPrincipalDto = UserPrincipalDto.from((CustomUserDetails) authentication.getPrincipal()); + + Claims claims = createClaims(userPrincipalDto, authorities); + + return new Tokens(createAccessToken(claims), createRefreshToken(claims)); + } + + private Claims createClaims(UserPrincipalDto userPrincipalDto, String authorities) { + + String subject; + try { + subject = objectMapper.writeValueAsString(userPrincipalDto); + } catch (JsonProcessingException e) { + log.error("Cannot generate JWT Tokens because an error occurred during json parsing."); + log.error("errorTrackStace: {}", (Object) e.getStackTrace()); + throw new BaseException(BaseResponseStatus.INTERNAL_SERVER_ERROR); + } + + Claims claims = Jwts.claims() + .setSubject(subject); + claims.put(AUTHORITIES_KEY, authorities); + + return claims; + } + + //accessToken 생성 + private String createAccessToken(Claims claims) { + long now = new Date().getTime(); //밀리세컨드 + Date accessTokenValidity = new Date(now + this.accessTokenValidityInMilliseconds); + claims.setExpiration(accessTokenValidity); + + return Jwts.builder() + .setClaims(claims) + .signWith(key, SignatureAlgorithm.HS512) + .compact(); + } + + //refreshToken 생성 + private String createRefreshToken(Claims claims) { + long now = new Date().getTime(); //밀리세컨드 + Date refreshTokenValidity = new Date(now + this.refreshTokenValidityInMilliseconds); + claims.setExpiration(refreshTokenValidity); + + return Jwts.builder() + .setClaims(claims) + .signWith(key, SignatureAlgorithm.HS512) + .compact(); + } + + //token 에서 Authentication 추출 + public Authentication getAuthentication(String token) throws JsonProcessingException { + Claims claims = getClaims(token); + + List authorities = + Arrays.stream(claims.get(AUTHORITIES_KEY).toString().split(",")) + .map(SimpleGrantedAuthority::new) + .toList(); + + UserPrincipalDto userPrincipalDto = objectMapper.readValue(claims.getSubject(), UserPrincipalDto.class); + + CustomUserDetails principal = new CustomUserDetails(userPrincipalDto.getId(), userPrincipalDto.getEmail(), "", + authorities.get(0)); + + return new UsernamePasswordAuthenticationToken(principal, token, authorities); + } + + private Claims getClaims(String token) { + return Jwts.parserBuilder() + .setSigningKey(key) + .build() + .parseClaimsJws(token) + .getBody(); + } + + //토큰 유효성 검증 + public boolean validateToken(String token) { + try { + Claims claims = Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody(); + Date expiration = claims.getExpiration(); + if (expiration.before(new Date())) { + log.warn("토큰 만료됨"); + return false; + } + return true; + } catch (ExpiredJwtException e) { + log.warn("ExpiredJwtException: {}", e.getMessage()); + return false; + } catch (JwtException | IllegalArgumentException e) { + log.warn("JWT 검증 실패: {}", e.getMessage()); + return false; + } + } + } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java b/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java index 5db0db61..b1bc1832 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/UserAuthenticationProvider.java @@ -1,12 +1,11 @@ package ssu.eatssu.domain.auth.security; +import lombok.RequiredArgsConstructor; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Component; -import lombok.RequiredArgsConstructor; - /** * 인증 정보를 바탕으로 Authentication 객체 생성 */ @@ -14,16 +13,16 @@ @Component public class UserAuthenticationProvider { - private final AuthenticationManagerBuilder authenticationManagerBuilder; + private final AuthenticationManagerBuilder authenticationManagerBuilder; - public Authentication getAuthentication(String providerId, String rawPassword) { + public Authentication getAuthentication(String providerId, String rawPassword) { - UsernamePasswordAuthenticationToken authenticationToken = - new UsernamePasswordAuthenticationToken(providerId, rawPassword); + UsernamePasswordAuthenticationToken authenticationToken = + new UsernamePasswordAuthenticationToken(providerId, rawPassword); - return authenticationManagerBuilder - .eraseCredentials(true) - .getObject() - .authenticate(authenticationToken); - } + return authenticationManagerBuilder + .eraseCredentials(true) + .getObject() + .authenticate(authenticationToken); + } } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java b/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java index 95adeac5..d2d189e6 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java @@ -10,15 +10,15 @@ @NoArgsConstructor @AllArgsConstructor public class UserPrincipalDto { - private Long id; - private String email; - private String role; + private Long id; + private String email; + private String role; - public static UserPrincipalDto from(CustomUserDetails userDetails) { - return UserPrincipalDto.builder() - .id(userDetails.getId()) - .email(userDetails.getEmail()) - .role(userDetails.getRole().getAuthority()) - .build(); - } + public static UserPrincipalDto from(CustomUserDetails userDetails) { + return UserPrincipalDto.builder() + .id(userDetails.getId()) + .email(userDetails.getEmail()) + .role(userDetails.getRole().getAuthority()) + .build(); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java index fda3e301..96338a6e 100644 --- a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java @@ -1,21 +1,11 @@ package ssu.eatssu.domain.auth.service; -import static ssu.eatssu.domain.auth.entity.OAuthProvider.*; -import static ssu.eatssu.domain.auth.security.JwtAuthenticationFilter.*; - -import java.net.http.HttpRequest; - -import javax.servlet.http.HttpServletRequest; - +import lombok.RequiredArgsConstructor; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.StringUtils; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.auth.dto.OAuthInfo; @@ -29,105 +19,84 @@ import ssu.eatssu.domain.user.service.UserService; import ssu.eatssu.global.handler.response.BaseException; -@Slf4j +import static ssu.eatssu.domain.auth.entity.OAuthProvider.APPLE; +import static ssu.eatssu.domain.auth.entity.OAuthProvider.KAKAO; + @Service @Transactional @RequiredArgsConstructor public class OAuthService { - private final UserService userService; - private final UserRepository userRepository; - private final AppleAuthenticator appleAuthenticator; - private final AuthenticationManagerBuilder authenticationManagerBuilder; - private final JwtTokenProvider jwtTokenProvider; - - private static final String AUTHORIZATION_HEADER = "Authorization"; - - private static final String BEARER_TYPE = "Bearer"; - - public Tokens kakaoLogin(KakaoLoginRequest request) { - User user = userRepository.findByProviderId(request.providerId()) - .orElseGet( - () -> userService.join(request.email(), KAKAO, request.providerId())); - - return generateOauthJwtTokens(user.getEmail(), KAKAO, - request.providerId()); - } - - public Tokens appleLogin(AppleLoginRequest request) { - OAuthInfo oAuthInfo = appleAuthenticator.getOAuthInfoByIdentityToken( - request.identityToken()); - - User user = userRepository.findByProviderId(oAuthInfo.providerId()) - .orElseGet(() -> userService.join(oAuthInfo.email(), APPLE, - oAuthInfo.providerId())); - - //todo 이메일 갱신의 이유? - updateAppleUserEmail(user, oAuthInfo.email()); - - return generateOauthJwtTokens(user.getEmail(), APPLE, - oAuthInfo.providerId()); - } - - /** - * JWT 토큰 재발급 - */ - public Tokens refreshTokens(Authentication authentication) { - return jwtTokenProvider.generateTokens(authentication); - } - - private void updateAppleUserEmail(User user, String email) { - if (isHideEmail(user.getEmail()) && !isHideEmail(email)) { - user.updateEmail(email); - userRepository.save(user); - } - } - - /** - * 유효한 토큰인지 확인 - */ - - public Boolean validToken(ValidRequest request){ - String token = request.token(); - - try { - return jwtTokenProvider.validateToken(token); - } catch (BaseException e) { - log.warn("토큰 유효성 검사 중 예외 발생: {}", e.getMessage()); - return false; - } - } - - private boolean isHideEmail(String email) { - if (email.length() > 25) { - return email.startsWith("@privaterelay.appleid.com", email.length() - 25); - } else { - return false; - } - } - - /** - * Oauth 회원 - email, providerId 를 통해 JwtToken 을 생성 - * todo: 같은 이메일로 카카오, 애플 등 여러 회원가입을 한 회원 처리 필요 - */ - private Tokens generateOauthJwtTokens(String email, OAuthProvider provider, String providerId) { - // email, credentials 를 기반으로 Authentication 객체 생성 - // 이때 authentication 은 인증 여부를 확인하는 authenticated 값이 false - UsernamePasswordAuthenticationToken authenticationToken = - new UsernamePasswordAuthenticationToken(email, - makeOauthCredentials(provider, providerId)); - - // 실제 검증 (사용자 비밀번호 체크) - // authenticate 메서드 실행 => CustomUserDetailsService 에서 만든 loadUserByUsername 메서드 실행 - Authentication authentication = authenticationManagerBuilder.getObject() - .authenticate(authenticationToken); - - // 인증 정보를 바탕으로 JWT 토큰 생성 - return jwtTokenProvider.generateTokens(authentication); - } - - private String makeOauthCredentials(OAuthProvider provider, String providerId) { - return provider + providerId; - } + private static final String AUTHORIZATION_HEADER = "Authorization"; + private static final String BEARER_TYPE = "Bearer"; + private final UserService userService; + private final UserRepository userRepository; + private final AppleAuthenticator appleAuthenticator; + private final AuthenticationManagerBuilder authenticationManagerBuilder; + private final JwtTokenProvider jwtTokenProvider; + + public Tokens kakaoLogin(KakaoLoginRequest request) { + User user = userRepository.findByProviderId(request.providerId()) + .orElseGet(() -> userService.join(request.email(), KAKAO, request.providerId())); + + return generateOauthJwtTokens(user.getEmail(), KAKAO, request.providerId()); + } + + public Tokens appleLogin(AppleLoginRequest request) { + OAuthInfo oAuthInfo = appleAuthenticator.getOAuthInfoByIdentityToken(request.identityToken()); + + User user = userRepository.findByProviderId(oAuthInfo.providerId()) + .orElseGet(() -> userService.join(oAuthInfo.email(), APPLE, oAuthInfo.providerId())); + + updateAppleUserEmail(user, oAuthInfo.email()); + + return generateOauthJwtTokens(user.getEmail(), APPLE, oAuthInfo.providerId()); + } + + public Tokens refreshTokens(Authentication authentication) { + return jwtTokenProvider.generateTokens(authentication); + } + + private void updateAppleUserEmail(User user, String email) { + if (isHideEmail(user.getEmail()) && !isHideEmail(email)) { + user.updateEmail(email); + userRepository.save(user); + } + } + + public Boolean validToken(ValidRequest request) { + String token = request.token(); + + try { + return jwtTokenProvider.validateToken(token); + } catch (BaseException e) { + return false; + } + } + + private boolean isHideEmail(String email) { + if (email.length() > 25) { + return email.startsWith("@privaterelay.appleid.com", email.length() - 25); + } else { + return false; + } + } + + // FIXME: 같은 이메일로 카카오, 애플 등 여러 회원가입을 한 회원 처리 필요. + // 사용자는 같은 이메일로 로그인을 진행했을 시 같은 계정에 접근하기를 원함. + // iPhone을 사용하는 사용자들에서만 한함. + // 하지만 private relay를 사용하는 경우도 있는데, 이럴 때는 사용자의 계정을 묶기 다소 복잡하다. + private Tokens generateOauthJwtTokens(String email, OAuthProvider provider, String providerId) { + UsernamePasswordAuthenticationToken authenticationToken = + new UsernamePasswordAuthenticationToken(email, makeOauthCredentials(provider, providerId)); + + Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken); + + return jwtTokenProvider.generateTokens(authentication); + } + + private String makeOauthCredentials(OAuthProvider provider, String providerId) { + return provider + providerId; + } } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java b/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java index 06ecc032..318664e3 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java @@ -9,9 +9,9 @@ @Getter public class CreateInquiryRequest { - @Schema(description = "답장 받을 이메일", example = "sandy1017@gmail.com") - private String email; + @Schema(description = "답장 받을 이메일", example = "sandy1017@gmail.com") + private String email; - @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의 남깁니다") - private String content; + @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의 남깁니다") + private String content; } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/dto/InquiryDetailResponse.java b/src/main/java/ssu/eatssu/domain/inquiry/dto/InquiryDetailResponse.java index 9c3b8fd4..ec56d7a7 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/dto/InquiryDetailResponse.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/dto/InquiryDetailResponse.java @@ -12,24 +12,24 @@ @Getter public class InquiryDetailResponse { - @Schema(description = "문의 작성자 Id", example = "123") - private Long writerId; + @Schema(description = "문의 작성자 Id", example = "123") + private Long writerId; - @Schema(description = "문의 작성자 닉네임", example = "먹짱맨") - private String writerNickName; + @Schema(description = "문의 작성자 닉네임", example = "먹짱맨") + private String writerNickName; - @Schema(description = "문의 작성자 이메일", example = "test@gmail.com") - private String writerEmail; + @Schema(description = "문의 작성자 이메일", example = "test@gmail.com") + private String writerEmail; - @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의드립니다") - private String content; + @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의드립니다") + private String content; - public static InquiryDetailResponse from(Inquiry userInquiry) { - return InquiryDetailResponse.builder() - .writerId(userInquiry.getUser().getId()) - .writerNickName(userInquiry.getUser().getNickname()) - .writerEmail(userInquiry.getUser().getEmail()) - .content(userInquiry.getContent()) - .build(); - } + public static InquiryDetailResponse from(Inquiry userInquiry) { + return InquiryDetailResponse.builder() + .writerId(userInquiry.getUser().getId()) + .writerNickName(userInquiry.getUser().getNickname()) + .writerEmail(userInquiry.getUser().getEmail()) + .content(userInquiry.getContent()) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java b/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java index 9fc8c2a5..aa6643bb 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/entity/Inquiry.java @@ -25,34 +25,34 @@ @AllArgsConstructor public class Inquiry extends BaseTimeEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "user_inquiry_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_inquiry_id") + private Long id; - private String content; + private String content; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") - private User user; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; - private String email; + private String email; - @Enumerated(EnumType.STRING) - private InquiryStatus status; + @Enumerated(EnumType.STRING) + private InquiryStatus status; - public Inquiry(String content, User user, String email) { - this.content = content; - this.user = user; - this.email = email; - this.status = InquiryStatus.WAITING; - } + public Inquiry(String content, User user, String email) { + this.content = content; + this.user = user; + this.email = email; + this.status = InquiryStatus.WAITING; + } - public void updateStatus(InquiryStatus status) { - this.status = status; - } + public void updateStatus(InquiryStatus status) { + this.status = status; + } - public void clearUser() { - this.user = null; - } + public void clearUser() { + this.user = null; + } } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java b/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java index 6b8b4bc9..4156adfb 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/entity/InquiryStatus.java @@ -1,5 +1,5 @@ package ssu.eatssu.domain.inquiry.entity; public enum InquiryStatus { - WAITING, ANSWERED, HOLD; + WAITING, ANSWERED, HOLD } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java b/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java index 9f09bbc1..b5e346b9 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java @@ -1,11 +1,5 @@ package ssu.eatssu.domain.inquiry.presentation; -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -13,6 +7,11 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.inquiry.dto.CreateInquiryRequest; import ssu.eatssu.domain.inquiry.entity.Inquiry; @@ -28,21 +27,21 @@ @Tag(name = "Inquiry", description = "문의 API") public class InquiryController { - private final SlackService slackService; - private final InquiryService inquiryService; + private final SlackService slackService; + private final InquiryService inquiryService; - @Operation(summary = "문의 작성", description = "문의를 작성하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "문의 작성 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/") - public BaseResponse writeInquiry(@RequestBody CreateInquiryRequest createInquiryRequest, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - Inquiry inquiry = inquiryService.createUserInquiry(customUserDetails, createInquiryRequest); - slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiry(inquiry) - , SlackChannel.USER_INQUIRY_CHANNEL); - return BaseResponse.success(); - } + @Operation(summary = "문의 작성", description = "문의를 작성하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "문의 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/") + public BaseResponse writeInquiry(@RequestBody CreateInquiryRequest createInquiryRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + Inquiry inquiry = inquiryService.createUserInquiry(customUserDetails, createInquiryRequest); + slackService.sendSlackMessage(SlackMessageFormat.sendUserInquiry(inquiry) + , SlackChannel.USER_INQUIRY_CHANNEL); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java b/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java index 2e92023b..8dd6d21f 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/repository/InquiryRepository.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.inquiry.repository; import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.inquiry.entity.Inquiry; public interface InquiryRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java index f87b123e..66c7c7c0 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java @@ -1,11 +1,8 @@ package ssu.eatssu.domain.inquiry.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.inquiry.dto.CreateInquiryRequest; import ssu.eatssu.domain.inquiry.entity.Inquiry; @@ -14,21 +11,23 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; + @RequiredArgsConstructor @Service @Transactional public class InquiryService { - private final UserRepository userRepository; - private final InquiryRepository inquiryRepository; + private final UserRepository userRepository; + private final InquiryRepository inquiryRepository; - public Inquiry createUserInquiry(CustomUserDetails userDetails, CreateInquiryRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + public Inquiry createUserInquiry(CustomUserDetails userDetails, CreateInquiryRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Inquiry inquiry = new Inquiry(request.getContent(), user, request.getEmail()); + Inquiry inquiry = new Inquiry(request.getContent(), user, request.getEmail()); - return inquiryRepository.save(inquiry); - } + return inquiryRepository.save(inquiry); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index 953d640f..7680ff3a 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -1,11 +1,5 @@ package ssu.eatssu.domain.menu.entity; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import org.springframework.format.annotation.DateTimeFormat; - import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -21,53 +15,53 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Meal { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "meal_id") - private Long id; - - @DateTimeFormat(pattern = "yyyyMMdd") - @Temporal(TemporalType.DATE) - private Date date; - - @Enumerated(EnumType.STRING) - private Restaurant restaurant; - - @Enumerated(EnumType.STRING) - private TimePart timePart; - - private Integer price; - - @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL, fetch = FetchType.LAZY) - private List mealMenus = new ArrayList<>(); + @OneToMany(mappedBy = "meal", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private final List mealMenus = new ArrayList<>(); + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "meal_id") + private Long id; + @DateTimeFormat(pattern = "yyyyMMdd") + @Temporal(TemporalType.DATE) + private Date date; + @Enumerated(EnumType.STRING) + private Restaurant restaurant; + @Enumerated(EnumType.STRING) + private TimePart timePart; + private Integer price; - public Meal(Date date, TimePart timePart, Restaurant restaurant) { - this.date = date; - this.timePart = timePart; - this.restaurant = restaurant; - this.price = restaurant.getRestaurantPrice(); - } + public Meal(Date date, TimePart timePart, Restaurant restaurant) { + this.date = date; + this.timePart = timePart; + this.restaurant = restaurant; + this.price = restaurant.getRestaurantPrice(); + } - public Meal(Date date, TimePart timePart, Restaurant restaurant, Integer price) { - this.date = date; - this.timePart = timePart; - this.restaurant = restaurant; - this.price = price; - } + public Meal(Date date, TimePart timePart, Restaurant restaurant, Integer price) { + this.date = date; + this.timePart = timePart; + this.restaurant = restaurant; + this.price = price; + } - public List getMenuNames() { - return mealMenus.stream().map(mealMenu -> mealMenu.getMenu().getName()).toList(); - } + public List getMenuNames() { + return mealMenus.stream().map(mealMenu -> mealMenu.getMenu().getName()).toList(); + } - public void addMealMenu(MealMenu mealMenu) { - mealMenus.add(mealMenu); - } + public void addMealMenu(MealMenu mealMenu) { + mealMenus.add(mealMenu); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java b/src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java index f6518088..2391a332 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/MealMenu.java @@ -21,17 +21,17 @@ @Builder public class MealMenu { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "meal_menu_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "meal_menu_id") + private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "menu_id") - private Menu menu; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "menu_id") + private Menu menu; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "meal_id") - private Meal meal; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "meal_id") + private Meal meal; } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index d02ed5be..b3346b03 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -1,8 +1,5 @@ package ssu.eatssu.domain.menu.entity; -import java.util.ArrayList; -import java.util.List; - import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Embedded; @@ -23,124 +20,102 @@ import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.Reviews; +import java.util.ArrayList; +import java.util.List; + @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Menu { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "menu_id") - private Long id; - - private String name; - - private Integer price; - - @Enumerated(EnumType.STRING) - private Restaurant restaurant; - - // TODO : 삭제되어야 함 - @Embedded - private Reviews reviews = new Reviews(); - - @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) - private List mealMenus = new ArrayList<>(); - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "menu_category_id") - private MenuCategory category; - - private boolean isDiscontinued = false; - - @Column(name = "like_count") - private Integer likeCount = 0; - - @Column(name = "unlike_count") - private Integer unlikeCount = 0; - - private Menu(String name, Restaurant restaurant, Integer price, MenuCategory category) { - this.name = name; - this.restaurant = restaurant; - this.price = price; - this.category = category; - } - - public static Menu createVariable(String name, Restaurant restaurant) { - int price = 0; - return new Menu(name, restaurant, price, null); - } - - public static Menu createFixed(String name, Restaurant restaurant, Integer price, - MenuCategory category) { - return new Menu(name, restaurant, price, category); - } - - public void addReview(Review review) { - reviews.add(review); - } - - public int getTotalReviewCount() { - return reviews.size(); - } - - public void update(String name, Integer price) { - this.name = name; - this.price = price; - } - - public void changeDiscontinuedStatus() { - this.isDiscontinued = !this.isDiscontinued; - } - - public boolean isContinued() { - return !this.isDiscontinued; - } - - public void increaseLikeCount() - { - if(this.likeCount==null){ - this.likeCount=0; - } - this.likeCount++; - } - - public void increaseUnlikeCount() { - if(this.unlikeCount==null){ - this.unlikeCount=0; - } - this.unlikeCount++; - } - - public void decreaseLikeCount() { - if(this.likeCount==null){ - this.likeCount=0; - } - this.likeCount--; - } - - public void decreaseUnlikeCount() { - if(this.unlikeCount==null){ - this.unlikeCount=0; - } - unlikeCount--; - } - - public void changeLikeStatus(Boolean isLike) { - if (isLike) { - decreaseUnlikeCount(); - increaseLikeCount(); - } else { - decreaseLikeCount(); - increaseUnlikeCount(); - } - } - - public void cancelLike(Boolean isLike) { - if (isLike) { - decreaseLikeCount(); - } else { - decreaseUnlikeCount(); - } - } + // TODO : 삭제되어야 함 + @Embedded + private final Reviews reviews = new Reviews(); + @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) + private final List mealMenus = new ArrayList<>(); + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "menu_id") + private Long id; + private String name; + private Integer price; + @Enumerated(EnumType.STRING) + private Restaurant restaurant; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "menu_category_id") + private MenuCategory category; + + private boolean isDiscontinued = false; + + @Column(name = "like_count") + private Integer likeCount = 0; + + @Column(name = "unlike_count") + private final Integer unlikeCount = 0; + + private Menu(String name, Restaurant restaurant, Integer price, MenuCategory category) { + this.name = name; + this.restaurant = restaurant; + this.price = price; + this.category = category; + } + + public static Menu createVariable(String name, Restaurant restaurant) { + int price = 0; + return new Menu(name, restaurant, price, null); + } + + public static Menu createFixed(String name, Restaurant restaurant, Integer price, + MenuCategory category) { + return new Menu(name, restaurant, price, category); + } + + public void addReview(Review review) { + reviews.add(review); + } + + public int getTotalReviewCount() { + return reviews.size(); + } + + public void update(String name, Integer price) { + this.name = name; + this.price = price; + } + + public void changeDiscontinuedStatus() { + this.isDiscontinued = !this.isDiscontinued; + } + + public boolean isContinued() { + return !this.isDiscontinued; + } + + public void increaseLikeCount() { + if (this.likeCount == null) { + this.likeCount = 0; + } + this.likeCount++; + } + + public void decreaseLikeCount() { + if (this.likeCount == null) { + this.likeCount = 0; + } + this.likeCount--; + } + + public void changeLikeStatus(Boolean isLike) { + if (isLike) { + increaseLikeCount(); + } else { + decreaseLikeCount(); + } + } + + public void cancelLike(Boolean isLike) { + if (isLike) { + decreaseLikeCount(); + } + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java b/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java index 400dd8ef..9f1a4ec7 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/MenuCategory.java @@ -21,14 +21,14 @@ @Builder public class MenuCategory { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "menu_category_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "menu_category_id") + private Long id; - private String name; + private String name; - @Enumerated(EnumType.STRING) - private Restaurant restaurant; + @Enumerated(EnumType.STRING) + private Restaurant restaurant; } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java b/src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java index edc97d96..e53a0845 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/constants/MenuType.java @@ -1,33 +1,36 @@ package ssu.eatssu.domain.menu.entity.constants; -import static ssu.eatssu.domain.restaurant.entity.Restaurant.*; +import com.fasterxml.jackson.annotation.JsonCreator; +import lombok.Getter; +import ssu.eatssu.domain.restaurant.entity.Restaurant; import java.util.Arrays; import java.util.List; -import com.fasterxml.jackson.annotation.JsonCreator; - -import lombok.Getter; -import ssu.eatssu.domain.restaurant.entity.Restaurant; +import static ssu.eatssu.domain.restaurant.entity.Restaurant.DODAM; +import static ssu.eatssu.domain.restaurant.entity.Restaurant.DORMITORY; +import static ssu.eatssu.domain.restaurant.entity.Restaurant.FOOD_COURT; +import static ssu.eatssu.domain.restaurant.entity.Restaurant.HAKSIK; +import static ssu.eatssu.domain.restaurant.entity.Restaurant.SNACK_CORNER; @Getter public enum MenuType { - FIXED("고정 메뉴", Arrays.asList(FOOD_COURT, SNACK_CORNER)), - VARIABLE("변동 메뉴", Arrays.asList(DODAM, DORMITORY, HAKSIK)); - - private final String description; - private final List restaurants; - - MenuType(String description, List restaurants) { - this.description = description; - this.restaurants = restaurants; - } - - @JsonCreator - public static MenuType from(String description) { - return Arrays.stream(MenuType.values()) - .filter(d -> d.getDescription().equals(description)) - .findAny() - .orElseThrow(IllegalArgumentException::new); - } + FIXED("고정 메뉴", Arrays.asList(FOOD_COURT, SNACK_CORNER)), + VARIABLE("변동 메뉴", Arrays.asList(DODAM, DORMITORY, HAKSIK)); + + private final String description; + private final List restaurants; + + MenuType(String description, List restaurants) { + this.description = description; + this.restaurants = restaurants; + } + + @JsonCreator + public static MenuType from(String description) { + return Arrays.stream(MenuType.values()) + .filter(d -> d.getDescription().equals(description)) + .findAny() + .orElseThrow(IllegalArgumentException::new); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java b/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java index 2866bffd..c8326e76 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/constants/TimePart.java @@ -1,28 +1,27 @@ package ssu.eatssu.domain.menu.entity.constants; -import java.util.Arrays; - import com.fasterxml.jackson.annotation.JsonCreator; - import lombok.Getter; +import java.util.Arrays; + @Getter public enum TimePart { - MORNING("조식"), - LUNCH("중식"), - DINNER("석식"); + MORNING("조식"), + LUNCH("중식"), + DINNER("석식"); - private final String description; + private final String description; - TimePart(String description) { - this.description = description; - } + TimePart(String description) { + this.description = description; + } - @JsonCreator - public static TimePart from(String description) { - return Arrays.stream(TimePart.values()) - .filter(d -> d.getDescription().equals(description)) - .findAny() - .orElseThrow(IllegalArgumentException::new); - } + @JsonCreator + public static TimePart from(String description) { + return Arrays.stream(TimePart.values()) + .filter(d -> d.getDescription().equals(description)) + .findAny() + .orElseThrow(IllegalArgumentException::new); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuQueryRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuQueryRepository.java index ffe34ee4..470e16e4 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuQueryRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuQueryRepository.java @@ -1,34 +1,32 @@ package ssu.eatssu.domain.menu.persistence; -import java.util.List; - -import org.springframework.stereotype.Component; - import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; import ssu.eatssu.domain.menu.entity.QMeal; import ssu.eatssu.domain.menu.entity.QMealMenu; import ssu.eatssu.domain.menu.entity.QMenu; +import java.util.List; + @Component @RequiredArgsConstructor public class MealMenuQueryRepository { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; - private final QMeal meal = QMeal.meal; + private final QMeal meal = QMeal.meal; - private final QMealMenu mealMenu = QMealMenu.mealMenu; + private final QMealMenu mealMenu = QMealMenu.mealMenu; - public List getMenuIds(Long mealId) { - return queryFactory - .select(menu.id) - .from(meal) - .join(mealMenu).on(meal.id.eq(mealMenu.meal.id)) - .join(menu).on(mealMenu.menu.id.eq(menu.id)) - .where(meal.id.eq(mealId)) - .fetch(); - } + public List getMenuIds(Long mealId) { + return queryFactory + .select(menu.id) + .from(meal) + .join(mealMenu).on(meal.id.eq(mealMenu.meal.id)) + .join(menu).on(mealMenu.menu.id.eq(menu.id)) + .where(meal.id.eq(mealId)) + .fetch(); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java index dc2999b2..277c073d 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealMenuRepository.java @@ -1,25 +1,24 @@ package ssu.eatssu.domain.menu.persistence; -import java.util.List; - import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; - import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; +import java.util.List; + public interface MealMenuRepository extends JpaRepository { - @Query("SELECT mm.menu FROM MealMenu mm WHERE mm.meal IN :meals") - List findMenusByMeals(List meals); + @Query("SELECT mm.menu FROM MealMenu mm WHERE mm.meal IN :meals") + List findMenusByMeals(List meals); - @Query("SELECT mm.menu.id FROM MealMenu mm WHERE mm.meal.id = :mealId") - List findMenuIdsByMealId(@Param("mealId") Long mealId); + @Query("SELECT mm.menu.id FROM MealMenu mm WHERE mm.meal.id = :mealId") + List findMenuIdsByMealId(@Param("mealId") Long mealId); - @Query("SELECT DISTINCT mm.meal.id FROM MealMenu mm WHERE mm.menu.id IN :menuIds") - List findMealIdsByMenuIds(@Param("menuIds") List menuIds); + @Query("SELECT DISTINCT mm.meal.id FROM MealMenu mm WHERE mm.menu.id IN :menuIds") + List findMealIdsByMenuIds(@Param("menuIds") List menuIds); - @Query("SELECT mm.menu FROM MealMenu mm WHERE mm.meal = :meal") - List findMenusByMeal(Meal meal); + @Query("SELECT mm.menu FROM MealMenu mm WHERE mm.meal = :meal") + List findMenusByMeal(Meal meal); } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java index dcc471cc..df59f5d7 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MealRepository.java @@ -1,17 +1,16 @@ package ssu.eatssu.domain.menu.persistence; -import java.util.Date; -import java.util.List; - import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.util.Date; +import java.util.List; + public interface MealRepository extends JpaRepository { - List findAllByDateAndTimePartAndRestaurant(Date date, TimePart timePart, Restaurant restaurant); + List findAllByDateAndTimePartAndRestaurant(Date date, TimePart timePart, Restaurant restaurant); - List findByRestaurant(Restaurant restaurant); + List findByRestaurant(Restaurant restaurant); } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java index 5b171e61..ffc0fcdd 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuCategoryRepository.java @@ -1,13 +1,12 @@ package ssu.eatssu.domain.menu.persistence; -import java.util.List; - import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.util.List; + public interface MenuCategoryRepository extends JpaRepository { - List findAllByRestaurant(Restaurant restaurant); + List findAllByRestaurant(Restaurant restaurant); } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java index 19ab9f94..e87ece59 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/MenuRepository.java @@ -1,20 +1,19 @@ package ssu.eatssu.domain.menu.persistence; -import java.util.List; -import java.util.Optional; - import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.util.List; +import java.util.Optional; + public interface MenuRepository extends JpaRepository { - boolean existsByNameAndRestaurant(String name, Restaurant restaurant); + boolean existsByNameAndRestaurant(String name, Restaurant restaurant); - Optional findByNameAndRestaurant(String name, Restaurant restaurant); + Optional findByNameAndRestaurant(String name, Restaurant restaurant); - List findAllByRestaurantAndCategory(Restaurant restaurant, MenuCategory category); + List findAllByRestaurantAndCategory(Restaurant restaurant, MenuCategory category); - List findAll(); + List findAll(); } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java index f68363ff..482cb4dc 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java @@ -1,64 +1,62 @@ package ssu.eatssu.domain.menu.persistence; -import java.util.List; - -import org.springframework.stereotype.Repository; - import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; +import java.util.List; + @Repository @RequiredArgsConstructor public class QuerydslMealRatingCalculator { - private final MealMenuQueryRepository mealMenuQueryRepository; - - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - - private final QReview review = QReview.review; - - public Double getMainRatingAverage(Long mealId) { - List menuIds = mealMenuQueryRepository.getMenuIds(mealId); - return queryFactory - .select(review.ratings.mainRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdIn(menuIds) - ) - .fetchOne(); - } - - public Double getTasteRatingAverage(Long mealId) { - List menuIds = mealMenuQueryRepository.getMenuIds(mealId); - return queryFactory - .select(review.ratings.tasteRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdIn(menuIds) - ) - .fetchOne(); - } - - public Double getAmountRatingAverage(Long mealId) { - List menuIds = mealMenuQueryRepository.getMenuIds(mealId); - return queryFactory - .select(review.ratings.amountRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdIn(menuIds) - ) - .fetchOne(); - } - - private BooleanExpression menuIdIn(List menuIds) { - return menuIds != null && !menuIds.isEmpty() ? menu.id.in(menuIds) : null; - } + private final MealMenuQueryRepository mealMenuQueryRepository; + + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + + private final QReview review = QReview.review; + + public Double getMainRatingAverage(Long mealId) { + List menuIds = mealMenuQueryRepository.getMenuIds(mealId); + return queryFactory + .select(review.ratings.mainRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdIn(menuIds) + ) + .fetchOne(); + } + + public Double getTasteRatingAverage(Long mealId) { + List menuIds = mealMenuQueryRepository.getMenuIds(mealId); + return queryFactory + .select(review.ratings.tasteRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdIn(menuIds) + ) + .fetchOne(); + } + + public Double getAmountRatingAverage(Long mealId) { + List menuIds = mealMenuQueryRepository.getMenuIds(mealId); + return queryFactory + .select(review.ratings.amountRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdIn(menuIds) + ) + .fetchOne(); + } + + private BooleanExpression menuIdIn(List menuIds) { + return menuIds != null && !menuIds.isEmpty() ? menu.id.in(menuIds) : null; + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java index a4125b0d..0222a171 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCounter.java @@ -1,58 +1,56 @@ package ssu.eatssu.domain.menu.persistence; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Repository; - import com.querydsl.core.Tuple; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + @Repository @RequiredArgsConstructor public class QuerydslMealRatingCounter { - private final MealMenuQueryRepository mealMenuQueryRepository; - - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - - private final QReview review = QReview.review; - - public Map getRatingCountMap(Long mealId) { - List tuples = queryFactory.select(review.ratings.mainRating, review.count()) - .from(review) - .join(review.menu, menu) - .groupBy(review.ratings.mainRating) - .where(menuIdIn(mealMenuQueryRepository.getMenuIds(mealId))) - .fetch(); - - Map ratingCountMap = new HashMap<>(); - for (Tuple tuple : tuples) { - Integer rating = tuple.get(review.ratings.mainRating); - Long count = tuple.get(review.count()); - ratingCountMap.put(rating, count); - } - return ratingCountMap; - } - - public Long getTotalRatingCount(Long mealId) { - return queryFactory - .select(review.count()) - .from(review) - .join(review.menu, menu) - .where(menuIdIn(mealMenuQueryRepository.getMenuIds(mealId))) - .fetchOne(); - } - - private BooleanExpression menuIdIn(List menuIds) { - return menuIds != null && !menuIds.isEmpty() ? menu.id.in(menuIds) : null; - } + private final MealMenuQueryRepository mealMenuQueryRepository; + + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + + private final QReview review = QReview.review; + + public Map getRatingCountMap(Long mealId) { + List tuples = queryFactory.select(review.ratings.mainRating, review.count()) + .from(review) + .join(review.menu, menu) + .groupBy(review.ratings.mainRating) + .where(menuIdIn(mealMenuQueryRepository.getMenuIds(mealId))) + .fetch(); + + Map ratingCountMap = new HashMap<>(); + for (Tuple tuple : tuples) { + Integer rating = tuple.get(review.ratings.mainRating); + Long count = tuple.get(review.count()); + ratingCountMap.put(rating, count); + } + return ratingCountMap; + } + + public Long getTotalRatingCount(Long mealId) { + return queryFactory + .select(review.count()) + .from(review) + .join(review.menu, menu) + .where(menuIdIn(mealMenuQueryRepository.getMenuIds(mealId))) + .fetchOne(); + } + + private BooleanExpression menuIdIn(List menuIds) { + return menuIds != null && !menuIds.isEmpty() ? menu.id.in(menuIds) : null; + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java index dcfb2795..97e33f81 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java @@ -1,11 +1,9 @@ package ssu.eatssu.domain.menu.persistence; -import org.springframework.stereotype.Repository; - import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; @@ -13,44 +11,44 @@ @RequiredArgsConstructor public class QuerydslMenuRatingCalculator { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - private final QReview review = QReview.review; - - public Double getMainRatingAverage(Long menuId) { - return queryFactory - .select(review.ratings.mainRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId) - ) - .fetchOne(); - } - - public Double getTasteRatingAverage(Long menuId) { - return queryFactory - .select(review.ratings.tasteRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId) - ) - .fetchOne(); - } - - public Double getAmountRatingAverage(Long menuId) { - return queryFactory - .select(review.ratings.amountRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId) - ) - .fetchOne(); - } - - private BooleanExpression menuIdEq(Long menuId) { - return menu.id.eq(menuId); - } + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QReview review = QReview.review; + + public Double getMainRatingAverage(Long menuId) { + return queryFactory + .select(review.ratings.mainRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId) + ) + .fetchOne(); + } + + public Double getTasteRatingAverage(Long menuId) { + return queryFactory + .select(review.ratings.tasteRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId) + ) + .fetchOne(); + } + + public Double getAmountRatingAverage(Long menuId) { + return queryFactory + .select(review.ratings.amountRating.avg()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId) + ) + .fetchOne(); + } + + private BooleanExpression menuIdEq(Long menuId) { + return menu.id.eq(menuId); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java index db426a00..e035465d 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCounter.java @@ -1,46 +1,44 @@ package ssu.eatssu.domain.menu.persistence; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.springframework.stereotype.Repository; - import com.querydsl.core.Tuple; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + @Repository @RequiredArgsConstructor public class QuerydslMenuRatingCounter { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - private final QReview review = QReview.review; - - public Map getRatingCountMap(Long menuId) { - List tuples = queryFactory.select(review.ratings.mainRating, review.count()) - .from(review) - .join(review.menu, menu) - .groupBy(review.ratings.mainRating) - .where(menuIdEq(menuId)) - .fetch(); - - Map ratingCountMap = new HashMap<>(); - - for (Tuple tuple : tuples) { - Integer rating = tuple.get(review.ratings.mainRating); - Long count = tuple.get(review.count()); - ratingCountMap.put(rating, count); - } - return ratingCountMap; - } - - private BooleanExpression menuIdEq(Long menuId) { - return menu.id.eq(menuId); - } + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QReview review = QReview.review; + + public Map getRatingCountMap(Long menuId) { + List tuples = queryFactory.select(review.ratings.mainRating, review.count()) + .from(review) + .join(review.menu, menu) + .groupBy(review.ratings.mainRating) + .where(menuIdEq(menuId)) + .fetch(); + + Map ratingCountMap = new HashMap<>(); + + for (Tuple tuple : tuples) { + Integer rating = tuple.get(review.ratings.mainRating); + Long count = tuple.get(review.count()); + ratingCountMap.put(rating, count); + } + return ratingCountMap; + } + + private BooleanExpression menuIdEq(Long menuId) { + return menu.id.eq(menuId); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java index 6286bc52..a865c887 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/CreateMealRequest.java @@ -1,13 +1,13 @@ package ssu.eatssu.domain.menu.presentation.dto.request; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; +import java.util.List; + @Schema(title = "식단 추가") public record CreateMealRequest( - @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") - List menuNames + @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") + List menuNames ) { } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java index 0c5c2bcf..7035d835 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/request/MealCreateWithPriceRequest.java @@ -1,15 +1,15 @@ package ssu.eatssu.domain.menu.presentation.dto.request; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; +import java.util.List; + @Schema(title = "식단 추가(가격 입력 받는 버전)") public record MealCreateWithPriceRequest( - @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") - List menuNames, - @Schema(description = "식단 가격", example = "3000") - Integer price + @Schema(description = "메뉴명 리스트", example = "[\"돈까스\", \"샐러드\", \"김치\"]") + List menuNames, + @Schema(description = "식단 가격", example = "3000") + Integer price ) { } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/BriefMenuResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/BriefMenuResponse.java index 2f0dd1f6..5906c9ab 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/BriefMenuResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/BriefMenuResponse.java @@ -10,14 +10,14 @@ @Schema(title = "메뉴 간단 설명") public class BriefMenuResponse { - @Schema(description = "메뉴 식별자", example = "2") - private Long menuId; + @Schema(description = "메뉴 식별자", example = "2") + private Long menuId; - @Schema(description = "메뉴 이름", example = "돈까스") - private String name; + @Schema(description = "메뉴 이름", example = "돈까스") + private String name; - public BriefMenuResponse(Menu menu) { - this.menuId = menu.getId(); - this.name = menu.getName(); - } + public BriefMenuResponse(Menu menu) { + this.menuId = menu.getId(); + this.name = menu.getName(); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java index 20eee35d..c96c6e19 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/CategoryWithMenusResponse.java @@ -1,26 +1,26 @@ package ssu.eatssu.domain.menu.presentation.dto.response; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; +import java.util.List; + @Getter @Schema(title = "카테고리 별 메뉴 목록 Response") public class CategoryWithMenusResponse { - @Schema(description = "카테고리명") - private final String category; + @Schema(description = "카테고리명") + private final String category; - @Schema(description = "카테고리의 메뉴 목록") - private final List menus; + @Schema(description = "카테고리의 메뉴 목록") + private final List menus; - public CategoryWithMenusResponse(String category, List menus) { - this.category = category; - this.menus = menus; - } + public CategoryWithMenusResponse(String category, List menus) { + this.category = category; + this.menus = menus; + } - public static CategoryWithMenusResponse of(String category, List menus) { - return new CategoryWithMenusResponse(category, menus); - } + public static CategoryWithMenusResponse of(String category, List menus) { + return new CategoryWithMenusResponse(category, menus); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java index 81544743..afdbd0df 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MealDetailResponse.java @@ -1,7 +1,5 @@ package ssu.eatssu.domain.menu.presentation.dto.response; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; @@ -9,37 +7,39 @@ import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; +import java.util.List; + @Getter @NoArgsConstructor @AllArgsConstructor @Schema(title = "오늘의 식단 리스트 조회 Response") public class MealDetailResponse { - @Schema(description = "식단 식별자 mealId", example = "12") - private Long mealId; + @Schema(description = "식단 식별자 mealId", example = "12") + private Long mealId; - @Schema(description = "가격", example = "5000") - private Integer price; + @Schema(description = "가격", example = "5000") + private Integer price; - @Schema(description = "식단 평점(평점이 없으면 null)", example = "4.4") - private Double rating; + @Schema(description = "식단 평점(평점이 없으면 null)", example = "4.4") + private Double rating; - @Schema(description = "식단 속 메뉴 정보 리스트") - private List briefMenus; + @Schema(description = "식단 속 메뉴 정보 리스트") + private List briefMenus; - public static MealDetailResponse from(Meal meal, Double mainRating) { - List briefMenus = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(BriefMenuResponse::new) - .toList(); + public static MealDetailResponse from(Meal meal, Double mainRating) { + List briefMenus = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(BriefMenuResponse::new) + .toList(); - return new MealDetailResponse( - meal.getId(), - meal.getPrice(), - mainRating, - briefMenus - ); - } + return new MealDetailResponse( + meal.getId(), + meal.getPrice(), + mainRating, + briefMenus + ); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java index 70e3d5de..bd3f6e87 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java @@ -12,19 +12,19 @@ @Schema(title = "고정 메뉴 정보") public class MenuResponse { - @Schema(description = "메뉴 식별자", example = "2") - private Long menuId; + @Schema(description = "메뉴 식별자", example = "2") + private Long menuId; - @Schema(description = "메뉴 이름", example = "돈까스") - private String name; + @Schema(description = "메뉴 이름", example = "돈까스") + private String name; - @Schema(description = "가격", example = "5000") - private Integer price; + @Schema(description = "가격", example = "5000") + private Integer price; - @Schema(description = "메뉴 평점 (평점이 없으면 null) ", example = "4.4") - private Double rating; + @Schema(description = "메뉴 평점 (평점이 없으면 null) ", example = "4.4") + private Double rating; - public static MenuResponse from(Menu menu, Double rating) { - return new MenuResponse(menu.getId(), menu.getName(), menu.getPrice(), rating); - } + public static MenuResponse from(Menu menu, Double rating) { + return new MenuResponse(menu.getId(), menu.getName(), menu.getPrice(), rating); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java index ec1e7a53..8e61d251 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuRestaurantResponse.java @@ -1,28 +1,28 @@ package ssu.eatssu.domain.menu.presentation.dto.response; +import lombok.Getter; + import java.util.ArrayList; import java.util.List; -import lombok.Getter; - @Getter public class MenuRestaurantResponse { - private final List categoryMenuListCollection; + private final List categoryMenuListCollection; - private MenuRestaurantResponse(List categoryMenu) { - this.categoryMenuListCollection = categoryMenu; - } + private MenuRestaurantResponse(List categoryMenu) { + this.categoryMenuListCollection = categoryMenu; + } - public static MenuRestaurantResponse init() { - return new MenuRestaurantResponse(new ArrayList<>()); - } + public static MenuRestaurantResponse init() { + return new MenuRestaurantResponse(new ArrayList<>()); + } - public void add(CategoryWithMenusResponse categoryWithMenusResponse) { - this.categoryMenuListCollection.add(categoryWithMenusResponse); - } + public void add(CategoryWithMenusResponse categoryWithMenusResponse) { + this.categoryMenuListCollection.add(categoryWithMenusResponse); + } - public void addAll(List categoryWithMenusResponses) { - this.categoryMenuListCollection.addAll(categoryWithMenusResponses); - } + public void addAll(List categoryWithMenusResponses) { + this.categoryMenuListCollection.addAll(categoryWithMenusResponses); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java index 85480c5d..cc58ea3d 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java @@ -1,7 +1,5 @@ package ssu.eatssu.domain.menu.presentation.dto.response; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; @@ -9,21 +7,23 @@ import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; +import java.util.List; + @Getter @NoArgsConstructor @AllArgsConstructor @Schema(title = "식단 속 메뉴 정보 리스트") public class MenusInMealResponse { - @Schema(description = "식단 속 메뉴 목록", example = "[]") - private List briefMenus; + @Schema(description = "식단 속 메뉴 목록", example = "[]") + private List briefMenus; - public static MenusInMealResponse from(Meal meal) { - List menusInformation = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(BriefMenuResponse::new) - .toList(); + public static MenusInMealResponse from(Meal meal) { + List menusInformation = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(BriefMenuResponse::new) + .toList(); - return new MenusInMealResponse(menusInformation); - } + return new MenusInMealResponse(menusInformation); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java index 04f24f7a..d2206241 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MealController.java @@ -1,10 +1,13 @@ package ssu.eatssu.domain.menu.presentation.rest; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - -import java.util.Date; -import java.util.List; - +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -14,15 +17,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.menu.presentation.dto.request.CreateMealRequest; import ssu.eatssu.domain.menu.presentation.dto.request.MealCreateWithPriceRequest; @@ -34,109 +28,114 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponse; +import java.util.Date; +import java.util.List; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; + @RestController @RequiredArgsConstructor @RequestMapping("/meals") @Tag(name = "Meal", description = "식단 API") public class MealController { - private final MealService mealService; + private final MealService mealService; - @Operation(summary = "식단 추가 [인증 토큰 필요 X]", description = """ - 식단을 추가하는 API 입니다.

- 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

- 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 추가 성공"), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("") - public BaseResponse createMeal( - @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, - @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, - @RequestBody CreateMealRequest mealCreateRequest) { - if (RestaurantType.isFixedType(restaurant)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } + @Operation(summary = "식단 추가 [인증 토큰 필요 X]", description = """ + 식단을 추가하는 API 입니다.

+ 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

+ 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 추가 성공"), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("") + public BaseResponse createMeal( + @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, + @RequestBody CreateMealRequest mealCreateRequest) { + if (RestaurantType.isFixedType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } - mealService.createMeal(date, restaurant, timePart, mealCreateRequest); - return BaseResponse.success(); - } + mealService.createMeal(date, restaurant, timePart, mealCreateRequest); + return BaseResponse.success(); + } - @Operation(summary = "식단 추가 [인증 토큰 필요 X]", description = """ - 식단을 추가하는 API 입니다.

- 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

- 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) - 가격을 외부에서 입력받습니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 추가 성공"), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/with-price") - public BaseResponse createMealWithPrice( - @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, - @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, - @RequestBody MealCreateWithPriceRequest request) { - if (RestaurantType.isFixedType(restaurant)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } + @Operation(summary = "식단 추가 [인증 토큰 필요 X]", description = """ + 식단을 추가하는 API 입니다.

+ 변동메뉴 식당(학생식당, 도담, 기숙사 식당)의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단을 추가합니다.

+ 이미 존재하는 식단일 경우 중복저장 되지 않도록 처리합니다.(별도의 ErrorResponse 응답 X) + 가격을 외부에서 입력받습니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 추가 성공"), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "잘못된 날짜형식", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping("/with-price") + public BaseResponse createMealWithPrice( + @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "식당이름") @RequestParam("restaurant") Restaurant restaurant, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart, + @RequestBody MealCreateWithPriceRequest request) { + if (RestaurantType.isFixedType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } - mealService.createMealWithPrice(date, restaurant, timePart, request); - return BaseResponse.success(); - } + mealService.createMealWithPrice(date, restaurant, timePart, request); + return BaseResponse.success(); + } - @Operation(summary = "변동 메뉴 식단 리스트 조회 [인증 토큰 필요 X]", description = """ - 변동 메뉴 식단 리스트를 조회하는 API 입니다. - 변동 메뉴 식당 (학생 식당, 도담, 기숙사 식당) 의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회합니다. - 일반적으로 학생식당과 도담의 경우 식단 여러 개가 조회되고 기숙사식당은 한 개만 조회됩니다.) - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "지원 하지 않는 식당 (고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("") - public BaseResponse> getMealDetail( - @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, - @Parameter(description = "식당 이름") @RequestParam("restaurant") Restaurant restaurant, - @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { + @Operation(summary = "변동 메뉴 식단 리스트 조회 [인증 토큰 필요 X]", description = """ + 변동 메뉴 식단 리스트를 조회하는 API 입니다. + 변동 메뉴 식당 (학생 식당, 도담, 기숙사 식당) 의 특정날짜(yyyyMMdd), 특정시간대(아침/점심/저녁)에 해당하는 식단 목록을 조회합니다. + 일반적으로 학생식당과 도담의 경우 식단 여러 개가 조회되고 기숙사식당은 한 개만 조회됩니다.) + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "지원 하지 않는 식당 (고정 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재 하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("") + public BaseResponse> getMealDetail( + @Parameter(schema = @Schema(type = "string", format = "date", example = "20240101")) @RequestParam("date") @DateTimeFormat(pattern = "yyyyMMdd") Date date, + @Parameter(description = "식당 이름") @RequestParam("restaurant") Restaurant restaurant, + @Parameter(description = "시간대") @RequestParam("time") TimePart timePart) { - return BaseResponse.success( - mealService.getMealDetailsByDateAndRestaurantAndTimePart(date, restaurant, timePart)); - } + return BaseResponse.success( + mealService.getMealDetailsByDateAndRestaurantAndTimePart(date, restaurant, timePart)); + } - @Operation(summary = "식단 삭제 [인증 토큰 필요 X]", description = "식단을 삭제하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "식단 삭제 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("/{mealId}") - public BaseResponse deleteMeal( - @Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { + @Operation(summary = "식단 삭제 [인증 토큰 필요 X]", description = "식단을 삭제하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "식단 삭제 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("/{mealId}") + public BaseResponse deleteMeal( + @Parameter(description = "mealId") @PathVariable("mealId") Long mealId) { - mealService.deleteByMealId(mealId); - return BaseResponse.success(); - } + mealService.deleteByMealId(mealId); + return BaseResponse.success(); + } - @Operation(summary = "메뉴 정보 리스트 조회 [인증 토큰 필요 X]", description = """ - 메뉴 정보 리스트를 조회하는 API 입니다.

- 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/{mealId}/menus-info") - public BaseResponse getMenusInMeal(@Parameter(description = "mealId") - @PathVariable("mealId") Long mealId) { - return BaseResponse.success(mealService.getMenusInMealByMealId(mealId)); - } + @Operation(summary = "메뉴 정보 리스트 조회 [인증 토큰 필요 X]", description = """ + 메뉴 정보 리스트를 조회하는 API 입니다.

+ 식단식별자(mealId)로 해당 식단에 속하는 메뉴 정보 목록을 조회합니다.") + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "메뉴 정보 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/{mealId}/menus-info") + public BaseResponse getMenusInMeal(@Parameter(description = "mealId") + @PathVariable("mealId") Long mealId) { + return BaseResponse.success(mealService.getMenusInMealByMealId(mealId)); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java index 21abe326..7c125034 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java @@ -1,10 +1,5 @@ package ssu.eatssu.domain.menu.presentation.rest; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -12,6 +7,10 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.menu.presentation.dto.response.MenuRestaurantResponse; import ssu.eatssu.domain.menu.service.MenuService; import ssu.eatssu.domain.restaurant.entity.Restaurant; @@ -23,24 +22,24 @@ @Tag(name = "Menu", description = "메뉴 API") public class MenuController { - private final MenuService menuService; + private final MenuService menuService; - @Operation(summary = "고정 메뉴 리스트 조회 [인증 토큰 필요 X]", - description = - """ - 고정 메뉴 리스트를 조회하는 API 입니다. - 메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 리스트를 조회합니다. - """ - ) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping - public BaseResponse getMenus( - @RequestParam("restaurant") Restaurant restaurant) { + @Operation(summary = "고정 메뉴 리스트 조회 [인증 토큰 필요 X]", + description = + """ + 고정 메뉴 리스트를 조회하는 API 입니다. + 메뉴가 고정된 식당(푸드코트, 스낵코너, 더 키친)의 메뉴 리스트를 조회합니다. + """ + ) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "메뉴 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "지원하지 않는 식당(변동 메뉴 식당)", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식당", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping + public BaseResponse getMenus( + @RequestParam("restaurant") Restaurant restaurant) { - return BaseResponse.success(menuService.getMenusByRestaurant(restaurant)); - } + return BaseResponse.success(menuService.getMenusByRestaurant(restaurant)); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java b/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java index 4756055c..b338e725 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MealRatingService.java @@ -1,18 +1,17 @@ package ssu.eatssu.domain.menu.service; -import org.springframework.stereotype.Service; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; import ssu.eatssu.domain.menu.persistence.QuerydslMealRatingCalculator; @Service @RequiredArgsConstructor public class MealRatingService { - private final QuerydslMealRatingCalculator mealRatingCalculator; + private final QuerydslMealRatingCalculator mealRatingCalculator; - public Double getMainRatingAverage(Long mealId) { - return mealRatingCalculator.getMainRatingAverage(mealId); - } + public Double getMainRatingAverage(Long mealId) { + return mealRatingCalculator.getMainRatingAverage(mealId); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MealService.java b/src/main/java/ssu/eatssu/domain/menu/service/MealService.java index a858543c..4fc0859d 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MealService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MealService.java @@ -1,16 +1,9 @@ package ssu.eatssu.domain.menu.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - -import java.util.Date; -import java.util.List; -import java.util.Optional; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; import ssu.eatssu.domain.menu.entity.Menu; @@ -26,129 +19,135 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.util.Date; +import java.util.List; +import java.util.Optional; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; + @Slf4j @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class MealService { - private final MealRepository mealRepository; - private final MealMenuRepository mealMenuRepository; - private final MealRatingService mealRatingService; - private final MenuService menuService; - - public MenusInMealResponse getMenusInMealByMealId(Long mealId) { - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); - - return MenusInMealResponse.from(meal); - } - - public List getMealDetailsByDateAndRestaurantAndTimePart( - Date date, Restaurant restaurant, TimePart timePart) { - - validateMealRestaurant(restaurant); - - List meals = findMealsByDateAndTimePartAndRestaurant(date, timePart, restaurant); - - return meals.stream() - .map(meal -> MealDetailResponse.from(meal, - mealRatingService.getMainRatingAverage(meal.getId()))) - .toList(); - } - - private List findMealsByDateAndTimePartAndRestaurant(Date date, TimePart timePart, - Restaurant restaurant) { - return mealRepository.findAllByDateAndTimePartAndRestaurant(date, timePart, restaurant); - } - - private void validateMealRestaurant(Restaurant restaurant) { - if (RestaurantType.isFixedType(restaurant)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } - } - - @Transactional - public Long createMeal(Date date, Restaurant restaurant, TimePart timePart, - CreateMealRequest request) { - return createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), null); - } - - @Transactional - public Long createMealWithPrice(Date date, Restaurant restaurant, TimePart timePart, - MealCreateWithPriceRequest request) { - return createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), request.price()); - } - - private Long createMealWithOptionalPrice(Date date, Restaurant restaurant, TimePart timePart, - List menuNames, Integer price) { - - Optional existingMealId = getExistingMealId(date, timePart, restaurant, menuNames); - if (existingMealId.isPresent()) { - return existingMealId.get(); // 이미 존재하는 식단의 ID를 반환 - } - - Meal meal = new Meal(date, timePart, restaurant, price); - Meal savedMeal = mealRepository.save(meal); - addMenusToMeal(meal, restaurant, menuNames); - - return savedMeal.getId(); - } - - private Optional getExistingMealId(Date date, TimePart timePart, Restaurant restaurant, - List menuNames) { - List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(date, timePart, restaurant); - - List sortedRequestMenuNames = menuNames.stream() - .sorted() - .toList(); - - return meals.stream() - .filter(meal -> { - List sortedMenuNames = meal.getMenuNames().stream() - .sorted() - .toList(); - return sortedMenuNames.equals(sortedRequestMenuNames); - }) - .findFirst() - .map(Meal::getId); - } - - private void addMenusToMeal(Meal meal, Restaurant restaurant, List menuNames) { - for (String menuName : menuNames) { - Menu menu = menuService.createOrGetMenu(menuName, restaurant); - createMealMenu(meal, menu); - } - } - - private void createMealMenu(Meal meal, Menu menu) { - MealMenu mealMenu = MealMenu.builder() - .menu(menu) - .meal(meal) - .build(); - - mealMenuRepository.save(mealMenu); - meal.addMealMenu(mealMenu); - } - - @Transactional - public void deleteByMealId(Long mealId) { - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); - - List menus = meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .toList(); - - mealRepository.delete(meal); - mealRepository.flush(); - - deleteUnusedMenus(menus); - } - - private void deleteUnusedMenus(List menus) { - menus.stream() - .filter(menu -> menu.getMealMenus().isEmpty()) - .forEach(menuService::deleteMenu); - } + private final MealRepository mealRepository; + private final MealMenuRepository mealMenuRepository; + private final MealRatingService mealRatingService; + private final MenuService menuService; + + public MenusInMealResponse getMenusInMealByMealId(Long mealId) { + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + + return MenusInMealResponse.from(meal); + } + + public List getMealDetailsByDateAndRestaurantAndTimePart( + Date date, Restaurant restaurant, TimePart timePart) { + + validateMealRestaurant(restaurant); + + List meals = findMealsByDateAndTimePartAndRestaurant(date, timePart, restaurant); + + return meals.stream() + .map(meal -> MealDetailResponse.from(meal, + mealRatingService.getMainRatingAverage(meal.getId()))) + .toList(); + } + + private List findMealsByDateAndTimePartAndRestaurant(Date date, TimePart timePart, + Restaurant restaurant) { + return mealRepository.findAllByDateAndTimePartAndRestaurant(date, timePart, restaurant); + } + + private void validateMealRestaurant(Restaurant restaurant) { + if (RestaurantType.isFixedType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } + } + + @Transactional + public Long createMeal(Date date, Restaurant restaurant, TimePart timePart, + CreateMealRequest request) { + return createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), null); + } + + @Transactional + public Long createMealWithPrice(Date date, Restaurant restaurant, TimePart timePart, + MealCreateWithPriceRequest request) { + return createMealWithOptionalPrice(date, restaurant, timePart, request.menuNames(), request.price()); + } + + private Long createMealWithOptionalPrice(Date date, Restaurant restaurant, TimePart timePart, + List menuNames, Integer price) { + + Optional existingMealId = getExistingMealId(date, timePart, restaurant, menuNames); + if (existingMealId.isPresent()) { + return existingMealId.get(); // 이미 존재하는 식단의 ID를 반환 + } + + Meal meal = new Meal(date, timePart, restaurant, price); + Meal savedMeal = mealRepository.save(meal); + addMenusToMeal(meal, restaurant, menuNames); + + return savedMeal.getId(); + } + + private Optional getExistingMealId(Date date, TimePart timePart, Restaurant restaurant, + List menuNames) { + List meals = mealRepository.findAllByDateAndTimePartAndRestaurant(date, timePart, restaurant); + + List sortedRequestMenuNames = menuNames.stream() + .sorted() + .toList(); + + return meals.stream() + .filter(meal -> { + List sortedMenuNames = meal.getMenuNames().stream() + .sorted() + .toList(); + return sortedMenuNames.equals(sortedRequestMenuNames); + }) + .findFirst() + .map(Meal::getId); + } + + private void addMenusToMeal(Meal meal, Restaurant restaurant, List menuNames) { + for (String menuName : menuNames) { + Menu menu = menuService.createOrGetMenu(menuName, restaurant); + createMealMenu(meal, menu); + } + } + + private void createMealMenu(Meal meal, Menu menu) { + MealMenu mealMenu = MealMenu.builder() + .menu(menu) + .meal(meal) + .build(); + + mealMenuRepository.save(mealMenu); + meal.addMealMenu(mealMenu); + } + + @Transactional + public void deleteByMealId(Long mealId) { + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + + List menus = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .toList(); + + mealRepository.delete(meal); + mealRepository.flush(); + + deleteUnusedMenus(menus); + } + + private void deleteUnusedMenus(List menus) { + menus.stream() + .filter(menu -> menu.getMealMenus().isEmpty()) + .forEach(menuService::deleteMenu); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java index 454b15de..7a0fb173 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuRatingService.java @@ -1,17 +1,16 @@ package ssu.eatssu.domain.menu.service; -import org.springframework.stereotype.Service; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; import ssu.eatssu.domain.menu.persistence.QuerydslMenuRatingCalculator; @Service @RequiredArgsConstructor public class MenuRatingService { - private final QuerydslMenuRatingCalculator menuRatingCalculator; + private final QuerydslMenuRatingCalculator menuRatingCalculator; - public Double getMainRatingAverage(Long menuId) { - return menuRatingCalculator.getMainRatingAverage(menuId); - } + public Double getMainRatingAverage(Long menuId) { + return menuRatingCalculator.getMainRatingAverage(menuId); + } } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index cd8eb7de..8b6a67e2 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -1,15 +1,10 @@ package ssu.eatssu.domain.menu.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - -import java.util.List; - -import org.jetbrains.annotations.NotNull; -import org.springframework.stereotype.Service; - import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; +import org.springframework.stereotype.Service; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.menu.persistence.MenuCategoryRepository; @@ -22,68 +17,72 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.util.List; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_SUPPORT_RESTAURANT; + @Slf4j @Service @RequiredArgsConstructor @Transactional public class MenuService { - private final MenuRepository menuRepository; - private final MenuCategoryRepository menuCategoryRepository; - private final MenuRatingService menuRatingService; - - private static void validateMenuRestaurant(Restaurant restaurant) { - if (RestaurantType.isVariableType(restaurant)) { - throw new BaseException(NOT_SUPPORT_RESTAURANT); - } - } - - public MenuRestaurantResponse getMenusByRestaurant(Restaurant restaurant) { - validateMenuRestaurant(restaurant); - - List categories = findCategoriesByRestaurant(restaurant); - - MenuRestaurantResponse response = MenuRestaurantResponse.init(); - - for (MenuCategory category : categories) { - List menus = getMenuResponsesByRestaurantAndCategory(restaurant, - category); - response.add(CategoryWithMenusResponse.of(category.getName(), menus)); - } - - return response; - } - - private List findCategoriesByRestaurant(Restaurant restaurant) { - return menuCategoryRepository.findAllByRestaurant(restaurant); - } - - @NotNull - private List getMenuResponsesByRestaurantAndCategory(Restaurant restaurant, - MenuCategory category) { - return menuRepository.findAllByRestaurantAndCategory(restaurant, category) - .stream() - .filter(Menu::isContinued) - .map(menu -> MenuResponse.from(menu, - menuRatingService.getMainRatingAverage(menu.getId()))) - .toList(); - } - - @Transactional - public Menu createOrGetMenu(String menuName, Restaurant restaurant) { - return menuRepository.existsByNameAndRestaurant(menuName, restaurant) ? - findMenu(menuName, restaurant) : - menuRepository.save(Menu.createVariable(menuName, restaurant)); - } - - private Menu findMenu(String addMenuName, Restaurant restaurant) { - Menu menu = menuRepository.findByNameAndRestaurant(addMenuName, restaurant) - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); - return menu; - } - - @Transactional - public void deleteMenu(Menu menu) { - menuRepository.delete(menu); - } + private final MenuRepository menuRepository; + private final MenuCategoryRepository menuCategoryRepository; + private final MenuRatingService menuRatingService; + + private static void validateMenuRestaurant(Restaurant restaurant) { + if (RestaurantType.isVariableType(restaurant)) { + throw new BaseException(NOT_SUPPORT_RESTAURANT); + } + } + + public MenuRestaurantResponse getMenusByRestaurant(Restaurant restaurant) { + validateMenuRestaurant(restaurant); + + List categories = findCategoriesByRestaurant(restaurant); + + MenuRestaurantResponse response = MenuRestaurantResponse.init(); + + for (MenuCategory category : categories) { + List menus = getMenuResponsesByRestaurantAndCategory(restaurant, + category); + response.add(CategoryWithMenusResponse.of(category.getName(), menus)); + } + + return response; + } + + private List findCategoriesByRestaurant(Restaurant restaurant) { + return menuCategoryRepository.findAllByRestaurant(restaurant); + } + + @NotNull + private List getMenuResponsesByRestaurantAndCategory(Restaurant restaurant, + MenuCategory category) { + return menuRepository.findAllByRestaurantAndCategory(restaurant, category) + .stream() + .filter(Menu::isContinued) + .map(menu -> MenuResponse.from(menu, + menuRatingService.getMainRatingAverage(menu.getId()))) + .toList(); + } + + @Transactional + public Menu createOrGetMenu(String menuName, Restaurant restaurant) { + return menuRepository.existsByNameAndRestaurant(menuName, restaurant) ? + findMenu(menuName, restaurant) : + menuRepository.save(Menu.createVariable(menuName, restaurant)); + } + + private Menu findMenu(String addMenuName, Restaurant restaurant) { + Menu menu = menuRepository.findByNameAndRestaurant(addMenuName, restaurant) + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MENU)); + return menu; + } + + @Transactional + public void deleteMenu(Menu menu) { + menuRepository.delete(menu); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java b/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java index d8c18dd7..78ff0766 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/QuerydslMenuRatingCountProvider.java @@ -1,38 +1,36 @@ package ssu.eatssu.domain.menu.service; -import org.springframework.stereotype.Repository; - import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; import ssu.eatssu.domain.menu.entity.QMenu; import ssu.eatssu.domain.review.entity.QReview; @Repository @RequiredArgsConstructor public class QuerydslMenuRatingCountProvider { - private final JPAQueryFactory queryFactory; - private final QMenu menu = QMenu.menu; - private final QReview review = QReview.review; + private final JPAQueryFactory queryFactory; + private final QMenu menu = QMenu.menu; + private final QReview review = QReview.review; - public Integer getReviewCountByStar(Long menuId, Integer star) { - return queryFactory - .select(review.count()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId), - reviewStarIs(star) - ) - .fetchOne().intValue(); - } + public Integer getReviewCountByStar(Long menuId, Integer star) { + return queryFactory + .select(review.count()) + .from(review) + .join(review.menu, menu) + .where( + menuIdEq(menuId), + reviewStarIs(star) + ) + .fetchOne().intValue(); + } - private BooleanExpression reviewStarIs(Integer star) { - return review.ratings.mainRating.eq(star); - } + private BooleanExpression reviewStarIs(Integer star) { + return review.ratings.mainRating.eq(star); + } - private BooleanExpression menuIdEq(Long menuId) { - return menu.id.eq(menuId); - } + private BooleanExpression menuIdEq(Long menuId) { + return menu.id.eq(menuId); + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java index cacfb46d..b5c061b9 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java @@ -1,49 +1,40 @@ package ssu.eatssu.domain.partnership.dto; -import java.time.LocalDate; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; import ssu.eatssu.domain.partnership.entity.Partnership; +import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; import ssu.eatssu.domain.partnership.entity.PartnershipType; -import ssu.eatssu.domain.partnership.entity.RestaurantType; + +import java.time.LocalDate; @Schema(title = "제휴 등록") @Getter @AllArgsConstructor public class CreatePartnershipRequest { - @Schema(description = "제휴 가게 이름", example = "먹돼지") - private String storeName; - @Schema(description = "제휴 종류(DRINK, DISCOUNT, SIDE, OTHER)", example = "DISCOUNT") - private PartnershipType partnershipType; - @Schema(description = "제휴 타겟 종류(college or department)", example = "college") - private String targetType; // college or department - @Schema(description = "제휴 타겟", example = "IT대") - private String targetName; - @Schema(description = "제휴 내용", example = "IT대 학생증은 10% 할인") - private String description; - @Schema(description = "제휴 시작 날짜", example = "2025-03-01") - private LocalDate startDate; - @Schema(description = "제휴 종료 날짜", example = "2025-07-30") - private LocalDate endDate; - @Schema(description = "제휴 가게 종류(RESTAURANT, CAFE)", example = "RESTAURANT") - private RestaurantType restaurantType; - @Schema(description = "경도(x축)", example = "126.9566592") - private Double longitude; - @Schema(description = "위도(y축)", example = "37.4949404") - private Double latitude; + @Schema(description = "제휴 가게 식별자", example = "1") + private Long storeId; + @Schema(description = "제휴 종류(DRINK, DISCOUNT, SIDE, OTHER)", example = "DISCOUNT") + private PartnershipType partnershipType; + @Schema(description = "단과대", example = "IT대") + private String college; + @Schema(description = "학과", example = "컴퓨터학부") + private String department; + @Schema(description = "제휴 내용", example = "IT대 학생증은 10% 할인") + private String description; + @Schema(description = "제휴 시작 날짜", example = "2025-03-01") + private LocalDate startDate; + @Schema(description = "제휴 종료 날짜", example = "2025-07-30") + private LocalDate endDate; - public Partnership toPartnershipEntity() { - return Partnership.builder() - .partnershipType(partnershipType) - .storeName(storeName) - .description(description) - .startDate(startDate) - .endDate(endDate) - .restaurantType(restaurantType) - .longitude(longitude) - .latitude(latitude) - .build(); - } + public Partnership toPartnershipEntity(PartnershipRestaurant partnershipRestaurant) { + return Partnership.builder() + .partnershipRestaurant(partnershipRestaurant) + .partnershipType(partnershipType) + .description(description) + .startDate(startDate) + .endDate(endDate) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java index 4e09634a..4febcf51 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java @@ -1,54 +1,50 @@ package ssu.eatssu.domain.partnership.dto; -import java.time.LocalDate; -import java.util.List; -import java.util.stream.Collectors; - import lombok.AllArgsConstructor; import lombok.Getter; import ssu.eatssu.domain.partnership.entity.Partnership; +import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; import ssu.eatssu.domain.partnership.entity.PartnershipType; import ssu.eatssu.domain.partnership.entity.RestaurantType; +import java.time.LocalDate; + @Getter @AllArgsConstructor public class PartnershipDetailResponse { - private Long id; - private PartnershipType partnershipType; - private String storeName; - private String description; - private LocalDate startDate; - private LocalDate endDate; - private RestaurantType restaurantType; - private Double longitude; - private Double latitude; - private List collegeNames; - private List departmentNames; - private int partnershipLikeCount; - private boolean likedByUser; + private Long id; + private PartnershipType partnershipType; + private String storeName; + private String description; + private LocalDate startDate; + private LocalDate endDate; + private RestaurantType restaurantType; + private Double longitude; + private Double latitude; + private String collegeName; + private String departmentName; + private int partnershipLikeCount; + private boolean likedByUser; - public static PartnershipDetailResponse fromEntity(Partnership partnership, boolean likedByUser) { - List collegeNames = partnership.getPartnershipColleges().stream() - .map(pc -> pc.getCollege().getName()) - .collect(Collectors.toList()); - List departmentNames = partnership.getPartnershipDepartments().stream() - .map(pc -> pc.getDepartment().getName()) - .collect(Collectors.toList()); + public static PartnershipDetailResponse fromEntity(PartnershipRestaurant partnershipRestaurant, + Partnership partnership, + boolean likedByUser) { - return new PartnershipDetailResponse( - partnership.getId(), - partnership.getPartnershipType(), - partnership.getStoreName(), - partnership.getDescription(), - partnership.getStartDate(), - partnership.getEndDate(), - partnership.getRestaurantType(), - partnership.getLongitude(), - partnership.getLatitude(), - collegeNames, - departmentNames, - partnership.getLikes().size(), - likedByUser - ); - } + return new PartnershipDetailResponse( + partnership.getId(), + partnership.getPartnershipType(), + partnershipRestaurant.getStoreName(), + partnership.getDescription(), + partnership.getStartDate(), + partnership.getEndDate(), + partnershipRestaurant.getRestaurantType(), + partnershipRestaurant.getLongitude(), + partnershipRestaurant.getLatitude(), + partnership.getPartnershipCollege() == null ? null : partnership.getPartnershipCollege().getName(), + partnership.getPartnershipDepartment() == null ? null : partnership.getPartnershipDepartment() + .getName(), + partnershipRestaurant.getLikes().size(), + likedByUser + ); + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java new file mode 100644 index 00000000..282140ef --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java @@ -0,0 +1,41 @@ +package ssu.eatssu.domain.partnership.dto; + +import lombok.Builder; +import lombok.Getter; +import ssu.eatssu.domain.partnership.entity.Partnership; +import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; +import ssu.eatssu.domain.partnership.entity.PartnershipType; + +import java.time.LocalDate; + +@Builder +@Getter +public class PartnershipInfo { + private Long id; + private PartnershipType partnershipType; + private String collegeName; + private String departmentName; + private Integer likeCount; + private Boolean isLiked; + private String description; + private LocalDate startDate; + private LocalDate endDate; + + public static PartnershipInfo fromEntity(Partnership partnership, + PartnershipRestaurant restaurant, + boolean isLiked) { + return PartnershipInfo.builder() + .id(partnership.getId()) + .partnershipType(partnership.getPartnershipType()) + .description(partnership.getDescription()) + .startDate(partnership.getStartDate()) + .endDate(partnership.getEndDate()) + .collegeName(partnership.getPartnershipCollege() == null ? null : partnership.getPartnershipCollege() + .getName()) + .departmentName(partnership.getPartnershipDepartment() == null ? null : partnership.getPartnershipDepartment() + .getName()) + .likeCount(restaurant.getLikes() != null ? restaurant.getLikes().size() : 0) + .isLiked(isLiked) + .build(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java index af0d82d5..1380c807 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java @@ -1,50 +1,41 @@ package ssu.eatssu.domain.partnership.dto; -import java.time.LocalDate; -import java.util.List; -import java.util.stream.Collectors; - import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.partnership.entity.Partnership; -import ssu.eatssu.domain.partnership.entity.PartnershipType; +import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; import ssu.eatssu.domain.partnership.entity.RestaurantType; +import java.util.List; +import java.util.stream.Collectors; + @Getter +@Builder @AllArgsConstructor public class PartnershipResponse { - private Long id; - private PartnershipType partnershipType; - private String storeName; - private String description; - private LocalDate startDate; - private LocalDate endDate; - private RestaurantType restaurantType; - private Double longitude; - private Double latitude; - private List collegeNames; - private List departmentNames; + private String storeName; + private Double longitude; + private Double latitude; + private RestaurantType restaurantType; + private List partnershipInfos; - public static PartnershipResponse fromEntity(Partnership partnership) { - List collegeNames = partnership.getPartnershipColleges().stream() - .map(pc -> pc.getCollege().getName()) - .collect(Collectors.toList()); - List departmentNames = partnership.getPartnershipDepartments().stream() - .map(pc -> pc.getDepartment().getName()) - .collect(Collectors.toList()); + public static PartnershipResponse fromEntity(PartnershipRestaurant restaurant, Long userId) { + boolean isLiked = restaurant.getLikes().stream() + .anyMatch(like -> like.getUser().getId().equals(userId)); - return new PartnershipResponse( - partnership.getId(), - partnership.getPartnershipType(), - partnership.getStoreName(), - partnership.getDescription(), - partnership.getStartDate(), - partnership.getEndDate(), - partnership.getRestaurantType(), - partnership.getLongitude(), - partnership.getLatitude(), - collegeNames, - departmentNames - ); - } + List infos = restaurant.getPartnerships().stream() + .map(partnership -> PartnershipInfo.fromEntity(partnership, + restaurant, + isLiked)) + .collect(Collectors.toList()); + + return PartnershipResponse.builder() + .storeName(restaurant.getStoreName()) + .longitude(restaurant.getLongitude()) + .latitude(restaurant.getLatitude()) + .restaurantType(restaurant.getRestaurantType()) + .partnershipInfos(infos) + .build(); + } } + diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java index 75f037c7..d784217d 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java @@ -1,25 +1,25 @@ package ssu.eatssu.domain.partnership.entity; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.annotations.Where; - -import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import org.hibernate.annotations.Where; +import ssu.eatssu.domain.user.department.entity.College; +import ssu.eatssu.domain.user.department.entity.Department; + +import java.time.LocalDate; @Entity @Getter @@ -28,46 +28,40 @@ @AllArgsConstructor @Where(clause = "end_date >= CURRENT_DATE") public class Partnership { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "partnership_id") - private Long id; - - @Enumerated(EnumType.STRING) - @Column(name = "partnership_type", nullable = false) - private PartnershipType partnershipType; - - @Column(name = "store_name", nullable = false) - private String storeName; - - @Column(name = "description", nullable = false) - private String description; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "partnership_id") + private Long id; - @Column(name = "start_date", nullable = false) - private LocalDate startDate; + @Enumerated(EnumType.STRING) + @Column(name = "partnership_type", nullable = false) + private PartnershipType partnershipType; - @Column(name = "end_date", nullable = false) - private LocalDate endDate; + @Column(name = "description", nullable = false) + private String description; - @Enumerated(EnumType.STRING) - @Column(name = "restaurant_type", nullable = false) - private RestaurantType restaurantType; + @Column(name = "start_date", nullable = false) + private LocalDate startDate; - @Column(name = "longitude", nullable = false) - private Double longitude; // 경도 == x축 + @Column(name = "end_date", nullable = false) + private LocalDate endDate; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "partnership_college_id") + private College partnershipCollege; - @Column(name = "latitude", nullable = false) - private Double latitude; // 위도 == y축 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "partnership_department_id") + private Department partnershipDepartment; - @Builder.Default - @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) - private List partnershipColleges = new ArrayList<>(); + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "partnership_restaurant_id") + private PartnershipRestaurant partnershipRestaurant; - @Builder.Default - @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) - private List partnershipDepartments = new ArrayList<>(); + public void setPartnershipCollege(College partnershipCollege) { + this.partnershipCollege = partnershipCollege; + } - @Builder.Default - @OneToMany(mappedBy = "partnership", cascade = CascadeType.ALL, orphanRemoval = true) - private List likes = new ArrayList<>(); + public void setPartnershipDepartment(Department partnershipDepartment) { + this.partnershipDepartment = partnershipDepartment; + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java deleted file mode 100644 index eb7de49e..00000000 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipCollege.java +++ /dev/null @@ -1,37 +0,0 @@ -package ssu.eatssu.domain.partnership.entity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import ssu.eatssu.domain.user.department.entity.College; - -@Entity -@Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class PartnershipCollege { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "partnership_college_id") - private Long id; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "partnership_id") - private Partnership partnership; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "college_id") - private College college; - - public PartnershipCollege(Partnership partnership, College college) { - this.partnership = partnership; - this.college = college; - } -} diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java deleted file mode 100644 index b3bb887b..00000000 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipDepartment.java +++ /dev/null @@ -1,37 +0,0 @@ -package ssu.eatssu.domain.partnership.entity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import ssu.eatssu.domain.user.department.entity.Department; - -@Entity -@Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class PartnershipDepartment { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "partnership_college_id") - private Long id; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "partnership_id") - private Partnership partnership; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "department_id") - private Department department; - - public PartnershipDepartment(Partnership partnership, Department department) { - this.partnership = partnership; - this.department = department; - } -} diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java index 12283630..498ac070 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipLike.java @@ -17,21 +17,21 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class PartnershipLike { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "partnership_like_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "partnership_like_id") + private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") - private User user; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "partnership_id") - private Partnership partnership; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "partnership_restaurant_id") + private PartnershipRestaurant partnershipRestaurant; - public PartnershipLike(User user, Partnership partnership) { - this.user = user; - this.partnership = partnership; - } + public PartnershipLike(User user, PartnershipRestaurant partnershipRestaurant) { + this.user = user; + this.partnershipRestaurant = partnershipRestaurant; + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipRestaurant.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipRestaurant.java new file mode 100644 index 00000000..732837e8 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipRestaurant.java @@ -0,0 +1,45 @@ +package ssu.eatssu.domain.partnership.entity; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.BatchSize; + +import java.util.ArrayList; +import java.util.List; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class PartnershipRestaurant { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "partnershipRestaurant_id") + private Long id; + @Enumerated(EnumType.STRING) + @Column(name = "restaurant_type", nullable = false) + private RestaurantType restaurantType; + + @Column(name = "longitude", nullable = false) + private Double longitude; // 경도 == x축 + + @Column(name = "latitude", nullable = false) + private Double latitude; // 위도 == y축 + @Column(name = "store_name", nullable = false) + private String storeName; + + @OneToMany(mappedBy = "partnershipRestaurant") + @BatchSize(size = 20) + private List likes = new ArrayList<>(); + @OneToMany(mappedBy = "partnershipRestaurant", cascade = CascadeType.ALL, orphanRemoval = true) + private List partnerships = new ArrayList<>(); +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java index fdf72878..9d91ab0e 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java @@ -4,14 +4,14 @@ @Getter public enum PartnershipType { - DRINK("음료"), - DISCOUNT("할인"), - SIDE("사이드"), - OTHER("기타"); + DRINK("음료"), + DISCOUNT("할인"), + SIDE("사이드"), + OTHER("기타"); - private final String type; + private final String type; - PartnershipType(String type) { - this.type = type; - } + PartnershipType(String type) { + this.type = type; + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java index 0de32722..d849580c 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java @@ -1,12 +1,12 @@ package ssu.eatssu.domain.partnership.entity; public enum RestaurantType { - RESTAURANT("음식점"), - CAFE("카페"); + RESTAURANT("음식점"), + CAFE("카페"); - private final String type; + private final String type; - RestaurantType(String type) { - this.type = type; - } + RestaurantType(String type) { + this.type = type; + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java index f107da58..4d0b4b0f 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipLikeRepository.java @@ -1,16 +1,24 @@ package ssu.eatssu.domain.partnership.persistence; -import java.util.List; -import java.util.Optional; - import org.springframework.data.jpa.repository.JpaRepository; - -import ssu.eatssu.domain.partnership.entity.Partnership; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import ssu.eatssu.domain.partnership.entity.PartnershipLike; +import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; import ssu.eatssu.domain.user.entity.User; +import java.util.List; +import java.util.Optional; + public interface PartnershipLikeRepository extends JpaRepository { - Optional findByUserAndPartnership(User user, Partnership partnership); + Optional findByUserAndPartnershipRestaurant(User user, + PartnershipRestaurant partnershipRestaurant); - List findAllByUser(User user); + @Query("SELECT pl FROM PartnershipLike pl " + + "JOIN FETCH pl.partnershipRestaurant pr " + + "JOIN FETCH pr.partnerships p " + + "LEFT JOIN FETCH p.partnershipCollege " + + "LEFT JOIN FETCH p.partnershipDepartment " + + "WHERE pl.user = :user") + List findAllByUserWithDetails(@Param("user") User user); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java index 896eab1d..786059e9 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java @@ -1,22 +1,19 @@ package ssu.eatssu.domain.partnership.persistence; -import java.util.List; - import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; - import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.user.department.entity.College; import ssu.eatssu.domain.user.department.entity.Department; +import java.util.List; + public interface PartnershipRepository extends JpaRepository { - @Query("SELECT DISTINCT p FROM Partnership p " + - "LEFT JOIN p.partnershipColleges pc " + - "LEFT JOIN pc.college c " + - "LEFT JOIN p.partnershipDepartments pd " + - "LEFT JOIN pd.department d " + - "WHERE (c = :college OR d = :department OR (c IS NOT NULL AND c.name = '총학'))") - List findRelevantPartnerships(@Param("college") College college, - @Param("department") Department department); + @Query("SELECT DISTINCT p FROM Partnership p " + + "LEFT JOIN p.partnershipCollege pc " + + "LEFT JOIN p.partnershipDepartment pd " + + "WHERE (pc = :college OR pd = :department OR (pc IS NOT NULL AND pc.name = '총학'))") + List findRelevantPartnerships(@Param("college") College college, + @Param("department") Department department); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java new file mode 100644 index 00000000..5fd32d87 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java @@ -0,0 +1,15 @@ +package ssu.eatssu.domain.partnership.persistence; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; + +import java.util.List; + +public interface PartnershipRestaurantRepository extends JpaRepository { + @Query("SELECT DISTINCT pr FROM PartnershipRestaurant pr " + + "LEFT JOIN FETCH pr.partnerships p " + + "LEFT JOIN FETCH p.partnershipCollege " + + "LEFT JOIN FETCH p.partnershipDepartment ") + List findAllWithDetails(); +} diff --git a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java index a3534c2f..0e76475e 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java +++ b/src/main/java/ssu/eatssu/domain/partnership/presentation/PartnershipController.java @@ -1,15 +1,5 @@ package ssu.eatssu.domain.partnership.presentation; -import java.util.List; - -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -17,69 +7,64 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.CreatePartnershipRequest; -import ssu.eatssu.domain.partnership.dto.PartnershipDetailResponse; import ssu.eatssu.domain.partnership.dto.PartnershipResponse; import ssu.eatssu.domain.partnership.service.PartnershipService; import ssu.eatssu.global.handler.response.BaseResponse; +import java.util.List; + @RestController @RequestMapping("/partnerships") @RequiredArgsConstructor @Tag(name = "Partnership", description = "제휴 API") public class PartnershipController { - private final PartnershipService partnershipService; + private final PartnershipService partnershipService; - @Operation(summary = "제휴 등록", description = "제휴를 등록하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "제휴 등록 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 대학", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 학과", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @PostMapping - public BaseResponse createPartnership(@RequestBody CreatePartnershipRequest request) { - partnershipService.createPartnership(request); - return BaseResponse.success(); - } + @Operation(summary = "제휴 등록", description = "제휴를 등록하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "제휴 등록 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 대학", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 학과", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @PostMapping + public BaseResponse createPartnership(@RequestBody CreatePartnershipRequest request) { + partnershipService.createPartnership(request); + return BaseResponse.success(); + } - @Operation(summary = "전체 제휴 조회", description = "전체 제휴를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "제휴 조회 성공"), - }) - @GetMapping - public BaseResponse> getAllPartnerships() { - return BaseResponse.success(partnershipService.getAllPartnerships()); - } + @Operation(summary = "식당별 전체 제휴 조회", description = "식당별 전체 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "제휴 조회 성공"), + }) + @GetMapping + public BaseResponse> getAllPartnerships(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(partnershipService.getAllPartnerships(userDetails)); + } - @Operation(summary = "개별 제휴 조회", description = "개별 제휴를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "제휴 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 제휴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/{partnershipId}") - public BaseResponse getPartnership( - @PathVariable Long partnershipId, - @AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(partnershipService.getPartnership(partnershipId, userDetails)); - } - @Operation(summary = "제휴 찜 등록하기/취소하기", description = "제휴 찜 등록하기/취소하기(토글) API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "제휴 찜 등록/취소 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 제휴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - }) - @PostMapping("/{partnershipId}/like") - public BaseResponse togglePartnershipLike( - @PathVariable Long partnershipId, - @AuthenticationPrincipal CustomUserDetails userDetails) { - partnershipService.togglePartnershipLike(partnershipId, userDetails); - return BaseResponse.success(); - } + @Operation(summary = "제휴 찜 등록하기/취소하기", description = "제휴 찜 등록하기/취소하기(토글) API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "제휴 찜 등록/취소 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 제휴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + @PostMapping("/{partnershipId}/like") + public BaseResponse togglePartnershipLike( + @PathVariable Long partnershipId, + @AuthenticationPrincipal CustomUserDetails userDetails) { + partnershipService.togglePartnershipLike(partnershipId, userDetails); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java index 38558e62..6e1bd075 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -1,25 +1,17 @@ package ssu.eatssu.domain.partnership.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.CreatePartnershipRequest; -import ssu.eatssu.domain.partnership.dto.PartnershipDetailResponse; import ssu.eatssu.domain.partnership.dto.PartnershipResponse; import ssu.eatssu.domain.partnership.entity.Partnership; -import ssu.eatssu.domain.partnership.entity.PartnershipCollege; -import ssu.eatssu.domain.partnership.entity.PartnershipDepartment; import ssu.eatssu.domain.partnership.entity.PartnershipLike; +import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; import ssu.eatssu.domain.partnership.persistence.PartnershipLikeRepository; import ssu.eatssu.domain.partnership.persistence.PartnershipRepository; +import ssu.eatssu.domain.partnership.persistence.PartnershipRestaurantRepository; import ssu.eatssu.domain.user.department.entity.College; import ssu.eatssu.domain.user.department.entity.Department; import ssu.eatssu.domain.user.department.persistence.CollegeRepository; @@ -28,101 +20,109 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.MISSING_USER_DEPARTMENT; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_COLLEGE; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_DEPARTMENT; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_PARTNERSHIP; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_PARTNERSHIP_RESTAURANT; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; + @Service @RequiredArgsConstructor public class PartnershipService { - private final PartnershipRepository partnershipRepository; - private final CollegeRepository collegeRepository; - private final DepartmentRepository departmentRepository; - private final UserRepository userRepository; - private final PartnershipLikeRepository partnershipLikeRepository; - - @Transactional - public void createPartnership(CreatePartnershipRequest request) { - Partnership partnership = request.toPartnershipEntity(); - - if ("college".equalsIgnoreCase(request.getTargetType())) { - College college = collegeRepository.findByName(request.getTargetName()) - .orElseThrow(() -> new BaseException(NOT_FOUND_COLLEGE)); - PartnershipCollege partnershipCollege = new PartnershipCollege(partnership, college); - partnership.getPartnershipColleges().add(partnershipCollege); - } else if ("department".equalsIgnoreCase(request.getTargetType())) { - Department department = departmentRepository.findByName(request.getTargetName()) - .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); - PartnershipDepartment partnershipDepartment = new PartnershipDepartment(partnership, department); - partnership.getPartnershipDepartments().add(partnershipDepartment); - } else { - throw new BaseException(INVALID_TARGET_TYPE); - } - partnershipRepository.save(partnership); - } - - public List getAllPartnerships() { - List partnerships = partnershipRepository.findAll(); - return partnerships.stream().map(PartnershipResponse::fromEntity) - .collect(Collectors.toList()); - } - - public PartnershipDetailResponse getPartnership(Long partnershipId, CustomUserDetails userDetails) { - Partnership partnership = partnershipRepository.findById(partnershipId) - .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); - - boolean likedByUser = false; - if (userDetails != null) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - likedByUser = partnershipLikeRepository.findByUserAndPartnership(user, partnership).isPresent(); - } - - return PartnershipDetailResponse.fromEntity(partnership, likedByUser); - } - - @Transactional - public void togglePartnershipLike(Long partnershipId, CustomUserDetails userDetails) { - Partnership partnership = partnershipRepository.findById(partnershipId) - .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Optional optionalPartnershipLike = partnershipLikeRepository.findByUserAndPartnership(user, - partnership); - if (optionalPartnershipLike.isPresent()) { - PartnershipLike partnershipLike = optionalPartnershipLike.get(); - partnership.getLikes().remove(partnershipLike); - partnershipLikeRepository.delete(partnershipLike); - } else { - PartnershipLike partnershipLike = new PartnershipLike(user, partnership); - partnership.getLikes().add(partnershipLike); - partnershipLikeRepository.save(partnershipLike); - } - } - - public List getUserLikedPartnerships(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - List likes = partnershipLikeRepository.findAllByUser(user); - return likes - .stream() - .map(PartnershipLike::getPartnership) - .map(PartnershipResponse::fromEntity) - .collect(Collectors.toList()); - } - - public List getUserDepartmentPartnerships(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Department department = user.getDepartment(); - if (department == null) { - throw new BaseException(MISSING_USER_DEPARTMENT); - } - College college = department.getCollege(); - - return partnershipRepository - .findRelevantPartnerships(college, department) - .stream() - .map(PartnershipResponse::fromEntity) - .collect(Collectors.toList()); - } + private final PartnershipRepository partnershipRepository; + private final CollegeRepository collegeRepository; + private final DepartmentRepository departmentRepository; + private final UserRepository userRepository; + private final PartnershipLikeRepository partnershipLikeRepository; + private final PartnershipRestaurantRepository partnerShipRestaurantRepository; + + @Transactional + public void createPartnership(CreatePartnershipRequest request) { + PartnershipRestaurant partnershipRestaurant = partnerShipRestaurantRepository.findById(request.getStoreId()) + .orElseThrow(() -> new BaseException( + NOT_FOUND_PARTNERSHIP_RESTAURANT)); + Partnership partnership = request.toPartnershipEntity(partnershipRestaurant); + + College college = collegeRepository.findByName(request.getCollege()) + .orElseThrow(() -> new BaseException(NOT_FOUND_COLLEGE)); + partnership.setPartnershipCollege(college); + Department department = departmentRepository.findByName(request.getDepartment()) + .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); + partnership.setPartnershipDepartment(department); + partnershipRepository.save(partnership); + } + + public List getAllPartnerships(CustomUserDetails customUserDetails) { + return partnerShipRestaurantRepository.findAllWithDetails().stream() + .map(restaurant -> PartnershipResponse.fromEntity(restaurant, + customUserDetails.getId())) + .collect(Collectors.toList()); + } + + + @Transactional + public void togglePartnershipLike(Long partnershipId, CustomUserDetails userDetails) { + Partnership partnership = partnershipRepository.findById(partnershipId) + .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + PartnershipRestaurant partnershipRestaurant = partnership.getPartnershipRestaurant(); + + Optional optionalPartnershipLike = partnershipLikeRepository.findByUserAndPartnershipRestaurant( + user, + partnershipRestaurant); + if (optionalPartnershipLike.isPresent()) { + PartnershipLike partnershipLike = optionalPartnershipLike.get(); + partnershipRestaurant.getLikes().remove(partnershipLike); + partnershipLikeRepository.delete(partnershipLike); + } else { + PartnershipLike partnershipLike = new PartnershipLike(user, partnershipRestaurant); + partnershipRestaurant.getLikes().add(partnershipLike); + partnershipLikeRepository.save(partnershipLike); + } + } + + public List getUserLikedPartnerships(CustomUserDetails customUserDetails) { + User user = userRepository.findById(customUserDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + List likes = partnershipLikeRepository.findAllByUserWithDetails(user); + + return likes.stream() + .flatMap(like -> { + PartnershipRestaurant restaurant = like.getPartnershipRestaurant(); + return restaurant.getPartnerships() + .stream() + .map(partnership -> PartnershipResponse.fromEntity(restaurant, + customUserDetails.getId())); + }).collect(Collectors.toList()); + } + + + public List getUserDepartmentPartnerships(CustomUserDetails customUserDetails) { + User user = userRepository.findById(customUserDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Department department = user.getDepartment(); + if (department == null) { + throw new BaseException(MISSING_USER_DEPARTMENT); + } + College college = department.getCollege(); + + return partnershipRepository + .findRelevantPartnerships(college, department) + .stream() + .map(partnership -> { + PartnershipRestaurant partnershipRestaurant = partnership.getPartnershipRestaurant(); + + return PartnershipResponse.fromEntity(partnershipRestaurant, + customUserDetails.getId()); + }) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java index e3060aee..11572cd5 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java @@ -11,125 +11,125 @@ */ public class JpaLoadCollectionRatingCalculator implements RatingCalculator { - // 식단에 포함된 메뉴들의 평점 별 리뷰 개수 계산 - public ReviewRatingCount mealRatingCount(Meal meal) { - ReviewRating.resetAll(); - - meal.getMealMenus().forEach(mealMenu -> mealMenu.getMenu().getReviews().calculateReviewRatings()); - - return ReviewRating.toResponse(); - } - - // 각 메뉴의 평점 별 개수 계산 - public ReviewRatingCount menuRatingCount(Menu menu) { - ReviewRating.resetAll(); - - menu.getReviews().calculateReviewRatings(); - - return ReviewRating.toResponse(); - } - - // 식단 평균 평점 세트 계산 - public RatingAverages mealAverageRatings(Meal meal) { - long totalReviewCount = mealTotalReviewCount(meal); - - if (totalReviewCount == 0) - return new RatingAverages(null, null, null); - - return RatingAverages.builder() - .mainRating(averageRating(mealTotalMainRating(meal), totalReviewCount)) - .amountRating(averageRating(mealTotalAmountRating(meal), totalReviewCount)) - .tasteRating(averageRating(mealTotalTasteRating(meal), totalReviewCount)) - .build(); - } - - // 메뉴 평균 평점 세트 계산 - public RatingAverages menuAverageRatings(Menu menu) { - int totalReviewCount = menu.getTotalReviewCount(); - - if (totalReviewCount == 0) { - return new RatingAverages(null, null, null); - } - - return RatingAverages.builder() - .mainRating(averageRating(menuTotalMainRating(menu), totalReviewCount)) - .amountRating(averageRating(menuTotalAmountRating(menu), totalReviewCount)) - .tasteRating(averageRating(menuTotalTasteRating(menu), totalReviewCount)) - .build(); - } - - // 식단 메인 평점 평균 계산 - public Double mealAverageMainRating(Meal meal) { - long totalReviewCount = mealTotalReviewCount(meal); - - if (totalReviewCount == 0) { - return null; - } - - return averageRating(mealTotalMainRating(meal), totalReviewCount); - } - - // 메뉴 메인 평점 평균 계산 - public Double menuAverageMainRating(Menu menu) { - if (menu.getReviews().size() == 0) { - return null; - } - - return averageRating(menuTotalMainRating(menu), menu.getReviews().size()); - } - - // 식단 총 리뷰 개수 - public long mealTotalReviewCount(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .mapToLong(menu -> menu.getReviews().size()).sum(); - } - - // 평균 평점 계산 - public Double averageRating(Integer totalRating, long totalReviewCount) { - if (totalRating == null || totalReviewCount == 0) { - return null; - } - return totalRating / (double)totalReviewCount; - } - - // 식단 메인 평점 총합 - public Integer mealTotalMainRating(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(menu -> menu.getReviews().getTotalMainRating()) - .reduce(null, this::sum); - } - - // 식단 양 평점 총합 - public Integer mealTotalAmountRating(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(menu -> menu.getReviews().getTotalAmountRating()) - .reduce(null, this::sum); - } - - // 식단 맛 평점 총합 - public Integer mealTotalTasteRating(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(menu -> menu.getReviews().getTotalTasteRating()) - .reduce(null, this::sum); - } - - // 메뉴 메인 평점 총합 - public Integer menuTotalMainRating(Menu menu) { - return menu.getReviews().getTotalMainRating(); - } - - // 메뉴 양 평점 총합 - public Integer menuTotalAmountRating(Menu menu) { - return menu.getReviews().getTotalAmountRating(); - } - - // 메뉴 맛 평점 총합 - public Integer menuTotalTasteRating(Menu menu) { - return menu.getReviews().getTotalTasteRating(); - } + // 식단에 포함된 메뉴들의 평점 별 리뷰 개수 계산 + public ReviewRatingCount mealRatingCount(Meal meal) { + ReviewRating.resetAll(); + + meal.getMealMenus().forEach(mealMenu -> mealMenu.getMenu().getReviews().calculateReviewRatings()); + + return ReviewRating.toResponse(); + } + + // 각 메뉴의 평점 별 개수 계산 + public ReviewRatingCount menuRatingCount(Menu menu) { + ReviewRating.resetAll(); + + menu.getReviews().calculateReviewRatings(); + + return ReviewRating.toResponse(); + } + + // 식단 평균 평점 세트 계산 + public RatingAverages mealAverageRatings(Meal meal) { + long totalReviewCount = mealTotalReviewCount(meal); + + if (totalReviewCount == 0) + return new RatingAverages(null, null, null); + + return RatingAverages.builder() + .mainRating(averageRating(mealTotalMainRating(meal), totalReviewCount)) + .amountRating(averageRating(mealTotalAmountRating(meal), totalReviewCount)) + .tasteRating(averageRating(mealTotalTasteRating(meal), totalReviewCount)) + .build(); + } + + // 메뉴 평균 평점 세트 계산 + public RatingAverages menuAverageRatings(Menu menu) { + int totalReviewCount = menu.getTotalReviewCount(); + + if (totalReviewCount == 0) { + return new RatingAverages(null, null, null); + } + + return RatingAverages.builder() + .mainRating(averageRating(menuTotalMainRating(menu), totalReviewCount)) + .amountRating(averageRating(menuTotalAmountRating(menu), totalReviewCount)) + .tasteRating(averageRating(menuTotalTasteRating(menu), totalReviewCount)) + .build(); + } + + // 식단 메인 평점 평균 계산 + public Double mealAverageMainRating(Meal meal) { + long totalReviewCount = mealTotalReviewCount(meal); + + if (totalReviewCount == 0) { + return null; + } + + return averageRating(mealTotalMainRating(meal), totalReviewCount); + } + + // 메뉴 메인 평점 평균 계산 + public Double menuAverageMainRating(Menu menu) { + if (menu.getReviews().size() == 0) { + return null; + } + + return averageRating(menuTotalMainRating(menu), menu.getReviews().size()); + } + + // 식단 총 리뷰 개수 + public long mealTotalReviewCount(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .mapToLong(menu -> menu.getReviews().size()).sum(); + } + + // 평균 평점 계산 + public Double averageRating(Integer totalRating, long totalReviewCount) { + if (totalRating == null || totalReviewCount == 0) { + return null; + } + return totalRating / (double) totalReviewCount; + } + + // 식단 메인 평점 총합 + public Integer mealTotalMainRating(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(menu -> menu.getReviews().getTotalMainRating()) + .reduce(null, this::sum); + } + + // 식단 양 평점 총합 + public Integer mealTotalAmountRating(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(menu -> menu.getReviews().getTotalAmountRating()) + .reduce(null, this::sum); + } + + // 식단 맛 평점 총합 + public Integer mealTotalTasteRating(Meal meal) { + return meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .map(menu -> menu.getReviews().getTotalTasteRating()) + .reduce(null, this::sum); + } + + // 메뉴 메인 평점 총합 + public Integer menuTotalMainRating(Menu menu) { + return menu.getReviews().getTotalMainRating(); + } + + // 메뉴 양 평점 총합 + public Integer menuTotalAmountRating(Menu menu) { + return menu.getReviews().getTotalAmountRating(); + } + + // 메뉴 맛 평점 총합 + public Integer menuTotalTasteRating(Menu menu) { + return menu.getReviews().getTotalTasteRating(); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java index 85f5056c..c5fadaac 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java @@ -1,7 +1,5 @@ package ssu.eatssu.domain.rating.entity; -import java.util.Collection; - import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -10,6 +8,8 @@ import ssu.eatssu.domain.review.dto.ReviewRatingCount; import ssu.eatssu.domain.review.repository.ReviewRepository; +import java.util.Collection; + /** * Jpa projection 을 이용하여 구현한 클래스입니다. * 더미 데이터 @@ -20,78 +20,78 @@ @RequiredArgsConstructor public class JpaProjectionRatingCalculator implements RatingCalculator { - private final ReviewRepository reviewRepository; + private final ReviewRepository reviewRepository; - @Override - public ReviewRatingCount mealRatingCount(Meal meal) { - ReviewRating.resetAll(); + @Override + public ReviewRatingCount mealRatingCount(Meal meal) { + ReviewRating.resetAll(); - Collection mealRatings = reviewRepository.findByMenu_MealMenus_Meal(meal, RatingsDto.class); - mealRatings.forEach(ratings -> ReviewRating.fromValue(ratings.getMainRating()).incrementCount()); + Collection mealRatings = reviewRepository.findByMenu_MealMenus_Meal(meal, RatingsDto.class); + mealRatings.forEach(ratings -> ReviewRating.fromValue(ratings.getMainRating()).incrementCount()); - return ReviewRating.toResponse(); - } + return ReviewRating.toResponse(); + } - @Override - public ReviewRatingCount menuRatingCount(Menu menu) { - return null; - } + @Override + public ReviewRatingCount menuRatingCount(Menu menu) { + return null; + } - @Override - public RatingAverages mealAverageRatings(Meal meal) { - long totalReviewCount = mealTotalReviewCount(meal); + @Override + public RatingAverages mealAverageRatings(Meal meal) { + long totalReviewCount = mealTotalReviewCount(meal); - if (totalReviewCount == 0) - return new RatingAverages(null, null, null); + if (totalReviewCount == 0) + return new RatingAverages(null, null, null); - Collection mealRatings = reviewRepository.findByMenu_MealMenus_Meal(meal, RatingsDto.class); + Collection mealRatings = reviewRepository.findByMenu_MealMenus_Meal(meal, RatingsDto.class); - Integer totalMainRating = mealRatings.stream().mapToInt(RatingsDto::getMainRating).sum(); - Integer totalTasteRating = mealRatings.stream().mapToInt(RatingsDto::getTasteRating).sum(); - Integer totalAmountRating = mealRatings.stream().mapToInt(RatingsDto::getAmountRating).sum(); + Integer totalMainRating = mealRatings.stream().mapToInt(RatingsDto::getMainRating).sum(); + Integer totalTasteRating = mealRatings.stream().mapToInt(RatingsDto::getTasteRating).sum(); + Integer totalAmountRating = mealRatings.stream().mapToInt(RatingsDto::getAmountRating).sum(); - return RatingAverages.builder() - .mainRating(averageRating(totalMainRating, totalReviewCount)) - .tasteRating(averageRating(totalTasteRating, totalReviewCount)) - .amountRating(averageRating(totalAmountRating, totalReviewCount)) - .build(); - } + return RatingAverages.builder() + .mainRating(averageRating(totalMainRating, totalReviewCount)) + .tasteRating(averageRating(totalTasteRating, totalReviewCount)) + .amountRating(averageRating(totalAmountRating, totalReviewCount)) + .build(); + } - @Override - public RatingAverages menuAverageRatings(Menu menu) { - return null; - } + @Override + public RatingAverages menuAverageRatings(Menu menu) { + return null; + } - @Override - public Double mealAverageMainRating(Meal meal) { - long totalReviewCount = mealTotalReviewCount(meal); + @Override + public Double mealAverageMainRating(Meal meal) { + long totalReviewCount = mealTotalReviewCount(meal); - if (totalReviewCount == 0) { - return null; - } + if (totalReviewCount == 0) { + return null; + } - return averageRating(mealTotalMainRating(meal), totalReviewCount); - } + return averageRating(mealTotalMainRating(meal), totalReviewCount); + } - @Override - public Double menuAverageMainRating(Menu menu) { - return null; - } + @Override + public Double menuAverageMainRating(Menu menu) { + return null; + } - @Override - public long mealTotalReviewCount(Meal meal) { - return reviewRepository.countByMenu_MealMenus_Meal(meal); - } + @Override + public long mealTotalReviewCount(Meal meal) { + return reviewRepository.countByMenu_MealMenus_Meal(meal); + } - public Double averageRating(Integer totalRating, long totalReviewCount) { - if (totalRating == null || totalReviewCount == 0) { - return null; - } - return totalRating / (double)totalReviewCount; - } + public Double averageRating(Integer totalRating, long totalReviewCount) { + if (totalRating == null || totalReviewCount == 0) { + return null; + } + return totalRating / (double) totalReviewCount; + } - public Integer mealTotalMainRating(Meal meal) { - return null; - } + public Integer mealTotalMainRating(Meal meal) { + return null; + } } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java index e2ed40e7..a7b66327 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCalculator.java @@ -7,37 +7,37 @@ public interface RatingCalculator { - // 식단에 포함된 메뉴들의 평점 별 리뷰 개수 계산 - ReviewRatingCount mealRatingCount(Meal meal); - - // 각 메뉴의 평점 별 개수 계산 - ReviewRatingCount menuRatingCount(Menu menu); - - // 식단 평균 평점 세트 계산 - RatingAverages mealAverageRatings(Meal meal); - - // 메뉴 평균 평점 세트 계산 - RatingAverages menuAverageRatings(Menu menu); - - // 식단 메인 평점 평균 계산 - Double mealAverageMainRating(Meal meal); - - // 메뉴 메인 평점 평균 계산 - Double menuAverageMainRating(Menu menu); - - // 식단 총 리뷰 개수 - long mealTotalReviewCount(Meal meal); - - /** - * 리뷰 평접 총합 계산용 - * nullable 의 합 계산을 위한 메소드입니다. - */ - default Integer sum(Integer a, Integer b) { - if (a == null) - return b; - if (b == null) - return a; - return a + b; - } + // 식단에 포함된 메뉴들의 평점 별 리뷰 개수 계산 + ReviewRatingCount mealRatingCount(Meal meal); + + // 각 메뉴의 평점 별 개수 계산 + ReviewRatingCount menuRatingCount(Menu menu); + + // 식단 평균 평점 세트 계산 + RatingAverages mealAverageRatings(Meal meal); + + // 메뉴 평균 평점 세트 계산 + RatingAverages menuAverageRatings(Menu menu); + + // 식단 메인 평점 평균 계산 + Double mealAverageMainRating(Meal meal); + + // 메뉴 메인 평점 평균 계산 + Double menuAverageMainRating(Menu menu); + + // 식단 총 리뷰 개수 + long mealTotalReviewCount(Meal meal); + + /** + * 리뷰 평접 총합 계산용 + * nullable 의 합 계산을 위한 메소드입니다. + */ + default Integer sum(Integer a, Integer b) { + if (a == null) + return b; + if (b == null) + return a; + return a + b; + } } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java index 06fe244e..744ac1cf 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/RatingCountMap.java @@ -5,31 +5,31 @@ public class RatingCountMap { - private Map ratingCountMap; - - public RatingCountMap() { - this.ratingCountMap = new HashMap<>(); - this.init(); - - } - - private void init() { - this.ratingCountMap.put(1, 0); - this.ratingCountMap.put(2, 0); - this.ratingCountMap.put(3, 0); - this.ratingCountMap.put(4, 0); - this.ratingCountMap.put(5, 0); - } - - public void setRatingCount(Integer rating, Integer count) { - this.ratingCountMap.put(rating, count); - } - - public void merge(RatingCountMap map) { - for (Map.Entry entry : map.ratingCountMap.entrySet()) { - Integer currentCount = this.ratingCountMap.getOrDefault(entry.getKey(), 0); - Integer newCount = entry.getValue(); - this.ratingCountMap.put(entry.getKey(), currentCount + newCount); - } - } + private final Map ratingCountMap; + + public RatingCountMap() { + this.ratingCountMap = new HashMap<>(); + this.init(); + + } + + private void init() { + this.ratingCountMap.put(1, 0); + this.ratingCountMap.put(2, 0); + this.ratingCountMap.put(3, 0); + this.ratingCountMap.put(4, 0); + this.ratingCountMap.put(5, 0); + } + + public void setRatingCount(Integer rating, Integer count) { + this.ratingCountMap.put(rating, count); + } + + public void merge(RatingCountMap map) { + for (Map.Entry entry : map.ratingCountMap.entrySet()) { + Integer currentCount = this.ratingCountMap.getOrDefault(entry.getKey(), 0); + Integer newCount = entry.getValue(); + this.ratingCountMap.put(entry.getKey(), currentCount + newCount); + } + } } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java b/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java index 47e4282f..99bd8253 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java @@ -10,22 +10,22 @@ @Embeddable public class Ratings { - private Integer mainRating; + private Integer mainRating; - private Integer amountRating; + private Integer amountRating; - private Integer tasteRating; + private Integer tasteRating; - private Ratings(Integer mainRating, Integer amountRating, Integer tasteRating) { - Assert.isTrue(mainRating >= 0 && mainRating <= 5, "mainRating must be between 0 and 5"); - Assert.isTrue(amountRating >= 0 && amountRating <= 5, "amountRating must be between 0 and 5"); - Assert.isTrue(tasteRating >= 0 && tasteRating <= 5, "tasteRating must be between 0 and 5"); - this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; - } + private Ratings(Integer mainRating, Integer amountRating, Integer tasteRating) { + Assert.isTrue(mainRating >= 0 && mainRating <= 5, "mainRating must be between 0 and 5"); + Assert.isTrue(amountRating >= 0 && amountRating <= 5, "amountRating must be between 0 and 5"); + Assert.isTrue(tasteRating >= 0 && tasteRating <= 5, "tasteRating must be between 0 and 5"); + this.mainRating = mainRating; + this.amountRating = amountRating; + this.tasteRating = tasteRating; + } - public static Ratings of(Integer mainRating, Integer amountRating, Integer tasteRating) { - return new Ratings(mainRating, amountRating, tasteRating); - } + public static Ratings of(Integer mainRating, Integer amountRating, Integer tasteRating) { + return new Ratings(mainRating, amountRating, tasteRating); + } } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java b/src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java index acc013f0..611e0074 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/ReviewRating.java @@ -3,54 +3,54 @@ import ssu.eatssu.domain.review.dto.ReviewRatingCount; public enum ReviewRating { - RATING_ONE(1), - RATING_TWO(2), - RATING_THREE(3), - RATING_FOUR(4), - RATING_FIVE(5); - - private final int value; - private int count; - - ReviewRating(int value) { - this.value = value; - this.count = 0; - } - - public static void resetAll() { - for (ReviewRating RATING : ReviewRating.values()) { - RATING.resetCount(); - } - } - - public static ReviewRating fromValue(int value) { - for (ReviewRating RATING : ReviewRating.values()) { - if (RATING.value == value) { - return RATING; - } - } - throw new IllegalArgumentException("Invalid ratings value: " + value); - } - - public static ReviewRatingCount toResponse() { - return new ReviewRatingCount( - RATING_ONE.getCount(), - RATING_TWO.getCount(), - RATING_THREE.getCount(), - RATING_FOUR.getCount(), - RATING_FIVE.getCount() - ); - } - - public void incrementCount() { - this.count++; - } - - public int getCount() { - return count; - } - - private void resetCount() { - this.count = 0; - } + RATING_ONE(1), + RATING_TWO(2), + RATING_THREE(3), + RATING_FOUR(4), + RATING_FIVE(5); + + private final int value; + private int count; + + ReviewRating(int value) { + this.value = value; + this.count = 0; + } + + public static void resetAll() { + for (ReviewRating RATING : ReviewRating.values()) { + RATING.resetCount(); + } + } + + public static ReviewRating fromValue(int value) { + for (ReviewRating RATING : ReviewRating.values()) { + if (RATING.value == value) { + return RATING; + } + } + throw new IllegalArgumentException("Invalid ratings value: " + value); + } + + public static ReviewRatingCount toResponse() { + return new ReviewRatingCount( + RATING_ONE.getCount(), + RATING_TWO.getCount(), + RATING_THREE.getCount(), + RATING_FOUR.getCount(), + RATING_FIVE.getCount() + ); + } + + public void incrementCount() { + this.count++; + } + + public int getCount() { + return count; + } + + private void resetCount() { + this.count = 0; + } } diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java b/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java index ee168a77..6ddd6800 100644 --- a/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java @@ -6,13 +6,13 @@ @Schema(title = "리뷰 신고하기") public record ReportCreateRequest( - @Schema(description = "신고할 리뷰 id", example = "4") - Long reviewId, + @Schema(description = "신고할 리뷰 id", example = "4") + Long reviewId, - @Schema(description = "신고 타입", example = "BAD_WORD") - ReportType reportType, + @Schema(description = "신고 타입", example = "BAD_WORD") + ReportType reportType, - @Schema(description = "신고 내용", example = "음란성, 욕설 등 부적절한 내용") - String content) { + @Schema(description = "신고 내용", example = "음란성, 욕설 등 부적절한 내용") + String content) { } diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java index 1bdae80f..db545667 100644 --- a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeInformation.java @@ -6,14 +6,14 @@ @Getter @Schema(title = "리뷰 신고 사유") public class ReportTypeInformation { - @Schema(description = "신고 사유 타입") - private String type; + @Schema(description = "신고 사유 타입") + private final String type; - @Schema(description = "신고 사유 설명") - private String description; + @Schema(description = "신고 사유 설명") + private final String description; - public ReportTypeInformation(String type, String description) { - this.type = type; - this.description = description; - } + public ReportTypeInformation(String type, String description) { + this.type = type; + this.description = description; + } } diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java index e0c2eb18..b2967172 100644 --- a/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReportTypeList.java @@ -1,25 +1,25 @@ package ssu.eatssu.domain.report.dto; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import ssu.eatssu.domain.report.entity.ReportType; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + @Getter @Schema(title = "리뷰 신고 사유 목록 Response") public class ReportTypeList { - @Schema(description = "리뷰 신고 사유 목록") - private final List response = new ArrayList<>(); + @Schema(description = "리뷰 신고 사유 목록") + private final List response = new ArrayList<>(); - public static ReportTypeList get() { - ReportTypeList reportTypeList = new ReportTypeList(); - Arrays.stream(ReportType.values()) - .forEach(reportType -> reportTypeList.response.add( - new ReportTypeInformation(reportType.name(), reportType.getDescription()))); - return reportTypeList; - } + public static ReportTypeList get() { + ReportTypeList reportTypeList = new ReportTypeList(); + Arrays.stream(ReportType.values()) + .forEach(reportType -> reportTypeList.response.add( + new ReportTypeInformation(reportType.name(), reportType.getDescription()))); + return reportTypeList; + } } diff --git a/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java b/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java index 67b8af13..1d7a746e 100644 --- a/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java +++ b/src/main/java/ssu/eatssu/domain/report/entity/ReportStatus.java @@ -1,30 +1,29 @@ package ssu.eatssu.domain.report.entity; -import java.util.Arrays; - import com.fasterxml.jackson.annotation.JsonCreator; - import lombok.Getter; +import java.util.Arrays; + @Getter public enum ReportStatus { - PENDING("대기 중"), - IN_PROGRESS("진행 중"), - RESOLVED("해결됨"), - REJECTED("거절됨"), - FALSE_REPORT("거짓 신고"); + PENDING("대기 중"), + IN_PROGRESS("진행 중"), + RESOLVED("해결됨"), + REJECTED("거절됨"), + FALSE_REPORT("거짓 신고"); - private final String description; + private final String description; - ReportStatus(final String description) { - this.description = description; - } + ReportStatus(final String description) { + this.description = description; + } - @JsonCreator - public static ReportStatus from(final String description) { - return Arrays.stream(ReportStatus.values()) - .filter(v -> v.getDescription().equals(description)) - .findAny() - .orElseThrow(IllegalArgumentException::new); - } + @JsonCreator + public static ReportStatus from(final String description) { + return Arrays.stream(ReportStatus.values()) + .filter(v -> v.getDescription().equals(description)) + .findAny() + .orElseThrow(IllegalArgumentException::new); + } } diff --git a/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java b/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java index f029c7bf..7b6e3c07 100644 --- a/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java +++ b/src/main/java/ssu/eatssu/domain/report/entity/ReportType.java @@ -1,28 +1,27 @@ package ssu.eatssu.domain.report.entity; -import java.util.Locale; - import com.fasterxml.jackson.annotation.JsonCreator; - import lombok.Getter; +import java.util.Locale; + @Getter public enum ReportType { - NO_ASSOCIATE_CONTENT("메뉴와 관련 없는 내용"), - IMPROPER_CONTENT("음란성, 욕설 등 부적절한 내용"), - IMPROPER_ADVERTISEMENT("부적절한 홍보 및 광고"), - COPY("리뷰 취지에 맞지 않는 행동(복사글 등)"), - COPYRIGHT("저작권 도용 의심(사진 등)"), - EXTRA("기타 (하단 내용 작성)"); + NO_ASSOCIATE_CONTENT("메뉴와 관련 없는 내용"), + IMPROPER_CONTENT("음란성, 욕설 등 부적절한 내용"), + IMPROPER_ADVERTISEMENT("부적절한 홍보 및 광고"), + COPY("리뷰 취지에 맞지 않는 행동(복사글 등)"), + COPYRIGHT("저작권 도용 의심(사진 등)"), + EXTRA("기타 (하단 내용 작성)"); - private final String description; + private final String description; - ReportType(String description) { - this.description = description; - } + ReportType(String description) { + this.description = description; + } - @JsonCreator - public static ReportType from(final String name) { - return ReportType.valueOf(name.toUpperCase(Locale.ROOT)); - } + @JsonCreator + public static ReportType from(final String name) { + return ReportType.valueOf(name.toUpperCase(Locale.ROOT)); + } } diff --git a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java index 17694962..ccec0ac1 100644 --- a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java +++ b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java @@ -1,12 +1,5 @@ package ssu.eatssu.domain.report.presentation; -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; @@ -14,6 +7,12 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.report.dto.ReportCreateRequest; import ssu.eatssu.domain.report.dto.ReportTypeList; @@ -30,31 +29,31 @@ @Tag(name = "Report", description = "신고 API") public class ReportController { - private final ReportService reportService; - private final SlackService slackService; + private final ReportService reportService; + private final SlackService slackService; - @Operation(summary = "리뷰 신고 사유 종류 조회", description = "리뷰 신고 사유 종류를 조회하는 API 입니다.") - @GetMapping("/types") - public BaseResponse getReportType() { - ReportTypeList reportTypeList = reportService.getReportType(); - return BaseResponse.success(reportTypeList); - } + @Operation(summary = "리뷰 신고 사유 종류 조회", description = "리뷰 신고 사유 종류를 조회하는 API 입니다.") + @GetMapping("/types") + public BaseResponse getReportType() { + ReportTypeList reportTypeList = reportService.getReportType(); + return BaseResponse.success(reportTypeList); + } - /** - * 리뷰 신고 - */ - @Operation(summary = "리뷰 신고하기", description = "리뷰를 신고하는 API 입니다.") - @PostMapping("") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 신고 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - public BaseResponse reportReview(@RequestBody ReportCreateRequest createReportRequest, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - Report report = reportService.reportReview(customUserDetails, createReportRequest); - slackService.sendSlackMessage(SlackMessageFormat.sendReport(report), - SlackChannel.REPORT_CHANNEL); - return BaseResponse.success(); - } + /** + * 리뷰 신고 + */ + @Operation(summary = "리뷰 신고하기", description = "리뷰를 신고하는 API 입니다.") + @PostMapping("") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 신고 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + public BaseResponse reportReview(@RequestBody ReportCreateRequest createReportRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + Report report = reportService.reportReview(customUserDetails, createReportRequest); + slackService.sendSlackMessage(SlackMessageFormat.sendReport(report), + SlackChannel.REPORT_CHANNEL); + return BaseResponse.success(); + } } diff --git a/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java b/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java index 3cb1a9e9..58d0a066 100644 --- a/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java +++ b/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.report.repository; import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.review.entity.Report; public interface ReportRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java index d701996b..f0d7050b 100644 --- a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java +++ b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java @@ -1,11 +1,8 @@ package ssu.eatssu.domain.report.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.report.dto.ReportCreateRequest; import ssu.eatssu.domain.report.dto.ReportTypeList; @@ -18,27 +15,30 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; + @RequiredArgsConstructor @Service @Transactional public class ReportService { - private final ReviewRepository reviewRepository; - private final UserRepository userRepository; - private final ReportRepository reportRepository; + private final ReviewRepository reviewRepository; + private final UserRepository userRepository; + private final ReportRepository reportRepository; - public Report reportReview(CustomUserDetails userDetails, ReportCreateRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + public Report reportReview(CustomUserDetails userDetails, ReportCreateRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Review review = reviewRepository.findById(request.reviewId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + Review review = reviewRepository.findById(request.reviewId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - Report report = Report.create(user, review, request, ReportStatus.PENDING); - return reportRepository.save(report); - } + Report report = Report.create(user, review, request, ReportStatus.PENDING); + return reportRepository.save(report); + } - public ReportTypeList getReportType() { - return ReportTypeList.get(); - } + public ReportTypeList getReportType() { + return ReportTypeList.get(); + } } diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index 5a7f15bf..553e53bd 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -1,35 +1,35 @@ package ssu.eatssu.domain.restaurant.entity; -import java.util.Arrays; - import com.fasterxml.jackson.annotation.JsonCreator; - import lombok.Getter; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.util.Arrays; + @Getter public enum Restaurant { - DODAM("DODAM", 6000), - DORMITORY("DORMITORY", 5500), - FOOD_COURT("FOOD_COURT", null), - SNACK_CORNER("SNACK_CORNER", null), - HAKSIK("HAKSIK", 5000); - - private final String restaurantName; - private final Integer restaurantPrice; - - Restaurant(String restaurantName, Integer price) { - this.restaurantName = restaurantName; - this.restaurantPrice = price; - } - - @JsonCreator - public static Restaurant from(String restaurantName) { - return Arrays.stream(Restaurant.values()) - .filter(r -> r.getRestaurantName().equals(restaurantName)) - .findAny() - .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); - } + DODAM("DODAM", 6000), + DORMITORY("DORMITORY", 5500), + FOOD_COURT("FOOD_COURT", null), + SNACK_CORNER("SNACK_CORNER", null), + HAKSIK("HAKSIK", 5000), + FACULTY("FACULTY",null); + + private final String restaurantName; + private final Integer restaurantPrice; + + Restaurant(String restaurantName, Integer price) { + this.restaurantName = restaurantName; + this.restaurantPrice = price; + } + + @JsonCreator + public static Restaurant from(String restaurantName) { + return Arrays.stream(Restaurant.values()) + .filter(r -> r.getRestaurantName().equals(restaurantName)) + .findAny() + .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java index 3d93bcf8..5e771e9b 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/RestaurantType.java @@ -1,28 +1,28 @@ package ssu.eatssu.domain.restaurant.entity; +import lombok.Getter; + import java.util.Arrays; import java.util.List; -import lombok.Getter; - @Getter public enum RestaurantType { - FIXED("고정메뉴 식당", Arrays.asList(Restaurant.FOOD_COURT, Restaurant.SNACK_CORNER)), - VARIABLE("변동메뉴 식당", Arrays.asList(Restaurant.DODAM, Restaurant.DORMITORY, Restaurant.HAKSIK)); + FIXED("고정메뉴 식당", Arrays.asList(Restaurant.FOOD_COURT, Restaurant.SNACK_CORNER)), + VARIABLE("변동메뉴 식당", Arrays.asList(Restaurant.DODAM, Restaurant.DORMITORY, Restaurant.HAKSIK)); - private final String description; - private final List restaurants; + private final String description; + private final List restaurants; - RestaurantType(String description, List restaurants) { - this.description = description; - this.restaurants = restaurants; - } + RestaurantType(String description, List restaurants) { + this.description = description; + this.restaurants = restaurants; + } - public static boolean isFixedType(Restaurant restaurant) { - return FIXED.restaurants.contains(restaurant); - } + public static boolean isFixedType(Restaurant restaurant) { + return FIXED.restaurants.contains(restaurant); + } - public static boolean isVariableType(Restaurant restaurant) { - return VARIABLE.restaurants.contains(restaurant); - } + public static boolean isVariableType(Restaurant restaurant) { + return VARIABLE.restaurants.contains(restaurant); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java index bc9ec02e..d510ca1a 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java @@ -1,8 +1,5 @@ package ssu.eatssu.domain.review.dto; -import java.util.List; -import java.util.stream.Collectors; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; @@ -11,32 +8,35 @@ import ssu.eatssu.domain.review.entity.ReviewImage; import ssu.eatssu.domain.user.entity.User; -@Schema(title = "리뷰 작성") +import java.util.List; +import java.util.stream.Collectors; + +@Schema(title = "meal에 대한 리뷰 작성") @Getter @AllArgsConstructor public class CreateMealReviewRequest { - @Schema(description = "식단 식별자", example = "123") - private Long mealId; - @Schema(description = "평점", example = "4") - private Integer rating; - private List menuLikes; - @Schema(description = "한줄평", example = "맛있어용") - private String content; - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imageUrls; + @Schema(description = "식단 식별자", example = "123") + private Long mealId; + @Schema(description = "평점", example = "4") + private Integer rating; + private List menuLikes; + @Schema(description = "한줄평", example = "맛있어용") + private String content; + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; - public Review toReviewEntity(User user, Meal meal) { - return Review.builder() - .user(user) - .meal(meal) - .content(content) - .rating(rating) - .build(); - } + public Review toReviewEntity(User user, Meal meal) { + return Review.builder() + .user(user) + .meal(meal) + .content(content) + .rating(rating) + .build(); + } - public List createReviewImages(Review review) { - return imageUrls.stream() - .map(imageUrl -> new ReviewImage(review, imageUrl)) - .collect(Collectors.toList()); - } + public List createReviewImages(Review review) { + return imageUrls.stream() + .map(imageUrl -> new ReviewImage(review, imageUrl)) + .collect(Collectors.toList()); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java new file mode 100644 index 00000000..3a39d4ea --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java @@ -0,0 +1,59 @@ +package ssu.eatssu.domain.review.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Max; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.util.Assert; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.rating.entity.Ratings; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.user.entity.User; + +@Getter +@Setter +@Schema(title = "menu에 대한 리뷰 작성") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class CreateMenuReviewRequest { + @Schema(description = "메뉴 식별자", example = "123") + private Long menuId; + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; + + @Schema(description = "평점-양", example = "4") + private Integer amountRating; + + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; + + @Max(150) + @Schema(description = "한줄평", example = "맛있어용") + private String content; + + @Schema(description = "리뷰 이미지 URL", example = "https://s3.~~~.jpg") + private String imageUrl; + private MenuLikeRequest menuLike; + + public CreateMenuReviewRequest(int mainRating, int amountRating, int tasteRating, String content) { + Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); + this.mainRating = mainRating; + this.amountRating = amountRating; + this.tasteRating = tasteRating; + this.content = content; + } + + public Review toReviewEntity(User user, Menu menu) { + Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + return Review.builder() + .user(user) + .content(this.content) + .ratings(ratings) + .menu(menu) + .build(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java index b15f081d..633cb7c6 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java @@ -1,102 +1,86 @@ package ssu.eatssu.domain.review.dto; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewMenuLike; -import ssu.eatssu.domain.user.util.UserAliasUtil; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; @AllArgsConstructor @Builder @Schema(title = "리뷰 상세") @Getter public class MealReviewResponse { - @Schema(description = "리뷰 식별자", example = "123") - Long reviewId; - - @Schema(description = "작성자 식별자", example = "123") - Long writerId; - - @Schema(description = "본인 글인지 여부(true/false)", example = "true") - Boolean isWriter; - - @Schema(description = "작성자 닉네임", example = "숭시리시리") - private String writerNickname; - - @Schema(description = "평점", example = "4") - private Integer rating; - - @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") - private LocalDate writtenAt; - - @Schema(description = "리뷰 내용", example = "맛있습니당") - private String content; - - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imageUrls; - - @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") - private List likedMenuNames; - - @Schema(description = "본인이 이 리뷰에 좋아요를 눌렀는지 여부(true/false)", example = "true") - private Boolean isLikedByUser; - - @Schema(description = "리뷰 좋아요 개수", example = "10") - private Integer likeCount; - - @Schema(description = "별칭", example = "미슈테리 미식가") - private String alias; - - public static MealReviewResponse from(Review review, Long userId) { - List imageUrls = new ArrayList<>(); - review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); - - List likedMenuNames = review.getMenuLikes().stream() - .filter(ReviewMenuLike::getIsLike) - .map(like -> like.getMenu().getName()) - .collect(Collectors.toList()); - - boolean isLikedByUser = (userId != null) && review.getReviewLikes().stream() - .anyMatch(like -> like.getUser().getId().equals(userId)); - - String alias = (review.getUser() != null) ? UserAliasUtil.getUserAlias(review.getUser(), - review.getUser().getReviews()) : "알 수 없음"; - - MealReviewResponseBuilder builder = MealReviewResponse.builder() - .reviewId(review.getId()) - .rating(review.getRating()) - .writtenAt(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .imageUrls(imageUrls) - .likedMenuNames(likedMenuNames) - .isLikedByUser(isLikedByUser) - .likeCount(review.getReviewLikes().size()) - .alias(alias); - - if (review.getUser() == null) { - return builder.writerId(null) - .writerNickname("알 수 없음") - .isWriter(false) - .build(); - } - - if (review.getUser().getId().equals(userId)) { - return builder.writerId(review.getUser().getId()) - .writerNickname(review.getUser().getNickname()) - .isWriter(true) - .build(); - } - - return builder.writerId(review.getUser().getId()) - .writerNickname(review.getUser().getNickname()) - .isWriter(false) - .build(); - } + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; + + @Schema(description = "작성자 식별자", example = "123") + Long writerId; + + @Schema(description = "본인 글인지 여부(true/false)", example = "true") + Boolean isWriter; + + @Schema(description = "작성자 닉네임", example = "숭시리시리") + private String writerNickname; + + @Schema(description = "평점", example = "4") + private Integer rating; + + @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") + private LocalDate writtenAt; + + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; + + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; + + @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") + private List likedMenuNames; + @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") + private List menuNames; + + public static MealReviewResponse from(Review review, Long userId) { + List imageUrls = new ArrayList<>(); + review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); + + List likedMenuNames = review.getMenuLikes().stream() + .filter(ReviewMenuLike::getIsLike) + .map(like -> like.getMenu().getName()) + .collect(Collectors.toList()); + + MealReviewResponseBuilder builder = MealReviewResponse.builder() + .reviewId(review.getId()) + .rating(review.getRating()) + .writtenAt(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imageUrls(imageUrls) + .menuNames(review.getMeal().getMenuNames()) + .likedMenuNames(likedMenuNames); + + if (review.getUser() == null) { + return builder.writerId(null) + .writerNickname("알 수 없음") + .isWriter(false) + .build(); + } + + if (review.getUser().getId().equals(userId)) { + return builder.writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(true) + .build(); + } + + return builder.writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(false) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java index b7c9e5ab..05ba5a92 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java @@ -1,46 +1,46 @@ package ssu.eatssu.domain.review.dto; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import java.util.List; + @Schema(title = "식단 리뷰 정보(평점 등등)") @Getter @AllArgsConstructor @Builder public class MealReviewsResponse implements ReviewInformationResponse { - @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") - private List menuNames; + @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") + private List menuNames; - @Schema(description = "리뷰 개수", example = "15") - private Long totalReviewCount; + @Schema(description = "리뷰 개수", example = "15") + private Long totalReviewCount; - @Schema(description = "평점-메인", example = "4.4") - private Double mainRating; + @Schema(description = "평점-메인", example = "4.4") + private Double mainRating; - @Schema(description = "평점-양", example = "4.4") - private Double amountRating; + @Schema(description = "평점-양", example = "4.4") + private Double amountRating; - @Schema(description = "평점-맛", example = "4.4") - private Double tasteRating; + @Schema(description = "평점-맛", example = "4.4") + private Double tasteRating; - @Schema(description = "평점 별 갯수") - private ReviewRatingCount reviewRatingCount; + @Schema(description = "평점 별 갯수") + private ReviewRatingCount reviewRatingCount; - public static MealReviewsResponse of(Long totalReviewCount, List menuNames, - RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { + public static MealReviewsResponse of(Long totalReviewCount, List menuNames, + RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { - return MealReviewsResponse.builder() - .menuNames(menuNames) - .mainRating(ratingAverages.mainRating()) - .amountRating(ratingAverages.amountRating()) - .tasteRating(ratingAverages.tasteRating()) - .totalReviewCount(totalReviewCount) - .reviewRatingCount(reviewRatingCount) - .build(); - } + return MealReviewsResponse.builder() + .menuNames(menuNames) + .mainRating(ratingAverages.mainRating()) + .amountRating(ratingAverages.amountRating()) + .tasteRating(ratingAverages.tasteRating()) + .totalReviewCount(totalReviewCount) + .reviewRatingCount(reviewRatingCount) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java index ff19e98c..2fa91875 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java @@ -1,44 +1,39 @@ package ssu.eatssu.domain.review.dto; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.menu.entity.Meal; + +import java.util.List; @Schema(title = "식단 리뷰 정보V2(평점 등등)") @Getter @AllArgsConstructor @Builder -public class MealReviewsV2Response implements ReviewInformationResponse{ - @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") - private List menuNames; - - @Schema(description = "리뷰 개수", example = "15") - private Long totalReviewCount; - - @Schema(description = "평점-메인", example = "4.4") - private Double mainRating; - - @Schema(description = "좋아요 개수", example = "4.4") - private Integer likeCount; - - @Schema(description = "싫어요 개수", example = "4.4") - private Integer unlikeCount; - - @Schema(description = "평점 별 갯수") - private ReviewRatingCount reviewRatingCount; - - public static MealReviewsV2Response of(Long totalReviewCount, List menuNames, - RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { - - return MealReviewsV2Response.builder() - .menuNames(menuNames) - .mainRating(ratingAverages.mainRating()) - .totalReviewCount(totalReviewCount) - .reviewRatingCount(reviewRatingCount) - .build(); - } +public class MealReviewsV2Response implements ReviewInformationResponse { + @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") + private List menuNames; + + @Schema(description = "리뷰 개수", example = "15") + private Long totalReviewCount; + + @Schema(description = "평점-메인", example = "4.4") + private Double mainRating; + + @Schema(description = "좋아요 개수", example = "4.4") + private Integer likeCount; + @Schema(description = "평점 별 갯수") + private ReviewRatingCount reviewRatingCount; + + public static MealReviewsV2Response of(Long totalReviewCount, List menuNames, + RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { + + return MealReviewsV2Response.builder() + .menuNames(menuNames) + .mainRating(ratingAverages.mainRating()) + .totalReviewCount(totalReviewCount) + .reviewRatingCount(reviewRatingCount) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java index 593cdc4d..1042f12c 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java @@ -8,8 +8,8 @@ @Getter @AllArgsConstructor public class MenuLikeRequest { - @Schema(description = "메뉴 식별자", example = "123") - private Long menuId; - @Schema(description = "좋아요 or 싫어요", example = "좋아요 : true or 싫어요 : false") - private Boolean isLike; + @Schema(description = "메뉴 식별자", example = "123") + private Long menuId; + @Schema(description = "좋아요 or 싫어요", example = "좋아요 : true or 싫어요 : false") + private Boolean isLike; } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java index c94bdc44..77056b7a 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java @@ -12,34 +12,34 @@ @Builder public class MenuReviewResponse implements ReviewInformationResponse { - @Schema(description = "메뉴 이름", example = "바질토마토베이글") - private String menuName; - - @Schema(description = "리뷰 개수", example = "15") - private Integer totalReviewCount; - - @Schema(description = "평점-메인", example = "4.4") - private Double mainRating; - - @Schema(description = "평점-양", example = "4.4") - private Double amountRating; - - @Schema(description = "평점-맛", example = "4.4") - private Double tasteRating; - - @Schema(description = "평점 별 갯수") - private ReviewRatingCount reviewRatingCount; - - public static MenuReviewResponse of(Menu menu, - RatingAverages ratingAverages, - ReviewRatingCount reviewRatingCount) { - return MenuReviewResponse.builder() - .menuName(menu.getName()) - .totalReviewCount(menu.getTotalReviewCount()) - .mainRating(ratingAverages.mainRating()) - .amountRating(ratingAverages.amountRating()) - .tasteRating(ratingAverages.tasteRating()) - .reviewRatingCount(reviewRatingCount) - .build(); - } + @Schema(description = "메뉴 이름", example = "바질토마토베이글") + private String menuName; + + @Schema(description = "리뷰 개수", example = "15") + private Integer totalReviewCount; + + @Schema(description = "평점-메인", example = "4.4") + private Double mainRating; + + @Schema(description = "평점-양", example = "4.4") + private Double amountRating; + + @Schema(description = "평점-맛", example = "4.4") + private Double tasteRating; + + @Schema(description = "평점 별 갯수") + private ReviewRatingCount reviewRatingCount; + + public static MenuReviewResponse of(Menu menu, + RatingAverages ratingAverages, + ReviewRatingCount reviewRatingCount) { + return MenuReviewResponse.builder() + .menuName(menu.getName()) + .totalReviewCount(menu.getTotalReviewCount()) + .mainRating(ratingAverages.mainRating()) + .amountRating(ratingAverages.amountRating()) + .tasteRating(ratingAverages.tasteRating()) + .reviewRatingCount(reviewRatingCount) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java index 15c753a8..7c68fe56 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewsV2Response.java @@ -1,12 +1,9 @@ package ssu.eatssu.domain.review.dto; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @Schema(title = "메뉴 리뷰 정보V2(평점 등등)") @@ -14,34 +11,33 @@ @AllArgsConstructor @Builder public class MenuReviewsV2Response implements ReviewInformationResponse { - @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") - private List menuNames; - - @Schema(description = "리뷰 개수", example = "15") - private Long totalReviewCount; - - @Schema(description = "평점-메인", example = "4.4") - private Double mainRating; - - @Schema(description = "좋아요 개수", example = "4.4") - private Integer likeCount; - - @Schema(description = "싫어요 개수", example = "4.4") - private Integer unlikeCount; - - @Schema(description = "평점 별 갯수") - private ReviewRatingCount reviewRatingCount; - - public static MenuReviewsV2Response of(Long totalReviewCount, List menuNames, - RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount,Menu menu) { - - return MenuReviewsV2Response.builder() - .menuNames(menuNames) - .mainRating(ratingAverages.mainRating()) - .likeCount(menu.getLikeCount()) - .unlikeCount(menu.getUnlikeCount()) - .totalReviewCount(totalReviewCount) - .reviewRatingCount(reviewRatingCount) - .build(); - } + @Schema(description = "메뉴명", example = "고구마 치즈 돈까스") + private String menuName; + + @Schema(description = "리뷰 개수", example = "15") + private Long totalReviewCount; + + @Schema(description = "평점-메인", example = "4.4") + private Double mainRating; + + @Schema(description = "좋아요 개수", example = "4.4") + private Integer likeCount; + + @Schema(description = "평점 별 갯수") + private ReviewRatingCount reviewRatingCount; + + public static MenuReviewsV2Response of(Long totalReviewCount, + String menuName, + RatingAverages ratingAverages, + ReviewRatingCount reviewRatingCount, + Menu menu) { + + return MenuReviewsV2Response.builder() + .menuName(menuName) + .mainRating(ratingAverages.mainRating()) + .likeCount(menu.getLikeCount()) + .totalReviewCount(totalReviewCount) + .reviewRatingCount(reviewRatingCount) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java b/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java index 66a4a8cd..d96d03eb 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java @@ -4,7 +4,7 @@ public record RatingAverages(Double mainRating, Double amountRating, Double tasteRating) { - @Builder - public RatingAverages { - } + @Builder + public RatingAverages { + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java b/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java index c0b3efe8..dab7e5f5 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java @@ -4,16 +4,16 @@ public record RatingsDto(Ratings ratings) { - public Integer getMainRating() { - return ratings.getMainRating(); - } + public Integer getMainRating() { + return ratings.getMainRating(); + } - public Integer getTasteRating() { - return ratings.getTasteRating(); - } + public Integer getTasteRating() { + return ratings.getTasteRating(); + } - public Integer getAmountRating() { - return ratings.getAmountRating(); - } + public Integer getAmountRating() { + return ratings.getAmountRating(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/RestaurantReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/RestaurantReviewResponse.java index 962152b8..197d6f5f 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/RestaurantReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/RestaurantReviewResponse.java @@ -10,18 +10,18 @@ @AllArgsConstructor @Builder public class RestaurantReviewResponse { - @Schema(description = "리뷰 개수", example = "15") - private Integer totalReviewCount; + @Schema(description = "리뷰 개수", example = "15") + private Integer totalReviewCount; - @Schema(description = "별점 별 개수") - private ReviewRatingCount reviewRatingCount; + @Schema(description = "별점 별 개수") + private ReviewRatingCount reviewRatingCount; - @Schema(description = "리뷰 평점", example = "4.4") - private Double mainRating; + @Schema(description = "리뷰 평점", example = "4.4") + private Double mainRating; - @Schema(description = "좋아요 개수", example = "15") - private Integer likeCount; + @Schema(description = "좋아요 개수", example = "15") + private Integer likeCount; - @Schema(description = "싫어요 개수", example = "15") - private Integer unlikeCount; + @Schema(description = "싫어요 개수", example = "15") + private Integer unlikeCount; } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java index c138369f..6843b8cc 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java @@ -1,13 +1,12 @@ package ssu.eatssu.domain.review.dto; -import org.springframework.util.Assert; - import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import org.springframework.util.Assert; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.review.entity.Review; @@ -19,38 +18,38 @@ @Setter public class ReviewCreateRequest { - @Schema(description = "평점-메인", example = "4") - private Integer mainRating; - - @Schema(description = "평점-양", example = "4") - private Integer amountRating; - - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; - - @Max(150) - @Schema(description = "한줄평", example = "맛있어용") - private String content; - - public ReviewCreateRequest(int mainRating, int amountRating, int tasteRating, String content) { - Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); - this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; - this.content = content; - } - - public Review toEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); - return Review.builder() - .user(user) - .content(this.content) - .ratings(ratings) - .menu(menu) - .build(); - } + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; + + @Schema(description = "평점-양", example = "4") + private Integer amountRating; + + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; + + @Max(150) + @Schema(description = "한줄평", example = "맛있어용") + private String content; + + public ReviewCreateRequest(int mainRating, int amountRating, int tasteRating, String content) { + Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); + this.mainRating = mainRating; + this.amountRating = amountRating; + this.tasteRating = tasteRating; + this.content = content; + } + + public Review toEntity(User user, Menu menu) { + Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + return Review.builder() + .user(user) + .content(this.content) + .ratings(ratings) + .menu(menu) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java index b99ebd3c..40eb70b5 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java @@ -1,88 +1,88 @@ package ssu.eatssu.domain.review.dto; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import ssu.eatssu.domain.review.entity.Review; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + @AllArgsConstructor @Builder @Schema(title = "리뷰 상세") @Getter public class ReviewDetail { - @Schema(description = "리뷰 식별자", example = "123") - Long reviewId; - - @Schema(description = "메뉴 이름", example = "콥샐러드") - String menu; - - @Schema(description = "작성자 식별자", example = "123") - Long writerId; - - @Schema(description = "본인 글인지 여부(true/false)", example = "true") - Boolean isWriter; - - @Schema(description = "작성자 닉네임", example = "숭시리시리") - private String writerNickname; - - @Schema(description = "평점-메인", example = "4") - private Integer mainRating; - - @Schema(description = "평점-양", example = "4") - private Integer amountRating; - - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; - - @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") - private LocalDate writedAt; - - @Schema(description = "리뷰 내용", example = "맛있습니당") - private String content; - - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imageUrls; - - public static ReviewDetail from(Review review, Long userId) { - List imageUrls = new ArrayList<>(); - review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); - - ReviewDetailBuilder builder = ReviewDetail.builder() - .reviewId(review.getId()) - .mainRating(review.getRatings().getMainRating()) - .amountRating(review.getRatings().getAmountRating()) - .tasteRating(review.getRatings().getTasteRating()) - .writedAt(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .imageUrls(imageUrls) - .menu(review.getMenu().getName()); - - if (review.getUser() == null) { - return builder - .writerId(null) - .writerNickname("알 수 없음") - .isWriter(false) - .build(); - } - - if (review.getUser().getId().equals(userId)) { - return builder - .writerId(review.getUser().getId()) - .writerNickname(review.getUser().getNickname()) - .isWriter(true) - .build(); - } - - return builder - .writerId(review.getUser().getId()) - .writerNickname(review.getUser().getNickname()) - .isWriter(false) - .build(); - } + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; + + @Schema(description = "메뉴 이름", example = "콥샐러드") + String menu; + + @Schema(description = "작성자 식별자", example = "123") + Long writerId; + + @Schema(description = "본인 글인지 여부(true/false)", example = "true") + Boolean isWriter; + + @Schema(description = "작성자 닉네임", example = "숭시리시리") + private String writerNickname; + + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; + + @Schema(description = "평점-양", example = "4") + private Integer amountRating; + + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; + + @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") + private LocalDate writedAt; + + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; + + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; + + public static ReviewDetail from(Review review, Long userId) { + List imageUrls = new ArrayList<>(); + review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); + + ReviewDetailBuilder builder = ReviewDetail.builder() + .reviewId(review.getId()) + .mainRating(review.getRatings().getMainRating()) + .amountRating(review.getRatings().getAmountRating()) + .tasteRating(review.getRatings().getTasteRating()) + .writedAt(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imageUrls(imageUrls) + .menu(review.getMenu().getName()); + + if (review.getUser() == null) { + return builder + .writerId(null) + .writerNickname("알 수 없음") + .isWriter(false) + .build(); + } + + if (review.getUser().getId().equals(userId)) { + return builder + .writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(true) + .build(); + } + + return builder + .writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(false) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java index 2edd23f9..facbdead 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java @@ -1,31 +1,32 @@ package ssu.eatssu.domain.review.dto; +import ssu.eatssu.domain.review.entity.Review; + import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import ssu.eatssu.domain.review.entity.Review; - //COMMENT: 더 좋은 매개변수 명이 있을 것 같은데 제 머리로는 이게 한계입니다... 멋진 변수명으로 바꿔주세요 public record ReviewRatingCount(long oneStarCount, long twoStarCount, long threeStarCount, long fourStarCount, - long fiveStarCount) { + long fiveStarCount) { - public ReviewRatingCount { - } + public ReviewRatingCount { + } - public static ReviewRatingCount from(List reviews) { - Map ratingDistribution = reviews.stream() - .collect( - Collectors.groupingBy(Review::getRating, LinkedHashMap::new, - Collectors.counting())); + public static ReviewRatingCount from(List reviews) { + Map ratingDistribution = reviews.stream() + .filter(r -> r.getRating() != null) + .collect(Collectors.groupingBy(Review::getRating, + LinkedHashMap::new, + Collectors.counting())); - return new ReviewRatingCount( - ratingDistribution.getOrDefault(1, 0L), - ratingDistribution.getOrDefault(2, 0L), - ratingDistribution.getOrDefault(3, 0L), - ratingDistribution.getOrDefault(4, 0L), - ratingDistribution.getOrDefault(5, 0L) - ); - } + return new ReviewRatingCount( + ratingDistribution.getOrDefault(1, 0L), + ratingDistribution.getOrDefault(2, 0L), + ratingDistribution.getOrDefault(3, 0L), + ratingDistribution.getOrDefault(4, 0L), + ratingDistribution.getOrDefault(5, 0L) + ); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java index 471c07ba..fd2b6565 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java @@ -6,18 +6,18 @@ @Schema(title = "리뷰 수정(글)") public record ReviewUpdateRequest( - @Schema(description = "평점-메인", example = "4") - Integer mainRating, + @Schema(description = "평점-메인", example = "4") + Integer mainRating, - @Schema(description = "평점-양", example = "4") - Integer amountRating, + @Schema(description = "평점-양", example = "4") + Integer amountRating, - @Schema(description = "평점-맛", example = "4") - Integer tasteRating, + @Schema(description = "평점-맛", example = "4") + Integer tasteRating, - @Max(150) - @Schema(description = "한줄평", example = "맛있어용") - String content + @Max(150) + @Schema(description = "한줄평", example = "맛있어용") + String content ) { } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/dto/SavedReviewImage.java b/src/main/java/ssu/eatssu/domain/review/dto/SavedReviewImage.java index 430f5cfc..0529ad4a 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/SavedReviewImage.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/SavedReviewImage.java @@ -9,6 +9,6 @@ @Schema(title = "업로드 된 이미지 url") public class SavedReviewImage { - @Schema(description = "이미지 url", example = "image123.jpg") - private String url; + @Schema(description = "이미지 url", example = "image123.jpg") + private String url; } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java index 21a9d57c..dce5e9ad 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java @@ -1,20 +1,20 @@ package ssu.eatssu.domain.review.dto; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; import lombok.AllArgsConstructor; import lombok.Getter; +import java.util.List; + @Schema(title = "리뷰 수정(글)") @Getter @AllArgsConstructor public class UpdateMealReviewRequest { - @Schema(description = "평점", example = "4") - private Integer rating; - private List menuLikes; - @Max(150) - @Schema(description = "한줄평", example = "맛있어용") - private String content; + @Schema(description = "평점", example = "4") + private Integer rating; + private List menuLikes; + @Max(150) + @Schema(description = "한줄평", example = "맛있어용") + private String content; } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java index 57c3b344..20890cee 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java @@ -1,13 +1,12 @@ package ssu.eatssu.domain.review.dto; -import org.springframework.util.Assert; - import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import org.springframework.util.Assert; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.review.entity.Review; @@ -19,42 +18,42 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) public class UploadReviewRequest { - @Schema(description = "평점-메인", example = "4") - private Integer mainRating; - - @Schema(description = "평점-양", example = "4") - private Integer amountRating; - - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; - - @Max(150) - @Schema(description = "한줄평", example = "맛있어용") - private String content; - - @Schema(description = "리뷰 이미지 URL", example = "https://s3.~~~.jpg") - private String imageUrl; - - public UploadReviewRequest(int mainRating, int amountRating, int tasteRating, String content) { - Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); - this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; - this.content = content; - } - - public Review toReviewEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); - return Review.builder() - .user(user) - .content(this.content) - .ratings(ratings) - .menu(menu) - .build(); - } + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; + + @Schema(description = "평점-양", example = "4") + private Integer amountRating; + + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; + + @Max(150) + @Schema(description = "한줄평", example = "맛있어용") + private String content; + + @Schema(description = "리뷰 이미지 URL", example = "https://s3.~~~.jpg") + private String imageUrl; + + public UploadReviewRequest(int mainRating, int amountRating, int tasteRating, String content) { + Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); + Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); + this.mainRating = mainRating; + this.amountRating = amountRating; + this.tasteRating = tasteRating; + this.content = content; + } + + public Review toReviewEntity(User user, Menu menu) { + Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + return Review.builder() + .user(user) + .content(this.content) + .ratings(ratings) + .menu(menu) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java new file mode 100644 index 00000000..6cc2a4a2 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java @@ -0,0 +1,20 @@ +package ssu.eatssu.domain.review.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +@Builder +@Schema(title = "리뷰에 포함되는 메뉴") +@AllArgsConstructor +public class ValidMenuForViewResponse { + @Schema(description = "리뷰에 포함되는 메뉴 리스트", example = "[김치볶음밥, 고구마치즈돈까스, 김자반]") + private List menuList; + +} diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Report.java b/src/main/java/ssu/eatssu/domain/review/entity/Report.java index 72879752..a96803c0 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Report.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Report.java @@ -28,35 +28,35 @@ @AllArgsConstructor public class Report extends BaseTimeEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "review_report_id") - private Long id; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "reporter_id") - private User user; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "review_id") - private Review review; - - @Enumerated(EnumType.STRING) - private ReportType reportType; - - private String content; - - @Enumerated(EnumType.STRING) - private ReportStatus status; - - public static Report create(User user, Review review, ReportCreateRequest request, - ReportStatus status) { - return Report.builder() - .user(user) - .review(review) - .reportType(request.reportType()) - .content(request.content()) - .status(status) - .build(); - } + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_report_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "reporter_id") + private User user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; + + @Enumerated(EnumType.STRING) + private ReportType reportType; + + private String content; + + @Enumerated(EnumType.STRING) + private ReportStatus status; + + public static Report create(User user, Review review, ReportCreateRequest request, + ReportStatus status) { + return Report.builder() + .user(user) + .review(review) + .reportType(request.reportType()) + .content(request.content()) + .status(status) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index 72c42056..ce98406d 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -1,10 +1,5 @@ package ssu.eatssu.domain.review.entity; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Embedded; @@ -28,6 +23,11 @@ import ssu.eatssu.domain.user.entity.BaseTimeEntity; import ssu.eatssu.domain.user.entity.User; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + @Entity @Getter @Setter @@ -36,113 +36,110 @@ @AllArgsConstructor public class Review extends BaseTimeEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "review_id") - private Long id; - - private String content; - - // TODO : 삭제되어야 함 - @Embedded - private Ratings ratings; - - private Integer rating; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") - private User user; - - // TODO : 삭제되어야 함 - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "menu_id") - private Menu menu; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "meal_id") - private Meal meal; - - @Builder.Default - @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) - private List reviewImages = new ArrayList<>(); - - @Builder.Default - @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) - private List menuLikes = new ArrayList<>(); - - @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) - private List reviewLikes = new ArrayList<>(); - - public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { - this.content = content; - this.ratings = Ratings.of(mainRate, amountRate, tasteRate); - } - - // TODO : this.user가 null이면? - public boolean isNotWrittenBy(User user) { - return !this.user.equals(user); - } - - public void clearUser() { - this.user = null; - } - - public void addReviewImage(String imageUrl) { - ReviewImage reviewImage = new ReviewImage(this, imageUrl); - this.reviewImages.add(reviewImage); - } - - public void addReviewMenuLike(Menu menu, boolean isLike) { - ReviewMenuLike reviewMenuLike = ReviewMenuLike.create(this, menu, isLike); - this.menuLikes.add(reviewMenuLike); - - if (isLike) { - menu.increaseLikeCount(); - } else { - menu.increaseUnlikeCount(); - } - } - - public void removeReviewMenuLike(ReviewMenuLike reviewMenuLike) { - this.menuLikes.remove(reviewMenuLike); - - if (reviewMenuLike.getIsLike()) { - reviewMenuLike.getMenu().decreaseLikeCount(); - } else { - reviewMenuLike.getMenu().decreaseUnlikeCount(); - } - } - - public void update(String content, int rating, Map updatedMenuLikes) { - this.content = content; - this.rating = rating; - - // 현재 menu like 상태를 menu를 기준으로 매핑 - Map currentMenuLikes = this.menuLikes.stream() - .collect(Collectors.toMap(ReviewMenuLike::getMenu, - menuLike -> menuLike)); - - for (Map.Entry entry : updatedMenuLikes.entrySet()) { - Menu menu = entry.getKey(); - Boolean newState = entry.getValue(); - ReviewMenuLike existingReviewMenuLike = currentMenuLikes.get(menu); - if (existingReviewMenuLike == null) { - // 기존에 없는 메뉴이면 새롭게 추가 - this.addReviewMenuLike(menu, newState); - } else { - // 기존에 있는 경우 : 상태가 다르면 업데이트 - if (!existingReviewMenuLike.getIsLike().equals(newState)) { - existingReviewMenuLike.updateLike(newState); - menu.changeLikeStatus(newState); - } - } - } - } - - public void resetMenuLikes() { - for (ReviewMenuLike reviewMenuLike : this.menuLikes) { - reviewMenuLike.resetMenuLikeStatus(); - } - this.menuLikes.clear(); - } + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_id") + private Long id; + @Column(length = 300) + private String content; + + // TODO : 삭제되어야 함 + @Embedded + private Ratings ratings; + + private Integer rating; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + + // TODO : 삭제되어야 함 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "menu_id") + private Menu menu; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "meal_id") + private Meal meal; + + @Builder.Default + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) + private List reviewImages = new ArrayList<>(); + + @Builder.Default + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) + private List menuLikes = new ArrayList<>(); + + // @TODO: 리뷰v2 배포 이후 제거 해야함 + @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) + private List reviewLikes = new ArrayList<>(); + + public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { + this.content = content; + this.ratings = Ratings.of(mainRate, amountRate, tasteRate); + } + + // TODO : this.user가 null이면? + public boolean isNotWrittenBy(User user) { + return !this.user.equals(user); + } + + public void clearUser() { + this.user = null; + } + + public void addReviewImage(String imageUrl) { + ReviewImage reviewImage = new ReviewImage(this, imageUrl); + this.reviewImages.add(reviewImage); + } + + public void addReviewMenuLike(Menu menu, boolean isLike) { + ReviewMenuLike reviewMenuLike = ReviewMenuLike.create(this, menu, isLike); + this.menuLikes.add(reviewMenuLike); + + if (isLike) { + menu.increaseLikeCount(); + } + } + + public void removeReviewMenuLike(ReviewMenuLike reviewMenuLike) { + this.menuLikes.remove(reviewMenuLike); + + if (reviewMenuLike.getIsLike()) { + reviewMenuLike.getMenu().decreaseLikeCount(); + } + } + + public void update(String content, int rating, Map updatedMenuLikes) { + this.content = content; + this.rating = rating; + + // 현재 menu like 상태를 menu를 기준으로 매핑 + Map currentMenuLikes = this.menuLikes.stream() + .collect(Collectors.toMap(ReviewMenuLike::getMenu, + menuLike -> menuLike)); + + for (Map.Entry entry : updatedMenuLikes.entrySet()) { + Menu menu = entry.getKey(); + Boolean newState = entry.getValue(); + ReviewMenuLike existingReviewMenuLike = currentMenuLikes.get(menu); + if (existingReviewMenuLike == null) { + // 기존에 없는 메뉴이면 새롭게 추가 + this.addReviewMenuLike(menu, newState); + } else { + // 기존에 있는 경우 : 상태가 다르면 업데이트 + if (!existingReviewMenuLike.getIsLike().equals(newState)) { + existingReviewMenuLike.updateLike(newState); + menu.changeLikeStatus(newState); + } + } + } + } + + public void resetMenuLikes() { + for (ReviewMenuLike reviewMenuLike : this.menuLikes) { + reviewMenuLike.resetMenuLikeStatus(); + } + this.menuLikes.clear(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java index c43f7fd7..bced0c86 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewImage.java @@ -21,19 +21,19 @@ @AllArgsConstructor public class ReviewImage { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "review_image_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_image_id") + private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "review_id") - private Review review; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; - private String imageUrl; + private String imageUrl; - public ReviewImage(Review review, String imageUrl) { - this.review = review; - this.imageUrl = imageUrl; - } + public ReviewImage(Review review, String imageUrl) { + this.review = review; + this.imageUrl = imageUrl; + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java index 04597f5f..4d6006fb 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewLike.java @@ -19,20 +19,20 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor public class ReviewLike { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "review_like_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_like_id") + private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "review_id") - private Review review; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") - private User user; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; - public static ReviewLike create(User user, Review review) { - return new ReviewLike(null, review, user); - } + public static ReviewLike create(User user, Review review) { + return new ReviewLike(null, review, user); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java b/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java index 7d51e4e3..7eb90e45 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/ReviewMenuLike.java @@ -21,35 +21,35 @@ @Builder @AllArgsConstructor public class ReviewMenuLike { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "review_menu_like_id") - private Long id; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "review_id") - private Review review; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "menu_id") - private Menu menu; - - @Column(nullable = false) - private Boolean isLike; // true : 좋아요, false : 싫어요 - - public static ReviewMenuLike create(Review review, Menu menu, Boolean isLike) { - return ReviewMenuLike.builder() - .review(review) - .menu(menu) - .isLike(isLike) - .build(); - } - - public void updateLike(Boolean like) { - isLike = like; - } - - public void resetMenuLikeStatus() { - menu.cancelLike(this.isLike); - } + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "review_menu_like_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "review_id") + private Review review; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "menu_id") + private Menu menu; + + @Column(nullable = false) + private Boolean isLike; // true : 좋아요, false : 싫어요 + + public static ReviewMenuLike create(Review review, Menu menu, Boolean isLike) { + return ReviewMenuLike.builder() + .review(review) + .menu(menu) + .isLike(isLike) + .build(); + } + + public void updateLike(Boolean like) { + isLike = like; + } + + public void resetMenuLikeStatus() { + menu.cancelLike(this.isLike); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java index 76eb3a5d..183d663c 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java @@ -1,8 +1,5 @@ package ssu.eatssu.domain.review.entity; -import java.util.ArrayList; -import java.util.List; - import jakarta.persistence.CascadeType; import jakarta.persistence.Embeddable; import jakarta.persistence.OneToMany; @@ -11,52 +8,53 @@ import lombok.NoArgsConstructor; import ssu.eatssu.domain.rating.entity.ReviewRating; +import java.util.ArrayList; +import java.util.List; + @Getter @NoArgsConstructor(access = AccessLevel.PUBLIC) @Embeddable public class Reviews { - @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) - private List reviews = new ArrayList<>(); - - public void add(Review review) { - reviews.add(review); - } - - public int size() { - return reviews.size(); - } - - public void calculateReviewRatings() { - this.reviews.forEach(review -> { - int rateValue = review.getRatings().getMainRating(); - ReviewRating.fromValue(rateValue).incrementCount(); - }); - } - - public int getTotalMainRating() { - return this.reviews.stream().mapToInt(review -> review.getRatings().getMainRating()).sum(); - } - - public int getTotalAmountRating() { - return this.reviews.stream().mapToInt(review -> review.getRatings().getAmountRating()) - .sum(); - } - - public int getTotalTasteRating() { - return this.reviews.stream().mapToInt(review -> review.getRatings().getTasteRating()).sum(); - } - - public double getAverageMainRating() { - return (double)this.getTotalMainRating() / this.size(); - } - - public double getAverageAmountRating() { - return (double)this.getTotalAmountRating() / this.size(); - } + @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) + private List reviews = new ArrayList<>(); + + public void add(Review review) { + reviews.add(review); + } + + public int size() { + return reviews.size(); + } + + public void calculateReviewRatings() { + this.reviews.forEach(review -> { + if (review.getRatings() != null) { + int rateValue = review.getRatings().getMainRating(); + ReviewRating.fromValue(rateValue).incrementCount(); + } + }); + } + + public int getTotalMainRating() { + return this.reviews.stream() + .filter(review -> review.getRatings() != null) + .mapToInt(review -> review.getRatings().getMainRating()) + .sum(); + } + + public int getTotalAmountRating() { + return this.reviews.stream() + .filter(review -> review.getRatings() != null) + .mapToInt(review -> review.getRatings().getAmountRating()) + .sum(); + } + + public int getTotalTasteRating() { + return this.reviews.stream() + .filter(review -> review.getRatings() != null) + .mapToInt(review -> review.getRatings().getTasteRating()).sum(); + } - public double getAverageTasteRating() { - return (double)this.getTotalTasteRating() / this.size(); - } } diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index fd3fac83..b58361ee 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -1,7 +1,15 @@ package ssu.eatssu.domain.review.presentation; -import java.util.List; - +import io.swagger.v3.oas.annotations.Hidden; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -19,17 +27,6 @@ import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; - -import io.swagger.v3.oas.annotations.Hidden; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.enums.ParameterIn; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.constants.MenuType; import ssu.eatssu.domain.review.dto.MealReviewsResponse; @@ -44,165 +41,167 @@ import ssu.eatssu.domain.slice.service.SliceService; import ssu.eatssu.global.handler.response.BaseResponse; +import java.util.List; + @RestController @RequiredArgsConstructor @RequestMapping("/reviews") @Tag(name = "Review", description = "리뷰 API") public class ReviewController { - private final ReviewService reviewService; - private final SliceService sliceService; + private final ReviewService reviewService; + private final SliceService sliceService; - @Operation(summary = "리뷰 리스트 조회 [인증 토큰 필수 X]", description = """ - 리뷰 리스트를 조회하는 API 입니다.

- menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

- menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

- 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

- 페이징 기본 값 = {size=20, sort=date, direction=desc}

- """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("") - public BaseResponse> getReviews( - @Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") MenuType menuType, - @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) Long menuId, - @Parameter(description = "mealId(변동메뉴)") @RequestParam(value = "mealId", required = false) Long mealId, - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) - @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = sliceService.findReviews(menuType, menuId, mealId, - pageable, lastReviewId, customUserDetails); + @Operation(summary = "리뷰 리스트 조회 [인증 토큰 필수 X]", description = """ + 리뷰 리스트를 조회하는 API 입니다.

+ menuType=FIX 의 경우 menuId 파라미터를 넣어주세요.

+ menuType=CHANGE 의 경우 mealId 파라미터를 넣어주세요.

+ 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

+ 페이징 기본 값 = {size=20, sort=date, direction=desc}

+ """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("") + public BaseResponse> getReviews( + @Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") MenuType menuType, + @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) Long menuId, + @Parameter(description = "mealId(변동메뉴)") @RequestParam(value = "mealId", required = false) Long mealId, + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) + @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = sliceService.findReviews(menuType, menuId, mealId, + pageable, lastReviewId, customUserDetails); - return BaseResponse.success(myReviews); - } + return BaseResponse.success(myReviews); + } - @Hidden - @Operation(summary = "리뷰 작성", description = """ - 리뷰를 작성하는 API 입니다.

- reviewCreate는 application/json, multipartFileList는 multipart/form-data로 요청해주세요.

- 사진은 여러장 첨부 가능합니다.(기획상으로는 한 장만 첨부하도록 제한이 있지만 API 스펙 자체는 여러 장 첨부 가능) - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping(value = "/{menuId}", - consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, - produces = MediaType.APPLICATION_JSON_VALUE) - public BaseResponse writeReview( - @Parameter(description = "menuId") @PathVariable("menuId") Long menuId, - @RequestPart ReviewCreateRequest createReviewRequest, - @RequestPart(value = "multipartFileList", required = false) List multipartFileList, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewService.createReview(customUserDetails, menuId, createReviewRequest, - multipartFileList); - return BaseResponse.success(); - } + @Hidden + @Operation(summary = "리뷰 작성", description = """ + 리뷰를 작성하는 API 입니다.

+ reviewCreate는 application/json, multipartFileList는 multipart/form-data로 요청해주세요.

+ 사진은 여러장 첨부 가능합니다.(기획상으로는 한 장만 첨부하도록 제한이 있지만 API 스펙 자체는 여러 장 첨부 가능) + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping(value = "/{menuId}", + consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}, + produces = MediaType.APPLICATION_JSON_VALUE) + public BaseResponse writeReview( + @Parameter(description = "menuId") @PathVariable("menuId") Long menuId, + @RequestPart ReviewCreateRequest createReviewRequest, + @RequestPart(value = "multipartFileList", required = false) List multipartFileList, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewService.createReview(customUserDetails, menuId, createReviewRequest, + multipartFileList); + return BaseResponse.success(); + } - /** - * 리뷰 이미지 업로드 - */ - @Operation(summary = "리뷰 이미지 업로드", description = "리뷰 이미지를 업로드하고 이미지 URL 을 반환합니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "이미지 업로드 및 URL 반환 성공"), - @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping(value = "/upload/image", - consumes = MediaType.MULTIPART_FORM_DATA_VALUE, - produces = MediaType.APPLICATION_JSON_VALUE) - public BaseResponse uploadReviewImage(@RequestPart(value = "image") MultipartFile image) { - return BaseResponse.success(reviewService.uploadImage(image)); - } + /** + * 리뷰 이미지 업로드 + */ + @Operation(summary = "리뷰 이미지 업로드", description = "리뷰 이미지를 업로드하고 이미지 URL 을 반환합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "이미지 업로드 및 URL 반환 성공"), + @ApiResponse(responseCode = "500", description = "이미지 업로드 실패", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PostMapping(value = "/upload/image", + consumes = MediaType.MULTIPART_FORM_DATA_VALUE, + produces = MediaType.APPLICATION_JSON_VALUE) + public BaseResponse uploadReviewImage(@RequestPart(value = "image") MultipartFile image) { + return BaseResponse.success(reviewService.uploadImage(image)); + } - @Operation(summary = "리뷰 작성", description = "리뷰를 작성하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - }) - @PostMapping("/write/{menuId}") - public BaseResponse writeReview(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, - @RequestBody UploadReviewRequest uploadReviewRequest, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewService.uploadReview(customUserDetails, menuId, uploadReviewRequest); - return BaseResponse.success(); - } + @Operation(summary = "리뷰 작성", description = "리뷰를 작성하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + @PostMapping("/write/{menuId}") + public BaseResponse writeReview(@Parameter(description = "menuId") @PathVariable("menuId") Long menuId, + @RequestBody UploadReviewRequest uploadReviewRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewService.uploadReview(customUserDetails, menuId, uploadReviewRequest); + return BaseResponse.success(); + } - @Operation(summary = "리뷰 수정(글 수정)", description = """ - 리뷰 내용을 수정하는 API 입니다.

- 글 수정만 가능하며 사진 수정은 지원하지 않습니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 수정 성공"), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PatchMapping("/{reviewId}") - public BaseResponse updateReview(@Parameter(description = "reviewId") - @PathVariable("reviewId") Long reviewId, - @RequestBody ReviewUpdateRequest request, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewService.updateReview(customUserDetails, reviewId, request); - return BaseResponse.success(); - } + @Operation(summary = "리뷰 수정(글 수정)", description = """ + 리뷰 내용을 수정하는 API 입니다.

+ 글 수정만 가능하며 사진 수정은 지원하지 않습니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 수정 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PatchMapping("/{reviewId}") + public BaseResponse updateReview(@Parameter(description = "reviewId") + @PathVariable("reviewId") Long reviewId, + @RequestBody ReviewUpdateRequest request, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewService.updateReview(customUserDetails, reviewId, request); + return BaseResponse.success(); + } - @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공"), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("/{reviewId}") - public BaseResponse deleteReview( - @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewService.deleteReview(customUserDetails, reviewId); - return BaseResponse.success(); - } + @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("/{reviewId}") + public BaseResponse deleteReview( + @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewService.deleteReview(customUserDetails, reviewId); + return BaseResponse.success(); + } - @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ - 식단 리뷰 정보를 조회하는 API 입니다.

- 메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/meals/{mealId}") - public BaseResponse getMealReviews( - @Parameter(description = "mealId") - @PathVariable(value = "mealId") Long mealId) { - return BaseResponse.success(reviewService.findMealReviews(mealId)); - } + @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ + 식단 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명 리스트, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/meals/{mealId}") + public BaseResponse getMealReviews( + @Parameter(description = "mealId") + @PathVariable(value = "mealId") Long mealId) { + return BaseResponse.success(reviewService.findMealReviews(mealId)); + } - @Operation(summary = "고정 메뉴 리뷰 정보 조회(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ - 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

- 메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/menus/{menuId}") - public BaseResponse getMainReviews( - @Parameter(description = "menuId") - @PathVariable(value = "menuId") Long menuId) { - return BaseResponse.success(reviewService.findMenuReviews(menuId)); - } + @Operation(summary = "고정 메뉴 리뷰 정보 조회(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ + 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명, 리뷰 수, 메인 평점, 양 평점, 맛 평점, 각 평점의 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/menus/{menuId}") + public BaseResponse getMainReviews( + @Parameter(description = "menuId") + @PathVariable(value = "menuId") Long menuId) { + return BaseResponse.success(reviewService.findMenuReviews(menuId)); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java index da44bb5f..4efe696e 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java @@ -1,8 +1,19 @@ package ssu.eatssu.domain.review.presentation; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; +import org.springframework.data.web.PageableDefault; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -13,28 +24,20 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.enums.ParameterIn; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; +import ssu.eatssu.domain.review.dto.CreateMenuReviewRequest; import ssu.eatssu.domain.review.dto.MealReviewResponse; import ssu.eatssu.domain.review.dto.MealReviewsV2Response; -import ssu.eatssu.domain.review.dto.MenuReviewResponse; import ssu.eatssu.domain.review.dto.MenuReviewsV2Response; import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; +import ssu.eatssu.domain.review.dto.ReviewDetail; import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; +import ssu.eatssu.domain.review.dto.ValidMenuForViewResponse; import ssu.eatssu.domain.review.service.ReviewServiceV2; -import ssu.eatssu.domain.review.service.ReviewService; import ssu.eatssu.domain.slice.dto.SliceResponse; +import ssu.eatssu.domain.user.dto.MyMealReviewResponse; import ssu.eatssu.global.handler.response.BaseResponse; @RestController @@ -42,149 +45,200 @@ @RequestMapping("/v2/reviews") @Tag(name = "Review V2", description = "리뷰 V2 API") public class ReviewControllerV2 { - private final ReviewServiceV2 reviewServiceV2; - - private final ReviewService reviewService; - - @Operation(summary = "리뷰 작성", description = "리뷰를 작성하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - }) - @PostMapping() - public BaseResponse createReview( - @RequestBody CreateMealReviewRequest createMealReviewRequest, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewServiceV2.createReview(customUserDetails, createMealReviewRequest); - return BaseResponse.success(); - } - - @Operation(summary = "특정 식당 모든 리뷰 정보 조회(리뷰 개수, 평점 등등)", description = """ - 특정 식당 모든 리뷰 정보를 조회하는 API 입니다.

- 리뷰 개수, 별점 별 개수, 리뷰 평점, 좋아요 개수, 싫어요 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "path parameter 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/statistics") - public BaseResponse getRestaurantReviews( - @Parameter(description = "restaurant") - @RequestParam Restaurant restaurant - ) { - return BaseResponse.success(reviewServiceV2.findRestaurantReviews(restaurant)); - } - - @Operation(summary = "리뷰 리스트 조회", description = """ - 리뷰 리스트를 조회하는 API 입니다.

- 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

- 페이징 기본 값 = {size=20, sort=date, direction=desc}

- """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("") - public BaseResponse> getReviews( - @Parameter(description = "mealId") - @RequestParam Long mealId, - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) - @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - Pageable pageable = PageRequest.of(0, 20, Sort.by(Sort.Direction.DESC, "id")); - SliceResponse myReviews = reviewServiceV2.findReviews(mealId, lastReviewId, pageable, - customUserDetails); - return BaseResponse.success(myReviews); - } - - @Operation(summary = "리뷰 수정(글 수정)", description = """ - 리뷰 내용을 수정하는 API 입니다.

- 글 수정만 가능하며 사진 수정은 지원하지 않습니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 수정 성공"), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @PatchMapping("/{reviewId}") - public BaseResponse updateReview(@Parameter(description = "reviewId") - @PathVariable("reviewId") Long reviewId, - @RequestBody UpdateMealReviewRequest request, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewServiceV2.updateReview(customUserDetails, reviewId, request); - return BaseResponse.success(); - } - - @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공"), - @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("/{reviewId}") - public BaseResponse deleteReview( - @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewServiceV2.deleteReview(customUserDetails, reviewId); - return BaseResponse.success(); - } - - @Operation(summary = "리뷰 좋아요 누르기/취소하기", description = "리뷰에 좋아요(찜)를 누르거나 취소하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 좋아요 토글 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PostMapping("/{reviewId}/like") - public BaseResponse toggleReviewLike( - @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewServiceV2.toggleReviewLike(customUserDetails, reviewId); - return BaseResponse.success(); - } - - @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회 V2(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ - 식단 리뷰 정보를 조회하는 API 입니다.

- 메뉴명 리스트, 리뷰 수, 메인 평점, 좋아요 개수, 싫어요 개수, 각 평점의 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/meals/{mealId}") - public BaseResponse getMealReviews( - @Parameter(description = "mealId") - @PathVariable(value = "mealId") Long mealId) { - return BaseResponse.success(reviewServiceV2.findMealReviews(mealId)); - } - - @Operation(summary = "고정 메뉴 리뷰 정보 조회 V2(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ - 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

- 메뉴명, 리뷰 수, 메인 평점, 좋아요 개수, 싫어요 개수, 각 평점의 개수를 조회합니다. - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), - @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = - @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/menus/{menuId}") - public BaseResponse getMainReviews( - @Parameter(description = "menuId") - @PathVariable(value = "menuId") Long menuId) { - return BaseResponse.success(reviewServiceV2.findMenuReviews(menuId)); - } + private final ReviewServiceV2 reviewServiceV2; + + @Operation(summary = "meal(식단)에 대한 리뷰 작성", description = "리뷰를 작성하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + @PostMapping("/meal") + public BaseResponse createMealReview( + @RequestBody CreateMealReviewRequest createMealReviewRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewServiceV2.createMealReview(customUserDetails, createMealReviewRequest); + return BaseResponse.success(); + } + + @Operation(summary = "특정 식당 모든 리뷰 정보 조회(리뷰 개수, 평점 등등)", description = """ + 특정 식당 모든 리뷰 정보를 조회하는 API 입니다.

+ 리뷰 개수, 별점 별 개수, 리뷰 평점, 좋아요 개수, 싫어요 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "path parameter 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/statistics/restaurant") + public BaseResponse getRestaurantReviews( + @Parameter(description = "restaurant") + @RequestParam Restaurant restaurant + ) { + return BaseResponse.success(reviewServiceV2.findRestaurantReviews(restaurant)); + } + + @Operation(summary = "meal(식단)에 대한 리뷰 리스트 조회", description = """ + 리뷰 리스트를 조회하는 API 입니다.

+ 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

+ 페이징 기본 값 = {size=20, sort=date, direction=desc}

+ """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/list/meal") + public BaseResponse> getMealReviewList( + @Parameter(description = "mealId") + @RequestParam Long mealId, + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) + @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + Pageable pageable = PageRequest.of(0, 20, Sort.by(Sort.Direction.DESC, "id")); + SliceResponse myReviews = reviewServiceV2.findMealReviewList(mealId, lastReviewId, pageable, + customUserDetails); + return BaseResponse.success(myReviews); + } + + @Operation(summary = "리뷰 수정(글 수정)", description = """ + 리뷰 내용을 수정하는 API 입니다.

+ 글 수정만 가능하며 사진 수정은 지원하지 않습니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 수정 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @PatchMapping("/{reviewId}") + public BaseResponse updateReview(@Parameter(description = "reviewId") + @PathVariable("reviewId") Long reviewId, + @RequestBody UpdateMealReviewRequest request, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewServiceV2.updateReview(customUserDetails, reviewId, request); + return BaseResponse.success(); + } + + @Operation(summary = "리뷰 삭제", description = "리뷰를 삭제하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 삭제 성공"), + @ApiResponse(responseCode = "403", description = "리뷰에 대한 권한이 없음", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("/{reviewId}") + public BaseResponse deleteReview( + @Parameter(description = "reviewId") @PathVariable("reviewId") Long reviewId, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewServiceV2.deleteReview(customUserDetails, reviewId); + return BaseResponse.success(); + } + + @Operation(summary = "식단(변동 메뉴) 리뷰 정보 조회 V2(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ + 식단 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명 리스트, 리뷰 수, 메인 평점, 좋아요 개수, 싫어요 개수, 각 평점의 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/statistics/meals/{mealId}") + public BaseResponse getMealReviews( + @Parameter(description = "mealId") + @PathVariable(value = "mealId") Long mealId) { + return BaseResponse.success(reviewServiceV2.findMealReviews(mealId)); + } + + @Operation(summary = "고정 메뉴 리뷰 정보 조회 V2(메뉴명, 평점 등등) [인증 토큰 필요 X]", description = """ + 고정 메뉴 리뷰 정보를 조회하는 API 입니다.

+ 메뉴명, 리뷰 수, 메인 평점, 좋아요 개수, 싫어요 개수, 각 평점의 개수를 조회합니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = + @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/statistics/menus/{menuId}") + public BaseResponse getMainReviews( + @Parameter(description = "menuId") + @PathVariable(value = "menuId") Long menuId) { + return BaseResponse.success(reviewServiceV2.findMenuReviews(menuId)); + } + + @Operation(summary = "menu 에 대한 리뷰 리스트 조회", description = """ + 리뷰 리스트를 조회하는 API 입니다.

+ 커서 기반 페이지네이션으로 리뷰 리스트를 조회합니다.

+ 페이징 기본 값 = {size=20, sort=date, direction=desc}

+ """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "400", description = "쿼리 파라미터 누락", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/list/menu") + public BaseResponse> getMenuReviewList( + @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId") Long menuId, + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) + @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = reviewServiceV2.findMenuReviewList(menuId, + pageable, + lastReviewId, + customUserDetails); + + return BaseResponse.success(myReviews); + } + + @Operation(summary = "menu에 대한 리뷰 작성", description = "리뷰를 작성하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + }) + @PostMapping("/menu") + public BaseResponse createMenuReview(@RequestBody CreateMenuReviewRequest createMenuReviewRequest, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + reviewServiceV2.createMenuReview(customUserDetails, createMenuReviewRequest); + return BaseResponse.success(); + } + + @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API V2 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/my") + public BaseResponse> getMyReviews( + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = reviewServiceV2.findMyReviews(customUserDetails, + lastReviewId, + pageable); + return BaseResponse.success(myReviews); + } + + @Operation(summary = "식단 id를 통해 리뷰 작성할 수 있는 메뉴들 조회", description = "리뷰 작성할 수 있는 메뉴들 조회하는 API입니다. (노션 문서 > 리뷰v2 기능명세서> 리뷰에 제외되는 메뉴 참고") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "리뷰 작성할 수 있는 메뉴들 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 메뉴", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/meal/valid-for-review/{mealId}") + public BaseResponse getValidMenuForReview( + @Parameter(description = "mealId") + @PathVariable("mealId") Long mealId) { + ValidMenuForViewResponse validMenuForViewResponse = reviewServiceV2.validMenuForReview(mealId); + return BaseResponse.success(validMenuForViewResponse); + } + } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewImageRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewImageRepository.java index 0395890b..b608010f 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewImageRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewImageRepository.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.review.repository; import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.review.entity.ReviewImage; public interface ReviewImageRepository extends JpaRepository { diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java deleted file mode 100644 index fcba8185..00000000 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewLikeRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -package ssu.eatssu.domain.review.repository; - -import java.util.Optional; - -import org.springframework.data.jpa.repository.JpaRepository; - -import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.review.entity.ReviewLike; -import ssu.eatssu.domain.user.entity.User; - -public interface ReviewLikeRepository extends JpaRepository { - Optional findByReviewAndUser(Review review, User user); -} diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java index 545240e0..28a98bb7 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewMenuLikeRepository.java @@ -1,12 +1,11 @@ package ssu.eatssu.domain.review.repository; -import java.util.List; - import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewMenuLike; +import java.util.List; + public interface ReviewMenuLikeRepository extends JpaRepository { - List findByReview(Review review); -} + List findByReview(Review review); +} \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java index 21aceef7..d817cfcb 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java @@ -1,35 +1,34 @@ package ssu.eatssu.domain.review.repository; -import java.util.Collection; -import java.util.List; - import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; - import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.review.entity.Review; +import java.util.Collection; +import java.util.List; + public interface ReviewRepository extends JpaRepository, ReviewRepositoryCustom { - List findAllByMenu(Menu menu); + List findAllByMenu(Menu menu); - List findAllByMeal(Meal meal); + List findAllByMeal(Meal meal); - /** - * dto projection - */ - Collection findByMenu_MealMenus_Meal(Meal meal, Class type); + /** + * dto projection + */ + Collection findByMenu_MealMenus_Meal(Meal meal, Class type); - Long countByMenu_MealMenus_Meal(Meal meal); + Long countByMenu_MealMenus_Meal(Meal meal); - List findByMealIn(List meals); + List findByMealIn(List meals); - @Query("SELECT r FROM Review r WHERE r.meal.id IN :mealIds AND (:lastReviewId IS NULL OR r.id < :lastReviewId) ") - Page findReviewsByMealIds(@Param("mealIds") List mealIds, - @Param("lastReviewId") Long lastReviewId, - Pageable pageable); + @Query("SELECT r FROM Review r WHERE r.meal.id IN :mealIds AND (:lastReviewId IS NULL OR r.id < :lastReviewId) ") + Page findReviewsByMealIds(@Param("mealIds") List mealIds, + @Param("lastReviewId") Long lastReviewId, + Pageable pageable); } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java index 96659076..8cbc059f 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryCustom.java @@ -2,7 +2,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; - import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.review.entity.Review; @@ -10,19 +9,19 @@ public interface ReviewRepositoryCustom { - //특정 메뉴 리뷰 - 최신순 정렬 - Slice findAllByMenuOrderByIdDesc(Menu menu, Long lastReviewId, Pageable pageable); + //특정 메뉴 리뷰 - 최신순 정렬 + Slice findAllByMenuOrderByIdDesc(Menu menu, Long lastReviewId, Pageable pageable); - //특정 메뉴 리뷰 - 오래된순 정렬 - //특정 식단 리뷰 - 최신순 정렬 - Slice findAllByMealOrderByIdDesc(Meal meal, Long lastReviewId, Pageable pageable); + //특정 메뉴 리뷰 - 오래된순 정렬 + //특정 식단 리뷰 - 최신순 정렬 + Slice findAllByMealOrderByIdDesc(Meal meal, Long lastReviewId, Pageable pageable); - //특정 메뉴 리뷰 - 오래된순 정렬 - //특정 유저 리뷰 - 최신순 정렬 - Slice findByUserOrderByIdDesc(User user, Long lastReviewId, Pageable pageable); + //특정 메뉴 리뷰 - 오래된순 정렬 + //특정 유저 리뷰 - 최신순 정렬 + Slice findByUserOrderByIdDesc(User user, Long lastReviewId, Pageable pageable); - Slice findAllByMenuOrderByIdAsc(Menu menu, Long lastReviewId, Pageable pageable); + Slice findAllByMenuOrderByIdAsc(Menu menu, Long lastReviewId, Pageable pageable); - Slice findAllByMealOrderByIdAsc(Meal meal, Long lastReviewId, Pageable pageable); + Slice findAllByMealOrderByIdAsc(Meal meal, Long lastReviewId, Pageable pageable); } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java index 73339ad9..5f754ebc 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepositoryImpl.java @@ -1,124 +1,122 @@ package ssu.eatssu.domain.review.repository; -import java.util.ArrayList; -import java.util.List; - +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.domain.SliceImpl; import org.springframework.stereotype.Repository; - -import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.jpa.impl.JPAQueryFactory; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.review.entity.QReview; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; +import java.util.ArrayList; +import java.util.List; + @Repository @RequiredArgsConstructor public class ReviewRepositoryImpl implements ReviewRepositoryCustom { - private final JPAQueryFactory queryFactory; - private final QReview review = QReview.review; - - @Override - public Slice findAllByMenuOrderByIdDesc(Menu menu, Long lastReviewId, Pageable pageable) { - List reviewList = queryFactory.selectFrom(review) - .where( - nextFromLastReviewId(lastReviewId), - review.menu.eq(menu) - ) - .orderBy(review.id.desc()) - .limit(pageable.getPageSize() + 1L) - .fetch(); - return checkLastPage(pageable, reviewList); - } - - @Override - public Slice findAllByMenuOrderByIdAsc(Menu menu, Long lastReviewId, Pageable pageable) { - List reviewList = queryFactory.selectFrom(review) - .where( - beforeFromLastReviewId(lastReviewId), - review.menu.eq(menu) - ) - .orderBy(review.id.asc()) - .limit(pageable.getPageSize() + 1L) - .fetch(); - return checkLastPage(pageable, reviewList); - } - - @Override - public Slice findAllByMealOrderByIdDesc(Meal meal, Long lastReviewId, Pageable pageable) { - List menuList = new ArrayList<>(); - meal.getMealMenus().forEach(mealMenu -> menuList.add(mealMenu.getMenu())); - List reviewList = queryFactory.selectFrom(review) - .where( - nextFromLastReviewId(lastReviewId), - review.menu.in(menuList) - ) - .orderBy(review.id.desc()) - .limit(pageable.getPageSize() + 1L) - .fetch(); - return checkLastPage(pageable, reviewList); - } - - @Override - public Slice findAllByMealOrderByIdAsc(Meal meal, Long lastReviewId, Pageable pageable) { - List menuList = new ArrayList<>(); - meal.getMealMenus().forEach(mealMenu -> menuList.add(mealMenu.getMenu())); - List reviewList = queryFactory.selectFrom(review) - .where( - beforeFromLastReviewId(lastReviewId), - review.menu.in(menuList) - ) - .orderBy(review.id.asc()) - .limit(pageable.getPageSize() + 1L) - .fetch(); - return checkLastPage(pageable, reviewList); - } - - @Override - public Slice findByUserOrderByIdDesc(User user, Long lastReviewId, Pageable pageable) { - List reviewList = queryFactory.selectFrom(review) - .where( - nextFromLastReviewId(lastReviewId), - review.user.eq(user) - ) - .orderBy(review.id.desc()) - .limit(pageable.getPageSize() + 1L) - .fetch(); - return checkLastPage(pageable, reviewList); - } - - private BooleanExpression nextFromLastReviewId(Long reviewId) { - if (reviewId == null) { - return null; - } - return review.id.lt(reviewId); //reviewId < lastReviewId - } - - private BooleanExpression beforeFromLastReviewId(Long reviewId) { - if (reviewId == null) { - return null; - } - return review.id.gt(reviewId); //reviewId > lastReviewId - } - - //무한 스크롤 방식 처리하는 메소드 - private Slice checkLastPage(Pageable pageable, List results) { - - boolean hasNext = false; - - // 조회한 결과 개수가 요청한 페이지 사이즈보다 크면 뒤에 더 있음, next = true - if (results.size() > pageable.getPageSize()) { - hasNext = true; - results.remove(pageable.getPageSize()); - } - - return new SliceImpl<>(results, pageable, hasNext); - } + private final JPAQueryFactory queryFactory; + private final QReview review = QReview.review; + + @Override + public Slice findAllByMenuOrderByIdDesc(Menu menu, Long lastReviewId, Pageable pageable) { + List reviewList = queryFactory.selectFrom(review) + .where( + nextFromLastReviewId(lastReviewId), + review.menu.eq(menu) + ) + .orderBy(review.id.desc()) + .limit(pageable.getPageSize() + 1L) + .fetch(); + return checkLastPage(pageable, reviewList); + } + + @Override + public Slice findAllByMenuOrderByIdAsc(Menu menu, Long lastReviewId, Pageable pageable) { + List reviewList = queryFactory.selectFrom(review) + .where( + beforeFromLastReviewId(lastReviewId), + review.menu.eq(menu) + ) + .orderBy(review.id.asc()) + .limit(pageable.getPageSize() + 1L) + .fetch(); + return checkLastPage(pageable, reviewList); + } + + @Override + public Slice findAllByMealOrderByIdDesc(Meal meal, Long lastReviewId, Pageable pageable) { + List menuList = new ArrayList<>(); + meal.getMealMenus().forEach(mealMenu -> menuList.add(mealMenu.getMenu())); + List reviewList = queryFactory.selectFrom(review) + .where( + nextFromLastReviewId(lastReviewId), + review.menu.in(menuList) + ) + .orderBy(review.id.desc()) + .limit(pageable.getPageSize() + 1L) + .fetch(); + return checkLastPage(pageable, reviewList); + } + + @Override + public Slice findAllByMealOrderByIdAsc(Meal meal, Long lastReviewId, Pageable pageable) { + List menuList = new ArrayList<>(); + meal.getMealMenus().forEach(mealMenu -> menuList.add(mealMenu.getMenu())); + List reviewList = queryFactory.selectFrom(review) + .where( + beforeFromLastReviewId(lastReviewId), + review.menu.in(menuList) + ) + .orderBy(review.id.asc()) + .limit(pageable.getPageSize() + 1L) + .fetch(); + return checkLastPage(pageable, reviewList); + } + + @Override + public Slice findByUserOrderByIdDesc(User user, Long lastReviewId, Pageable pageable) { + List reviewList = queryFactory.selectFrom(review) + .where( + nextFromLastReviewId(lastReviewId), + review.user.eq(user) + ) + .orderBy(review.id.desc()) + .limit(pageable.getPageSize() + 1L) + .fetch(); + return checkLastPage(pageable, reviewList); + } + + private BooleanExpression nextFromLastReviewId(Long reviewId) { + if (reviewId == null) { + return null; + } + return review.id.lt(reviewId); //reviewId < lastReviewId + } + + private BooleanExpression beforeFromLastReviewId(Long reviewId) { + if (reviewId == null) { + return null; + } + return review.id.gt(reviewId); //reviewId > lastReviewId + } + + //무한 스크롤 방식 처리하는 메소드 + private Slice checkLastPage(Pageable pageable, List results) { + + boolean hasNext = false; + + // 조회한 결과 개수가 요청한 페이지 사이즈보다 크면 뒤에 더 있음, next = true + if (results.size() > pageable.getPageSize()) { + hasNext = true; + results.remove(pageable.getPageSize()); + } + + return new SliceImpl<>(results, pageable, hasNext); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java index 8247a80a..cf422bc9 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java @@ -1,10 +1,7 @@ package ssu.eatssu.domain.review.service; -import java.util.Map; - -import org.springframework.stereotype.Service; - import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.persistence.QuerydslMealRatingCalculator; @@ -15,68 +12,70 @@ import ssu.eatssu.domain.review.dto.RatingAverages; import ssu.eatssu.domain.review.dto.ReviewRatingCount; +import java.util.Map; + @Service @RequiredArgsConstructor public class ReviewRatingService implements RatingCalculator { - private final QuerydslMealRatingCalculator mealRatingCalculator; - private final QuerydslMenuRatingCalculator menuRatingCalculator; - private final QuerydslMealRatingCounter mealRatingCounter; - private final QuerydslMenuRatingCounter menuRatingCounter; + private final QuerydslMealRatingCalculator mealRatingCalculator; + private final QuerydslMenuRatingCalculator menuRatingCalculator; + private final QuerydslMealRatingCounter mealRatingCounter; + private final QuerydslMenuRatingCounter menuRatingCounter; - @Override - public ReviewRatingCount mealRatingCount(Meal meal) { - Map ratingCountMap = mealRatingCounter.getRatingCountMap(meal.getId()); - return getRatingCount(ratingCountMap); - } + @Override + public ReviewRatingCount mealRatingCount(Meal meal) { + Map ratingCountMap = mealRatingCounter.getRatingCountMap(meal.getId()); + return getRatingCount(ratingCountMap); + } - @Override - public ReviewRatingCount menuRatingCount(Menu menu) { - Map ratingCountMap = menuRatingCounter.getRatingCountMap(menu.getId()); - return getRatingCount(ratingCountMap); - } + @Override + public ReviewRatingCount menuRatingCount(Menu menu) { + Map ratingCountMap = menuRatingCounter.getRatingCountMap(menu.getId()); + return getRatingCount(ratingCountMap); + } - @Override - public RatingAverages mealAverageRatings(Meal meal) { - Double mainRatingAverage = mealRatingCalculator.getMainRatingAverage(meal.getId()); - Double amountRatingAverage = mealRatingCalculator.getAmountRatingAverage(meal.getId()); - Double tasteRatingAverage = mealRatingCalculator.getTasteRatingAverage(meal.getId()); - return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); - } + @Override + public RatingAverages mealAverageRatings(Meal meal) { + Double mainRatingAverage = mealRatingCalculator.getMainRatingAverage(meal.getId()); + Double amountRatingAverage = mealRatingCalculator.getAmountRatingAverage(meal.getId()); + Double tasteRatingAverage = mealRatingCalculator.getTasteRatingAverage(meal.getId()); + return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); + } - @Override - public RatingAverages menuAverageRatings(Menu menu) { - Double mainRatingAverage = menuRatingCalculator.getMainRatingAverage(menu.getId()); - Double amountRatingAverage = menuRatingCalculator.getAmountRatingAverage(menu.getId()); - Double tasteRatingAverage = menuRatingCalculator.getTasteRatingAverage(menu.getId()); - return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); - } + @Override + public RatingAverages menuAverageRatings(Menu menu) { + Double mainRatingAverage = menuRatingCalculator.getMainRatingAverage(menu.getId()); + Double amountRatingAverage = menuRatingCalculator.getAmountRatingAverage(menu.getId()); + Double tasteRatingAverage = menuRatingCalculator.getTasteRatingAverage(menu.getId()); + return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); + } - @Override - public Double mealAverageMainRating(Meal meal) { - return mealRatingCalculator.getMainRatingAverage(meal.getId()); - } + @Override + public Double mealAverageMainRating(Meal meal) { + return mealRatingCalculator.getMainRatingAverage(meal.getId()); + } - @Override - public Double menuAverageMainRating(Menu menu) { - return menuRatingCalculator.getMainRatingAverage(menu.getId()); - } + @Override + public Double menuAverageMainRating(Menu menu) { + return menuRatingCalculator.getMainRatingAverage(menu.getId()); + } - @Override - public long mealTotalReviewCount(Meal meal) { - return mealRatingCounter.getTotalRatingCount(meal.getId()); - } + @Override + public long mealTotalReviewCount(Meal meal) { + return mealRatingCounter.getTotalRatingCount(meal.getId()); + } - private ReviewRatingCount getRatingCount(Map ratingCountMap) { - long oneStarCount = getCount(ratingCountMap, 1); - long twoStarCount = getCount(ratingCountMap, 2); - long threeStarCount = getCount(ratingCountMap, 3); - long fourStarCount = getCount(ratingCountMap, 4); - long fiveStarCount = getCount(ratingCountMap, 5); - return new ReviewRatingCount(oneStarCount, twoStarCount, threeStarCount, fourStarCount, fiveStarCount); - } + private ReviewRatingCount getRatingCount(Map ratingCountMap) { + long oneStarCount = getCount(ratingCountMap, 1); + long twoStarCount = getCount(ratingCountMap, 2); + long threeStarCount = getCount(ratingCountMap, 3); + long fourStarCount = getCount(ratingCountMap, 4); + long fiveStarCount = getCount(ratingCountMap, 5); + return new ReviewRatingCount(oneStarCount, twoStarCount, threeStarCount, fourStarCount, fiveStarCount); + } - private long getCount(Map ratingCountMap, int star) { - return ratingCountMap.getOrDefault(star, 0L); - } + private long getCount(Map ratingCountMap, int star) { + return ratingCountMap.getOrDefault(star, 0L); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index b9502371..5e62ce31 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -1,16 +1,10 @@ package ssu.eatssu.domain.review.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - -import java.io.IOException; -import java.util.List; - +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -34,139 +28,149 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.util.S3Uploader; +import java.io.IOException; +import java.util.List; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.FAIL_IMAGE_UPLOAD; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MEAL; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; + @Slf4j @RequiredArgsConstructor @Service @Transactional public class ReviewService { - private final UserRepository userRepository; - private final ReviewRepository reviewRepository; - private final ReviewImageRepository reviewImageRepository; - private final MenuRepository menuRepository; - private final MealRepository mealRepository; - private final RatingCalculator ratingCalculator; - private final S3Uploader s3Uploader; - - public Review createReview(CustomUserDetails userDetails, Long menuId, ReviewCreateRequest request, - List images) { - - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - - Review review = request.toEntity(user, menu); - - menu.addReview(review); - processReviewImages(images, review); - - return reviewRepository.save(review); - } - - private void processReviewImages(List images, Review review) { - if (images == null || images.isEmpty()) { - return; - } - for (MultipartFile image : images) { - addReviewImage(review, image); - } - } - - private void addReviewImage(Review review, MultipartFile image) { - if (!image.isEmpty()) { - try { - String reviewImageUrl = s3Uploader.upload(image, "reviewImg"); - ReviewImage reviewImage = ReviewImage.builder().review(review) - .imageUrl(reviewImageUrl) - .build(); - reviewImageRepository.save(reviewImage); - } catch (IOException e) { - throw new BaseException(FAIL_IMAGE_UPLOAD); - } - } - } - - public SavedReviewImage uploadImage(MultipartFile image) { - try { - String imageUrl = s3Uploader.upload(image, "reviewImg"); - SavedReviewImage savedReviewImage = new SavedReviewImage(imageUrl); - log.info("[리뷰 이미지 업로드 완료] 업로드된 URL = {}", savedReviewImage.getUrl()); - return savedReviewImage; - } catch (IOException e) { - log.error("[리뷰 이미지 업로드 실패]", e); - throw new BaseException(FAIL_IMAGE_UPLOAD); - } - } - - public void uploadReview(CustomUserDetails userDetails, Long menuId, UploadReviewRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - - Review review = request.toReviewEntity(user, menu); - reviewRepository.save(review); - - ReviewImage reviewImage = new ReviewImage(review, request.getImageUrl()); - reviewImageRepository.save(reviewImage); - - menu.addReview(review); - } - - public void updateReview(CustomUserDetails userDetails, Long reviewId, - ReviewUpdateRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - if (review.isNotWrittenBy(user)) { - throw new BaseException(REVIEW_PERMISSION_DENIED); - } - - review.update(request.content(), request.mainRating(), request.amountRating(), - request.tasteRating()); - } - - public void deleteReview(CustomUserDetails userDetails, Long reviewId) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - if (review.isNotWrittenBy(user)) { - throw new BaseException(REVIEW_PERMISSION_DENIED); - } - reviewRepository.delete(review); - reviewRepository.flush(); - } - - public MenuReviewResponse findMenuReviews(Long menuId) { - Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - - RatingAverages ratingAverages = ratingCalculator.menuAverageRatings(menu); - ReviewRatingCount ratingCount = ratingCalculator.menuRatingCount(menu); - - return MenuReviewResponse.of(menu, ratingAverages, ratingCount); - - } - - public MealReviewsResponse findMealReviews(Long mealId) { - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); - - long reviewCount = ratingCalculator.mealTotalReviewCount(meal); - - RatingAverages averageRating = ratingCalculator.mealAverageRatings(meal); - ReviewRatingCount ratingCountMap = ratingCalculator.mealRatingCount(meal); - - return MealReviewsResponse.of(reviewCount, meal.getMenuNames(), averageRating, - ratingCountMap); - } + private final UserRepository userRepository; + private final ReviewRepository reviewRepository; + private final ReviewImageRepository reviewImageRepository; + private final MenuRepository menuRepository; + private final MealRepository mealRepository; + private final RatingCalculator ratingCalculator; + private final S3Uploader s3Uploader; + + public Review createReview(CustomUserDetails userDetails, Long menuId, ReviewCreateRequest request, + List images) { + + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + + Review review = request.toEntity(user, menu); + + menu.addReview(review); + processReviewImages(images, review); + + return reviewRepository.save(review); + } + + private void processReviewImages(List images, Review review) { + if (images == null || images.isEmpty()) { + return; + } + for (MultipartFile image : images) { + addReviewImage(review, image); + } + } + + private void addReviewImage(Review review, MultipartFile image) { + if (!image.isEmpty()) { + try { + String reviewImageUrl = s3Uploader.upload(image, "reviewImg"); + ReviewImage reviewImage = ReviewImage.builder().review(review) + .imageUrl(reviewImageUrl) + .build(); + reviewImageRepository.save(reviewImage); + } catch (IOException e) { + throw new BaseException(FAIL_IMAGE_UPLOAD); + } + } + } + + public SavedReviewImage uploadImage(MultipartFile image) { + try { + String imageUrl = s3Uploader.upload(image, "reviewImg"); + SavedReviewImage savedReviewImage = new SavedReviewImage(imageUrl); + log.info("[리뷰 이미지 업로드 완료] 업로드된 URL = {}", savedReviewImage.getUrl()); + return savedReviewImage; + } catch (IOException e) { + log.error("[리뷰 이미지 업로드 실패]", e); + throw new BaseException(FAIL_IMAGE_UPLOAD); + } + } + + public void uploadReview(CustomUserDetails userDetails, Long menuId, UploadReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + + Review review = request.toReviewEntity(user, menu); + reviewRepository.save(review); + + ReviewImage reviewImage = new ReviewImage(review, request.getImageUrl()); + reviewImageRepository.save(reviewImage); + + menu.addReview(review); + } + + public void updateReview(CustomUserDetails userDetails, Long reviewId, + ReviewUpdateRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (review.isNotWrittenBy(user)) { + throw new BaseException(REVIEW_PERMISSION_DENIED); + } + + review.update(request.content(), request.mainRating(), request.amountRating(), + request.tasteRating()); + } + + public void deleteReview(CustomUserDetails userDetails, Long reviewId) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (review.isNotWrittenBy(user)) { + throw new BaseException(REVIEW_PERMISSION_DENIED); + } + reviewRepository.delete(review); + reviewRepository.flush(); + } + + public MenuReviewResponse findMenuReviews(Long menuId) { + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + + RatingAverages ratingAverages = ratingCalculator.menuAverageRatings(menu); + ReviewRatingCount ratingCount = ratingCalculator.menuRatingCount(menu); + + return MenuReviewResponse.of(menu, ratingAverages, ratingCount); + + } + + public MealReviewsResponse findMealReviews(Long mealId) { + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + + long reviewCount = ratingCalculator.mealTotalReviewCount(meal); + + RatingAverages averageRating = ratingCalculator.mealAverageRatings(meal); + ReviewRatingCount ratingCountMap = ratingCalculator.mealRatingCount(meal); + + return MealReviewsResponse.of(reviewCount, meal.getMenuNames(), averageRating, + ratingCountMap); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 36ac0359..56c04f16 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -1,21 +1,11 @@ package ssu.eatssu.domain.review.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; - +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -24,306 +14,374 @@ import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; +import ssu.eatssu.domain.review.dto.CreateMenuReviewRequest; import ssu.eatssu.domain.review.dto.MealReviewResponse; import ssu.eatssu.domain.review.dto.MealReviewsV2Response; import ssu.eatssu.domain.review.dto.MenuLikeRequest; import ssu.eatssu.domain.review.dto.MenuReviewsV2Response; import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; +import ssu.eatssu.domain.review.dto.ReviewDetail; import ssu.eatssu.domain.review.dto.ReviewRatingCount; import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; +import ssu.eatssu.domain.review.dto.ValidMenuForViewResponse; import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.review.entity.ReviewLike; -import ssu.eatssu.domain.review.repository.ReviewLikeRepository; +import ssu.eatssu.domain.review.entity.ReviewImage; +import ssu.eatssu.domain.review.repository.ReviewImageRepository; import ssu.eatssu.domain.review.repository.ReviewRepository; +import ssu.eatssu.domain.review.utils.MenuFilterUtil; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.domain.user.dto.MyMealReviewResponse; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MEAL; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; + @RequiredArgsConstructor @Service public class ReviewServiceV2 { - private final UserRepository userRepository; - private final ReviewRepository reviewRepository; - private final MenuRepository menuRepository; - private final MealRepository mealRepository; - private final MealMenuRepository mealMenuRepository; - private final ReviewLikeRepository reviewLikeRepository; - - /** - * 리뷰 생성 - */ - @Transactional - public void createReview(CustomUserDetails userDetails, CreateMealReviewRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Meal meal = mealRepository.findById(request.getMealId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); - - Review review = request.toReviewEntity(user, meal); - - request.getImageUrls().forEach(review::addReviewImage); - - for (MenuLikeRequest menuLike : request.getMenuLikes()) { - Menu menu = menuRepository.findById(menuLike.getMenuId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - review.addReviewMenuLike(menu, menuLike.getIsLike()); - } - - reviewRepository.save(review); - } - - /** - * 특정 식당 리뷰 조회 - */ - public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { - List meals = mealRepository.findByRestaurant(restaurant); - List reviews = reviewRepository.findByMealIn(meals); - List menus = mealMenuRepository.findMenusByMeals(meals); - - Double averageRating = Optional.ofNullable(reviews) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Review::getRating) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .average() - .orElse(0.0); - - Integer likeCount = Optional.ofNullable(menus) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Menu::getLikeCount) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .sum(); - - - Integer unlikeCount = Optional.ofNullable(menus) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Menu::getUnlikeCount) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .sum(); - - ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); - - return RestaurantReviewResponse.builder() - .totalReviewCount(reviews.size()) - .reviewRatingCount(reviewRatingCount) - .mainRating(Math.round(averageRating * 10) / 10.0) - .likeCount(likeCount) - .unlikeCount(unlikeCount) - .build(); - } - - /** - * 특정 식단 리뷰 리스트 조회 - */ - public SliceResponse findReviews(Long mealId, Long lastReviewId, Pageable pageable, - CustomUserDetails userDetails) { - if (!mealRepository.existsById(mealId)) { - throw new BaseException(NOT_FOUND_MEAL); - } - - List menuIds = mealMenuRepository.findMenuIdsByMealId(mealId); - if (menuIds.isEmpty()) { - return SliceResponse.empty(); - } - - List mealIds = mealMenuRepository.findMealIdsByMenuIds(menuIds); - if (mealIds.isEmpty()) { - return SliceResponse.empty(); - } - - Page pageReviews = reviewRepository.findReviewsByMealIds(mealIds, lastReviewId, pageable); - - Long userId = (userDetails != null) ? userDetails.getId() : null; - List mealReviewResponses = - pageReviews.getContent().stream().map(review -> MealReviewResponse.from(review, - userId)).collect(Collectors.toList()); - - return SliceResponse.builder() - .numberOfElements(pageReviews.getNumberOfElements()) - .hasNext(pageReviews.hasNext()) - .dataList(mealReviewResponses) - .build(); - } - - /** - * 특정 Menu 리뷰 조회 - */ - public MenuReviewsV2Response findMenuReviews(Long menuId) { - Menu menu = menuRepository.findById(menuId).orElseThrow(()-> new BaseException(NOT_FOUND_MENU)); - List reviews = reviewRepository.findAllByMenu(menu); - - Double averageRating = Optional.ofNullable(reviews) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Review::getRating) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .average() - .orElse(0.0); - - Integer likeCount = menu.getLikeCount(); - - - Integer unlikeCount = menu.getUnlikeCount(); - - ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); - - return MenuReviewsV2Response.builder() - .totalReviewCount((long)reviews.size()) - .reviewRatingCount(reviewRatingCount) - .mainRating(Math.round(averageRating * 10) / 10.0) - .likeCount(likeCount) - .unlikeCount(unlikeCount) - .build(); - } - - /** - * 특정 Meal 리뷰 조회 - */ - public MealReviewsV2Response findMealReviews(Long mealId) { - Meal meal = mealRepository.findById(mealId).orElseThrow(()-> new BaseException(NOT_FOUND_MEAL)); - List reviews = reviewRepository.findAllByMeal(meal); - List menus = mealMenuRepository.findMenusByMeal(meal); - - Double averageRating = Optional.ofNullable(reviews) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Review::getRating) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .average() - .orElse(0.0); - - Integer likeCount = Optional.ofNullable(menus) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Menu::getLikeCount) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .sum(); - - - Integer unlikeCount = Optional.ofNullable(menus) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Menu::getUnlikeCount) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .sum(); - - ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); - - return MealReviewsV2Response.builder() - .totalReviewCount((long)reviews.size()) - .reviewRatingCount(reviewRatingCount) - .mainRating(Math.round(averageRating * 10) / 10.0) - .likeCount(likeCount) - .unlikeCount(unlikeCount) - .build(); - } - - /** - * 리뷰 수정 - */ - @Transactional - public void updateReview(CustomUserDetails userDetails, Long reviewId, UpdateMealReviewRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - if (review.isNotWrittenBy(user)) { - throw new BaseException(REVIEW_PERMISSION_DENIED); - } - - Map menuLikes = request.getMenuLikes().stream() - .collect(Collectors.toMap( - menuLike -> menuRepository.findById(menuLike.getMenuId()) - .orElseThrow(() -> new BaseException( - NOT_FOUND_MENU)), - MenuLikeRequest::getIsLike)); - - review.update(request.getContent(), request.getRating(), menuLikes); - reviewRepository.save(review); - } - - /** - * 리뷰 삭제 - */ - @Transactional - public void deleteReview(CustomUserDetails userDetails, Long reviewId) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - if (review.isNotWrittenBy(user)) { - throw new BaseException(REVIEW_PERMISSION_DENIED); - } - - review.resetMenuLikes(); - reviewRepository.delete(review); - } - - /** - * 내 리뷰 리스트 조회 - */ - public SliceResponse findMyReviews(CustomUserDetails userDetails, Long lastReviewId, - Pageable pageable) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, - pageable); - - List myMealReviewResponses = sliceReviews.getContent().stream() - .map(MyMealReviewResponse::from).toList(); - - return SliceResponse.builder() - .numberOfElements(sliceReviews.getNumberOfElements()) - .hasNext(sliceReviews.hasNext()) - .dataList(myMealReviewResponses) - .build(); - } - - /** - * 리뷰 좋아요 누르기/취소하기 - */ - @Transactional - public void toggleReviewLike(CustomUserDetails userDetails, Long reviewId) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Review review = reviewRepository.findById(reviewId) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); - - Optional optionalReviewLike = reviewLikeRepository.findByReviewAndUser(review, user); - if (optionalReviewLike.isPresent()) { - // 이미 좋아요 한 경우 -> 좋아요 취소 처리 - ReviewLike reviewLike = optionalReviewLike.get(); - review.getReviewLikes().remove(reviewLike); - reviewLikeRepository.delete(reviewLike); - } else { - // 좋아요 하지 않은 경우 -> 좋아요 추가 처리 - ReviewLike reviewLike = ReviewLike.create(user, review); - review.getReviewLikes().add(reviewLike); - reviewLikeRepository.save(reviewLike); - } - } + private final UserRepository userRepository; + private final ReviewRepository reviewRepository; + private final MenuRepository menuRepository; + private final MealRepository mealRepository; + private final MealMenuRepository mealMenuRepository; + private final ReviewImageRepository reviewImageRepository; + + /** + * meal에 대한 리뷰 생성 + */ + @Transactional + public void createMealReview(CustomUserDetails userDetails, CreateMealReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Meal meal = mealRepository.findById(request.getMealId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + + Review review = request.toReviewEntity(user, meal); + + request.getImageUrls().forEach(review::addReviewImage); + + for (MenuLikeRequest menuLike : request.getMenuLikes()) { + Menu menu = menuRepository.findById(menuLike.getMenuId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + review.addReviewMenuLike(menu, menuLike.getIsLike()); + } + + reviewRepository.save(review); + } + + /** + * menu에 대한 리뷰 작성 + */ + @Transactional + public void createMenuReview(CustomUserDetails userDetails, CreateMenuReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Menu menu = menuRepository.findById(request.getMenuId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + + Review review = request.toReviewEntity(user, menu); + review.addReviewMenuLike(menu, request.getMenuLike().getIsLike()); + reviewRepository.save(review); + + ReviewImage reviewImage = new ReviewImage(review, request.getImageUrl()); + reviewImageRepository.save(reviewImage); + + menu.addReview(review); + } + + /** + * 특정 식당 리뷰 조회 + */ + public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { + List meals = mealRepository.findByRestaurant(restaurant); + List reviews = reviewRepository.findByMealIn(meals); + List menus = mealMenuRepository.findMenusByMeals(meals); + + Double averageRating = Optional.ofNullable(reviews) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Review::getRating) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + + Integer likeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getLikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + + Integer unlikeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getUnlikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); + + return RestaurantReviewResponse.builder() + .totalReviewCount(reviews.size()) + .reviewRatingCount(reviewRatingCount) + .mainRating(Math.round(averageRating * 10) / 10.0) + .likeCount(likeCount) + .unlikeCount(unlikeCount) + .build(); + } + + /** + * 특정 식단 리뷰 리스트 조회 + */ + public SliceResponse findMealReviewList(Long mealId, Long lastReviewId, Pageable pageable, + CustomUserDetails userDetails) { + if (!mealRepository.existsById(mealId)) { + throw new BaseException(NOT_FOUND_MEAL); + } + + List menuIds = mealMenuRepository.findMenuIdsByMealId(mealId); + if (menuIds.isEmpty()) { + return SliceResponse.empty(); + } + + List mealIds = mealMenuRepository.findMealIdsByMenuIds(menuIds); + if (mealIds.isEmpty()) { + return SliceResponse.empty(); + } + + Page pageReviews = reviewRepository.findReviewsByMealIds(mealIds, lastReviewId, pageable); + + Long userId = (userDetails != null) ? userDetails.getId() : null; + List mealReviewResponses = + pageReviews.getContent() + .stream() + .map(review -> MealReviewResponse.from(review, + userId)) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(pageReviews.getNumberOfElements()) + .hasNext(pageReviews.hasNext()) + .dataList(mealReviewResponses) + .build(); + } + + /** + * 특정 메뉴 리뷰 리스트 조회 + */ + + public SliceResponse findMenuReviewList(Long menuId, + Pageable pageable, + Long lastReviewId, + CustomUserDetails userDetails) { + Slice sliceReviews = null; + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + sliceReviews = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, + pageable); + + Long userId = (userDetails != null) ? userDetails.getId() : null; + return convertToReviewDetail(sliceReviews, userId); + } + + private SliceResponse convertToReviewDetail(Slice sliceReviews, + Long userId) { + List reviewDetails = sliceReviews.getContent().stream() + .map(review -> ReviewDetail.from(review, userId)) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(reviewDetails) + .build(); + } + + + /** + * 특정 Menu 리뷰 조회 + */ + public MenuReviewsV2Response findMenuReviews(Long menuId) { + Menu menu = menuRepository.findById(menuId).orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + List reviews = reviewRepository.findAllByMenu(menu); + + double averageRating = Optional.ofNullable(reviews) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Review::getRating) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + + Integer likeCount = menu.getLikeCount(); + + ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); + + return MenuReviewsV2Response + .builder() + .menuName(menu.getName()) + .totalReviewCount((long) reviews.size()) + .reviewRatingCount(reviewRatingCount) + .mainRating(Math.round(averageRating * 10) / 10.0) + .likeCount(likeCount != null ? likeCount : 0) + .build(); + } + + /** + * 특정 Meal 리뷰 조회 + */ + public MealReviewsV2Response findMealReviews(Long mealId) { + Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + List reviews = reviewRepository.findAllByMeal(meal); + List menus = mealMenuRepository.findMenusByMeal(meal); + + Double averageRating = Optional.ofNullable(reviews) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Review::getRating) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .average() + .orElse(0.0); + + Integer likeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getLikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + + Integer unlikeCount = Optional.ofNullable(menus) + .orElse(Collections.emptyList()) + .stream() + .filter(Objects::nonNull) + .map(Menu::getUnlikeCount) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .sum(); + + ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); + + return MealReviewsV2Response + .builder() + .menuNames(menus.stream() + .filter(Objects::nonNull) + .map(Menu::getName) + .filter(Objects::nonNull) + .collect(Collectors.toList())) + .totalReviewCount((long) reviews.size()) + .reviewRatingCount(reviewRatingCount) + .mainRating(Math.round(averageRating * 10) / 10.0) + .likeCount(likeCount) + .build(); + } + + /** + * 리뷰 수정 + */ + @Transactional + public void updateReview(CustomUserDetails userDetails, Long reviewId, UpdateMealReviewRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (review.isNotWrittenBy(user)) { + throw new BaseException(REVIEW_PERMISSION_DENIED); + } + + Map menuLikes = request.getMenuLikes().stream() + .collect(Collectors.toMap( + menuLike -> menuRepository.findById(menuLike.getMenuId()) + .orElseThrow(() -> new BaseException( + NOT_FOUND_MENU)), + MenuLikeRequest::getIsLike)); + + review.update(request.getContent(), request.getRating(), menuLikes); + reviewRepository.save(review); + } + + /** + * 리뷰 삭제 + */ + @Transactional + public void deleteReview(CustomUserDetails userDetails, Long reviewId) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Review review = reviewRepository.findById(reviewId) + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + + if (review.isNotWrittenBy(user)) { + throw new BaseException(REVIEW_PERMISSION_DENIED); + } + + review.resetMenuLikes(); + reviewRepository.delete(review); + } + + /** + * 내 리뷰 리스트 조회 + */ + public SliceResponse findMyReviews(CustomUserDetails userDetails, Long lastReviewId, + Pageable pageable) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, + pageable); + + List myMealReviewResponses = sliceReviews.getContent().stream() + .map(MyMealReviewResponse::from).toList(); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(myMealReviewResponses) + .build(); + } + + + public ValidMenuForViewResponse validMenuForReview(Long mealId) { + Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + List menuNames = meal.getMenuNames(); + List validMenuNames = new ArrayList<>(); + for (String menu : menuNames) { + if (!MenuFilterUtil.isExcludedFromReview(menu)) { + validMenuNames.add(menu); + } + } + + return ValidMenuForViewResponse.builder() + .menuList(validMenuNames).build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java b/src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java new file mode 100644 index 00000000..a587501f --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java @@ -0,0 +1,38 @@ +package ssu.eatssu.domain.review.utils; + +import java.util.Set; +import java.util.regex.Pattern; + +public class MenuFilterUtil { + private static final Set EXCLUDED_KEYWORDS = Set.of( + "작은밥", "쌀밥", "잡곡밥", "찰흑미밥", "귀리밥", "백미밥", + "깍두기", "열무김치", "포기김치", "맛김치", "배추김치", + "단무지", "오이피클", "야쿠르트", "요구르트", "우동국물" + ); + private static final Pattern SAUCE_PATTERN = Pattern.compile(".*소스.*"); + + public static boolean isExcludedFromReview(String menuName) { + if (menuName == null || menuName.isBlank()) return true; + + menuName = menuName.trim(); + + for (String keyword : EXCLUDED_KEYWORDS) { + if (menuName.contains(keyword)) { + return true; + } + } + + if (menuName.contains("밥") + && !menuName.contains("볶음밥") + && !menuName.contains("비빔밥")) { + return true; + } + + if (menuName.contains("김치") + && !menuName.contains("김치볶음밥")) { + return true; + } + + return SAUCE_PATTERN.matcher(menuName).matches(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java index ce6f562a..d9b142dc 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java @@ -4,16 +4,16 @@ public enum SlackChannel { - REPORT_CHANNEL("#신고"), - ADDMENU_CHANNEL("#메뉴_추가"), - ERROR_CHANNEL("#장애"), - USER_INQUIRY_CHANNEL("#유저-문의"), - SERVER_ERROR("C092J4J6F0U"); + REPORT_CHANNEL("#신고"), + ADDMENU_CHANNEL("#메뉴_추가"), + ERROR_CHANNEL("#장애"), + USER_INQUIRY_CHANNEL("#유저-문의"), + SERVER_ERROR("C092J4J6F0U"); - @Getter - private String krName; + @Getter + private final String krName; - SlackChannel(String krName) { - this.krName = krName; - } + SlackChannel(String krName) { + this.krName = krName; + } } diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java index 81cabe99..adb4cb1d 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java @@ -1,90 +1,90 @@ package ssu.eatssu.domain.slack.entity; -import java.text.MessageFormat; - import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; - import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.review.entity.Report; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.global.handler.response.BaseException; + +import java.text.MessageFormat; @Component public class SlackMessageFormat { - private static String serverEnv; + private static String serverEnv; - private SlackMessageFormat(@Value("${server.env:unknown}") String serverEnvValue) { - SlackMessageFormat.serverEnv = serverEnvValue; - } + private SlackMessageFormat(@Value("${server.env:unknown}") String serverEnvValue) { + SlackMessageFormat.serverEnv = serverEnvValue; + } - public static String sendReport(Report report) { - User reporter = report.getUser(); - Review review = report.getReview(); - MessageFormat messageFormat = new MessageFormat( - """ - =================== - *신고자 INFO* - - 신고자 ID: {0} - - 닉네임: {1} - *신고된 리뷰 INFO* - - 리뷰 ID: {2} - - 리뷰 작성자 ID : {3} - - 리뷰 작성자 닉네임 : {4} - - 리뷰 메뉴: {5} - - 리뷰 내용: {6} - - 리뷰 날짜: {7} - *신고 INFO* - - 신고사유: {8} - - 신고내용: {9} - - 신고 날짜: {10} - =================== - """ - ); - Object[] args = {reporter.getId(), reporter.getNickname(), review.getId(), review.getUser().getId(), - review.getUser().getNickname(), review.getMenu().getName(), review.getContent(), - review.getModifiedDate().toString(), report.getReportType().getDescription(), report.getContent(), - report.getCreatedDate()}; - return messageFormat.format(args); - } + public static String sendReport(Report report) { + User reporter = report.getUser(); + Review review = report.getReview(); + MessageFormat messageFormat = new MessageFormat( + """ + =================== + *신고자 INFO* + - 신고자 ID: {0} + - 닉네임: {1} + *신고된 리뷰 INFO* + - 리뷰 ID: {2} + - 리뷰 작성자 ID : {3} + - 리뷰 작성자 닉네임 : {4} + - 리뷰 메뉴: {5} + - 리뷰 내용: {6} + - 리뷰 날짜: {7} + *신고 INFO* + - 신고사유: {8} + - 신고내용: {9} + - 신고 날짜: {10} + =================== + """ + ); + Object[] args = {reporter.getId(), reporter.getNickname(), review.getId(), review.getUser().getId(), + review.getUser().getNickname(), review.getMenu().getName(), review.getContent(), + review.getModifiedDate().toString(), report.getReportType().getDescription(), report.getContent(), + report.getCreatedDate()}; + return messageFormat.format(args); + } - public static String sendUserInquiry(Inquiry inquiry) { - MessageFormat messageFormat = new MessageFormat( - """ - =================== - *문의 INFO* - - 문의자 ID: {0} - - 닉네임: {1} - - 이메일: {2} - *문의 내용* - - Date: {3} - - Content: {4} - =================== - """ - ); - Object[] args = {inquiry.getUser().getId(), inquiry.getUser().getNickname(), inquiry.getUser().getEmail() - , inquiry.getCreatedDate(), inquiry.getContent()}; - return messageFormat.format(args); - } + public static String sendUserInquiry(Inquiry inquiry) { + MessageFormat messageFormat = new MessageFormat( + """ + =================== + *문의 INFO* + - 문의자 ID: {0} + - 닉네임: {1} + - 이메일: {2} + *문의 내용* + - Date: {3} + - Content: {4} + =================== + """ + ); + Object[] args = {inquiry.getUser().getId(), inquiry.getUser().getNickname(), inquiry.getUser().getEmail() + , inquiry.getCreatedDate(), inquiry.getContent()}; + return messageFormat.format(args); + } - public static String sendServerError(Exception ex) { - MessageFormat messageFormat = new MessageFormat( - """ - =================== - *서버 에러 발생* - - 예외 클래스: {0} - - 예외 메시지: {1} - - 개발환경: {2} - =================== - """ - ); - Object[] args = { - ex.getClass().getName(), - ex.getMessage(), - serverEnv, - }; - return messageFormat.format(args); - } + public static String sendServerError(BaseException ex) { + MessageFormat messageFormat = new MessageFormat( + """ + =================== + *서버 에러 발생* + - 예외 상태코드: {0} + - 예외 메시지: {1} + - 개발환경: {2} + =================== + """ + ); + Object[] args = { + ex.getStatus(), + ex.getStatus().getMessage(), + serverEnv, + }; + return messageFormat.format(args); + } } diff --git a/src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java b/src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java new file mode 100644 index 00000000..e9c1d316 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java @@ -0,0 +1,33 @@ +package ssu.eatssu.domain.slack.service; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import ssu.eatssu.domain.slack.entity.SlackChannel; +import ssu.eatssu.domain.slack.entity.SlackMessageFormat; +import ssu.eatssu.global.handler.response.BaseException; + +@Service +@Slf4j +public class SlackErrorNotifier { + private final SlackService slackService; + @Value("${server.env:unknown}") + private String serverEnv; + + public SlackErrorNotifier(SlackService slackService) { + this.slackService = slackService; + } + + public void notify(BaseException ex) { + if (!"prod".equals(serverEnv)) { + return; + } + try { + String message = SlackMessageFormat.sendServerError(ex); + slackService.sendSlackMessage(message, SlackChannel.SERVER_ERROR); + } catch (Exception slackEx) { + log.warn("슬랙 전송 실패: {}", slackEx.getMessage()); + } + } +} + diff --git a/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java b/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java index 33a5a5d4..4f20ac3a 100644 --- a/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java +++ b/src/main/java/ssu/eatssu/domain/slack/service/SlackService.java @@ -1,43 +1,40 @@ package ssu.eatssu.domain.slack.service; -import java.io.IOException; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; - import com.slack.api.Slack; import com.slack.api.methods.MethodsClient; import com.slack.api.methods.SlackApiException; import com.slack.api.methods.request.chat.ChatPostMessageRequest; -import com.slack.api.methods.response.chat.ChatPostMessageResponse; - import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; import ssu.eatssu.domain.slack.entity.SlackChannel; +import java.io.IOException; + @Slf4j @Service public class SlackService { - @Value(value = "${slack.token}") - String slackToken; + @Value(value = "${slack.token}") + String slackToken; - public void sendSlackMessage(String message, SlackChannel channel) { + public void sendSlackMessage(String message, SlackChannel channel) { - String channelAddress = channel.getKrName(); + String channelAddress = channel.getKrName(); - try { - MethodsClient methods = Slack.getInstance().methods(slackToken); + try { + MethodsClient methods = Slack.getInstance().methods(slackToken); - ChatPostMessageRequest request = ChatPostMessageRequest.builder() - .channel(channelAddress) - .text(message) - .build(); + ChatPostMessageRequest request = ChatPostMessageRequest.builder() + .channel(channelAddress) + .text(message) + .build(); - methods.chatPostMessage(request); + methods.chatPostMessage(request); - log.info("Slack " + channel + " 에 메시지 보냄"); - } catch (SlackApiException | IOException e) { - log.error(e.getMessage()); - } - } + log.info("Slack " + channel + " 에 메시지 보냄"); + } catch (SlackApiException | IOException e) { + log.error(e.getMessage()); + } + } } diff --git a/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java b/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java index 6d7015ba..fd82109a 100644 --- a/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java +++ b/src/main/java/ssu/eatssu/domain/slice/dto/SliceResponse.java @@ -1,27 +1,27 @@ package ssu.eatssu.domain.slice.dto; -import java.util.Collections; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import java.util.Collections; +import java.util.List; + @AllArgsConstructor @Builder @Getter public class SliceResponse { - @Schema(description = "현재 넘겨준 페이지에 넘어간 개수(마지막 페이지일시, size 보다 작을 수 있음)", example = "20") - private int numberOfElements; + @Schema(description = "현재 넘겨준 페이지에 넘어간 개수(마지막 페이지일시, size 보다 작을 수 있음)", example = "20") + private int numberOfElements; - @Schema(description = "다음페이지가 있는지 알려주는 값(마지막 페이지라면 false)", example = "true") - private boolean hasNext; + @Schema(description = "다음페이지가 있는지 알려주는 값(마지막 페이지라면 false)", example = "true") + private boolean hasNext; - @Schema(description = "데이터 리스트") - private List dataList; + @Schema(description = "데이터 리스트") + private List dataList; - public static SliceResponse empty() { - return new SliceResponse<>(0, false, Collections.emptyList()); - } + public static SliceResponse empty() { + return new SliceResponse<>(0, false, Collections.emptyList()); + } } diff --git a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java index 7ad650aa..bc4bd390 100644 --- a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java +++ b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java @@ -1,15 +1,9 @@ package ssu.eatssu.domain.slice.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - -import java.util.List; -import java.util.stream.Collectors; - +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; @@ -25,77 +19,88 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; + @Service @RequiredArgsConstructor public class SliceService { - private final UserRepository userRepository; - private final ReviewRepository reviewRepository; - private final MenuRepository menuRepository; - private final MealRepository mealRepository; - - public SliceResponse findMyReviews( - CustomUserDetails userDetails, - Pageable pageable, - Long lastReviewId) { - - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, - pageable); - - return convertToMyReviewDetail(sliceReviews); - } - - public SliceResponse findReviews(MenuType menuType, - Long menuId, - Long mealId, - Pageable pageable, - Long lastReviewId, - CustomUserDetails userDetails) { - Slice sliceReviews = null; - if (menuType == MenuType.FIXED) { - Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - sliceReviews = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, - pageable); - } - - if (menuType == MenuType.VARIABLE) { - Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - sliceReviews = reviewRepository.findAllByMealOrderByIdDesc(meal, lastReviewId, - pageable); - } - - Long userId = (userDetails != null) ? userDetails.getId() : null; - return convertToReviewDetail(sliceReviews, userId); - } - - private SliceResponse convertToReviewDetail(Slice sliceReviews, - Long userId) { - List reviewDetails = sliceReviews.getContent().stream() - .map(review -> ReviewDetail.from(review, userId)) - .collect(Collectors.toList()); - - return SliceResponse.builder() - .numberOfElements(sliceReviews.getNumberOfElements()) - .hasNext(sliceReviews.hasNext()) - .dataList(reviewDetails) - .build(); - } - - private SliceResponse convertToMyReviewDetail(Slice sliceReviews) { - List myReviewDetails = sliceReviews.getContent().stream() - .map(MyReviewDetail::from) - .collect(Collectors.toList()); - - return SliceResponse.builder() - .numberOfElements(sliceReviews.getNumberOfElements()) - .hasNext(sliceReviews.hasNext()) - .dataList(myReviewDetails) - .build(); - } + private final UserRepository userRepository; + private final ReviewRepository reviewRepository; + private final MenuRepository menuRepository; + private final MealRepository mealRepository; + + public SliceResponse findMyReviews( + CustomUserDetails userDetails, + Pageable pageable, + Long lastReviewId) { + + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, + pageable); + + return convertToMyReviewDetail(sliceReviews); + } + + public SliceResponse findReviews(MenuType menuType, + Long menuId, + Long mealId, + Pageable pageable, + Long lastReviewId, + CustomUserDetails userDetails) { + Slice sliceReviews = null; + if (menuType == MenuType.FIXED) { + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + sliceReviews = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, + pageable); + } + + if (menuType == MenuType.VARIABLE) { + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + sliceReviews = reviewRepository.findAllByMealOrderByIdDesc(meal, lastReviewId, + pageable); + } + + Long userId = (userDetails != null) ? userDetails.getId() : null; + return convertToReviewDetail(sliceReviews, userId); + } + + private SliceResponse convertToReviewDetail(Slice sliceReviews, + Long userId) { + List reviewDetails = sliceReviews.getContent().stream() + .map(review -> ReviewDetail.from(review, userId)) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(reviewDetails) + .build(); + } + + private SliceResponse convertToMyReviewDetail(Slice sliceReviews) { + List myReviewDetails = Optional.of(sliceReviews.getContent()) + .orElse(List.of()) + .stream() + .filter(Objects::nonNull) + .map(MyReviewDetail::from) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(myReviewDetails) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/department/entity/College.java b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java index 1f6ec4e3..70ae0260 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/entity/College.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java @@ -1,8 +1,5 @@ package ssu.eatssu.domain.user.department.entity; -import java.util.ArrayList; -import java.util.List; - import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -13,23 +10,30 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; -import ssu.eatssu.domain.partnership.entity.PartnershipCollege; +import ssu.eatssu.domain.partnership.entity.Partnership; + +import java.util.ArrayList; +import java.util.List; @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class College { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "college_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "college_id") + private Long id; + + @Column(nullable = false, unique = true) + private String name; - @Column(nullable = false, unique = true) - private String name; + @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) + private final List departments = new ArrayList<>(); - @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) - private List departments = new ArrayList<>(); + @OneToMany(mappedBy = "partnershipCollege", cascade = CascadeType.ALL, orphanRemoval = true) + private final List partnerships = new ArrayList<>(); - @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) - private List partnershipColleges = new ArrayList<>(); + public College(String name) { + this.name = name; + } } diff --git a/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java index f91bd744..9c5f227c 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java @@ -1,8 +1,5 @@ package ssu.eatssu.domain.user.department.entity; -import java.util.ArrayList; -import java.util.List; - import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -16,24 +13,31 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; -import ssu.eatssu.domain.partnership.entity.PartnershipDepartment; +import ssu.eatssu.domain.partnership.entity.Partnership; + +import java.util.ArrayList; +import java.util.List; @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Department { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "department_id") - private Long id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "department_id") + private Long id; + + @Column(nullable = false) + private String name; - @Column(nullable = false) - private String name; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "college_id") + private College college; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "college_id") - private College college; + @OneToMany(mappedBy = "partnershipDepartment", cascade = CascadeType.ALL, orphanRemoval = true) + private final List partnerships = new ArrayList<>(); - @OneToMany(mappedBy = "department", cascade = CascadeType.ALL, orphanRemoval = true) - private List partnershipDepartments = new ArrayList<>(); + public Department(String name) { + this.name = name; + } } diff --git a/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java b/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java index c9d21e6c..4e7c6d89 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java @@ -1,11 +1,10 @@ package ssu.eatssu.domain.user.department.persistence; -import java.util.Optional; - import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.user.department.entity.College; +import java.util.Optional; + public interface CollegeRepository extends JpaRepository { - Optional findByName(String name); + Optional findByName(String name); } diff --git a/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java b/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java index db9a9bfb..942e4063 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java @@ -1,11 +1,10 @@ package ssu.eatssu.domain.user.department.persistence; -import java.util.Optional; - import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.user.department.entity.Department; +import java.util.Optional; + public interface DepartmentRepository extends JpaRepository { - Optional findByName(String name); + Optional findByName(String name); } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java index ef62a91b..7df39fdb 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java @@ -6,5 +6,5 @@ @Getter @AllArgsConstructor public class DepartmentResponse { - private String departmentName; + private String departmentName; } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index d5336984..ff8604c2 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -1,45 +1,63 @@ package ssu.eatssu.domain.user.dto; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.entity.ReviewMenuLike; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; @AllArgsConstructor @Builder @Schema(title = "리뷰 상세 - 내 리뷰 리스트 조회 용") @Getter public class MyMealReviewResponse { - @Schema(description = "리뷰 식별자", example = "123") - Long reviewId; - - @Schema(description = "평점", example = "4") - private Integer rating; - - @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") - private LocalDate writtenAt; - - @Schema(description = "리뷰 내용", example = "맛있습니당") - private String content; - - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imageUrls; - - public static MyMealReviewResponse from(Review review) { - List imgUrlList = new ArrayList<>(); - review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); - - return MyMealReviewResponse.builder() - .reviewId(review.getId()) - .rating(review.getRating()) - .writtenAt(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .imageUrls(imgUrlList) - .build(); - } + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; + + @Schema(description = "평점", example = "4") + private Integer rating; + + @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") + private LocalDate writtenAt; + + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; + + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; + + @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") + private List likedMenuNames; + @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") + private List menuNames; + + public static MyMealReviewResponse from(Review review) { + List imgUrlList = new ArrayList<>(); + review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); + + List likedMenuNames = review.getMenuLikes().stream() + .filter(ReviewMenuLike::getIsLike) + .map(like -> like.getMenu().getName()) + .toList(); + + List menuNames = review.getMeal() == null ? Collections.singletonList(review.getMenu() + .getName()) : review.getMeal() + .getMenuNames(); + return MyMealReviewResponse + .builder() + .reviewId(review.getId()) + .rating(review.getRating()) + .writtenAt(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imageUrls(imgUrlList) + .likedMenuNames(likedMenuNames) + .menuNames(menuNames) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java index 22d0b19e..d5d7d529 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java @@ -11,9 +11,9 @@ @Schema(title = "마이페이지 정보") @Getter public class MyPageResponse { - @Schema(description = "닉네임", example = "피치푸치") - private String nickname; + @Schema(description = "닉네임", example = "피치푸치") + private String nickname; - @Schema(description = "연결 계정 정보", example = "피치푸치") - private OAuthProvider provider; + @Schema(description = "연결 계정 정보", example = "피치푸치") + private OAuthProvider provider; } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java index 72af9b1b..e45d05e3 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java @@ -1,59 +1,80 @@ package ssu.eatssu.domain.user.dto; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.review.entity.Review; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + @AllArgsConstructor @Builder @Schema(title = "리뷰 상세 - 내 리뷰 리스트 조회 용") @Getter public class MyReviewDetail { - @Schema(description = "리뷰 식별자", example = "123") - Long reviewId; + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; + + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; + + @Schema(description = "평점-양", example = "4") + private Integer amountRating; + + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; - @Schema(description = "평점-메인", example = "4") - private Integer mainRating; + @Schema(description = "리뷰 작성 날짜(format = yyyyMMdd)", example = "20230407") + private LocalDate writeDate; - @Schema(description = "평점-양", example = "4") - private Integer amountRating; + @Schema(description = "메뉴 이름", example = "돈까스") + private String menuName; - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; - @Schema(description = "리뷰 작성 날짜(format = yyyyMMdd)", example = "20230407") - private LocalDate writeDate; + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imgUrlList; - @Schema(description = "메뉴 이름", example = "돈까스") - private String menuName; + public static MyReviewDetail from(Review review) { + List imgUrlList = new ArrayList<>(); + if (review.getReviewImages() != null) { + review.getReviewImages().forEach(image -> { + if (image != null && image.getImageUrl() != null) { + imgUrlList.add(image.getImageUrl()); + } + }); + } - @Schema(description = "리뷰 내용", example = "맛있습니당") - private String content; + Ratings ratings = review.getRatings(); + int mainRating = 0; + int amountRating = 0; + int tasteRating = 0; - @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") - private List imgUrlList; + if (ratings != null) { + mainRating = ratings.getMainRating() != null ? ratings.getMainRating() : 0; + amountRating = ratings.getAmountRating() != null ? ratings.getAmountRating() : 0; + tasteRating = ratings.getTasteRating() != null ? ratings.getTasteRating() : 0; + } - public static MyReviewDetail from(Review review) { + String menuName = review.getMenu() != null ? review.getMenu().getName() : null; + LocalDate writeDate = review.getCreatedDate() != null ? review.getCreatedDate().toLocalDate() : null; - List imgUrlList = new ArrayList<>(); - review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); + return MyReviewDetail.builder() + .reviewId(review.getId()) + .mainRating(mainRating) + .amountRating(amountRating) + .tasteRating(tasteRating) + .writeDate(writeDate) + .content(review.getContent()) + .imgUrlList(imgUrlList) + .menuName(menuName) + .build(); + } - return MyReviewDetail.builder() - .reviewId(review.getId()) - .mainRating(review.getRatings().getMainRating()) - .amountRating(review.getRatings().getAmountRating()) - .tasteRating(review.getRatings().getTasteRating()) - .writeDate(review.getCreatedDate().toLocalDate()) - .content(review.getContent()) - .imgUrlList(imgUrlList) - .menuName(review.getMenu().getName()) - .build(); - } } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java b/src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java index f55579b0..10fcaef0 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/NicknameUpdateRequest.java @@ -5,6 +5,6 @@ @Schema(title = "닉네임 수정") public record NicknameUpdateRequest( - @NotBlank(message = "닉네임을 입력해주세요.") @Schema(description = "닉네임", example = "jumukzzang") String nickname) { + @NotBlank(message = "닉네임을 입력해주세요.") @Schema(description = "닉네임", example = "jumukzzang") String nickname) { } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java b/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java index a97686a3..a10fbecf 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/Tokens.java @@ -1,22 +1,13 @@ package ssu.eatssu.domain.user.dto; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Builder; -import lombok.Getter; @Schema(title = "jwt 토큰들") -@Getter -public class Tokens { +public record Tokens( + @Schema(description = "accessToken", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjEsXCJlbWFpbFwiOlwiZW1haWxAZW1haWwuY29tXCJ9IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY3OTIyNzc0NX0.gM7F00Dh7OvybtEYODxYqFNATDDdquGCIivAeifNrEnF1ush3Fx1ChWqwD60U6Ek7rmJRU3CUUFAMLUrWDi4Aw") + String accessToken, - @Schema(description = "accessToken", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjEsXCJlbWFpbFwiOlwiZW1haWxAZW1haWwuY29tXCJ9IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY3OTIyNzc0NX0.gM7F00Dh7OvybtEYODxYqFNATDDdquGCIivAeifNrEnF1ush3Fx1ChWqwD60U6Ek7rmJRU3CUUFAMLUrWDi4Aw") - private String accessToken; - - @Schema(description = "refreshToken", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjEsXCJlbWFpbFwiOlwiZW1haWxAZW1haWwuY29tXCJ9IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY3OTgzMDc0NX0.OBtrGGKuSujBxwLTNVs-sc4eEH8uYiG8-Cwomqb_OgB9ADVbWbtSqaml9Ll34TFrKhPZuhMvzdchsWHqMQQ_kg") - private String refreshToken; - - @Builder - public Tokens(String accessToken, String refreshToken) { - this.accessToken = accessToken; - this.refreshToken = refreshToken; - } + @Schema(description = "refreshToken", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjEsXCJlbWFpbFwiOlwiZW1haWxAZW1haWwuY29tXCJ9IiwiYXV0aCI6IlJPTEVfVVNFUiIsImV4cCI6MTY3OTgzMDc0NX0.OBtrGGKuSujBxwLTNVs-sc4eEH8uYiG8-Cwomqb_OgB9ADVbWbtSqaml9Ll34TFrKhPZuhMvzdchsWHqMQQ_kg") + String refreshToken +) { } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java b/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java index 72acf3df..c93bd8b1 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java @@ -10,6 +10,6 @@ @AllArgsConstructor @NoArgsConstructor public class UpdateDepartmentRequest { - @Schema(description = "학과 이름", example = "소프트") - private String departmentName; + @Schema(description = "학과 이름", example = "소프트") + private String departmentName; } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java b/src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java index 573e920c..c975acf3 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/BaseTimeEntity.java @@ -1,27 +1,26 @@ package ssu.eatssu.domain.user.entity; -import java.time.LocalDateTime; - -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - import jakarta.persistence.Column; import jakarta.persistence.EntityListeners; import jakarta.persistence.MappedSuperclass; import lombok.Getter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import java.time.LocalDateTime; @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public abstract class BaseTimeEntity { - @Column(nullable = false) - @CreatedDate - private LocalDateTime createdDate; + @Column(nullable = false) + @CreatedDate + private LocalDateTime createdDate; - @Column(nullable = false) - @LastModifiedDate - private LocalDateTime modifiedDate; + @Column(nullable = false) + @LastModifiedDate + private LocalDateTime modifiedDate; } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/user/entity/Role.java b/src/main/java/ssu/eatssu/domain/user/entity/Role.java index ef27b76e..19780594 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/Role.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/Role.java @@ -1,25 +1,24 @@ package ssu.eatssu.domain.user.entity; -import org.springframework.security.core.GrantedAuthority; - import lombok.Getter; +import org.springframework.security.core.GrantedAuthority; @Getter public enum Role implements GrantedAuthority { - USER("ROLE_USER", "유저"), - ADMIN("ROLE_ADMIN", "관리자"); + USER("ROLE_USER", "유저"), + ADMIN("ROLE_ADMIN", "관리자"); - private final String authority; - private final String description; + private final String authority; + private final String description; - Role(String authority, String description) { - this.authority = authority; - this.description = description; - } + Role(String authority, String description) { + this.authority = authority; + this.description = description; + } - @Override - public String getAuthority() { - return authority; - } + @Override + public String getAuthority() { + return authority; + } } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index 5523bf44..58e0c6f0 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -1,10 +1,5 @@ package ssu.eatssu.domain.user.entity; -import java.util.ArrayList; -import java.util.List; - -import org.jetbrains.annotations.NotNull; - import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -20,6 +15,7 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; +import org.jetbrains.annotations.NotNull; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.partnership.entity.PartnershipLike; @@ -28,97 +24,87 @@ import ssu.eatssu.domain.review.entity.ReviewLike; import ssu.eatssu.domain.user.department.entity.Department; +import java.util.ArrayList; +import java.util.List; + @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class User extends BaseTimeEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "user_id") - private Long id; - - @Enumerated(EnumType.STRING) - private Role role; - - @Column(unique = true) - private String email; - - private String nickname; - - @Enumerated(EnumType.STRING) - private OAuthProvider provider; - - private String providerId; - - private String credentials; - - @Enumerated(EnumType.STRING) - private UserStatus status; - - @OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE - , CascadeType.REFRESH}) - private List reviews = new ArrayList<>(); - - @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) - private List reviewReports = new ArrayList<>(); - - @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) - private List userInquiries = new ArrayList<>(); - - @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) - private List reviewLikes = new ArrayList<>(); - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "department_id") - private Department department; - - @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) - private List partnershipLikes = new ArrayList<>(); - - /** - * Oauth 회원가입 용 생성자 - */ - private User(@NotNull String email, String nickname, @NotNull Role role, @NotNull OAuthProvider provider, - @NotNull String providerId, @NotNull UserStatus status, @NotNull String credentials) { - this.email = email; - this.nickname = nickname; - this.role = role; - this.provider = provider; - this.providerId = providerId; - this.status = status; - this.credentials = credentials; - } - - /** - * <--Static Factory Method--> - * Oauth 회원가입 - */ - public static User create(@NotNull String email, @NotNull String nickname, @NotNull OAuthProvider provider, - String providerId, - String credentials) { - return new User(email, nickname, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials); - } - - /** - * <--Static Factory Method--> - * admin 회원가입 - * Role 은 다른 방법으로 세팅할 예정 - */ - public static User adminJoin(@NotNull String loginId, @NotNull String credentials) { - return new User(loginId, null, Role.USER, OAuthProvider.EATSSU, loginId, UserStatus.INACTIVE, credentials); - } - - public void updateNickname(@NotNull String nickname) { - this.nickname = nickname; - } - - public void updateEmail(String email) { - this.email = email; - } - - public void updateDepartment(Department department) { - this.department = department; - } + @OneToMany(mappedBy = "user", cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE + , CascadeType.REFRESH}) + private final List reviews = new ArrayList<>(); + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) + private final List reviewReports = new ArrayList<>(); + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}) + private final List userInquiries = new ArrayList<>(); + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) + private final List reviewLikes = new ArrayList<>(); + @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) + private final List partnershipLikes = new ArrayList<>(); + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "user_id") + private Long id; + @Enumerated(EnumType.STRING) + private Role role; + @Column(unique = true) + private String email; + private String nickname; + @Enumerated(EnumType.STRING) + private OAuthProvider provider; + private String providerId; + private String credentials; + @Enumerated(EnumType.STRING) + private UserStatus status; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "department_id") + private Department department; + + /** + * Oauth 회원가입 용 생성자 + */ + private User(@NotNull String email, String nickname, @NotNull Role role, @NotNull OAuthProvider provider, + @NotNull String providerId, @NotNull UserStatus status, @NotNull String credentials) { + this.email = email; + this.nickname = nickname; + this.role = role; + this.provider = provider; + this.providerId = providerId; + this.status = status; + this.credentials = credentials; + } + + /** + * <--Static Factory Method--> + * Oauth 회원가입 + */ + public static User create(@NotNull String email, @NotNull String nickname, @NotNull OAuthProvider provider, + String providerId, + String credentials) { + return new User(email, nickname, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials); + } + + /** + * <--Static Factory Method--> + * admin 회원가입 + * Role 은 다른 방법으로 세팅할 예정 + */ + public static User adminJoin(@NotNull String loginId, @NotNull String credentials) { + return new User(loginId, null, Role.USER, OAuthProvider.EATSSU, loginId, UserStatus.INACTIVE, credentials); + } + + public void updateNickname(@NotNull String nickname) { + this.nickname = nickname; + } + + public void updateEmail(String email) { + this.email = email; + } + + public void updateDepartment(Department department) { + this.department = department; + } } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/UserStatus.java b/src/main/java/ssu/eatssu/domain/user/entity/UserStatus.java index 3827d4e1..4f374c39 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/UserStatus.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/UserStatus.java @@ -4,5 +4,5 @@ @Getter public enum UserStatus { - ACTIVE, INACTIVE + ACTIVE, INACTIVE } diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 77d58615..83f064a1 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -1,7 +1,15 @@ package ssu.eatssu.domain.user.presentation; -import java.util.List; - +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -16,25 +24,12 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.enums.ParameterIn; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.validation.Valid; -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.PartnershipResponse; import ssu.eatssu.domain.partnership.service.PartnershipService; -import ssu.eatssu.domain.review.service.ReviewServiceV2; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.domain.slice.service.SliceService; import ssu.eatssu.domain.user.dto.DepartmentResponse; -import ssu.eatssu.domain.user.dto.MyMealReviewResponse; import ssu.eatssu.domain.user.dto.MyPageResponse; import ssu.eatssu.domain.user.dto.MyReviewDetail; import ssu.eatssu.domain.user.dto.NicknameUpdateRequest; @@ -42,172 +37,147 @@ import ssu.eatssu.domain.user.service.UserService; import ssu.eatssu.global.handler.response.BaseResponse; +import java.util.List; + @RestController @RequiredArgsConstructor @RequestMapping("/users") @Tag(name = "User", description = "유저 API") public class UserController { - private final UserService userService; - private final SliceService sliceService; - private final ReviewServiceV2 mealReviewService; - private final PartnershipService partnershipService; - - @Operation(summary = "이메일 중복 체크", description = """ - 이메일 중복 체크 API 입니다.

- 중복되지 않은 이메일이면 true 를 반환합니다 - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "중복되지 않은 이메일") - }) - @PostMapping("/validate/email/{email}") //todo: 중복인 경우 error throw, 중복 아니면 ApiReposne return - public BaseResponse validateDuplicatedEmail( - @Parameter(description = "이메일") @PathVariable String email) { - return BaseResponse.success(userService.validateDuplicatedEmail(email)); - } - - @Operation(summary = "닉네임 중복 체크", description = """ - 닉네임 중복 체크 API 입니다.

- 중복되지 않은 닉네임이면 true 를 반환합니다 - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임") - }) - @GetMapping("/validate/nickname") - public BaseResponse validateDuplicatedNickname(@Parameter(description = "닉네임") - @RequestParam(value = "nickname") String nickname) { - return BaseResponse.success(userService.validateDuplicatedNickname(nickname)); - } - - @Operation(summary = "닉네임 수정", description = "닉네임 수정 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "닉네임 수정 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @PatchMapping("/nickname") - public BaseResponse updateNickname( - @Valid @RequestBody NicknameUpdateRequest updateNicknameRequest, - @AuthenticationPrincipal CustomUserDetails userDetails) { - userService.updateNickname(userDetails, updateNicknameRequest); - return BaseResponse.success(); - } - - @Operation(summary = "유저 탈퇴", description = "유저 탈퇴 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("") - public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(userService.withdraw(userDetails)); - } - - @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/reviews") - public BaseResponse> getMyReviewList( - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = sliceService.findMyReviews(customUserDetails, - pageable, - lastReviewId); - return BaseResponse.success(myReviews); - } - - @Operation(summary = "내가 쓴 리뷰 리스트 조회 V2", description = "내가 쓴 리뷰 리스트를 조회하는 API V2 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/v2/reviews") - public BaseResponse> getMyReviews( - @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, - @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = mealReviewService.findMyReviews(customUserDetails, - lastReviewId, - pageable); - return BaseResponse.success(myReviews); - } - - @Operation(summary = "마이페이지 정보 조회", description = "마이페이지 정보를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @GetMapping("/mypage") - public BaseResponse getMyPage( - @AuthenticationPrincipal CustomUserDetails customUserDetails) { - return BaseResponse.success(userService.findMyPage(customUserDetails)); - } - - @Operation(summary = "유저가 찜한 제휴 조회", description = "유저가 찜한 제휴를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저가 찜한 제휴 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/partnerships") - public BaseResponse> getUserLikedPartnerships( - @AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(partnershipService.getUserLikedPartnerships(userDetails)); - } - - @Operation(summary = "유저의 학과 등록", description = "유저의 학과를 등록하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저의 학과 등록 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 학과", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @PostMapping("/department") - public BaseResponse registerDepartment(@RequestBody UpdateDepartmentRequest request, - @AuthenticationPrincipal CustomUserDetails userDetails) { - userService.registerDepartment(request, userDetails); - return BaseResponse.success(); - } - - @Operation(summary = "유저의 단과대/학과 제휴 조회", description = "유저의 단과대/학과 제휴를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저의 단과대/학과 제휴 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/department/partnerships") - public BaseResponse> getUserDepartmentPartnerships( - @AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(partnershipService.getUserDepartmentPartnerships(userDetails)); - } - - @Operation(summary = "학과 기입 여부 체크", description = """ - 학과 기입 여부 체크 API 입니다.

- 학과를 기입했으면 true, 아니면 false 를 반환합니다 - """) - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "학과 기입함") - }) - @GetMapping("/validate/department") - public BaseResponse validateDepartmentExists(@AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(userService.validateDepartmentExists(userDetails)); - } - - @Operation(summary = "유저의 학과 조회", description = "유저의 학과를 조회하는 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저의 학과 조회 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = - @Schema(implementation = BaseResponse.class))), - }) - @GetMapping("/department") - public BaseResponse getDepartment(@AuthenticationPrincipal CustomUserDetails userDetails) { - return BaseResponse.success(userService.getDepartment(userDetails)); - } + private final UserService userService; + private final SliceService sliceService; + private final PartnershipService partnershipService; + + @Operation(summary = "이메일 중복 체크", description = """ + 이메일 중복 체크 API 입니다.

+ 중복되지 않은 이메일이면 true 를 반환합니다 + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "중복되지 않은 이메일") + }) + @PostMapping("/validate/email/{email}") //todo: 중복인 경우 error throw, 중복 아니면 ApiReposne return + public BaseResponse validateDuplicatedEmail( + @Parameter(description = "이메일") @PathVariable String email) { + return BaseResponse.success(userService.validateDuplicatedEmail(email)); + } + + @Operation(summary = "닉네임 중복 체크", description = """ + 닉네임 중복 체크 API 입니다.

+ 중복되지 않은 닉네임이면 true 를 반환합니다 + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임") + }) + @GetMapping("/validate/nickname") + public BaseResponse validateDuplicatedNickname(@Parameter(description = "닉네임") + @RequestParam(value = "nickname") String nickname) { + return BaseResponse.success(userService.validateDuplicatedNickname(nickname)); + } + + @Operation(summary = "닉네임 수정", description = "닉네임 수정 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "닉네임 수정 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PatchMapping("/nickname") + public BaseResponse updateNickname( + @Valid @RequestBody NicknameUpdateRequest updateNicknameRequest, + @AuthenticationPrincipal CustomUserDetails userDetails) { + userService.updateNickname(userDetails, updateNicknameRequest); + return BaseResponse.success(); + } + + @Operation(summary = "유저 탈퇴", description = "유저 탈퇴 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("") + public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(userService.withdraw(userDetails)); + } + + @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/reviews") + public BaseResponse> getMyReviewList( + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = sliceService.findMyReviews(customUserDetails, + pageable, + lastReviewId); + return BaseResponse.success(myReviews); + } + + + @Operation(summary = "마이페이지 정보 조회", description = "마이페이지 정보를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "마이페이지 정보 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/mypage") + public BaseResponse getMyPage( + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + return BaseResponse.success(userService.findMyPage(customUserDetails)); + } + + @Operation(summary = "유저가 찜한 제휴 조회", description = "유저가 찜한 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저가 찜한 제휴 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @GetMapping("/partnerships") + public BaseResponse> getUserLikedPartnerships( + @AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(partnershipService.getUserLikedPartnerships(userDetails)); + } + + @Operation(summary = "유저의 학과 등록", description = "유저의 학과를 등록하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저의 학과 등록 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 학과", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @PostMapping("/department") + public BaseResponse registerDepartment(@RequestBody UpdateDepartmentRequest request, + @AuthenticationPrincipal CustomUserDetails userDetails) { + userService.registerDepartment(request, userDetails); + return BaseResponse.success(); + } + + @Operation(summary = "유저의 단과대/학과 제휴 조회", description = "유저의 단과대/학과 제휴를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저의 단과대/학과 제휴 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @GetMapping("/department/partnerships") + public BaseResponse> getUserDepartmentPartnerships( + @AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(partnershipService.getUserDepartmentPartnerships(userDetails)); + } + + + @Operation(summary = "유저의 학과 조회", description = "유저의 학과를 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저의 학과 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "유저의 학과 정보가 등록되지 않음", content = @Content(schema = + @Schema(implementation = BaseResponse.class))), + }) + @GetMapping("/department") + public BaseResponse getDepartment(@AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(userService.getDepartment(userDetails)); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java index 8dbf0a9d..ea4f9cf9 100644 --- a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java @@ -1,17 +1,16 @@ package ssu.eatssu.domain.user.repository; -import java.util.Optional; - import org.springframework.data.jpa.repository.JpaRepository; - import ssu.eatssu.domain.user.entity.User; +import java.util.Optional; + public interface UserRepository extends JpaRepository { - boolean existsByEmail(String email); + boolean existsByEmail(String email); - boolean existsByNickname(String nickname); + boolean existsByNickname(String nickname); - Optional findByEmail(String email); + Optional findByEmail(String email); - Optional findByProviderId(String providerId); + Optional findByProviderId(String providerId); } diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index cd9c4dd4..8dd68dc8 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -1,16 +1,11 @@ package ssu.eatssu.domain.user.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; - -import java.util.UUID; - -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; - import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.review.entity.Review; @@ -25,6 +20,12 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import java.util.UUID; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.DUPLICATE_NICKNAME; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_DEPARTMENT; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; + @Slf4j @Service @RequiredArgsConstructor @@ -32,95 +33,86 @@ @Component public class UserService { - private final UserRepository userRepository; - private final PasswordEncoder passwordEncoder; - private final DepartmentRepository departmentRepository; - private final UserProperties userProperties; - - public User join(String email, OAuthProvider provider, String providerId) { - String credentials = createCredentials(provider, providerId); - String nickname = createNickname(); - User user = User.create(email, nickname, provider, providerId, credentials); - return userRepository.save(user); - } - - public void updateNickname(CustomUserDetails userDetails, NicknameUpdateRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - if (isForbiddenNickname(request.nickname()) || userRepository.existsByNickname(request.nickname())) { - throw new BaseException(DUPLICATE_NICKNAME); - } - - user.updateNickname(request.nickname()); - } - - public MyPageResponse findMyPage(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - return new MyPageResponse(user.getNickname(), user.getProvider()); - } - - public boolean withdraw(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - user.getReviews().forEach(Review::clearUser); - user.getUserInquiries().forEach(inquiry -> inquiry.clearUser()); - userRepository.delete(user); - - return true; - } - - public Boolean validateDuplicatedEmail(String email) { - return !userRepository.existsByEmail(email); - } - - public Boolean validateDuplicatedNickname(String nickname) { - if (isForbiddenNickname(nickname)) { - return false; - } - return !userRepository.existsByNickname(nickname); - } - - public String createNickname() { - String uuid = UUID.randomUUID().toString(); - String shortUUID = uuid.substring(0, 4); - return "user-" + shortUUID; - } - - private String createCredentials(OAuthProvider provider, String providerId) { - return passwordEncoder.encode(provider + providerId); - } - - @Transactional - public void registerDepartment(UpdateDepartmentRequest request, CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Department department = departmentRepository.findByName(request.getDepartmentName()) - .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); - - user.updateDepartment(department); - } - - public Boolean validateDepartmentExists(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - return user.getDepartment() != null; - } - - public DepartmentResponse getDepartment(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Department department = user.getDepartment(); - if (department == null) { - throw new BaseException(MISSING_USER_DEPARTMENT); - } - return new DepartmentResponse(department.getName()); - } - - private boolean isForbiddenNickname(String nickname) { - return userProperties.getForbiddenNicknames().stream() - .anyMatch(forbidden -> forbidden.equalsIgnoreCase(nickname)); - } + private final UserRepository userRepository; + private final PasswordEncoder passwordEncoder; + private final DepartmentRepository departmentRepository; + private final UserProperties userProperties; + + public User join(String email, OAuthProvider provider, String providerId) { + String credentials = createCredentials(provider, providerId); + String nickname = createNickname(); + User user = User.create(email, nickname, provider, providerId, credentials); + return userRepository.save(user); + } + + public void updateNickname(CustomUserDetails userDetails, NicknameUpdateRequest request) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + if (isForbiddenNickname(request.nickname()) || userRepository.existsByNickname(request.nickname())) { + throw new BaseException(DUPLICATE_NICKNAME); + } + + user.updateNickname(request.nickname()); + } + + public MyPageResponse findMyPage(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + return new MyPageResponse(user.getNickname(), user.getProvider()); + } + + public boolean withdraw(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + user.getReviews().forEach(Review::clearUser); + user.getUserInquiries().forEach(inquiry -> inquiry.clearUser()); + userRepository.delete(user); + + return true; + } + + public Boolean validateDuplicatedEmail(String email) { + return !userRepository.existsByEmail(email); + } + + public Boolean validateDuplicatedNickname(String nickname) { + if (isForbiddenNickname(nickname)) { + return false; + } + return !userRepository.existsByNickname(nickname); + } + + public String createNickname() { + String uuid = UUID.randomUUID().toString(); + String shortUUID = uuid.substring(0, 4); + return "user-" + shortUUID; + } + + private String createCredentials(OAuthProvider provider, String providerId) { + return passwordEncoder.encode(provider + providerId); + } + + @Transactional + public void registerDepartment(UpdateDepartmentRequest request, CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + Department department = departmentRepository.findByName(request.getDepartmentName()) + .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); + + user.updateDepartment(department); + } + + public DepartmentResponse getDepartment(CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + Department department = user.getDepartment(); + return new DepartmentResponse(department != null ? department.getName() : ""); + } + + private boolean isForbiddenNickname(String nickname) { + return userProperties.getForbiddenNicknames().stream() + .anyMatch(forbidden -> forbidden.equalsIgnoreCase(nickname)); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java b/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java deleted file mode 100644 index b02c9efa..00000000 --- a/src/main/java/ssu/eatssu/domain/user/util/UserAliasUtil.java +++ /dev/null @@ -1,37 +0,0 @@ -package ssu.eatssu.domain.user.util; - -import java.util.List; -import java.util.Objects; - -import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.user.entity.User; - -public class UserAliasUtil { - public static String getUserAlias(User user, List reviews) { - if (reviews == null || reviews.isEmpty()) { - return "미슈테리 미식가"; - } - double avg = reviews.stream() - .map(Review::getRating) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .average() - .orElse(0.0); - - int avgRating = (int)Math.round(avg); - switch (avgRating) { - case 1: - return "깐깐슈"; - case 2: - return "아이슈"; - case 3: - return "밸런슈"; - case 4: - return "딱좋슈"; - case 5: - return "다 맛있슈"; - default: - return "미슈테리 미식가"; - } - } -} diff --git a/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java b/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java index 0ad66cbf..8262a5ce 100644 --- a/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java +++ b/src/main/java/ssu/eatssu/global/config/QueryDslConfig.java @@ -1,22 +1,20 @@ package ssu.eatssu.global.config; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - import com.querydsl.jpa.impl.JPAQueryFactory; - import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; @Configuration public class QueryDslConfig { - @PersistenceContext - private EntityManager entityManager; + @PersistenceContext + private EntityManager entityManager; - @Bean - public JPAQueryFactory queryFactory() { - return new JPAQueryFactory(entityManager); - } + @Bean + public JPAQueryFactory queryFactory() { + return new JPAQueryFactory(entityManager); + } } diff --git a/src/main/java/ssu/eatssu/global/config/S3Config.java b/src/main/java/ssu/eatssu/global/config/S3Config.java index 092cc3a8..575d76dc 100644 --- a/src/main/java/ssu/eatssu/global/config/S3Config.java +++ b/src/main/java/ssu/eatssu/global/config/S3Config.java @@ -1,35 +1,34 @@ package ssu.eatssu.global.config; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; @Configuration public class S3Config { - @Value("${cloud.aws.credentials.accessKey}") - private String accessKey; + @Value("${cloud.aws.credentials.accessKey}") + private String accessKey; - @Value("${cloud.aws.credentials.secretKey}") - private String secretKey; + @Value("${cloud.aws.credentials.secretKey}") + private String secretKey; - @Value("${cloud.aws.region.static}") - private String region; + @Value("${cloud.aws.region.static}") + private String region; - @Bean - public AmazonS3Client amazonS3Client() { - AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); + @Bean + public AmazonS3Client amazonS3Client() { + AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); - return (AmazonS3Client)AmazonS3ClientBuilder - .standard() - .withCredentials(new AWSStaticCredentialsProvider(credentials)) - .withRegion(region) - .build(); - } + return (AmazonS3Client) AmazonS3ClientBuilder + .standard() + .withCredentials(new AWSStaticCredentialsProvider(credentials)) + .withRegion(region) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java b/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java index 12811e8f..531036c8 100644 --- a/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java +++ b/src/main/java/ssu/eatssu/global/config/SwaggerConfig.java @@ -1,52 +1,51 @@ package ssu.eatssu.global.config; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.security.SecurityRequirement; import io.swagger.v3.oas.models.security.SecurityScheme; import io.swagger.v3.oas.models.servers.Server; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; @Configuration public class SwaggerConfig { - private static final String API_NAME = "EAT-SSU API"; - private static final String API_VERSION = "1.0.0"; - private static final String API_DESCRIPTION = "EAT-SSU API 명세서"; - - @Value("${swagger.url}") - private String SERVER_URL; - @Value("${swagger.description}") - private String SERVER_DESCRIPTION; - - @Bean - public OpenAPI openAPI() { - Info info = new Info() - .version(API_VERSION) - .title(API_NAME) - .description(API_DESCRIPTION); - - List servers = new ArrayList<>(); - servers.add(new Server().url(SERVER_URL).description(SERVER_DESCRIPTION)); - - SecurityScheme securityScheme = new SecurityScheme() - .type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT") - .in(SecurityScheme.In.HEADER).name("Authorization"); - - SecurityRequirement securityRequirement = new SecurityRequirement().addList("bearerAuth"); - - return new OpenAPI() - .components(new Components().addSecuritySchemes("bearerAuth", securityScheme)) - .security(Collections.singletonList(securityRequirement)) - .servers(servers) - .info(info); - } + private static final String API_NAME = "EAT-SSU API"; + private static final String API_VERSION = "1.0.0"; + private static final String API_DESCRIPTION = "EAT-SSU API 명세서"; + + @Value("${swagger.url}") + private String SERVER_URL; + @Value("${swagger.description}") + private String SERVER_DESCRIPTION; + + @Bean + public OpenAPI openAPI() { + Info info = new Info() + .version(API_VERSION) + .title(API_NAME) + .description(API_DESCRIPTION); + + List servers = new ArrayList<>(); + servers.add(new Server().url(SERVER_URL).description(SERVER_DESCRIPTION)); + + SecurityScheme securityScheme = new SecurityScheme() + .type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT") + .in(SecurityScheme.In.HEADER).name("Authorization"); + + SecurityRequirement securityRequirement = new SecurityRequirement().addList("bearerAuth"); + + return new OpenAPI() + .components(new Components().addSecuritySchemes("bearerAuth", securityScheme)) + .security(Collections.singletonList(securityRequirement)) + .servers(servers) + .info(info); + } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/global/handler/ErrorTestController.java b/src/main/java/ssu/eatssu/global/handler/ErrorTestController.java index e4cfd34d..1d446190 100644 --- a/src/main/java/ssu/eatssu/global/handler/ErrorTestController.java +++ b/src/main/java/ssu/eatssu/global/handler/ErrorTestController.java @@ -5,8 +5,8 @@ @RestController public class ErrorTestController { - @GetMapping("/error-test") - public String triggerError() { - throw new RuntimeException("임의로 발생시킨 런타임 에러입니다!"); - } + @GetMapping("/error-test") + public String triggerError() { + throw new RuntimeException("임의로 발생시킨 런타임 에러입니다!"); + } } diff --git a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java index 0e7b2c71..1935a8b4 100644 --- a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java @@ -1,6 +1,9 @@ package ssu.eatssu.global.handler; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.TypeMismatchException; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatusCode; @@ -22,11 +25,7 @@ import org.springframework.web.multipart.support.MissingServletRequestPartException; import org.springframework.web.servlet.NoHandlerFoundException; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import ssu.eatssu.domain.slack.entity.SlackMessageFormat; -import ssu.eatssu.domain.slack.service.SlackService; +import ssu.eatssu.domain.slack.service.SlackErrorNotifier; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.global.handler.response.BaseResponseStatus; @@ -38,225 +37,218 @@ @RestControllerAdvice @RequiredArgsConstructor public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { - private final SlackService slackService; - - /** - * BaseException 처리 - */ - @ExceptionHandler(BaseException.class) - public ResponseEntity> handleBaseException(BaseException e) { - log.info(e.getStatus().toString()); - sendErrorToSlack(e); - return ResponseEntity.status(e.getStatus().getHttpStatus()).body(BaseResponse.fail(e.getStatus())); - } - @ExceptionHandler(Exception.class) - public ResponseEntity> handleAllUnhandledException(Exception ex) { - sendErrorToSlack(ex); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); - } - - - /** - * 경로는 있으나 지원하지 않는 http method로 요청 시 - */ - @Override - protected ResponseEntity handleHttpRequestMethodNotSupported( - @NonNull HttpRequestMethodNotSupportedException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.METHOD_NOT_ALLOWED).body(BaseResponse.fail( - BaseResponseStatus.METHOD_NOT_ALLOWED)); - } - - /** - * 지원하지 않는 content type으로 요청 시 - */ - @Override - protected ResponseEntity handleHttpMediaTypeNotSupported( - @NonNull HttpMediaTypeNotSupportedException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE) - .body(BaseResponse.fail(BaseResponseStatus.UNSUPPORTED_MEDIA_TYPE)); - } - - /** - * 인식할 수 없는 content type으로 요청 시 - */ - @Override - protected ResponseEntity handleHttpMediaTypeNotAcceptable( - @NonNull HttpMediaTypeNotAcceptableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.NOT_ACCEPTABLE) - .body(BaseResponse.fail(BaseResponseStatus.NOT_ACCEPTABLE)); - } - - /** - * PathVariable 값 누락 시 - */ - @Override - protected ResponseEntity handleMissingPathVariable( - @NonNull MissingPathVariableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISSING_PATH_VARIABLE)); - } - - /*** - * RequestParam 값 누락 시 - */ - @Override - protected ResponseEntity handleMissingServletRequestParameter( - @NonNull MissingServletRequestParameterException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PARAM)); - } - - /** - * RequestPart 값 누락 시 - */ - @Override - protected ResponseEntity handleMissingServletRequestPart( - @NonNull MissingServletRequestPartException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PART)); - } - - /** - * 요청 값 바인딩 처리에 실패한 경우 - */ - @Override - protected ResponseEntity handleServletRequestBindingException( - @NonNull ServletRequestBindingException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.REQ_BINDING_FAIL)); - } - - /** - * request @Valid 유효성 체크를 통과하지 못한 경우 - */ - @Override - protected ResponseEntity handleMethodArgumentNotValid( - @NonNull MethodArgumentNotValidException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.FAILED_VALIDATION)); - } - - /** - * Dispatcher Servlet에서 핸들러를 찾지 못한 경우 - *

기본적으로는 404-Not Found응답을 내리지만 Dispatcher Servlet의 throwExceptionIfNoHandlerFound 값이 true인 경우 - * NoHandlerFoundException 예외를 발생

- */ - @Override - protected ResponseEntity handleNoHandlerFoundException( - @NonNull NoHandlerFoundException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.NOT_FOUND) - .body(BaseResponse.fail(BaseResponseStatus.NOT_FOUND)); - } - - /** - * 비동기 요청의 응답시간이 초과될 경우 - */ - @Override - protected ResponseEntity handleAsyncRequestTimeoutException( - @NonNull AsyncRequestTimeoutException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE) - .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_TIME_OUT)); - } - - /** - * 파라미터 타입 불일치가 발생한 경우 - */ - @Override - protected ResponseEntity handleTypeMismatch( - @NonNull TypeMismatchException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.MISMATCH_PARAM_TYPE)); - } - - /** - * 적절하지 않은 RequestBody 때문에 HttpMessageConverter.read 메소드 실패한 경우 - */ - @Override - protected ResponseEntity handleHttpMessageNotReadable( - @NonNull HttpMessageNotReadableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(BaseResponse.fail(BaseResponseStatus.BAD_REQUEST)); - } - - /** - * 직렬화 실패한 경우 - */ - @Override - protected ResponseEntity handleHttpMessageNotWritable( - @NonNull HttpMessageNotWritableException ex, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode status, - @NonNull WebRequest request) { - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); - } - - @Override - protected ResponseEntity handleExceptionInternal( - @NonNull Exception ex, - Object body, - @NonNull HttpHeaders headers, - @NonNull HttpStatusCode statusCode, - @NonNull WebRequest request) { - - HttpStatus status = HttpStatus.valueOf(statusCode.value()); - - if (status.is4xxClientError() || status.is5xxServerError()) { - sendErrorToSlack(ex); - } - - BaseResponseStatus responseStatus = status.is4xxClientError() - ? BaseResponseStatus.BAD_REQUEST - : BaseResponseStatus.INTERNAL_SERVER_ERROR; - - return ResponseEntity.status(status).body(BaseResponse.fail(responseStatus)); - } - - private void sendErrorToSlack(Exception ex) { - try { - String message = SlackMessageFormat.sendServerError(ex); - slackService.sendSlackMessage(message, ssu.eatssu.domain.slack.entity.SlackChannel.SERVER_ERROR); - } catch (Exception slackEx) { - log.warn("슬랙 전송 실패: {}", slackEx.getMessage()); - } - } + private final SlackErrorNotifier slackErrorNotifier; + @Value("${server.env:unknown}") + private String serverEnv; + + /** + * BaseException 처리 + */ + @ExceptionHandler(BaseException.class) + public ResponseEntity> handleBaseException(BaseException e) { + slackErrorNotifier.notify(e); + return ResponseEntity.status(e.getStatus().getHttpStatus()).body(BaseResponse.fail(e.getStatus())); + } + + @ExceptionHandler(Exception.class) + public ResponseEntity> handleAllUnhandledException(Exception ex) { + slackErrorNotifier.notify(new BaseException(BaseResponseStatus.BAD_REQUEST)); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); + } + + + /** + * 경로는 있으나 지원하지 않는 http method로 요청 시 + */ + @Override + protected ResponseEntity handleHttpRequestMethodNotSupported( + @NonNull HttpRequestMethodNotSupportedException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.METHOD_NOT_ALLOWED).body(BaseResponse.fail( + BaseResponseStatus.METHOD_NOT_ALLOWED)); + } + + /** + * 지원하지 않는 content type으로 요청 시 + */ + @Override + protected ResponseEntity handleHttpMediaTypeNotSupported( + @NonNull HttpMediaTypeNotSupportedException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE) + .body(BaseResponse.fail(BaseResponseStatus.UNSUPPORTED_MEDIA_TYPE)); + } + + /** + * 인식할 수 없는 content type으로 요청 시 + */ + @Override + protected ResponseEntity handleHttpMediaTypeNotAcceptable( + @NonNull HttpMediaTypeNotAcceptableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.NOT_ACCEPTABLE) + .body(BaseResponse.fail(BaseResponseStatus.NOT_ACCEPTABLE)); + } + + /** + * PathVariable 값 누락 시 + */ + @Override + protected ResponseEntity handleMissingPathVariable( + @NonNull MissingPathVariableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISSING_PATH_VARIABLE)); + } + + /*** + * RequestParam 값 누락 시 + */ + @Override + protected ResponseEntity handleMissingServletRequestParameter( + @NonNull MissingServletRequestParameterException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PARAM)); + } + + /** + * RequestPart 값 누락 시 + */ + @Override + protected ResponseEntity handleMissingServletRequestPart( + @NonNull MissingServletRequestPartException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISSING_REQUEST_PART)); + } + + /** + * 요청 값 바인딩 처리에 실패한 경우 + */ + @Override + protected ResponseEntity handleServletRequestBindingException( + @NonNull ServletRequestBindingException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.REQ_BINDING_FAIL)); + } + + /** + * request @Valid 유효성 체크를 통과하지 못한 경우 + */ + @Override + protected ResponseEntity handleMethodArgumentNotValid( + @NonNull MethodArgumentNotValidException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.FAILED_VALIDATION)); + } + + /** + * Dispatcher Servlet에서 핸들러를 찾지 못한 경우 + *

기본적으로는 404-Not Found응답을 내리지만 Dispatcher Servlet의 throwExceptionIfNoHandlerFound 값이 true인 경우 + * NoHandlerFoundException 예외를 발생

+ */ + @Override + protected ResponseEntity handleNoHandlerFoundException( + @NonNull NoHandlerFoundException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.NOT_FOUND) + .body(BaseResponse.fail(BaseResponseStatus.NOT_FOUND)); + } + + /** + * 비동기 요청의 응답시간이 초과될 경우 + */ + @Override + protected ResponseEntity handleAsyncRequestTimeoutException( + @NonNull AsyncRequestTimeoutException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE) + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_TIME_OUT)); + } + + /** + * 파라미터 타입 불일치가 발생한 경우 + */ + @Override + protected ResponseEntity handleTypeMismatch( + @NonNull TypeMismatchException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.MISMATCH_PARAM_TYPE)); + } + + /** + * 적절하지 않은 RequestBody 때문에 HttpMessageConverter.read 메소드 실패한 경우 + */ + @Override + protected ResponseEntity handleHttpMessageNotReadable( + @NonNull HttpMessageNotReadableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(BaseResponse.fail(BaseResponseStatus.BAD_REQUEST)); + } + + /** + * 직렬화 실패한 경우 + */ + @Override + protected ResponseEntity handleHttpMessageNotWritable( + @NonNull HttpMessageNotWritableException ex, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode status, + @NonNull WebRequest request) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); + } + + @Override + protected ResponseEntity handleExceptionInternal( + @NonNull Exception ex, + Object body, + @NonNull HttpHeaders headers, + @NonNull HttpStatusCode statusCode, + @NonNull WebRequest request) { + + HttpStatus status = HttpStatus.valueOf(statusCode.value()); + + if (status.is4xxClientError() || status.is5xxServerError()) { + slackErrorNotifier.notify(new BaseException(BaseResponseStatus.BAD_REQUEST)); + } + + BaseResponseStatus responseStatus = status.is4xxClientError() + ? BaseResponseStatus.BAD_REQUEST + : BaseResponseStatus.INTERNAL_SERVER_ERROR; + + return ResponseEntity.status(status).body(BaseResponse.fail(responseStatus)); + } } diff --git a/src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java b/src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java index ea2846e0..2ce13a9c 100644 --- a/src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/JwtAccessDeniedHandler.java @@ -1,21 +1,19 @@ package ssu.eatssu.global.handler; -import java.io.IOException; - -import org.springframework.http.MediaType; -import org.springframework.security.access.AccessDeniedException; -import org.springframework.security.web.access.AccessDeniedHandler; -import org.springframework.stereotype.Component; - import com.fasterxml.jackson.databind.ObjectMapper; - import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; +import org.springframework.http.MediaType; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.web.access.AccessDeniedHandler; +import org.springframework.stereotype.Component; import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.io.IOException; + /** * jwt 인가 실패 시 처리 * HttpStatus 403 @@ -24,21 +22,21 @@ @RequiredArgsConstructor public class JwtAccessDeniedHandler implements AccessDeniedHandler { - private final ObjectMapper objectMapper; + private final ObjectMapper objectMapper; - @Override - public void handle(HttpServletRequest request, HttpServletResponse response, - AccessDeniedException accessDeniedException) throws IOException, ServletException { + @Override + public void handle(HttpServletRequest request, HttpServletResponse response, + AccessDeniedException accessDeniedException) throws IOException, ServletException { - BaseResponseStatus responseStatus = BaseResponseStatus.FORBIDDEN; + BaseResponseStatus responseStatus = BaseResponseStatus.FORBIDDEN; - BaseResponse body = BaseResponse.fail(responseStatus); - String bodyString = objectMapper.writeValueAsString(body); + BaseResponse body = BaseResponse.fail(responseStatus); + String bodyString = objectMapper.writeValueAsString(body); - //response setting - response.setStatus(responseStatus.getHttpStatus().value()); - response.setContentType(MediaType.APPLICATION_JSON_VALUE); - response.setCharacterEncoding("UTF-8"); - response.getWriter().write(bodyString); - } + //response setting + response.setStatus(responseStatus.getHttpStatus().value()); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write(bodyString); + } } diff --git a/src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java b/src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java index 2555f4f2..f8032dc3 100644 --- a/src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java +++ b/src/main/java/ssu/eatssu/global/handler/JwtAuthenticationEntryPoint.java @@ -1,21 +1,19 @@ package ssu.eatssu.global.handler; -import java.io.IOException; - -import org.springframework.http.MediaType; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.web.AuthenticationEntryPoint; -import org.springframework.stereotype.Component; - import com.fasterxml.jackson.databind.ObjectMapper; - import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; +import org.springframework.http.MediaType; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.stereotype.Component; import ssu.eatssu.global.handler.response.BaseResponse; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.io.IOException; + /** * jwt 인증 실패 시 처리 * HttpStatus 401 @@ -24,21 +22,21 @@ @RequiredArgsConstructor public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint { - private final ObjectMapper objectMapper; + private final ObjectMapper objectMapper; - @Override - public void commence(HttpServletRequest request, HttpServletResponse response, - AuthenticationException authException) throws IOException, ServletException { + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, + AuthenticationException authException) throws IOException, ServletException { - BaseResponseStatus responseStatus = BaseResponseStatus.UNAUTHORIZED; + BaseResponseStatus responseStatus = BaseResponseStatus.UNAUTHORIZED; - BaseResponse body = BaseResponse.fail(responseStatus); - String bodyString = objectMapper.writeValueAsString(body); + BaseResponse body = BaseResponse.fail(responseStatus); + String bodyString = objectMapper.writeValueAsString(body); - //response setting - response.setStatus(responseStatus.getHttpStatus().value()); - response.setContentType(MediaType.APPLICATION_JSON_VALUE); - response.setCharacterEncoding("UTF-8"); - response.getWriter().write(bodyString); - } + //response setting + response.setStatus(responseStatus.getHttpStatus().value()); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write(bodyString); + } } diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseException.java b/src/main/java/ssu/eatssu/global/handler/response/BaseException.java index a7aa52c1..6ab7f076 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseException.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseException.java @@ -8,5 +8,5 @@ @Setter @AllArgsConstructor public class BaseException extends RuntimeException { - private final BaseResponseStatus status; + private final BaseResponseStatus status; } diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java index 108e1e95..28411d04 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponse.java @@ -2,7 +2,6 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonPropertyOrder; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Getter; @@ -12,46 +11,46 @@ @JsonPropertyOrder({"isSuccess", "code", "message", "result"}) public class BaseResponse { - @Schema(description = "성공 여부") - private final Boolean isSuccess; - private final String message; - private final int code; - - @Schema(description = "결과 값") - @JsonInclude(JsonInclude.Include.NON_NULL) //JSON으로 응답이 나갈 때 null인 경우 포함되지 않음 - private T result; - - /** - * 정적 팩토리 메서드를 위한 private 생성자 - */ - private BaseResponse(BaseResponseStatus status) { - this.isSuccess = status.isSuccess(); - this.message = status.getMessage(); - this.code = status.getCode(); - } - - private BaseResponse(BaseResponseStatus status, T result) { - this.isSuccess = status.isSuccess(); - this.message = status.getMessage(); - this.code = status.getCode(); - this.result = result; - } - - /** - * API 성공 응답 - */ - public static BaseResponse success() { - return new BaseResponse<>(BaseResponseStatus.SUCCESS); - } - - public static BaseResponse success(T result) { - return new BaseResponse<>(BaseResponseStatus.SUCCESS, result); - } - - /** - * API 실패 응답 - */ - public static BaseResponse fail(BaseResponseStatus status) { - return new BaseResponse<>(status); - } + @Schema(description = "성공 여부") + private final Boolean isSuccess; + private final String message; + private final int code; + + @Schema(description = "결과 값") + @JsonInclude(JsonInclude.Include.NON_NULL) //JSON으로 응답이 나갈 때 null인 경우 포함되지 않음 + private T result; + + /** + * 정적 팩토리 메서드를 위한 private 생성자 + */ + private BaseResponse(BaseResponseStatus status) { + this.isSuccess = status.isSuccess(); + this.message = status.getMessage(); + this.code = status.getCode(); + } + + private BaseResponse(BaseResponseStatus status, T result) { + this.isSuccess = status.isSuccess(); + this.message = status.getMessage(); + this.code = status.getCode(); + this.result = result; + } + + /** + * API 성공 응답 + */ + public static BaseResponse success() { + return new BaseResponse<>(BaseResponseStatus.SUCCESS); + } + + public static BaseResponse success(T result) { + return new BaseResponse<>(BaseResponseStatus.SUCCESS, result); + } + + /** + * API 실패 응답 + */ + public static BaseResponse fail(BaseResponseStatus status) { + return new BaseResponse<>(status); + } } diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index cebc6da1..c17fc045 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -1,8 +1,7 @@ package ssu.eatssu.global.handler.response; -import org.springframework.http.HttpStatus; - import lombok.Getter; +import org.springframework.http.HttpStatus; /** * 에러 코드 관리 @@ -10,99 +9,100 @@ @Getter public enum BaseResponseStatus { - /** - * 1000 : 요청 성공 - */ - SUCCESS(true, HttpStatus.OK, 1000, "요청에 성공하였습니다."), - - /** - * 400 BAD_REQUEST 잘못된 요청 - */ - BAD_REQUEST(false, HttpStatus.BAD_REQUEST, 400, "잘못된 요청입니다."), - VALIDATION_ERROR(false, HttpStatus.BAD_REQUEST, 40001, "입력값을 확인해주세요."), - MISSING_PATH_VARIABLE(false, HttpStatus.BAD_REQUEST, 40002, "경로 변수가 누락되었습니다."), - MISSING_REQUEST_PARAM(false, HttpStatus.BAD_REQUEST, 40003, "쿼리 파라미터가 누락되었습니다."), - MISSING_REQUEST_PART(false, HttpStatus.BAD_REQUEST, 40004, "multipart/form-data 파일이 누락되었습니다."), - REQ_BINDING_FAIL(false, HttpStatus.BAD_REQUEST, 40005, "잘못된 request 입니다."), - MISMATCH_PARAM_TYPE(false, HttpStatus.BAD_REQUEST, 40006, "잘못된 파라미터 타입입니다."), - FAILED_VALIDATION(false, HttpStatus.BAD_REQUEST, 40007, "입력값이 누락되었거나, 부적절한 입력 값이 있습니다."), - INVALID_DATE(false, HttpStatus.BAD_REQUEST, 40008, "잘못된 날짜형식입니다."), - NOT_SUPPORT_RESTAURANT(false, HttpStatus.BAD_REQUEST, 40009, "해당 식당은 지원하지 않습니다."), - INVALID_IDENTITY_TOKEN(false, HttpStatus.BAD_REQUEST, 40010, "잘못된 identityToken 입니다."), - EXISTED_MEAL(false, HttpStatus.BAD_REQUEST, 40011, "이미 존재하는 식단입니다."), - INVALID_TARGET_TYPE(false, HttpStatus.BAD_REQUEST, 40012, "잘못된 targetType 입니다."), - MISSING_USER_DEPARTMENT(false, HttpStatus.BAD_REQUEST, 40013, "사용자의 학과 정보가 없습니다."), - - /** - * 401 UNAUTHORIZED 권한없음(인증 실패) - */ - UNAUTHORIZED(false, HttpStatus.UNAUTHORIZED, 401, "인증에 실패했습니다."), - INVALID_TOKEN(false, HttpStatus.UNAUTHORIZED, 40101, "유효하지 않은 토큰 입니다."), - - /** - * 403 FORBIDDEN 권한없음(인가 실패) - */ - FORBIDDEN(false, HttpStatus.FORBIDDEN, 403, "권한이 없습니다."), - REVIEW_PERMISSION_DENIED(false, HttpStatus.FORBIDDEN, 40301, "리뷰에 대한 권한이 없습니다."), - - /** - * 404 NOT_FOUND 잘못된 리소스 접근 - */ - NOT_FOUND(false, HttpStatus.NOT_FOUND, 404, "요청한 리소스를 찾을 수 없습니다."), - NOT_FOUND_USER(false, HttpStatus.NOT_FOUND, 40401, "해당 회원을 찾을 수 없습니다."), - NOT_FOUND_MENU(false, HttpStatus.NOT_FOUND, 40402, "해당 메뉴를 찾을 수 없습니다."), - NOT_FOUND_MEAL(false, HttpStatus.NOT_FOUND, 40403, "해당 식단을 찾을 수 없습니다."), - NOT_FOUND_RESTAURANT(false, HttpStatus.NOT_FOUND, 40404, "해당 식당을 찾을 수 없습니다."), - NOT_FOUND_REVIEW(false, HttpStatus.NOT_FOUND, 40405, "해당 리뷰을 찾을 수 없습니다."), - NOT_FOUND_REVIEW_REPORT(false, HttpStatus.NOT_FOUND, 40406, "해당 리뷰 신고 내역을 찾을 수 없습니다."), - NOT_FOUND_USER_INQUIRY(false, HttpStatus.NOT_FOUND, 40407, "해당 문의 내역을 찾을 수 없습니다."), - NOT_FOUND_COLLEGE(false, HttpStatus.NOT_FOUND, 40408, "해당 대학을 찾을 수 없습니다."), - NOT_FOUND_DEPARTMENT(false, HttpStatus.NOT_FOUND, 40409, "해당 학과를 찾을 수 없습니다."), - NOT_FOUND_PARTNERSHIP(false, HttpStatus.NOT_FOUND, 40410, "해당 제휴를 찾을 수 없습니다."), - - /** - * 405 METHOD_NOT_ALLOWED 지원하지 않은 method 호출 - */ - METHOD_NOT_ALLOWED(false, HttpStatus.METHOD_NOT_ALLOWED, 405, "해당 method는 지원하지 않습니다."), - - /** - * 406 NOT_ACCEPTABLE 인식할 수 없는 content type - */ - NOT_ACCEPTABLE(false, HttpStatus.NOT_ACCEPTABLE, 406, "인식할 수 없는 미디어 타입입니다."), - - /** - * 409 CONFLICT 중복된 리소스 - */ - CONFLICT(false, HttpStatus.CONFLICT, 409, "중복된 리소스를 입력했습니다."), - DUPLICATE_EMAIL(false, HttpStatus.CONFLICT, 40901, "중복된 이메일입니다."), - DUPLICATE_NICKNAME(false, HttpStatus.CONFLICT, 40902, "중복된 닉네임입니다."), - - /** - * 415 UNSUPPORTED_MEDIA_TYPE 지원하지 않는 content type - */ - UNSUPPORTED_MEDIA_TYPE(false, HttpStatus.UNSUPPORTED_MEDIA_TYPE, 415, "지원하지 않는 미디어 타입입니다."), - - /** - * 500 INTERNAL_SERVER_ERROR 서버 내부 에러 - */ - INTERNAL_SERVER_ERROR(false, HttpStatus.INTERNAL_SERVER_ERROR, 500, "서버 내부 에러입니다"), - FAIL_IMAGE_UPLOAD(false, HttpStatus.INTERNAL_SERVER_ERROR, 50001, "이미지 업로드에 실패했습니다."), - - /** - * 503 SERVICE_UNAVAILABLE 서버 내부 에러 - */ - SERVICE_UNAVAILABLE(false, HttpStatus.SERVICE_UNAVAILABLE, 503, "현재 서비스가 불가능한 상태입니다."), - INTERNAL_SERVER_TIME_OUT(false, HttpStatus.SERVICE_UNAVAILABLE, 503, "서버에서 시간초과가 발생했습니다."); - - private final boolean isSuccess; - private final HttpStatus httpStatus; - private final int code; - private final String message; - - BaseResponseStatus(boolean isSuccess, HttpStatus httpStatus, int code, String message) { - this.isSuccess = isSuccess; - this.httpStatus = httpStatus; - this.code = code; - this.message = message; - } + /** + * 1000 : 요청 성공 + */ + SUCCESS(true, HttpStatus.OK, 1000, "요청에 성공하였습니다."), + + /** + * 400 BAD_REQUEST 잘못된 요청 + */ + BAD_REQUEST(false, HttpStatus.BAD_REQUEST, 400, "잘못된 요청입니다."), + VALIDATION_ERROR(false, HttpStatus.BAD_REQUEST, 40001, "입력값을 확인해주세요."), + MISSING_PATH_VARIABLE(false, HttpStatus.BAD_REQUEST, 40002, "경로 변수가 누락되었습니다."), + MISSING_REQUEST_PARAM(false, HttpStatus.BAD_REQUEST, 40003, "쿼리 파라미터가 누락되었습니다."), + MISSING_REQUEST_PART(false, HttpStatus.BAD_REQUEST, 40004, "multipart/form-data 파일이 누락되었습니다."), + REQ_BINDING_FAIL(false, HttpStatus.BAD_REQUEST, 40005, "잘못된 request 입니다."), + MISMATCH_PARAM_TYPE(false, HttpStatus.BAD_REQUEST, 40006, "잘못된 파라미터 타입입니다."), + FAILED_VALIDATION(false, HttpStatus.BAD_REQUEST, 40007, "입력값이 누락되었거나, 부적절한 입력 값이 있습니다."), + INVALID_DATE(false, HttpStatus.BAD_REQUEST, 40008, "잘못된 날짜형식입니다."), + NOT_SUPPORT_RESTAURANT(false, HttpStatus.BAD_REQUEST, 40009, "해당 식당은 지원하지 않습니다."), + INVALID_IDENTITY_TOKEN(false, HttpStatus.BAD_REQUEST, 40010, "잘못된 identityToken 입니다."), + EXISTED_MEAL(false, HttpStatus.BAD_REQUEST, 40011, "이미 존재하는 식단입니다."), + INVALID_TARGET_TYPE(false, HttpStatus.BAD_REQUEST, 40012, "잘못된 targetType 입니다."), + MISSING_USER_DEPARTMENT(false, HttpStatus.BAD_REQUEST, 40013, "사용자의 학과 정보가 없습니다."), + + /** + * 401 UNAUTHORIZED 권한없음(인증 실패) + */ + UNAUTHORIZED(false, HttpStatus.UNAUTHORIZED, 401, "인증에 실패했습니다."), + INVALID_TOKEN(false, HttpStatus.UNAUTHORIZED, 401, "유효하지 않은 토큰 입니다."), + + /** + * 403 FORBIDDEN 권한없음(인가 실패) + */ + FORBIDDEN(false, HttpStatus.FORBIDDEN, 403, "권한이 없습니다."), + REVIEW_PERMISSION_DENIED(false, HttpStatus.FORBIDDEN, 40301, "리뷰에 대한 권한이 없습니다."), + + /** + * 404 NOT_FOUND 잘못된 리소스 접근 + */ + NOT_FOUND(false, HttpStatus.NOT_FOUND, 404, "요청한 리소스를 찾을 수 없습니다."), + NOT_FOUND_USER(false, HttpStatus.NOT_FOUND, 40401, "해당 회원을 찾을 수 없습니다."), + NOT_FOUND_MENU(false, HttpStatus.NOT_FOUND, 40402, "해당 메뉴를 찾을 수 없습니다."), + NOT_FOUND_MEAL(false, HttpStatus.NOT_FOUND, 40403, "해당 식단을 찾을 수 없습니다."), + NOT_FOUND_RESTAURANT(false, HttpStatus.NOT_FOUND, 40404, "해당 식당을 찾을 수 없습니다."), + NOT_FOUND_REVIEW(false, HttpStatus.NOT_FOUND, 40405, "해당 리뷰을 찾을 수 없습니다."), + NOT_FOUND_REVIEW_REPORT(false, HttpStatus.NOT_FOUND, 40406, "해당 리뷰 신고 내역을 찾을 수 없습니다."), + NOT_FOUND_USER_INQUIRY(false, HttpStatus.NOT_FOUND, 40407, "해당 문의 내역을 찾을 수 없습니다."), + NOT_FOUND_COLLEGE(false, HttpStatus.NOT_FOUND, 40408, "해당 대학을 찾을 수 없습니다."), + NOT_FOUND_DEPARTMENT(false, HttpStatus.NOT_FOUND, 40409, "해당 학과를 찾을 수 없습니다."), + NOT_FOUND_PARTNERSHIP(false, HttpStatus.NOT_FOUND, 40410, "해당 제휴를 찾을 수 없습니다."), + NOT_FOUND_PARTNERSHIP_RESTAURANT(false, HttpStatus.NOT_FOUND, 40411, "해당 제휴 식당을 찾을 수 없습니다."), + + /** + * 405 METHOD_NOT_ALLOWED 지원하지 않은 method 호출 + */ + METHOD_NOT_ALLOWED(false, HttpStatus.METHOD_NOT_ALLOWED, 405, "해당 method는 지원하지 않습니다."), + + /** + * 406 NOT_ACCEPTABLE 인식할 수 없는 content type + */ + NOT_ACCEPTABLE(false, HttpStatus.NOT_ACCEPTABLE, 406, "인식할 수 없는 미디어 타입입니다."), + + /** + * 409 CONFLICT 중복된 리소스 + */ + CONFLICT(false, HttpStatus.CONFLICT, 409, "중복된 리소스를 입력했습니다."), + DUPLICATE_EMAIL(false, HttpStatus.CONFLICT, 40901, "중복된 이메일입니다."), + DUPLICATE_NICKNAME(false, HttpStatus.CONFLICT, 40902, "중복된 닉네임입니다."), + + /** + * 415 UNSUPPORTED_MEDIA_TYPE 지원하지 않는 content type + */ + UNSUPPORTED_MEDIA_TYPE(false, HttpStatus.UNSUPPORTED_MEDIA_TYPE, 415, "지원하지 않는 미디어 타입입니다."), + + /** + * 500 INTERNAL_SERVER_ERROR 서버 내부 에러 + */ + INTERNAL_SERVER_ERROR(false, HttpStatus.INTERNAL_SERVER_ERROR, 500, "서버 내부 에러입니다"), + FAIL_IMAGE_UPLOAD(false, HttpStatus.INTERNAL_SERVER_ERROR, 50001, "이미지 업로드에 실패했습니다."), + + /** + * 503 SERVICE_UNAVAILABLE 서버 내부 에러 + */ + SERVICE_UNAVAILABLE(false, HttpStatus.SERVICE_UNAVAILABLE, 503, "현재 서비스가 불가능한 상태입니다."), + INTERNAL_SERVER_TIME_OUT(false, HttpStatus.SERVICE_UNAVAILABLE, 503, "서버에서 시간초과가 발생했습니다."); + + private final boolean isSuccess; + private final HttpStatus httpStatus; + private final int code; + private final String message; + + BaseResponseStatus(boolean isSuccess, HttpStatus httpStatus, int code, String message) { + this.isSuccess = isSuccess; + this.httpStatus = httpStatus; + this.code = code; + this.message = message; + } } diff --git a/src/main/java/ssu/eatssu/global/runner/WarmUpRunner.java b/src/main/java/ssu/eatssu/global/runner/WarmUpRunner.java index d31f7542..f749e873 100644 --- a/src/main/java/ssu/eatssu/global/runner/WarmUpRunner.java +++ b/src/main/java/ssu/eatssu/global/runner/WarmUpRunner.java @@ -1,10 +1,9 @@ package ssu.eatssu.global.runner; +import lombok.RequiredArgsConstructor; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; - -import lombok.RequiredArgsConstructor; import ssu.eatssu.domain.auth.dto.AppleLoginRequest; import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; import ssu.eatssu.domain.auth.service.OAuthService; @@ -13,20 +12,20 @@ @RequiredArgsConstructor public class WarmUpRunner implements ApplicationRunner { - private final OAuthService oAuthService; + private final OAuthService oAuthService; - @Override - public void run(ApplicationArguments args) throws Exception { - try{ - KakaoLoginRequest kakaoRequest = new KakaoLoginRequest("",""); - oAuthService.kakaoLogin(kakaoRequest); + @Override + public void run(ApplicationArguments args) throws Exception { + try { + KakaoLoginRequest kakaoRequest = new KakaoLoginRequest("", ""); + oAuthService.kakaoLogin(kakaoRequest); - AppleLoginRequest appleLoginRequest = new AppleLoginRequest(""); - oAuthService.appleLogin(appleLoginRequest); + AppleLoginRequest appleLoginRequest = new AppleLoginRequest(""); + oAuthService.appleLogin(appleLoginRequest); - }catch (Exception e){ + } catch (Exception e) { - } + } - } + } } diff --git a/src/main/java/ssu/eatssu/global/util/S3Uploader.java b/src/main/java/ssu/eatssu/global/util/S3Uploader.java index 2bbb7925..70d606bc 100644 --- a/src/main/java/ssu/eatssu/global/util/S3Uploader.java +++ b/src/main/java/ssu/eatssu/global/util/S3Uploader.java @@ -1,5 +1,14 @@ package ssu.eatssu.global.util; +import com.amazonaws.services.s3.AmazonS3Client; +import com.amazonaws.services.s3.model.CannedAccessControlList; +import com.amazonaws.services.s3.model.PutObjectRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -8,64 +17,53 @@ import java.util.Optional; import java.util.UUID; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; -import org.springframework.web.multipart.MultipartFile; - -import com.amazonaws.services.s3.AmazonS3Client; -import com.amazonaws.services.s3.model.CannedAccessControlList; -import com.amazonaws.services.s3.model.PutObjectRequest; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; - @RequiredArgsConstructor @Component @Slf4j public class S3Uploader { - private final AmazonS3Client amazonS3Client; + private final AmazonS3Client amazonS3Client; - @Value("${cloud.aws.s3.bucket}") - private String bucket; + @Value("${cloud.aws.s3.bucket}") + private String bucket; - public String upload(MultipartFile multipartFile, String dirName) throws IOException { - File uploadFile = convert(multipartFile) - .orElseThrow(() -> new IllegalArgumentException("MultipartFile -> File로 전환이 실패했습니다.")); - return upload(uploadFile, dirName); - } + public String upload(MultipartFile multipartFile, String dirName) throws IOException { + File uploadFile = convert(multipartFile) + .orElseThrow(() -> new IllegalArgumentException("MultipartFile -> File로 전환이 실패했습니다.")); + return upload(uploadFile, dirName); + } - private String upload(File uploadFile, String dirName) { - String fileName = dirName + "/" + UUID.randomUUID() + uploadFile.getName(); - String uploadImageUrl = putS3(uploadFile, fileName); - removeNewFile(uploadFile); - return uploadImageUrl; - } + private String upload(File uploadFile, String dirName) { + String fileName = dirName + "/" + UUID.randomUUID() + uploadFile.getName(); + String uploadImageUrl = putS3(uploadFile, fileName); + removeNewFile(uploadFile); + return uploadImageUrl; + } - private String putS3(File uploadFile, String fileName) { - amazonS3Client.putObject(new PutObjectRequest(bucket, fileName, uploadFile).withCannedAcl( - CannedAccessControlList.PublicRead)); - return amazonS3Client.getUrl(bucket, fileName).toString(); - } + private String putS3(File uploadFile, String fileName) { + amazonS3Client.putObject(new PutObjectRequest(bucket, fileName, uploadFile).withCannedAcl( + CannedAccessControlList.PublicRead)); + return amazonS3Client.getUrl(bucket, fileName).toString(); + } - private void removeNewFile(File targetFile) { - if (targetFile.delete()) { - log.info("파일이 삭제되었습니다."); - } else { - log.info("파일이 삭제되지 못했습니다."); - } - } + private void removeNewFile(File targetFile) { + if (targetFile.delete()) { + log.info("파일이 삭제되었습니다."); + } else { + log.info("파일이 삭제되지 못했습니다."); + } + } - private Optional convert(MultipartFile file) throws IOException { - String formatedNow = LocalDateTime.now() - .format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); - File convertFile = new File(formatedNow + file.getOriginalFilename()); - if (convertFile.createNewFile()) { - try (FileOutputStream fos = new FileOutputStream(convertFile)) { - fos.write(file.getBytes()); - } - return Optional.of(convertFile); - } - return Optional.empty(); - } + private Optional convert(MultipartFile file) throws IOException { + String formatedNow = LocalDateTime.now() + .format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + File convertFile = new File(formatedNow + file.getOriginalFilename()); + if (convertFile.createNewFile()) { + try (FileOutputStream fos = new FileOutputStream(convertFile)) { + fos.write(file.getBytes()); + } + return Optional.of(convertFile); + } + return Optional.empty(); + } } \ No newline at end of file diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 73e0008b..a5043661 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -25,12 +25,12 @@ spring: hibernate: ddl-auto: none properties: - hibernate: - jdbc: - lob: - non_contextual_creation: true - format_sql: false - show_sql: true + hibernate: + jdbc: + lob: + non_contextual_creation: true + format_sql: false + show_sql: true servlet: multipart: @@ -41,8 +41,8 @@ spring: jwt: secret: key: ${EATSSU_JWT_SECRET_DEV} - token-validity-in-seconds: 86400 - refresh-token-validity-in-seconds: 604800 + token-validity-in-seconds: 60 + refresh-token-validity-in-seconds: 180 #S3 cloud: @@ -51,11 +51,11 @@ cloud: accessKey: ${EATSSU_AWS_ACCESS_KEY_DEV} secretKey: ${EATSSU_AWS_SECRET_KEY_DEV} s3: - bucket: eatssu-bucket + bucket: eatssu-bucket region: - static: ap-northeast-2 + static: ap-northeast-2 stack: - auto: false + auto: false #Slack slack: diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 1a4ffcd6..a85011b2 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -1,74 +1,62 @@ -## port number server: port: 9000 env: local spring: - ## Database datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: ${EATSSU_DB_URL_DEV} username: ${EATSSU_DB_USERNAME} password: ${EATSSU_DB_PASSWORD} - ## JPA jpa: hibernate: - ddl-auto: none + ddl-auto: update properties: - hibernate: - jdbc: - lob: - non_contextual_creation: true - format_sql: true - show_sql: false + hibernate: + jdbc: + lob: + non_contextual_creation: true + format_sql: true + show_sql: false servlet: multipart: max-file-size: 20MB max-request-size: 20MB -## Auth jwt: secret: key: ${EATSSU_JWT_SECRET_LOCAL} - token-validity-in-seconds: 86400 - refresh-token-validity-in-seconds: 259200 + token-validity-in-seconds: 10 + refresh-token-validity-in-seconds: 30 -#S3 cloud: aws: credentials: accessKey: ${EATSSU_AWS_ACCESS_KEY_DEV} secretKey: ${EATSSU_AWS_SECRET_KEY_DEV} s3: - bucket: eatssu-bucket + bucket: eatssu-bucket region: - static: ap-northeast-2 + static: ap-northeast-2 stack: - auto: false + auto: false -#Slack slack: token: ${EATSSU_SLACK_TOKEN} -#Swagger swagger: url: http://localhost:9000 description: Test Server Swagger API springdoc: swagger-ui: - # Swagger UI path: /swagger-ui.html - # Group groups-order: DESC - # API operationsSorter: method - # Swagger UI disable-swagger-default-url: true - # API display-request-duration: true api-docs: path: /v3/api-docs diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 29d82927..3786480b 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -25,12 +25,12 @@ spring: hibernate: ddl-auto: none properties: - hibernate: - jdbc: - lob: - non_contextual_creation: true - format_sql: true - show_sql: false + hibernate: + jdbc: + lob: + non_contextual_creation: true + format_sql: true + show_sql: false servlet: multipart: @@ -51,11 +51,11 @@ cloud: accessKey: ${EATSSU_AWS_ACCESS_KEY_PROD} secretKey: ${EATSSU_AWS_SECRET_KEY_PROD} s3: - bucket: eatssu-prod-bucket + bucket: eatssu-prod-bucket region: - static: ap-northeast-2 + static: ap-northeast-2 stack: - auto: false + auto: false #Slack slack: diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index d2133024..fb673485 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,11 +1,40 @@ spring: profiles: - # include : prod - # include : dev - include : local - # include: test + active: local + config: + import: optional:file:.env[.properties] user: forbidden-nicknames: - EAT-SSU - EATSSU + - 잇슈 + - 읻슈 + - 잍슈 + - 잇쓔 + - 잇쓲 + - 잇씨유 + - 잇슈우 + - 잇슈웅 + - eat-ssu + - eatssu + - eatsu + - e4tssu + - 3at-ssu + - ea7-ssu + - "e @t-ssu" + - e.at.ssu + - e-a-t-s-s-u + - e_a_t_s_s_u + - "e a t ssu" + - eat_ssu + - eatssu_ + - eatssu123 + - "e @tssu" + - ēat-ssu + - 3atssu + - "eat$u" + - eat5su + - "eats$u" + - eats-u + - E4T슈 diff --git a/src/test/java/ssu/eatssu/EatSsuApplicationTests.java b/src/test/java/ssu/eatssu/EatSsuApplicationTests.java index d8ba04b6..0d956ea4 100644 --- a/src/test/java/ssu/eatssu/EatSsuApplicationTests.java +++ b/src/test/java/ssu/eatssu/EatSsuApplicationTests.java @@ -2,12 +2,14 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; @SpringBootTest +@ActiveProfiles("test") class EatSsuApplicationTests { - @Test - void contextLoads() { - } + @Test + void contextLoads() { + } } diff --git a/src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java b/src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java deleted file mode 100644 index cf22a4eb..00000000 --- a/src/test/java/ssu/eatssu/domain/auth/infrastructure/TestAppleAuthenticator.java +++ /dev/null @@ -1,12 +0,0 @@ -package ssu.eatssu.domain.auth.infrastructure; - -import ssu.eatssu.domain.auth.dto.OAuthInfo; -import ssu.eatssu.domain.auth.entity.AppleAuthenticator; - -public class TestAppleAuthenticator implements AppleAuthenticator { - - @Override - public OAuthInfo getOAuthInfoByIdentityToken(String identityToken) { - return new OAuthInfo("test@test.com", "1234567890"); - } -} diff --git a/src/test/java/ssu/eatssu/domain/auth/service/OAuthServiceTest.java b/src/test/java/ssu/eatssu/domain/auth/service/OAuthServiceTest.java new file mode 100644 index 00000000..b66bccee --- /dev/null +++ b/src/test/java/ssu/eatssu/domain/auth/service/OAuthServiceTest.java @@ -0,0 +1,533 @@ +package ssu.eatssu.domain.auth.service; + +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.transaction.annotation.Transactional; +import ssu.eatssu.domain.auth.dto.AppleLoginRequest; +import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; +import ssu.eatssu.domain.auth.dto.OAuthInfo; +import ssu.eatssu.domain.auth.dto.ValidRequest; +import ssu.eatssu.domain.auth.entity.AppleAuthenticator; +import ssu.eatssu.domain.auth.entity.OAuthProvider; +import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.domain.user.dto.Tokens; +import ssu.eatssu.domain.user.entity.Role; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.user.entity.UserStatus; +import ssu.eatssu.domain.user.repository.UserRepository; +import ssu.eatssu.domain.user.service.UserService; + +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import java.security.NoSuchAlgorithmException; +import java.time.Instant; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; + +@SpringBootTest +@ActiveProfiles("test") +@Transactional +class OAuthServiceTest { + + @Autowired + private OAuthService oAuthService; + + @Autowired + private UserRepository userRepository; + + @Autowired + private UserService userService; + + @MockBean + private AppleAuthenticator appleAuthenticator; + + @BeforeEach + void setUp() { + userRepository.deleteAll(); + } + + private String createMockAppleIdentityToken(String email, String providerId) { + try { + SecretKey key = KeyGenerator.getInstance("HmacSHA256").generateKey(); + + Map claims = new HashMap<>(); + claims.put("iss", "https://appleid.apple.com"); + claims.put("aud", "com.example.testapp"); + claims.put("exp", Instant.now().plusSeconds(3600).getEpochSecond()); + claims.put("iat", Instant.now().getEpochSecond()); + claims.put("sub", providerId); + claims.put("email", email); + claims.put("email_verified", "true"); + + Map header = new HashMap<>(); + header.put("kid", "test-key-id"); + header.put("alg", "HS256"); + + return Jwts.builder() + .setHeader(header) + .setClaims(claims) + .setIssuedAt(new Date()) + .setExpiration(new Date(System.currentTimeMillis() + 3600000)) + .signWith(key, SignatureAlgorithm.HS256) + .compact(); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException("모의 Apple Identity Token 생성에 실패했습니다", e); + } + } + + @Test + @DisplayName("카카오 로그인 - 신규 사용자 가입 및 토큰 생성") + void kakaoLogin_신규사용자_토큰생성() { + // given + String email = "test@kakao.com"; + String providerId = "kakao123"; + KakaoLoginRequest request = new KakaoLoginRequest(email, providerId); + + // when + Tokens tokens = oAuthService.kakaoLogin(request); + + // then + assertThat(tokens).isNotNull(); + assertThat(tokens.accessToken()).isNotBlank(); + assertThat(tokens.refreshToken()).isNotBlank(); + + User savedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(savedUser).isNotNull(); + assertThat(savedUser.getEmail()).isEqualTo(email); + assertThat(savedUser.getProvider()).isEqualTo(OAuthProvider.KAKAO); + assertThat(savedUser.getProviderId()).isEqualTo(providerId); + assertThat(savedUser.getRole()).isEqualTo(Role.USER); + assertThat(savedUser.getStatus()).isEqualTo(UserStatus.ACTIVE); + } + + @Test + @DisplayName("카카오 로그인 - 기존 사용자 로그인") + void kakaoLogin_기존사용자_로그인() { + // given + String email = "existing@kakao.com"; + String providerId = "existing123"; + User existingUser = userService.join(email, OAuthProvider.KAKAO, providerId); + existingUser.updateNickname("테스트닉네임"); + userRepository.save(existingUser); + + KakaoLoginRequest request = new KakaoLoginRequest(email, providerId); + + // when + Tokens tokens = oAuthService.kakaoLogin(request); + + // then + assertThat(tokens).isNotNull(); + assertThat(tokens.accessToken()).isNotBlank(); + assertThat(tokens.refreshToken()).isNotBlank(); + + long userCount = userRepository.count(); + assertThat(userCount).isEqualTo(1); + } + + @Test + @DisplayName("애플 로그인 - 신규 사용자 가입 및 토큰 생성") + void appleLogin_신규사용자_토큰생성() { + // given + String email = "test@apple.com"; + String providerId = "apple123"; + String identityToken = "mock.identity.token"; + AppleLoginRequest request = new AppleLoginRequest(identityToken); + + OAuthInfo mockOAuthInfo = new OAuthInfo(email, providerId); + given(appleAuthenticator.getOAuthInfoByIdentityToken(identityToken)).willReturn(mockOAuthInfo); + + // when + Tokens tokens = oAuthService.appleLogin(request); + + // then + assertThat(tokens).isNotNull(); + assertThat(tokens.accessToken()).isNotBlank(); + assertThat(tokens.refreshToken()).isNotBlank(); + + User savedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(savedUser).isNotNull(); + assertThat(savedUser.getEmail()).isEqualTo(email); + assertThat(savedUser.getProvider()).isEqualTo(OAuthProvider.APPLE); + assertThat(savedUser.getProviderId()).isEqualTo(providerId); + } + + @Test + @DisplayName("애플 로그인 - 기존 사용자 로그인") + void appleLogin_기존사용자_로그인() { + // given + String email = "existing@apple.com"; + String providerId = "existing_apple123"; + String identityToken = "mock.identity.token"; + + User existingUser = userService.join(email, OAuthProvider.APPLE, providerId); + existingUser.updateNickname("기존애플사용자"); + userRepository.save(existingUser); + + AppleLoginRequest request = new AppleLoginRequest(identityToken); + OAuthInfo mockOAuthInfo = new OAuthInfo(email, providerId); + given(appleAuthenticator.getOAuthInfoByIdentityToken(identityToken)).willReturn(mockOAuthInfo); + + // when + Tokens tokens = oAuthService.appleLogin(request); + + // then + assertThat(tokens).isNotNull(); + assertThat(tokens.accessToken()).isNotBlank(); + assertThat(tokens.refreshToken()).isNotBlank(); + + long userCount = userRepository.count(); + assertThat(userCount).isEqualTo(1); + } + + @Test + @DisplayName("애플 로그인 - 프라이빗 릴레이 이메일에서 실제 이메일로 업데이트") + void appleLogin_프라이빗릴레이이메일_실제이메일업데이트() { + // given + String privateEmail = "abc123@privaterelay.appleid.com"; + String realEmail = "user@icloud.com"; + String providerId = "apple_private123"; + String identityToken = "mock.identity.token"; + + User existingUser = userService.join(privateEmail, OAuthProvider.APPLE, providerId); + existingUser.updateNickname("프라이빗사용자"); + userRepository.save(existingUser); + + AppleLoginRequest request = new AppleLoginRequest(identityToken); + OAuthInfo mockOAuthInfo = new OAuthInfo(realEmail, providerId); + given(appleAuthenticator.getOAuthInfoByIdentityToken(identityToken)).willReturn(mockOAuthInfo); + + // when + Tokens tokens = oAuthService.appleLogin(request); + + // then + assertThat(tokens).isNotNull(); + + User updatedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(updatedUser).isNotNull(); + assertThat(updatedUser.getEmail()).isEqualTo(realEmail); + } + + @Test + @DisplayName("애플 로그인 - 실제 이메일에서 프라이빗 릴레이 이메일로 변경 시 업데이트 안됨") + void appleLogin_실제이메일_프라이빗릴레이이메일_업데이트안됨() { + // given + String realEmail = "user@icloud.com"; + String privateEmail = "xyz789@privaterelay.appleid.com"; + String providerId = "apple_real123"; + String identityToken = "mock.identity.token"; + + User existingUser = userService.join(realEmail, OAuthProvider.APPLE, providerId); + existingUser.updateNickname("실제사용자"); + userRepository.save(existingUser); + + AppleLoginRequest request = new AppleLoginRequest(identityToken); + OAuthInfo mockOAuthInfo = new OAuthInfo(privateEmail, providerId); + given(appleAuthenticator.getOAuthInfoByIdentityToken(identityToken)).willReturn(mockOAuthInfo); + + // when + Tokens tokens = oAuthService.appleLogin(request); + + // then + assertThat(tokens).isNotNull(); + + User updatedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(updatedUser).isNotNull(); + assertThat(updatedUser.getEmail()).isEqualTo(realEmail); + } + + @Test + @DisplayName("토큰 새로고침 - 유효한 Authentication으로 새 토큰 생성") + void refreshTokens_유효한인증_새토큰생성() { + // given + String email = "refresh@test.com"; + String providerId = "refresh123"; + KakaoLoginRequest request = new KakaoLoginRequest(email, providerId); + Tokens originalTokens = oAuthService.kakaoLogin(request); + + User user = userRepository.findByProviderId(providerId).orElseThrow(); + CustomUserDetails userDetails = new CustomUserDetails(user); + Authentication authentication = new UsernamePasswordAuthenticationToken( + userDetails, + userDetails.getCredentials(), + userDetails.getAuthorities() + ); + + // when + Tokens refreshedTokens = oAuthService.refreshTokens(authentication); + + // then + assertThat(refreshedTokens).isNotNull(); + assertThat(refreshedTokens.accessToken()).isNotBlank(); + assertThat(refreshedTokens.refreshToken()).isNotBlank(); + } + + @Test + @DisplayName("유효한 토큰 검증 - 유효한 토큰") + void validToken_유효한토큰_true반환() { + // given + String email = "valid@test.com"; + String providerId = "valid123"; + KakaoLoginRequest request = new KakaoLoginRequest(email, providerId); + Tokens tokens = oAuthService.kakaoLogin(request); + + ValidRequest validRequest = new ValidRequest(tokens.accessToken()); + + // when + Boolean result = oAuthService.validToken(validRequest); + + // then + assertThat(result).isTrue(); + } + + @Test + @DisplayName("유효하지 않은 토큰 검증 - 무효한 토큰") + void validToken_무효한토큰_false반환() { + // given + String invalidToken = "invalid.jwt.token"; + ValidRequest request = new ValidRequest(invalidToken); + + // when + Boolean result = oAuthService.validToken(request); + + // then + assertThat(result).isFalse(); + } + + @Test + @DisplayName("토큰 검증 - 빈 토큰") + void validToken_빈토큰_false반환() { + // given + String emptyToken = ""; + ValidRequest request = new ValidRequest(emptyToken); + + // when + Boolean result = oAuthService.validToken(request); + + // then + assertThat(result).isFalse(); + } + + @Test + @DisplayName("토큰 검증 - null 토큰") + void validToken_null토큰_false반환() { + // given + ValidRequest request = new ValidRequest(null); + + // when + Boolean result = oAuthService.validToken(request); + + // then + assertThat(result).isFalse(); + } + + @ParameterizedTest + @DisplayName("다양한 providerId로 카카오 로그인 테스트") + @ValueSource(strings = {"kakao123", "kakao_test_456", "1234567890"}) + void kakaoLogin_다양한providerId_성공(String providerId) { + // given + String email = "test@example.com"; + KakaoLoginRequest request = new KakaoLoginRequest(email, providerId); + + // when + Tokens tokens = oAuthService.kakaoLogin(request); + + // then + assertThat(tokens).isNotNull(); + assertThat(tokens.accessToken()).isNotBlank(); + assertThat(tokens.refreshToken()).isNotBlank(); + + User savedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(savedUser).isNotNull(); + assertThat(savedUser.getProviderId()).isEqualTo(providerId); + assertThat(savedUser.getProvider()).isEqualTo(OAuthProvider.KAKAO); + } + + @Test + @DisplayName("동일한 providerId로 중복 로그인 시도") + void kakaoLogin_중복providerId_기존사용자반환() { + // given + String email = "first@kakao.com"; + String providerId = "duplicate123"; + + KakaoLoginRequest firstRequest = new KakaoLoginRequest(email, providerId); + oAuthService.kakaoLogin(firstRequest); + + KakaoLoginRequest secondRequest = new KakaoLoginRequest("different@email.com", providerId); + + // when + Tokens secondTokens = oAuthService.kakaoLogin(secondRequest); + + // then + assertThat(secondTokens).isNotNull(); + long userCount = userRepository.count(); + assertThat(userCount).isEqualTo(1); + + User user = userRepository.findByProviderId(providerId).orElse(null); + assertThat(user).isNotNull(); + assertThat(user.getEmail()).isEqualTo(email); + } + + @ParameterizedTest + @DisplayName("프라이빗 릴레이 이메일 패턴 테스트") + @ValueSource(strings = { + "test123@privaterelay.appleid.com", + "a1b2c3d4e5f6@privaterelay.appleid.com", + "verylongusername@privaterelay.appleid.com" + }) + void appleLogin_프라이빗릴레이이메일패턴_인식확인(String privateEmail) { + // given + String providerId = "apple_private_test"; + String identityToken = "mock.identity.token"; + + AppleLoginRequest request = new AppleLoginRequest(identityToken); + OAuthInfo mockOAuthInfo = new OAuthInfo(privateEmail, providerId); + given(appleAuthenticator.getOAuthInfoByIdentityToken(identityToken)).willReturn(mockOAuthInfo); + + // when + Tokens tokens = oAuthService.appleLogin(request); + + // then + assertThat(tokens).isNotNull(); + + User savedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(savedUser).isNotNull(); + assertThat(savedUser.getEmail()).isEqualTo(privateEmail); + } + + @Test + @DisplayName("실제 Identity Token을 사용한 Apple 로그인 테스트") + void appleLogin_실제IdentityToken_성공() { + // given + String email = "realtest@icloud.com"; + String providerId = "001234.abcd1234abcd1234abcd1234abcd1234.1234"; + String realIdentityToken = createMockAppleIdentityToken(email, providerId); + + AppleLoginRequest request = new AppleLoginRequest(realIdentityToken); + OAuthInfo mockOAuthInfo = new OAuthInfo(email, providerId); + given(appleAuthenticator.getOAuthInfoByIdentityToken(realIdentityToken)).willReturn(mockOAuthInfo); + + // when + Tokens tokens = oAuthService.appleLogin(request); + + // then + assertThat(tokens).isNotNull(); + assertThat(tokens.accessToken()).isNotBlank(); + assertThat(tokens.refreshToken()).isNotBlank(); + + User savedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(savedUser).isNotNull(); + assertThat(savedUser.getEmail()).isEqualTo(email); + assertThat(savedUser.getProvider()).isEqualTo(OAuthProvider.APPLE); + assertThat(savedUser.getProviderId()).isEqualTo(providerId); + } + + @Test + @DisplayName("실제 Identity Token - 프라이빗 릴레이 이메일 테스트") + void appleLogin_실제IdentityToken_프라이빗릴레이이메일() { + // given + String privateEmail = "real123test@privaterelay.appleid.com"; + String providerId = "001234.private1234private1234private1234.5678"; + String realIdentityToken = createMockAppleIdentityToken(privateEmail, providerId); + + AppleLoginRequest request = new AppleLoginRequest(realIdentityToken); + OAuthInfo mockOAuthInfo = new OAuthInfo(privateEmail, providerId); + given(appleAuthenticator.getOAuthInfoByIdentityToken(realIdentityToken)).willReturn(mockOAuthInfo); + + // when + Tokens tokens = oAuthService.appleLogin(request); + + // then + assertThat(tokens).isNotNull(); + assertThat(tokens.accessToken()).isNotBlank(); + assertThat(tokens.refreshToken()).isNotBlank(); + + User savedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(savedUser).isNotNull(); + assertThat(savedUser.getEmail()).isEqualTo(privateEmail); + assertThat(savedUser.getProvider()).isEqualTo(OAuthProvider.APPLE); + assertThat(savedUser.getProviderId()).isEqualTo(providerId); + } + + @Test + @DisplayName("실제 Identity Token - 이메일 업데이트 시나리오") + void appleLogin_실제IdentityToken_이메일업데이트() { + // given + String privateEmail = "update123test@privaterelay.appleid.com"; + String realEmail = "updated.user@icloud.com"; + String providerId = "001234.update1234update1234update1234.9012"; + + // 기존 사용자를 프라이빗 이메일로 생성 + User existingUser = userService.join(privateEmail, OAuthProvider.APPLE, providerId); + existingUser.updateNickname("업데이트테스트사용자"); + userRepository.save(existingUser); + + // 실제 이메일이 포함된 Identity Token 생성 + String realIdentityToken = createMockAppleIdentityToken(realEmail, providerId); + + AppleLoginRequest request = new AppleLoginRequest(realIdentityToken); + OAuthInfo mockOAuthInfo = new OAuthInfo(realEmail, providerId); + given(appleAuthenticator.getOAuthInfoByIdentityToken(realIdentityToken)).willReturn(mockOAuthInfo); + + // when + Tokens tokens = oAuthService.appleLogin(request); + + // then + assertThat(tokens).isNotNull(); + + User updatedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(updatedUser).isNotNull(); + assertThat(updatedUser.getEmail()).isEqualTo(realEmail); // 프라이빗 이메일에서 실제 이메일로 업데이트 + assertThat(updatedUser.getProvider()).isEqualTo(OAuthProvider.APPLE); + assertThat(updatedUser.getProviderId()).isEqualTo(providerId); + + long userCount = userRepository.count(); + assertThat(userCount).isEqualTo(1); // 사용자는 한 명만 존재 + } + + @ParameterizedTest + @DisplayName("다양한 실제 Identity Token 패턴 테스트") + @ValueSource(strings = { + "test1@icloud.com", + "user.name@me.com", + "developer@mac.com", + "testuser123@privaterelay.appleid.com", + "a1b2c3d4e5@privaterelay.appleid.com" + }) + void appleLogin_다양한실제이메일패턴_성공(String email) { + // given + String providerId = "001234.pattern" + email.hashCode() + ".test"; + String realIdentityToken = createMockAppleIdentityToken(email, providerId); + + AppleLoginRequest request = new AppleLoginRequest(realIdentityToken); + OAuthInfo mockOAuthInfo = new OAuthInfo(email, providerId); + given(appleAuthenticator.getOAuthInfoByIdentityToken(realIdentityToken)).willReturn(mockOAuthInfo); + + // when + Tokens tokens = oAuthService.appleLogin(request); + + // then + assertThat(tokens).isNotNull(); + assertThat(tokens.accessToken()).isNotBlank(); + assertThat(tokens.refreshToken()).isNotBlank(); + + User savedUser = userRepository.findByProviderId(providerId).orElse(null); + assertThat(savedUser).isNotNull(); + assertThat(savedUser.getEmail()).isEqualTo(email); + assertThat(savedUser.getProvider()).isEqualTo(OAuthProvider.APPLE); + } +} \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java b/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java deleted file mode 100644 index 5ce77db1..00000000 --- a/src/test/java/ssu/eatssu/domain/auth/service/OauthServiceTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package ssu.eatssu.domain.auth.service; - -import static org.junit.jupiter.api.Assertions.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; - -import ssu.eatssu.domain.auth.dto.ValidRequest; -import ssu.eatssu.domain.auth.security.JwtTokenProvider; -import ssu.eatssu.domain.auth.service.OAuthService; -import ssu.eatssu.domain.review.repository.ReviewRepository; -import ssu.eatssu.domain.user.repository.UserRepository; -import ssu.eatssu.domain.user.service.UserService; - -@ExtendWith(MockitoExtension.class) -class OauthServiceTest { - - @InjectMocks - private OAuthService oauthService; - - @Mock - private JwtTokenProvider jwtTokenProvider; - - @Test - void 토큰_유효성_검사() { - // given - String token = "eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi"; - ValidRequest request = new ValidRequest(token); - Mockito.when(jwtTokenProvider.validateToken(token)).thenReturn(true); - - // when - Boolean result = oauthService.validToken(request); - - // then - assertTrue(result); - } -} diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java index 7d1f252d..f76810ab 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MealServiceTest.java @@ -1,20 +1,11 @@ package ssu.eatssu.domain.menu.service; -import static org.assertj.core.api.Assertions.*; -import static ssu.eatssu.domain.menu.entity.constants.TimePart.*; - -import java.sql.Date; -import java.util.List; -import java.util.Optional; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.annotation.Transactional; - import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.constants.TimePart; import ssu.eatssu.domain.menu.persistence.MealRepository; @@ -22,73 +13,79 @@ import ssu.eatssu.domain.menu.presentation.dto.response.MenusInMealResponse; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.sql.Date; +import java.util.List; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static ssu.eatssu.domain.menu.entity.constants.TimePart.LUNCH; + @SpringBootTest @DisplayName("MealService 테스트") -@ActiveProfiles("test") class MealServiceTest { - @Autowired - private MealService mealService; - - @Autowired - private MealRepository mealRepository; - - @BeforeEach - void setUp() { - mealRepository.deleteAll(); - } - - @Transactional - @Test - void 식단을_생성한다() { - // when - Long mealId = 식단_생성_요청(); - - // then - Optional meal = mealRepository.findById(mealId); - - assertThat(meal).isPresent(); - assertThat(mealRepository.findAll()).hasSize(1); - - Meal createdMeal = meal.get(); - assertThat(createdMeal.getMenuNames()).containsExactlyInAnyOrder("돈까스", "샐러드", "김치"); - assertThat(createdMeal.getRestaurant().name()).isEqualTo("HAKSIK"); - assertThat(createdMeal.getTimePart()).isEqualTo(LUNCH); - } - - private Long 식단_생성_요청() { - // given & when - Date date = Date.valueOf("2024-01-03"); - TimePart timePart = LUNCH; - Restaurant restaurant = Restaurant.from("HAKSIK"); - CreateMealRequest request = new CreateMealRequest(List.of("돈까스", "샐러드", "김치")); - - // then - return mealService.createMeal(date, restaurant, timePart, request); - } - - @Test - void 식단을_조회한다() { - // given - Long meadId = 식단_생성_요청(); - - // when - MenusInMealResponse response = mealService.getMenusInMealByMealId(meadId); - - // then - assertThat(response.getBriefMenus()).hasSize(3); - } - - @Test - void 식단을_삭제한다() { - // given - Long mealId = 식단_생성_요청(); - - // when - mealService.deleteByMealId(mealId); - - // then - assertThat(mealRepository.findAll()).hasSize(0); - assertThat(mealRepository.findAll()).hasSize(0); - } + @Autowired + private MealService mealService; + + @Autowired + private MealRepository mealRepository; + + @BeforeEach + void setUp() { + mealRepository.deleteAll(); + } + + @Transactional + @Test + void 식단을_생성한다() { + // when + Long mealId = 식단_생성_요청(); + + // then + Optional meal = mealRepository.findById(mealId); + + assertThat(meal).isPresent(); + assertThat(mealRepository.findAll()).hasSize(1); + + Meal createdMeal = meal.get(); + assertThat(createdMeal.getMenuNames()).containsExactlyInAnyOrder("돈까스", "샐러드", "김치"); + assertThat(createdMeal.getRestaurant().name()).isEqualTo("HAKSIK"); + assertThat(createdMeal.getTimePart()).isEqualTo(LUNCH); + } + + private Long 식단_생성_요청() { + // given & when + Date date = Date.valueOf("2024-01-03"); + TimePart timePart = LUNCH; + Restaurant restaurant = Restaurant.from("HAKSIK"); + CreateMealRequest request = new CreateMealRequest(List.of("돈까스", "샐러드", "김치")); + + // then + return mealService.createMeal(date, restaurant, timePart, request); + } + + @Test + void 식단을_조회한다() { + // given + Long meadId = 식단_생성_요청(); + + // when + MenusInMealResponse response = mealService.getMenusInMealByMealId(meadId); + + // then + assertThat(response.getBriefMenus()).hasSize(3); + } + + @Test + void 식단을_삭제한다() { + // given + Long mealId = 식단_생성_요청(); + + // when + mealService.deleteByMealId(mealId); + + // then + assertThat(mealRepository.findAll()).hasSize(0); + assertThat(mealRepository.findAll()).hasSize(0); + } } \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java index aeaafcc9..22ec1531 100644 --- a/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/menu/service/MenuServiceTest.java @@ -1,17 +1,10 @@ package ssu.eatssu.domain.menu.service; -import static org.assertj.core.api.Assertions.*; - -import java.util.ArrayList; -import java.util.List; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ActiveProfiles; - import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.menu.entity.MenuCategory; import ssu.eatssu.domain.menu.persistence.MenuCategoryRepository; @@ -19,46 +12,50 @@ import ssu.eatssu.domain.menu.presentation.dto.response.MenuRestaurantResponse; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + @SpringBootTest @DisplayName("MenuService 테스트") -@ActiveProfiles("test") class MenuServiceTest { - @Autowired - private MenuService menuService; + @Autowired + private MenuService menuService; - @Autowired - private MenuRepository menuRepository; + @Autowired + private MenuRepository menuRepository; - @Autowired - private MenuCategoryRepository menuCategoryRepository; + @Autowired + private MenuCategoryRepository menuCategoryRepository; - @BeforeEach - void setUp() { - menuRepository.deleteAll(); - } + @BeforeEach + void setUp() { + menuRepository.deleteAll(); + } - @Test - void 식당_이름으로_고정_메뉴를_조회한다() { - // given - List menus = new ArrayList<>(); - Restaurant foodCourt = Restaurant.from("FOOD_COURT"); + @Test + void 식당_이름으로_고정_메뉴를_조회한다() { + // given + List menus = new ArrayList<>(); + Restaurant foodCourt = Restaurant.from("FOOD_COURT"); - MenuCategory category1 = MenuCategory.builder().name("분식").restaurant(foodCourt).build(); - MenuCategory category2 = MenuCategory.builder().name("한식").restaurant(foodCourt).build(); + MenuCategory category1 = MenuCategory.builder().name("분식").restaurant(foodCourt).build(); + MenuCategory category2 = MenuCategory.builder().name("한식").restaurant(foodCourt).build(); - menus.add(Menu.createFixed("라면", foodCourt, 3000, category1)); - menus.add(Menu.createFixed("떡볶이", foodCourt, 5000, category2)); - menus.add(Menu.createFixed("짜게치", foodCourt, 4000, category1)); + menus.add(Menu.createFixed("라면", foodCourt, 3000, category1)); + menus.add(Menu.createFixed("떡볶이", foodCourt, 5000, category2)); + menus.add(Menu.createFixed("짜게치", foodCourt, 4000, category1)); - menuCategoryRepository.save(category1); - menuCategoryRepository.save(category2); - menuRepository.saveAll(menus); + menuCategoryRepository.save(category1); + menuCategoryRepository.save(category2); + menuRepository.saveAll(menus); - // when - MenuRestaurantResponse response = menuService.getMenusByRestaurant(foodCourt); + // when + MenuRestaurantResponse response = menuService.getMenusByRestaurant(foodCourt); - // then - assertThat(response.getCategoryMenuListCollection()).hasSize(2); - } + // then + assertThat(response.getCategoryMenuListCollection()).hasSize(2); + } } \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java b/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java index 89d3b443..12a08797 100644 --- a/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/report/service/ReportServiceTest.java @@ -1,12 +1,11 @@ package ssu.eatssu.domain.report.service; +import jakarta.transaction.Transactional; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; - -import jakarta.transaction.Transactional; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.report.dto.ReportCreateRequest; @@ -21,58 +20,58 @@ @SpringBootTest class ReportServiceTest { - @Autowired - private ReportService reportService; + @Autowired + private ReportService reportService; - @Autowired - private ReviewRepository reviewRepository; + @Autowired + private ReviewRepository reviewRepository; - @Autowired - private ReportRepository reportRepository; + @Autowired + private ReportRepository reportRepository; - @Autowired - private UserRepository userRepository; + @Autowired + private UserRepository userRepository; - @BeforeEach - void setUp() { - reportRepository.deleteAll(); - reviewRepository.deleteAll(); - userRepository.deleteAll(); - } + @BeforeEach + void setUp() { + reportRepository.deleteAll(); + reviewRepository.deleteAll(); + userRepository.deleteAll(); + } - @Test - @Transactional - void 신고를_생성한다() { - //given - User user = createUser(); // 이 부분에서 User가 데이터베이스에 저장되었는지 확인 - Review review = createReview(user); - CustomUserDetails userDetails = createCustomUserDetails(user); - ReportCreateRequest request = new ReportCreateRequest( - review.getId(), ReportType.IMPROPER_ADVERTISEMENT, "음란성, 욕설 등 부적절한 내용"); + @Test + @Transactional + void 신고를_생성한다() { + //given + User user = createUser(); // 이 부분에서 User가 데이터베이스에 저장되었는지 확인 + Review review = createReview(user); + CustomUserDetails userDetails = createCustomUserDetails(user); + ReportCreateRequest request = new ReportCreateRequest( + review.getId(), ReportType.IMPROPER_ADVERTISEMENT, "음란성, 욕설 등 부적절한 내용"); - //when - Report createdReport = reportService.reportReview(userDetails, request); + //when + Report createdReport = reportService.reportReview(userDetails, request); - //then - Assertions.assertThat(reportRepository.findAll()).hasSize(1); - Assertions.assertThat(createdReport.getContent()) - .isEqualTo("음란성, 욕설 등 부적절한 내용"); - } + //then + Assertions.assertThat(reportRepository.findAll()).hasSize(1); + Assertions.assertThat(createdReport.getContent()) + .isEqualTo("음란성, 욕설 등 부적절한 내용"); + } - private User createUser() { - return User.create("test1@test.com", "user-test", OAuthProvider.EATSSU, "1234", "1234"); - } + private User createUser() { + return User.create("test1@test.com", "user-test", OAuthProvider.EATSSU, "1234", "1234"); + } - private CustomUserDetails createCustomUserDetails(User user) { - User savedUser = userRepository.save(user); - return new CustomUserDetails(savedUser); - } + private CustomUserDetails createCustomUserDetails(User user) { + User savedUser = userRepository.save(user); + return new CustomUserDetails(savedUser); + } - private Review createReview(User user) { - return reviewRepository.save(Review.builder() - .user(user) - .content("굿") - .build()); - } + private Review createReview(User user) { + return reviewRepository.save(Review.builder() + .user(user) + .content("굿") + .build()); + } } \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java index 727981f5..b2011705 100644 --- a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java @@ -1,12 +1,9 @@ package ssu.eatssu.domain.review.service; -import static org.assertj.core.api.Assertions.*; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; - import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.menu.entity.Menu; @@ -19,92 +16,94 @@ import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; +import static org.assertj.core.api.Assertions.assertThat; + @SpringBootTest class ReviewServiceTest { - @Autowired - private ReviewService reviewService; - - @Autowired - private UserRepository userRepository; - - @Autowired - private MenuRepository menuRepository; - - @Autowired - private ReviewRepository reviewRepository; - - @BeforeEach - void setup() { - reviewRepository.deleteAll(); - userRepository.deleteAll(); - menuRepository.deleteAll(); - } - - @Test - void 리뷰를_생성한다() { - User user = createUser(); - CustomUserDetails userDetails = createCustomUserDetails(user); - Review createdReview = 리뷰_생성_요청(userDetails); - - // then - assertThat(reviewRepository.findAll()).hasSize(1); - assertThat(reviewRepository.findById(createdReview.getId()).orElseThrow().getContent()) - .isEqualTo("굿"); - } - - @Test - void 리뷰를_업데이트한다() { - // given - User user = createUser(); - CustomUserDetails userDetails = createCustomUserDetails(user); - Review createdReview = 리뷰_생성_요청(userDetails); - - // when - ReviewUpdateRequest request = new ReviewUpdateRequest(5, 5, 5, "굿굿"); - reviewService.updateReview(userDetails, createdReview.getId(), request); - - // then - assertThat(reviewRepository.findById(createdReview.getId()).orElseThrow().getContent()) - .isEqualTo("굿굿"); - } - - @Test - void 리뷰를_삭제한다() { - // given - User user = createUser(); - CustomUserDetails userDetails = createCustomUserDetails(user); - Review createdReview = 리뷰_생성_요청(userDetails); - - // when - reviewService.deleteReview(userDetails, createdReview.getId()); - - // then - assertThat(reviewRepository.findAll()).hasSize(0); - } - - private Review 리뷰_생성_요청(CustomUserDetails userDetails) { - // given - Menu menu = createMenu(); - ReviewCreateRequest request = new ReviewCreateRequest(4, 4, 4, "굿"); - - // when - Review createdReview = reviewService.createReview(userDetails, menu.getId(), - request, null); - return createdReview; - } - - private User createUser() { - return User.create("test@test.com", "user-test", OAuthProvider.EATSSU, "1234", "1234"); - } - - private CustomUserDetails createCustomUserDetails(User user) { - User savedUser = userRepository.save(user); - return new CustomUserDetails(savedUser); - } - - private Menu createMenu() { - Menu menu = Menu.createFixed("라면", Restaurant.FOOD_COURT, 3000, null); - return menuRepository.save(menu); - } + @Autowired + private ReviewService reviewService; + + @Autowired + private UserRepository userRepository; + + @Autowired + private MenuRepository menuRepository; + + @Autowired + private ReviewRepository reviewRepository; + + @BeforeEach + void setup() { + reviewRepository.deleteAll(); + userRepository.deleteAll(); + menuRepository.deleteAll(); + } + + @Test + void 리뷰를_생성한다() { + User user = createUser(); + CustomUserDetails userDetails = createCustomUserDetails(user); + Review createdReview = 리뷰_생성_요청(userDetails); + + // then + assertThat(reviewRepository.findAll()).hasSize(1); + assertThat(reviewRepository.findById(createdReview.getId()).orElseThrow().getContent()) + .isEqualTo("굿"); + } + + @Test + void 리뷰를_업데이트한다() { + // given + User user = createUser(); + CustomUserDetails userDetails = createCustomUserDetails(user); + Review createdReview = 리뷰_생성_요청(userDetails); + + // when + ReviewUpdateRequest request = new ReviewUpdateRequest(5, 5, 5, "굿굿"); + reviewService.updateReview(userDetails, createdReview.getId(), request); + + // then + assertThat(reviewRepository.findById(createdReview.getId()).orElseThrow().getContent()) + .isEqualTo("굿굿"); + } + + @Test + void 리뷰를_삭제한다() { + // given + User user = createUser(); + CustomUserDetails userDetails = createCustomUserDetails(user); + Review createdReview = 리뷰_생성_요청(userDetails); + + // when + reviewService.deleteReview(userDetails, createdReview.getId()); + + // then + assertThat(reviewRepository.findAll()).hasSize(0); + } + + private Review 리뷰_생성_요청(CustomUserDetails userDetails) { + // given + Menu menu = createMenu(); + ReviewCreateRequest request = new ReviewCreateRequest(4, 4, 4, "굿"); + + // when + Review createdReview = reviewService.createReview(userDetails, menu.getId(), + request, null); + return createdReview; + } + + private User createUser() { + return User.create("test@test.com", "user-test", OAuthProvider.EATSSU, "1234", "1234"); + } + + private CustomUserDetails createCustomUserDetails(User user) { + User savedUser = userRepository.save(user); + return new CustomUserDetails(savedUser); + } + + private Menu createMenu() { + Menu menu = Menu.createFixed("라면", Restaurant.FOOD_COURT, 3000, null); + return menuRepository.save(menu); + } } \ No newline at end of file diff --git a/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java b/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java index 9c612f23..9f49ce8d 100644 --- a/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/user/service/UserServiceTest.java @@ -1,13 +1,10 @@ package ssu.eatssu.domain.user.service; -import static org.assertj.core.api.Assertions.*; - import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; - import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.review.repository.ReviewRepository; @@ -15,76 +12,78 @@ import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; +import static org.assertj.core.api.Assertions.assertThat; + @SpringBootTest class UserServiceTest { - @Autowired - private UserService userService; - @Autowired - private UserRepository userRepository; - @Autowired - private ReviewRepository reviewRepository; - - @BeforeEach - void setUp() { - reviewRepository.deleteAll(); - userRepository.deleteAll(); - } - - @Test - void 회원가입을_한다() { - // given & when - 회원가입_요청(); - - // then - assertThat(userRepository.findAll()).hasSize(1); - } - - @Test - void 닉네임을_변경한다() { - // given - User user = 회원가입_요청(); - CustomUserDetails userDetails = UserDetails_생성(user); - - // when - userService.updateNickname(userDetails, new NicknameUpdateRequest("newNickname")); - - // then - user = userRepository.findById(userDetails.getId()).orElseThrow(); - assertThat(user.getNickname()).isEqualTo("newNickname"); - } - - @Test - void 회원탈퇴를_한다() { - // given - User user = 회원가입_요청(); - CustomUserDetails userDetails = UserDetails_생성(user); - - // when - userService.withdraw(userDetails); - - // then - assertThat(userRepository.findAll()).hasSize(0); - } - - @Test - void 중복_이메일을_확인한다() { - // given - User user = 회원가입_요청(); - - // when - boolean isDuplicated = userService.validateDuplicatedEmail(user.getEmail()); - - // then - assertThat(isDuplicated).isFalse(); - } - - private User 회원가입_요청() { - return userService.join("test@test.com", OAuthProvider.EATSSU, "1234"); - } - - @NotNull - private CustomUserDetails UserDetails_생성(User user) { - return new CustomUserDetails(user); - } + @Autowired + private UserService userService; + @Autowired + private UserRepository userRepository; + @Autowired + private ReviewRepository reviewRepository; + + @BeforeEach + void setUp() { + reviewRepository.deleteAll(); + userRepository.deleteAll(); + } + + @Test + void 회원가입을_한다() { + // given & when + 회원가입_요청(); + + // then + assertThat(userRepository.findAll()).hasSize(1); + } + + @Test + void 닉네임을_변경한다() { + // given + User user = 회원가입_요청(); + CustomUserDetails userDetails = UserDetails_생성(user); + + // when + userService.updateNickname(userDetails, new NicknameUpdateRequest("newNickname")); + + // then + user = userRepository.findById(userDetails.getId()).orElseThrow(); + assertThat(user.getNickname()).isEqualTo("newNickname"); + } + + @Test + void 회원탈퇴를_한다() { + // given + User user = 회원가입_요청(); + CustomUserDetails userDetails = UserDetails_생성(user); + + // when + userService.withdraw(userDetails); + + // then + assertThat(userRepository.findAll()).hasSize(0); + } + + @Test + void 중복_이메일을_확인한다() { + // given + User user = 회원가입_요청(); + + // when + boolean isDuplicated = userService.validateDuplicatedEmail(user.getEmail()); + + // then + assertThat(isDuplicated).isFalse(); + } + + private User 회원가입_요청() { + return userService.join("test@test.com", OAuthProvider.EATSSU, "1234"); + } + + @NotNull + private CustomUserDetails UserDetails_생성(User user) { + return new CustomUserDetails(user); + } } diff --git a/src/main/resources/application-test.yml b/src/test/resources/application-test.yml similarity index 57% rename from src/main/resources/application-test.yml rename to src/test/resources/application-test.yml index e6835a44..d2e73163 100644 --- a/src/main/resources/application-test.yml +++ b/src/test/resources/application-test.yml @@ -1,59 +1,52 @@ -## port number server: port: 9000 + env: test spring: - ## Database datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: ${EATSSU_DB_URL_TEST} - username: ${EATSSU_DB_USERNAME_TEST} - password: ${EATSSU_DB_PASSWORD_TEST} + username: ${EATSSU_DB_USERNAME} + password: ${EATSSU_DB_PASSWORD} - ## JPA jpa: hibernate: - ddl-auto: update + ddl-auto: create-drop properties: - hibernate: -# jdbc: - lob: - non_contextual_creation: true - format_sql: true - show_sql: true - dialect: org.hibernate.dialect.MySQLDialect + hibernate: + jdbc: + lob: + non_contextual_creation: true + format_sql: false + show_sql: false servlet: multipart: max-file-size: 20MB max-request-size: 20MB -## Auth jwt: secret: key: ${EATSSU_JWT_SECRET_TEST} token-validity-in-seconds: 86400 refresh-token-validity-in-seconds: 259200 -#S3 cloud: aws: credentials: - accessKey: ${EATSSU_AWS_ACCESS_KEY_PROD} - secretKey: ${EATSSU_AWS_SECRET_KEY_PROD} + accessKey: ${EATSSU_AWS_ACCESS_KEY_DEV} + secretKey: ${EATSSU_AWS_SECRET_KEY_DEV} s3: - bucket: eatssu-dev-bucket + bucket: eatssu-dev-bucket region: - static: ap-northeast-2 + static: ap-northeast-2 stack: - auto: false + auto: false -#Slack slack: token: ${EATSSU_SLACK_TOKEN} -#Swagger swagger: url: http://localhost:9000 description: Test Server Swagger API @@ -71,4 +64,21 @@ springdoc: default-consumes-media-type: application/json default-produces-media-type: application/json paths-to-match: - - /** \ No newline at end of file + - /** + +logging: + level: + root: INFO + com.zaxxer.hikari: INFO + +management: + endpoint: + metrics: + enabled: true + prometheus: + enabled: true + + endpoints: + web: + exposure: + include: health, info, metrics, prometheus diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml new file mode 100644 index 00000000..16b31d4b --- /dev/null +++ b/src/test/resources/application.yml @@ -0,0 +1,5 @@ +spring: + profiles: + active: test + config: + import: optional:file:.env[.properties] \ No newline at end of file From ff14525ec059f0f25894fa083e5862c05b389de4 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Mon, 4 Aug 2025 19:54:41 +0900 Subject: [PATCH 254/399] =?UTF-8?q?hotfix:=20header=20=ED=86=A0=ED=81=B0?= =?UTF-8?q?=20=EA=B8=B8=EC=9D=B4=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=EC=95=88=ED=95=9C=20=EB=B6=80=EB=B6=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/auth/security/JwtAuthenticationFilter.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java index 4c577027..46526e11 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java @@ -84,7 +84,9 @@ private boolean isWhiteListed(String requestURI) { private String resolveToken(HttpServletRequest request) { String bearerToken = request.getHeader(AUTHORIZATION_HEADER); if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(BEARER_TYPE)) { - return bearerToken.substring(7); + if (bearerToken.length() > BEARER_TYPE.length()) { + return bearerToken.substring(BEARER_TYPE.length()).trim(); + } } return null; } From 176557c2a0ae6a793c358f966de8f594a8ff4736 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Wed, 6 Aug 2025 07:44:06 +0900 Subject: [PATCH 255/399] =?UTF-8?q?hotfix:=20=ED=86=A0=ED=81=B0=20?= =?UTF-8?q?=EC=9E=AC=EB=B0=9C=EA=B8=89=20=EC=8B=9C=20=20log.warn=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java index 46526e11..0820b2d4 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java @@ -62,7 +62,6 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha } if (!jwtTokenProvider.validateToken(token)) { - log.warn("토큰 유효하지 않음: {}", requestURI); httpResponse.setStatus(HttpStatus.UNAUTHORIZED.value()); httpResponse.setContentType("application/json;charset=UTF-8"); httpResponse.setCharacterEncoding("UTF-8"); From 34f3c2d7db960c76b3176fe47b43a057869cc447 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Thu, 7 Aug 2025 01:06:46 +0900 Subject: [PATCH 256/399] =?UTF-8?q?hotfix:=20400=EC=97=90=EB=9F=AC?= =?UTF-8?q?=EC=9D=BC=EB=95=8C=20=EC=8A=AC=EB=9E=99=20=EC=95=8C=EB=A6=BC=20?= =?UTF-8?q?=EC=95=88=EA=B0=80=EA=B2=8C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ssu/eatssu/global/handler/GlobalExceptionHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java index 1935a8b4..962fd1af 100644 --- a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java @@ -239,7 +239,7 @@ protected ResponseEntity handleExceptionInternal( HttpStatus status = HttpStatus.valueOf(statusCode.value()); - if (status.is4xxClientError() || status.is5xxServerError()) { + if (status.is5xxServerError()) { slackErrorNotifier.notify(new BaseException(BaseResponseStatus.BAD_REQUEST)); } From fb34bbcdce8817eb22fbf25f62ea35d4a53b1314 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Thu, 7 Aug 2025 08:34:11 +0900 Subject: [PATCH 257/399] =?UTF-8?q?hotfix:=20jwtTokenFilter=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=9C=A0=ED=9A=A8=ED=95=98=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EC=9D=80=20=ED=86=A0=ED=81=B0=20=EC=95=8C=EB=A6=BC=20=EC=95=88?= =?UTF-8?q?=EA=B0=80=EA=B2=8C=EB=81=94=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/auth/infrastructure/SecurityConfig.java | 3 +-- .../domain/auth/security/JwtAuthenticationFilter.java | 8 +++----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 77c3adfd..b8d7fee4 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -40,7 +40,6 @@ public class SecurityConfig { private final JwtTokenProvider jwtTokenProvider; private final JwtAccessDeniedHandler jwtAccessDeniedHandler; private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; - private final SlackErrorNotifier slackErrorNotifier; @Bean public PasswordEncoder passwordEncoder() { @@ -58,7 +57,7 @@ protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .requestMatchers(RESOURCE_LIST).permitAll() .requestMatchers(ADMIN_PAGE_LIST).hasRole("ADMIN") .anyRequest().authenticated() - .and().addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider, slackErrorNotifier), + .and().addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), UsernamePasswordAuthenticationFilter.class)) .exceptionHandling() .accessDeniedHandler(jwtAccessDeniedHandler) diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java index 0820b2d4..e81d16d2 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java @@ -14,9 +14,8 @@ import org.springframework.util.AntPathMatcher; import org.springframework.util.StringUtils; import org.springframework.web.filter.GenericFilterBean; -import ssu.eatssu.domain.slack.service.SlackErrorNotifier; -import ssu.eatssu.global.handler.response.BaseException; -import ssu.eatssu.global.handler.response.BaseResponseStatus; + + import java.io.IOException; import java.util.List; @@ -37,7 +36,6 @@ public class JwtAuthenticationFilter extends GenericFilterBean { "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" ); private final JwtTokenProvider jwtTokenProvider; - private final SlackErrorNotifier slackErrorNotifier; @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) @@ -66,7 +64,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha httpResponse.setContentType("application/json;charset=UTF-8"); httpResponse.setCharacterEncoding("UTF-8"); httpResponse.getWriter().write("{\"success\":false,\"code\":401,\"message\":\"유효하지 않은 토큰입니다.\"}"); - slackErrorNotifier.notify(new BaseException(BaseResponseStatus.INVALID_TOKEN)); + httpResponse.getWriter().write("{\"success\":false,\"code\":401,\"message\":\"유효하지 않은 토큰입니다.\"}"); return; } From dc8d0b601a12e8304f5efb02bdd8740eb11a421d Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Sun, 10 Aug 2025 09:44:54 +0900 Subject: [PATCH 258/399] =?UTF-8?q?feat:=20=EB=A7=88=EC=9D=B4=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20API=20=EA=B0=9C=EB=B0=9C=20(#211)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: /user/v2/my api추가 * feat: 단과대, 학과 조회 API추가 * feat: 유저 탈퇴 로직 -> 닉네임 파라미터 받게 변경 * refactor: gemini 리뷰에 맞춰 변경 --- .../persistence/DepartmentRepository.java | 4 ++ .../domain/user/dto/GetCollegeResponse.java | 10 ++++ .../user/dto/GetDepartmentResponse.java | 8 +++ .../user/presentation/UserController.java | 54 +++++++++++++++++++ .../user/repository/UserRepository.java | 2 + .../domain/user/service/UserService.java | 42 +++++++++++++++ .../handler/response/BaseResponseStatus.java | 1 + src/main/resources/application-dev.yml | 4 +- src/main/resources/application-local.yml | 4 +- 9 files changed, 125 insertions(+), 4 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/user/dto/GetCollegeResponse.java create mode 100644 src/main/java/ssu/eatssu/domain/user/dto/GetDepartmentResponse.java diff --git a/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java b/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java index 942e4063..50e55f12 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java @@ -1,10 +1,14 @@ package ssu.eatssu.domain.user.department.persistence; import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.user.department.entity.College; import ssu.eatssu.domain.user.department.entity.Department; +import java.util.List; import java.util.Optional; public interface DepartmentRepository extends JpaRepository { Optional findByName(String name); + + List findByCollege(College college); } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/GetCollegeResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/GetCollegeResponse.java new file mode 100644 index 00000000..79e625ba --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/user/dto/GetCollegeResponse.java @@ -0,0 +1,10 @@ +package ssu.eatssu.domain.user.dto; + +import lombok.Builder; + +@Builder +public record GetCollegeResponse( + Long id, + String name +) { +} diff --git a/src/main/java/ssu/eatssu/domain/user/dto/GetDepartmentResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/GetDepartmentResponse.java new file mode 100644 index 00000000..128b9d92 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/user/dto/GetDepartmentResponse.java @@ -0,0 +1,8 @@ +package ssu.eatssu.domain.user.dto; + +import lombok.Builder; + +@Builder +public record GetDepartmentResponse(Long id, + String name) { +} diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 83f064a1..87591c1e 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -9,6 +9,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; import lombok.RequiredArgsConstructor; import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.Pageable; @@ -27,9 +28,13 @@ import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.PartnershipResponse; import ssu.eatssu.domain.partnership.service.PartnershipService; +import ssu.eatssu.domain.review.service.ReviewServiceV2; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.domain.slice.service.SliceService; import ssu.eatssu.domain.user.dto.DepartmentResponse; +import ssu.eatssu.domain.user.dto.GetCollegeResponse; +import ssu.eatssu.domain.user.dto.GetDepartmentResponse; +import ssu.eatssu.domain.user.dto.MyMealReviewResponse; import ssu.eatssu.domain.user.dto.MyPageResponse; import ssu.eatssu.domain.user.dto.MyReviewDetail; import ssu.eatssu.domain.user.dto.NicknameUpdateRequest; @@ -48,6 +53,7 @@ public class UserController { private final UserService userService; private final SliceService sliceService; private final PartnershipService partnershipService; + private final ReviewServiceV2 reviewServiceV2; @Operation(summary = "이메일 중복 체크", description = """ 이메일 중복 체크 API 입니다.

@@ -97,6 +103,16 @@ public BaseResponse updateNickname( public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails userDetails) { return BaseResponse.success(userService.withdraw(userDetails)); } + @Operation(summary = "유저 탈퇴 v2", description = "유저 탈퇴 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @DeleteMapping("/v2") + public BaseResponse withdrawV2(@RequestParam @NotBlank String nickname, @AuthenticationPrincipal CustomUserDetails userDetails) { + userService.withdrawV2(nickname.trim(),userDetails); + return BaseResponse.success(true); + } @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API 입니다.") @ApiResponses(value = { @@ -180,4 +196,42 @@ public BaseResponse> getUserDepartmentPartnerships( public BaseResponse getDepartment(@AuthenticationPrincipal CustomUserDetails userDetails) { return BaseResponse.success(userService.getDepartment(userDetails)); } + + @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API V2 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/v2/reviews") + public BaseResponse> getMyReviews( + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = reviewServiceV2.findMyReviews(customUserDetails, + lastReviewId, + pageable); + return BaseResponse.success(myReviews); + } + + @Operation(summary = "단과대 조회", description = "숭실대학교 단과대학 들을 조회하는 API입니다.(토큰 불필요)") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "단과대 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 단과대", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/lookup/colleges") + public BaseResponse> getColleges() { + List getCollegeResponses = userService.getCollegeList(); + return BaseResponse.success(getCollegeResponses); + } + + @Operation(summary = "단과대에 따른 학과 조회", description = "단과대학을 입력하면 단과대에 속한 숭실대학교 학과를 조회하는 API입니다.(토큰 불필요)") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "단과대 리스트 조회 성공"), + }) + @GetMapping("/lookup/departments") + public BaseResponse> getDepartments(@RequestParam Long collegeId) { + List getCollegeResponses = userService.getDepartmentList(collegeId); + return BaseResponse.success(getCollegeResponses); + } + } diff --git a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java index ea4f9cf9..6170adc4 100644 --- a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java @@ -13,4 +13,6 @@ public interface UserRepository extends JpaRepository { Optional findByEmail(String email); Optional findByProviderId(String providerId); + + Optional findByNickname(String nickname); } diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index 8dd68dc8..a857eeea 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -8,11 +8,16 @@ import org.springframework.stereotype.Service; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.config.UserProperties; +import ssu.eatssu.domain.user.department.entity.College; import ssu.eatssu.domain.user.department.entity.Department; +import ssu.eatssu.domain.user.department.persistence.CollegeRepository; import ssu.eatssu.domain.user.department.persistence.DepartmentRepository; import ssu.eatssu.domain.user.dto.DepartmentResponse; +import ssu.eatssu.domain.user.dto.GetCollegeResponse; +import ssu.eatssu.domain.user.dto.GetDepartmentResponse; import ssu.eatssu.domain.user.dto.MyPageResponse; import ssu.eatssu.domain.user.dto.NicknameUpdateRequest; import ssu.eatssu.domain.user.dto.UpdateDepartmentRequest; @@ -20,11 +25,14 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import java.util.List; import java.util.UUID; import static ssu.eatssu.global.handler.response.BaseResponseStatus.DUPLICATE_NICKNAME; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.INVALID_NICKNAME; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_DEPARTMENT; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.VALIDATION_ERROR; @Slf4j @Service @@ -37,6 +45,7 @@ public class UserService { private final PasswordEncoder passwordEncoder; private final DepartmentRepository departmentRepository; private final UserProperties userProperties; + private final CollegeRepository collegeRepository; public User join(String email, OAuthProvider provider, String providerId) { String credentials = createCredentials(provider, providerId); @@ -73,6 +82,19 @@ public boolean withdraw(CustomUserDetails userDetails) { return true; } + public void withdrawV2(String nickName, CustomUserDetails userDetails) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + if (!user.getNickname().equals(nickName)) { + throw new BaseException(INVALID_NICKNAME); + } + + user.getReviews().forEach(Review::clearUser); + user.getUserInquiries().forEach(Inquiry::clearUser); + userRepository.delete(user); + } + public Boolean validateDuplicatedEmail(String email) { return !userRepository.existsByEmail(email); } @@ -111,6 +133,26 @@ public DepartmentResponse getDepartment(CustomUserDetails userDetails) { return new DepartmentResponse(department != null ? department.getName() : ""); } + public List getCollegeList() { + List colleges = collegeRepository.findAll(); + return colleges.stream().map(college -> GetCollegeResponse.builder() + .id(college.getId()) + .name(college.getName()) + .build()) + .toList(); + } + + public List getDepartmentList(Long collegeId) { + College college = collegeRepository.findById(collegeId) + .orElseThrow(() -> new BaseException(VALIDATION_ERROR)); + List departments = departmentRepository.findByCollege(college); + return departments.stream().map(department -> GetDepartmentResponse.builder() + .id(department.getId()) + .name(department.getName()) + .build()) + .toList(); + } + private boolean isForbiddenNickname(String nickname) { return userProperties.getForbiddenNicknames().stream() .anyMatch(forbidden -> forbidden.equalsIgnoreCase(nickname)); diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index c17fc045..625e3470 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -59,6 +59,7 @@ public enum BaseResponseStatus { NOT_FOUND_DEPARTMENT(false, HttpStatus.NOT_FOUND, 40409, "해당 학과를 찾을 수 없습니다."), NOT_FOUND_PARTNERSHIP(false, HttpStatus.NOT_FOUND, 40410, "해당 제휴를 찾을 수 없습니다."), NOT_FOUND_PARTNERSHIP_RESTAURANT(false, HttpStatus.NOT_FOUND, 40411, "해당 제휴 식당을 찾을 수 없습니다."), + INVALID_NICKNAME(false,HttpStatus.NOT_FOUND,40412,"잘못된 닉네임입니다."), /** * 405 METHOD_NOT_ALLOWED 지원하지 않은 method 호출 diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index a5043661..20b92233 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -41,8 +41,8 @@ spring: jwt: secret: key: ${EATSSU_JWT_SECRET_DEV} - token-validity-in-seconds: 60 - refresh-token-validity-in-seconds: 180 + token-validity-in-seconds: 86400 + refresh-token-validity-in-seconds: 604800 #S3 cloud: diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index a85011b2..399b9d53 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -29,8 +29,8 @@ spring: jwt: secret: key: ${EATSSU_JWT_SECRET_LOCAL} - token-validity-in-seconds: 10 - refresh-token-validity-in-seconds: 30 + token-validity-in-seconds: 86400 + refresh-token-validity-in-seconds: 604800 cloud: aws: From 693d8012ff7f6f903279104c22613e68f1217125 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Sun, 24 Aug 2025 18:54:26 +0900 Subject: [PATCH 259/399] =?UTF-8?q?[FEATURE]=20250818=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EC=A4=91,=20=EC=A0=9C=ED=9C=B4=EC=A7=80?= =?UTF-8?q?=EB=8F=84=20=EA=B4=80=EB=A0=A8=20=EA=B1=B4=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20(#213)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 학과 등록시 학과 id 파라미터로 전달하게끔 변경 * refactor: /users/department 학과, 단과대 추가 * feat: /user/mypage 단과대, 학과정보 추가 * refactor: 현재 날짜에 해당하는 제휴들만 조회되게 변경 * refactor: 유저의 학과별, 단과대별 제휴 로직 변경 * refactor: gemini 코드리뷰 바탕으로 수정 --- .../partnership/entity/Partnership.java | 2 +- .../persistence/PartnershipRepository.java | 25 +++++++++---- .../PartnershipRestaurantRepository.java | 10 +++--- .../service/PartnershipService.java | 10 ++---- .../domain/user/dto/DepartmentResponse.java | 26 ++++++++++---- .../domain/user/dto/MyPageResponse.java | 36 ++++++++++++++++++- .../user/dto/UpdateDepartmentRequest.java | 4 +-- .../user/presentation/UserController.java | 11 ------ .../domain/user/service/UserService.java | 22 ++---------- 9 files changed, 89 insertions(+), 57 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java index d784217d..43d94e2b 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java @@ -26,7 +26,7 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Builder @AllArgsConstructor -@Where(clause = "end_date >= CURRENT_DATE") +@Where(clause = "start_date <= CURRENT_DATE AND end_date >= CURRENT_DATE") public class Partnership { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java index 786059e9..2ab491ff 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java @@ -4,16 +4,29 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import ssu.eatssu.domain.partnership.entity.Partnership; +import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; import ssu.eatssu.domain.user.department.entity.College; import ssu.eatssu.domain.user.department.entity.Department; import java.util.List; public interface PartnershipRepository extends JpaRepository { - @Query("SELECT DISTINCT p FROM Partnership p " + - "LEFT JOIN p.partnershipCollege pc " + - "LEFT JOIN p.partnershipDepartment pd " + - "WHERE (pc = :college OR pd = :department OR (pc IS NOT NULL AND pc.name = '총학'))") - List findRelevantPartnerships(@Param("college") College college, - @Param("department") Department department); + @Query(""" + select distinct pr + from PartnershipRestaurant pr + join fetch pr.partnerships p + left join fetch p.partnershipCollege pc + left join fetch p.partnershipDepartment pd + where + (pc = :college + or pd = :department + or (pc is not null and pc.name = '총학')) + and p.startDate <= current_date + and (p.endDate is null or p.endDate >= current_date) + """) + List findRestaurantsWithMyPartnerships( + @Param("college") College college, + @Param("department") Department department + ); + } diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java index 5fd32d87..f21e1956 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java @@ -7,9 +7,11 @@ import java.util.List; public interface PartnershipRestaurantRepository extends JpaRepository { - @Query("SELECT DISTINCT pr FROM PartnershipRestaurant pr " + - "LEFT JOIN FETCH pr.partnerships p " + - "LEFT JOIN FETCH p.partnershipCollege " + - "LEFT JOIN FETCH p.partnershipDepartment ") + @Query(""" + SELECT DISTINCT pr FROM PartnershipRestaurant pr + LEFT JOIN FETCH pr.partnerships p + LEFT JOIN FETCH p.partnershipCollege + LEFT JOIN FETCH p.partnershipDepartment + WHERE p.startDate <= CURRENT_DATE and (p.endDate is null or p.endDate >= CURRENT_DATE)""") List findAllWithDetails(); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java index 6e1bd075..b82a94db 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -115,14 +115,10 @@ public List getUserDepartmentPartnerships(CustomUserDetails College college = department.getCollege(); return partnershipRepository - .findRelevantPartnerships(college, department) + .findRestaurantsWithMyPartnerships(college, department) .stream() - .map(partnership -> { - PartnershipRestaurant partnershipRestaurant = partnership.getPartnershipRestaurant(); - - return PartnershipResponse.fromEntity(partnershipRestaurant, - customUserDetails.getId()); - }) + .map(partnershipRestaurant -> PartnershipResponse.fromEntity(partnershipRestaurant, + customUserDetails.getId())) .collect(Collectors.toList()); } } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java index 7df39fdb..105ad9e3 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java @@ -1,10 +1,24 @@ package ssu.eatssu.domain.user.dto; -import lombok.AllArgsConstructor; -import lombok.Getter; +import lombok.Builder; +import ssu.eatssu.domain.user.department.entity.College; +import ssu.eatssu.domain.user.department.entity.Department; -@Getter -@AllArgsConstructor -public class DepartmentResponse { - private String departmentName; +@Builder +public record DepartmentResponse( + Long departmentId, String departmentName, Long collegeId, String collegeName +) { + public static DepartmentResponse from(Department department) { + if (department == null) { + return new DepartmentResponse(null, null, null, null); + } + final College college = department.getCollege(); + return DepartmentResponse.builder() + .departmentId(department.getId()) + .departmentName(department.getName()) + .collegeId(college != null ? college.getId() : null) + .collegeName(college != null ? college.getName() : null) + .build(); + } } + diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java index d5d7d529..4a5ba2af 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java @@ -5,15 +5,49 @@ import lombok.Builder; import lombok.Getter; import ssu.eatssu.domain.auth.entity.OAuthProvider; +import ssu.eatssu.domain.user.department.entity.College; +import ssu.eatssu.domain.user.department.entity.Department; +import ssu.eatssu.domain.user.entity.User; @AllArgsConstructor @Builder @Schema(title = "마이페이지 정보") @Getter public class MyPageResponse { + @Schema(description = "닉네임", example = "피치푸치") private String nickname; - @Schema(description = "연결 계정 정보", example = "피치푸치") + @Schema(description = "연결 계정 정보", example = "GOOGLE") private OAuthProvider provider; + + @Schema(description = "학과 id", example = "1") + private Long departmentId; + + @Schema(description = "학과 이름", example = "컴퓨터학부") + private String departmentName; + + @Schema(description = "단과대 id", example = "1") + private Long collegeId; + + @Schema(description = "단과대 이름", example = "IT 대학") + private String collegeName; + + public static MyPageResponse from(User user) { + if (user == null) { + return MyPageResponse.builder().build(); + } + + Department department = user.getDepartment(); + College college = department != null ? department.getCollege() : null; + + return MyPageResponse.builder() + .nickname(user.getNickname()) + .provider(user.getProvider()) + .departmentId(department != null ? department.getId() : null) + .departmentName(department != null ? department.getName() : null) + .collegeId(college != null ? college.getId() : null) + .collegeName(college != null ? college.getName() : null) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java b/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java index c93bd8b1..fd4a606f 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java @@ -10,6 +10,6 @@ @AllArgsConstructor @NoArgsConstructor public class UpdateDepartmentRequest { - @Schema(description = "학과 이름", example = "소프트") - private String departmentName; + @Schema(description = "학과 id", example = "1") + private Long departmentId; } diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 87591c1e..65338a03 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -9,7 +9,6 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; -import jakarta.validation.constraints.NotBlank; import lombok.RequiredArgsConstructor; import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.Pageable; @@ -103,16 +102,6 @@ public BaseResponse updateNickname( public BaseResponse withdraw(@AuthenticationPrincipal CustomUserDetails userDetails) { return BaseResponse.success(userService.withdraw(userDetails)); } - @Operation(summary = "유저 탈퇴 v2", description = "유저 탈퇴 API 입니다.") - @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) - }) - @DeleteMapping("/v2") - public BaseResponse withdrawV2(@RequestParam @NotBlank String nickname, @AuthenticationPrincipal CustomUserDetails userDetails) { - userService.withdrawV2(nickname.trim(),userDetails); - return BaseResponse.success(true); - } @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API 입니다.") @ApiResponses(value = { diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index a857eeea..9bd2f1e5 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -8,7 +8,6 @@ import org.springframework.stereotype.Service; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; -import ssu.eatssu.domain.inquiry.entity.Inquiry; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.config.UserProperties; import ssu.eatssu.domain.user.department.entity.College; @@ -29,7 +28,6 @@ import java.util.UUID; import static ssu.eatssu.global.handler.response.BaseResponseStatus.DUPLICATE_NICKNAME; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.INVALID_NICKNAME; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_DEPARTMENT; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; import static ssu.eatssu.global.handler.response.BaseResponseStatus.VALIDATION_ERROR; @@ -68,7 +66,7 @@ public void updateNickname(CustomUserDetails userDetails, NicknameUpdateRequest public MyPageResponse findMyPage(CustomUserDetails userDetails) { User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - return new MyPageResponse(user.getNickname(), user.getProvider()); + return MyPageResponse.from(user); } public boolean withdraw(CustomUserDetails userDetails) { @@ -82,19 +80,6 @@ public boolean withdraw(CustomUserDetails userDetails) { return true; } - public void withdrawV2(String nickName, CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - if (!user.getNickname().equals(nickName)) { - throw new BaseException(INVALID_NICKNAME); - } - - user.getReviews().forEach(Review::clearUser); - user.getUserInquiries().forEach(Inquiry::clearUser); - userRepository.delete(user); - } - public Boolean validateDuplicatedEmail(String email) { return !userRepository.existsByEmail(email); } @@ -120,7 +105,7 @@ private String createCredentials(OAuthProvider provider, String providerId) { public void registerDepartment(UpdateDepartmentRequest request, CustomUserDetails userDetails) { User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Department department = departmentRepository.findByName(request.getDepartmentName()) + Department department = departmentRepository.findById(request.getDepartmentId()) .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); user.updateDepartment(department); @@ -129,8 +114,7 @@ public void registerDepartment(UpdateDepartmentRequest request, CustomUserDetail public DepartmentResponse getDepartment(CustomUserDetails userDetails) { User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Department department = user.getDepartment(); - return new DepartmentResponse(department != null ? department.getName() : ""); + return DepartmentResponse.from(user.getDepartment()); } public List getCollegeList() { From 8971e2c0846a7a53d60ece11514e627eee714c1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Mon, 1 Sep 2025 18:25:18 +0900 Subject: [PATCH 260/399] =?UTF-8?q?fix:=20=EC=97=90=EB=9F=AC=20=ED=97=A8?= =?UTF-8?q?=EB=93=A4=EB=9F=AC=EC=97=90=EC=84=9C=20500=EB=8C=80=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=EB=A7=8C=20=EB=B3=B4=EB=82=B4=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 --- .../ssu/eatssu/global/handler/GlobalExceptionHandler.java | 4 +++- .../eatssu/global/handler/response/BaseResponseStatus.java | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java index 962fd1af..d05810e1 100644 --- a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java @@ -46,7 +46,9 @@ public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { */ @ExceptionHandler(BaseException.class) public ResponseEntity> handleBaseException(BaseException e) { - slackErrorNotifier.notify(e); + if(BaseResponseStatus.sendSlackNotification(e.getStatus())){ + slackErrorNotifier.notify(e); + } return ResponseEntity.status(e.getStatus().getHttpStatus()).body(BaseResponse.fail(e.getStatus())); } diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index c17fc045..64a5c76a 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -105,4 +105,8 @@ public enum BaseResponseStatus { this.code = code; this.message = message; } + + public static boolean sendSlackNotification(BaseResponseStatus baseResponseStatus) { + return baseResponseStatus.httpStatus.is5xxServerError(); + } } From a9ceae3bc15f6d6b21bdf48625f92ba756e4ab30 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Mon, 1 Sep 2025 21:33:49 +0900 Subject: [PATCH 261/399] =?UTF-8?q?[Release]=20v2.0.2=20=EB=A6=B4=EB=A6=AC?= =?UTF-8?q?=EC=A6=88=20(#217)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 마이페이지 API 개발 (#211) * feat: /user/v2/my api추가 * feat: 단과대, 학과 조회 API추가 * feat: 유저 탈퇴 로직 -> 닉네임 파라미터 받게 변경 * refactor: gemini 리뷰에 맞춰 변경 * [FEATURE] 250818 수정사항 중, 제휴지도 관련 건 수정 (#213) * feat: 학과 등록시 학과 id 파라미터로 전달하게끔 변경 * refactor: /users/department 학과, 단과대 추가 * feat: /user/mypage 단과대, 학과정보 추가 * refactor: 현재 날짜에 해당하는 제휴들만 조회되게 변경 * refactor: 유저의 학과별, 단과대별 제휴 로직 변경 * refactor: gemini 코드리뷰 바탕으로 수정 --- .../partnership/entity/Partnership.java | 2 +- .../persistence/PartnershipRepository.java | 25 ++++++++--- .../PartnershipRestaurantRepository.java | 10 +++-- .../service/PartnershipService.java | 10 ++--- .../persistence/DepartmentRepository.java | 4 ++ .../domain/user/dto/DepartmentResponse.java | 26 ++++++++--- .../domain/user/dto/GetCollegeResponse.java | 10 +++++ .../user/dto/GetDepartmentResponse.java | 8 ++++ .../domain/user/dto/MyPageResponse.java | 36 +++++++++++++++- .../user/dto/UpdateDepartmentRequest.java | 4 +- .../user/presentation/UserController.java | 43 +++++++++++++++++++ .../user/repository/UserRepository.java | 2 + .../domain/user/service/UserService.java | 34 +++++++++++++-- .../handler/response/BaseResponseStatus.java | 1 + src/main/resources/application-dev.yml | 4 +- src/main/resources/application-local.yml | 4 +- 16 files changed, 188 insertions(+), 35 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/user/dto/GetCollegeResponse.java create mode 100644 src/main/java/ssu/eatssu/domain/user/dto/GetDepartmentResponse.java diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java index d784217d..43d94e2b 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java @@ -26,7 +26,7 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Builder @AllArgsConstructor -@Where(clause = "end_date >= CURRENT_DATE") +@Where(clause = "start_date <= CURRENT_DATE AND end_date >= CURRENT_DATE") public class Partnership { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java index 786059e9..2ab491ff 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java @@ -4,16 +4,29 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import ssu.eatssu.domain.partnership.entity.Partnership; +import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; import ssu.eatssu.domain.user.department.entity.College; import ssu.eatssu.domain.user.department.entity.Department; import java.util.List; public interface PartnershipRepository extends JpaRepository { - @Query("SELECT DISTINCT p FROM Partnership p " + - "LEFT JOIN p.partnershipCollege pc " + - "LEFT JOIN p.partnershipDepartment pd " + - "WHERE (pc = :college OR pd = :department OR (pc IS NOT NULL AND pc.name = '총학'))") - List findRelevantPartnerships(@Param("college") College college, - @Param("department") Department department); + @Query(""" + select distinct pr + from PartnershipRestaurant pr + join fetch pr.partnerships p + left join fetch p.partnershipCollege pc + left join fetch p.partnershipDepartment pd + where + (pc = :college + or pd = :department + or (pc is not null and pc.name = '총학')) + and p.startDate <= current_date + and (p.endDate is null or p.endDate >= current_date) + """) + List findRestaurantsWithMyPartnerships( + @Param("college") College college, + @Param("department") Department department + ); + } diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java index 5fd32d87..f21e1956 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java @@ -7,9 +7,11 @@ import java.util.List; public interface PartnershipRestaurantRepository extends JpaRepository { - @Query("SELECT DISTINCT pr FROM PartnershipRestaurant pr " + - "LEFT JOIN FETCH pr.partnerships p " + - "LEFT JOIN FETCH p.partnershipCollege " + - "LEFT JOIN FETCH p.partnershipDepartment ") + @Query(""" + SELECT DISTINCT pr FROM PartnershipRestaurant pr + LEFT JOIN FETCH pr.partnerships p + LEFT JOIN FETCH p.partnershipCollege + LEFT JOIN FETCH p.partnershipDepartment + WHERE p.startDate <= CURRENT_DATE and (p.endDate is null or p.endDate >= CURRENT_DATE)""") List findAllWithDetails(); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java index 6e1bd075..b82a94db 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -115,14 +115,10 @@ public List getUserDepartmentPartnerships(CustomUserDetails College college = department.getCollege(); return partnershipRepository - .findRelevantPartnerships(college, department) + .findRestaurantsWithMyPartnerships(college, department) .stream() - .map(partnership -> { - PartnershipRestaurant partnershipRestaurant = partnership.getPartnershipRestaurant(); - - return PartnershipResponse.fromEntity(partnershipRestaurant, - customUserDetails.getId()); - }) + .map(partnershipRestaurant -> PartnershipResponse.fromEntity(partnershipRestaurant, + customUserDetails.getId())) .collect(Collectors.toList()); } } diff --git a/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java b/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java index 942e4063..50e55f12 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java @@ -1,10 +1,14 @@ package ssu.eatssu.domain.user.department.persistence; import org.springframework.data.jpa.repository.JpaRepository; +import ssu.eatssu.domain.user.department.entity.College; import ssu.eatssu.domain.user.department.entity.Department; +import java.util.List; import java.util.Optional; public interface DepartmentRepository extends JpaRepository { Optional findByName(String name); + + List findByCollege(College college); } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java index 7df39fdb..105ad9e3 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java @@ -1,10 +1,24 @@ package ssu.eatssu.domain.user.dto; -import lombok.AllArgsConstructor; -import lombok.Getter; +import lombok.Builder; +import ssu.eatssu.domain.user.department.entity.College; +import ssu.eatssu.domain.user.department.entity.Department; -@Getter -@AllArgsConstructor -public class DepartmentResponse { - private String departmentName; +@Builder +public record DepartmentResponse( + Long departmentId, String departmentName, Long collegeId, String collegeName +) { + public static DepartmentResponse from(Department department) { + if (department == null) { + return new DepartmentResponse(null, null, null, null); + } + final College college = department.getCollege(); + return DepartmentResponse.builder() + .departmentId(department.getId()) + .departmentName(department.getName()) + .collegeId(college != null ? college.getId() : null) + .collegeName(college != null ? college.getName() : null) + .build(); + } } + diff --git a/src/main/java/ssu/eatssu/domain/user/dto/GetCollegeResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/GetCollegeResponse.java new file mode 100644 index 00000000..79e625ba --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/user/dto/GetCollegeResponse.java @@ -0,0 +1,10 @@ +package ssu.eatssu.domain.user.dto; + +import lombok.Builder; + +@Builder +public record GetCollegeResponse( + Long id, + String name +) { +} diff --git a/src/main/java/ssu/eatssu/domain/user/dto/GetDepartmentResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/GetDepartmentResponse.java new file mode 100644 index 00000000..128b9d92 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/user/dto/GetDepartmentResponse.java @@ -0,0 +1,8 @@ +package ssu.eatssu.domain.user.dto; + +import lombok.Builder; + +@Builder +public record GetDepartmentResponse(Long id, + String name) { +} diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java index d5d7d529..4a5ba2af 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java @@ -5,15 +5,49 @@ import lombok.Builder; import lombok.Getter; import ssu.eatssu.domain.auth.entity.OAuthProvider; +import ssu.eatssu.domain.user.department.entity.College; +import ssu.eatssu.domain.user.department.entity.Department; +import ssu.eatssu.domain.user.entity.User; @AllArgsConstructor @Builder @Schema(title = "마이페이지 정보") @Getter public class MyPageResponse { + @Schema(description = "닉네임", example = "피치푸치") private String nickname; - @Schema(description = "연결 계정 정보", example = "피치푸치") + @Schema(description = "연결 계정 정보", example = "GOOGLE") private OAuthProvider provider; + + @Schema(description = "학과 id", example = "1") + private Long departmentId; + + @Schema(description = "학과 이름", example = "컴퓨터학부") + private String departmentName; + + @Schema(description = "단과대 id", example = "1") + private Long collegeId; + + @Schema(description = "단과대 이름", example = "IT 대학") + private String collegeName; + + public static MyPageResponse from(User user) { + if (user == null) { + return MyPageResponse.builder().build(); + } + + Department department = user.getDepartment(); + College college = department != null ? department.getCollege() : null; + + return MyPageResponse.builder() + .nickname(user.getNickname()) + .provider(user.getProvider()) + .departmentId(department != null ? department.getId() : null) + .departmentName(department != null ? department.getName() : null) + .collegeId(college != null ? college.getId() : null) + .collegeName(college != null ? college.getName() : null) + .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java b/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java index c93bd8b1..fd4a606f 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/UpdateDepartmentRequest.java @@ -10,6 +10,6 @@ @AllArgsConstructor @NoArgsConstructor public class UpdateDepartmentRequest { - @Schema(description = "학과 이름", example = "소프트") - private String departmentName; + @Schema(description = "학과 id", example = "1") + private Long departmentId; } diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 83f064a1..65338a03 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -27,9 +27,13 @@ import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.partnership.dto.PartnershipResponse; import ssu.eatssu.domain.partnership.service.PartnershipService; +import ssu.eatssu.domain.review.service.ReviewServiceV2; import ssu.eatssu.domain.slice.dto.SliceResponse; import ssu.eatssu.domain.slice.service.SliceService; import ssu.eatssu.domain.user.dto.DepartmentResponse; +import ssu.eatssu.domain.user.dto.GetCollegeResponse; +import ssu.eatssu.domain.user.dto.GetDepartmentResponse; +import ssu.eatssu.domain.user.dto.MyMealReviewResponse; import ssu.eatssu.domain.user.dto.MyPageResponse; import ssu.eatssu.domain.user.dto.MyReviewDetail; import ssu.eatssu.domain.user.dto.NicknameUpdateRequest; @@ -48,6 +52,7 @@ public class UserController { private final UserService userService; private final SliceService sliceService; private final PartnershipService partnershipService; + private final ReviewServiceV2 reviewServiceV2; @Operation(summary = "이메일 중복 체크", description = """ 이메일 중복 체크 API 입니다.

@@ -180,4 +185,42 @@ public BaseResponse> getUserDepartmentPartnerships( public BaseResponse getDepartment(@AuthenticationPrincipal CustomUserDetails userDetails) { return BaseResponse.success(userService.getDepartment(userDetails)); } + + @Operation(summary = "내가 쓴 리뷰 리스트 조회", description = "내가 쓴 리뷰 리스트를 조회하는 API V2 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "내가 쓴 리뷰 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/v2/reviews") + public BaseResponse> getMyReviews( + @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, + @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, + @AuthenticationPrincipal CustomUserDetails customUserDetails) { + SliceResponse myReviews = reviewServiceV2.findMyReviews(customUserDetails, + lastReviewId, + pageable); + return BaseResponse.success(myReviews); + } + + @Operation(summary = "단과대 조회", description = "숭실대학교 단과대학 들을 조회하는 API입니다.(토큰 불필요)") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "단과대 리스트 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 단과대", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/lookup/colleges") + public BaseResponse> getColleges() { + List getCollegeResponses = userService.getCollegeList(); + return BaseResponse.success(getCollegeResponses); + } + + @Operation(summary = "단과대에 따른 학과 조회", description = "단과대학을 입력하면 단과대에 속한 숭실대학교 학과를 조회하는 API입니다.(토큰 불필요)") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "단과대 리스트 조회 성공"), + }) + @GetMapping("/lookup/departments") + public BaseResponse> getDepartments(@RequestParam Long collegeId) { + List getCollegeResponses = userService.getDepartmentList(collegeId); + return BaseResponse.success(getCollegeResponses); + } + } diff --git a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java index ea4f9cf9..6170adc4 100644 --- a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java @@ -13,4 +13,6 @@ public interface UserRepository extends JpaRepository { Optional findByEmail(String email); Optional findByProviderId(String providerId); + + Optional findByNickname(String nickname); } diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index 8dd68dc8..9bd2f1e5 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -10,9 +10,13 @@ import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.config.UserProperties; +import ssu.eatssu.domain.user.department.entity.College; import ssu.eatssu.domain.user.department.entity.Department; +import ssu.eatssu.domain.user.department.persistence.CollegeRepository; import ssu.eatssu.domain.user.department.persistence.DepartmentRepository; import ssu.eatssu.domain.user.dto.DepartmentResponse; +import ssu.eatssu.domain.user.dto.GetCollegeResponse; +import ssu.eatssu.domain.user.dto.GetDepartmentResponse; import ssu.eatssu.domain.user.dto.MyPageResponse; import ssu.eatssu.domain.user.dto.NicknameUpdateRequest; import ssu.eatssu.domain.user.dto.UpdateDepartmentRequest; @@ -20,11 +24,13 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import java.util.List; import java.util.UUID; import static ssu.eatssu.global.handler.response.BaseResponseStatus.DUPLICATE_NICKNAME; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_DEPARTMENT; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.VALIDATION_ERROR; @Slf4j @Service @@ -37,6 +43,7 @@ public class UserService { private final PasswordEncoder passwordEncoder; private final DepartmentRepository departmentRepository; private final UserProperties userProperties; + private final CollegeRepository collegeRepository; public User join(String email, OAuthProvider provider, String providerId) { String credentials = createCredentials(provider, providerId); @@ -59,7 +66,7 @@ public void updateNickname(CustomUserDetails userDetails, NicknameUpdateRequest public MyPageResponse findMyPage(CustomUserDetails userDetails) { User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - return new MyPageResponse(user.getNickname(), user.getProvider()); + return MyPageResponse.from(user); } public boolean withdraw(CustomUserDetails userDetails) { @@ -98,7 +105,7 @@ private String createCredentials(OAuthProvider provider, String providerId) { public void registerDepartment(UpdateDepartmentRequest request, CustomUserDetails userDetails) { User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Department department = departmentRepository.findByName(request.getDepartmentName()) + Department department = departmentRepository.findById(request.getDepartmentId()) .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); user.updateDepartment(department); @@ -107,8 +114,27 @@ public void registerDepartment(UpdateDepartmentRequest request, CustomUserDetail public DepartmentResponse getDepartment(CustomUserDetails userDetails) { User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Department department = user.getDepartment(); - return new DepartmentResponse(department != null ? department.getName() : ""); + return DepartmentResponse.from(user.getDepartment()); + } + + public List getCollegeList() { + List colleges = collegeRepository.findAll(); + return colleges.stream().map(college -> GetCollegeResponse.builder() + .id(college.getId()) + .name(college.getName()) + .build()) + .toList(); + } + + public List getDepartmentList(Long collegeId) { + College college = collegeRepository.findById(collegeId) + .orElseThrow(() -> new BaseException(VALIDATION_ERROR)); + List departments = departmentRepository.findByCollege(college); + return departments.stream().map(department -> GetDepartmentResponse.builder() + .id(department.getId()) + .name(department.getName()) + .build()) + .toList(); } private boolean isForbiddenNickname(String nickname) { diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index c17fc045..625e3470 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -59,6 +59,7 @@ public enum BaseResponseStatus { NOT_FOUND_DEPARTMENT(false, HttpStatus.NOT_FOUND, 40409, "해당 학과를 찾을 수 없습니다."), NOT_FOUND_PARTNERSHIP(false, HttpStatus.NOT_FOUND, 40410, "해당 제휴를 찾을 수 없습니다."), NOT_FOUND_PARTNERSHIP_RESTAURANT(false, HttpStatus.NOT_FOUND, 40411, "해당 제휴 식당을 찾을 수 없습니다."), + INVALID_NICKNAME(false,HttpStatus.NOT_FOUND,40412,"잘못된 닉네임입니다."), /** * 405 METHOD_NOT_ALLOWED 지원하지 않은 method 호출 diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index a5043661..20b92233 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -41,8 +41,8 @@ spring: jwt: secret: key: ${EATSSU_JWT_SECRET_DEV} - token-validity-in-seconds: 60 - refresh-token-validity-in-seconds: 180 + token-validity-in-seconds: 86400 + refresh-token-validity-in-seconds: 604800 #S3 cloud: diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index a85011b2..399b9d53 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -29,8 +29,8 @@ spring: jwt: secret: key: ${EATSSU_JWT_SECRET_LOCAL} - token-validity-in-seconds: 10 - refresh-token-validity-in-seconds: 30 + token-validity-in-seconds: 86400 + refresh-token-validity-in-seconds: 604800 cloud: aws: From 354560f10a2d1fbcd8fa70acfc2049074b00bf6b Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Thu, 4 Sep 2025 21:30:55 +0900 Subject: [PATCH 262/399] =?UTF-8?q?hotfix:=20=EC=A0=9C=ED=9C=B4=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=EB=A5=BC=20=EC=9C=84=ED=95=9C=20=EC=95=88=EC=93=B0?= =?UTF-8?q?=EB=8A=94=20=ED=95=84=EB=93=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/CreatePartnershipRequest.java | 4 ---- .../dto/PartnershipDetailResponse.java | 3 --- .../domain/partnership/dto/PartnershipInfo.java | 3 --- .../domain/partnership/entity/Partnership.java | 6 +----- .../partnership/entity/PartnershipType.java | 17 ----------------- .../partnership/entity/RestaurantType.java | 3 ++- 6 files changed, 3 insertions(+), 33 deletions(-) delete mode 100644 src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java index b5c061b9..dda225ea 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/CreatePartnershipRequest.java @@ -5,7 +5,6 @@ import lombok.Getter; import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; -import ssu.eatssu.domain.partnership.entity.PartnershipType; import java.time.LocalDate; @@ -15,8 +14,6 @@ public class CreatePartnershipRequest { @Schema(description = "제휴 가게 식별자", example = "1") private Long storeId; - @Schema(description = "제휴 종류(DRINK, DISCOUNT, SIDE, OTHER)", example = "DISCOUNT") - private PartnershipType partnershipType; @Schema(description = "단과대", example = "IT대") private String college; @Schema(description = "학과", example = "컴퓨터학부") @@ -31,7 +28,6 @@ public class CreatePartnershipRequest { public Partnership toPartnershipEntity(PartnershipRestaurant partnershipRestaurant) { return Partnership.builder() .partnershipRestaurant(partnershipRestaurant) - .partnershipType(partnershipType) .description(description) .startDate(startDate) .endDate(endDate) diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java index 4febcf51..54067ec4 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipDetailResponse.java @@ -4,7 +4,6 @@ import lombok.Getter; import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; -import ssu.eatssu.domain.partnership.entity.PartnershipType; import ssu.eatssu.domain.partnership.entity.RestaurantType; import java.time.LocalDate; @@ -13,7 +12,6 @@ @AllArgsConstructor public class PartnershipDetailResponse { private Long id; - private PartnershipType partnershipType; private String storeName; private String description; private LocalDate startDate; @@ -32,7 +30,6 @@ public static PartnershipDetailResponse fromEntity(PartnershipRestaurant partner return new PartnershipDetailResponse( partnership.getId(), - partnership.getPartnershipType(), partnershipRestaurant.getStoreName(), partnership.getDescription(), partnership.getStartDate(), diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java index 282140ef..efec513b 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java @@ -4,7 +4,6 @@ import lombok.Getter; import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; -import ssu.eatssu.domain.partnership.entity.PartnershipType; import java.time.LocalDate; @@ -12,7 +11,6 @@ @Getter public class PartnershipInfo { private Long id; - private PartnershipType partnershipType; private String collegeName; private String departmentName; private Integer likeCount; @@ -26,7 +24,6 @@ public static PartnershipInfo fromEntity(Partnership partnership, boolean isLiked) { return PartnershipInfo.builder() .id(partnership.getId()) - .partnershipType(partnership.getPartnershipType()) .description(partnership.getDescription()) .startDate(partnership.getStartDate()) .endDate(partnership.getEndDate()) diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java index 43d94e2b..d4bc4701 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java @@ -32,11 +32,7 @@ public class Partnership { @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "partnership_id") private Long id; - - @Enumerated(EnumType.STRING) - @Column(name = "partnership_type", nullable = false) - private PartnershipType partnershipType; - + @Column(name = "description", nullable = false) private String description; diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java deleted file mode 100644 index 9d91ab0e..00000000 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipType.java +++ /dev/null @@ -1,17 +0,0 @@ -package ssu.eatssu.domain.partnership.entity; - -import lombok.Getter; - -@Getter -public enum PartnershipType { - DRINK("음료"), - DISCOUNT("할인"), - SIDE("사이드"), - OTHER("기타"); - - private final String type; - - PartnershipType(String type) { - this.type = type; - } -} diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java index d849580c..549b857c 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java @@ -2,7 +2,8 @@ public enum RestaurantType { RESTAURANT("음식점"), - CAFE("카페"); + CAFE("카페"), + BEER("주점"); private final String type; From 4aecc2ddeda6f13ce653a674db7d131ca97010f3 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Sat, 6 Sep 2025 19:20:24 +0900 Subject: [PATCH 263/399] =?UTF-8?q?feat:=20250901=20dto=EC=88=98=EC=A0=95?= =?UTF-8?q?=EC=9A=94=EC=B2=AD=EC=82=AC=ED=95=AD=20(#221)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: amount rating, taste rating 제거 * refactor: 안쓰는 메서드 제거 * docs: local yml 규칙 추가 * fix: 평균 별점 계산 안되는 문제 수정 * docs: local yml 제거 * chore: beer->pub --- .gitignore | 4 ++- .../QuerydslMealRatingCalculator.java | 23 ------------- .../QuerydslMenuRatingCalculator.java | 20 ------------ .../partnership/entity/RestaurantType.java | 2 +- .../JpaLoadCollectionRatingCalculator.java | 32 ++----------------- .../entity/JpaProjectionRatingCalculator.java | 6 +--- .../eatssu/domain/rating/entity/Ratings.java | 14 ++------ .../review/dto/CreateMenuReviewRequest.java | 20 +----------- .../review/dto/MealReviewsResponse.java | 2 -- .../domain/review/dto/MenuLikeRequest.java | 2 +- .../domain/review/dto/MenuReviewResponse.java | 2 -- .../domain/review/dto/RatingAverages.java | 2 +- .../eatssu/domain/review/dto/RatingsDto.java | 7 ---- .../review/dto/ReviewCreateRequest.java | 8 ++--- .../domain/review/dto/ReviewDetail.java | 2 -- .../domain/review/dto/ReviewRatingCount.java | 26 ++++++++------- .../review/dto/UploadReviewRequest.java | 14 ++------ .../eatssu/domain/review/entity/Review.java | 4 +-- .../eatssu/domain/review/entity/Reviews.java | 14 -------- .../review/service/ReviewRatingService.java | 8 ++--- .../domain/review/service/ReviewService.java | 3 +- .../review/service/ReviewServiceV2.java | 22 +++++++++---- .../domain/user/dto/MyReviewDetail.java | 6 ---- src/main/resources/application-local.yml | 6 ++-- .../review/service/ReviewServiceTest.java | 2 +- 25 files changed, 57 insertions(+), 194 deletions(-) diff --git a/.gitignore b/.gitignore index 78ce332e..633f67dc 100644 --- a/.gitignore +++ b/.gitignore @@ -43,4 +43,6 @@ out/ /eat-ssu.tar ### env file ### -.env \ No newline at end of file +.env + +/src/main/resources/application-local.yml \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java index 482cb4dc..00cd0b87 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java @@ -32,29 +32,6 @@ public Double getMainRatingAverage(Long mealId) { .fetchOne(); } - public Double getTasteRatingAverage(Long mealId) { - List menuIds = mealMenuQueryRepository.getMenuIds(mealId); - return queryFactory - .select(review.ratings.tasteRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdIn(menuIds) - ) - .fetchOne(); - } - - public Double getAmountRatingAverage(Long mealId) { - List menuIds = mealMenuQueryRepository.getMenuIds(mealId); - return queryFactory - .select(review.ratings.amountRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdIn(menuIds) - ) - .fetchOne(); - } private BooleanExpression menuIdIn(List menuIds) { return menuIds != null && !menuIds.isEmpty() ? menu.id.in(menuIds) : null; diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java index 97e33f81..0d8b2843 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java @@ -26,27 +26,7 @@ public Double getMainRatingAverage(Long menuId) { .fetchOne(); } - public Double getTasteRatingAverage(Long menuId) { - return queryFactory - .select(review.ratings.tasteRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId) - ) - .fetchOne(); - } - public Double getAmountRatingAverage(Long menuId) { - return queryFactory - .select(review.ratings.amountRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId) - ) - .fetchOne(); - } private BooleanExpression menuIdEq(Long menuId) { return menu.id.eq(menuId); diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java index 549b857c..04d75720 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java @@ -3,7 +3,7 @@ public enum RestaurantType { RESTAURANT("음식점"), CAFE("카페"), - BEER("주점"); + PUB("주점"); private final String type; diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java index 11572cd5..31166af8 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java @@ -34,12 +34,10 @@ public RatingAverages mealAverageRatings(Meal meal) { long totalReviewCount = mealTotalReviewCount(meal); if (totalReviewCount == 0) - return new RatingAverages(null, null, null); + return new RatingAverages(null); return RatingAverages.builder() .mainRating(averageRating(mealTotalMainRating(meal), totalReviewCount)) - .amountRating(averageRating(mealTotalAmountRating(meal), totalReviewCount)) - .tasteRating(averageRating(mealTotalTasteRating(meal), totalReviewCount)) .build(); } @@ -48,13 +46,11 @@ public RatingAverages menuAverageRatings(Menu menu) { int totalReviewCount = menu.getTotalReviewCount(); if (totalReviewCount == 0) { - return new RatingAverages(null, null, null); + return new RatingAverages(null); } return RatingAverages.builder() .mainRating(averageRating(menuTotalMainRating(menu), totalReviewCount)) - .amountRating(averageRating(menuTotalAmountRating(menu), totalReviewCount)) - .tasteRating(averageRating(menuTotalTasteRating(menu), totalReviewCount)) .build(); } @@ -101,35 +97,11 @@ public Integer mealTotalMainRating(Meal meal) { .reduce(null, this::sum); } - // 식단 양 평점 총합 - public Integer mealTotalAmountRating(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(menu -> menu.getReviews().getTotalAmountRating()) - .reduce(null, this::sum); - } - - // 식단 맛 평점 총합 - public Integer mealTotalTasteRating(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(menu -> menu.getReviews().getTotalTasteRating()) - .reduce(null, this::sum); - } // 메뉴 메인 평점 총합 public Integer menuTotalMainRating(Menu menu) { return menu.getReviews().getTotalMainRating(); } - // 메뉴 양 평점 총합 - public Integer menuTotalAmountRating(Menu menu) { - return menu.getReviews().getTotalAmountRating(); - } - - // 메뉴 맛 평점 총합 - public Integer menuTotalTasteRating(Menu menu) { - return menu.getReviews().getTotalTasteRating(); - } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java index c5fadaac..f6ce4870 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java @@ -42,18 +42,14 @@ public RatingAverages mealAverageRatings(Meal meal) { long totalReviewCount = mealTotalReviewCount(meal); if (totalReviewCount == 0) - return new RatingAverages(null, null, null); + return new RatingAverages(null); Collection mealRatings = reviewRepository.findByMenu_MealMenus_Meal(meal, RatingsDto.class); Integer totalMainRating = mealRatings.stream().mapToInt(RatingsDto::getMainRating).sum(); - Integer totalTasteRating = mealRatings.stream().mapToInt(RatingsDto::getTasteRating).sum(); - Integer totalAmountRating = mealRatings.stream().mapToInt(RatingsDto::getAmountRating).sum(); return RatingAverages.builder() .mainRating(averageRating(totalMainRating, totalReviewCount)) - .tasteRating(averageRating(totalTasteRating, totalReviewCount)) - .amountRating(averageRating(totalAmountRating, totalReviewCount)) .build(); } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java b/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java index 99bd8253..c0ac2de7 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java @@ -12,20 +12,12 @@ public class Ratings { private Integer mainRating; - private Integer amountRating; - - private Integer tasteRating; - - private Ratings(Integer mainRating, Integer amountRating, Integer tasteRating) { + private Ratings(Integer mainRating) { Assert.isTrue(mainRating >= 0 && mainRating <= 5, "mainRating must be between 0 and 5"); - Assert.isTrue(amountRating >= 0 && amountRating <= 5, "amountRating must be between 0 and 5"); - Assert.isTrue(tasteRating >= 0 && tasteRating <= 5, "tasteRating must be between 0 and 5"); this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; } - public static Ratings of(Integer mainRating, Integer amountRating, Integer tasteRating) { - return new Ratings(mainRating, amountRating, tasteRating); + public static Ratings of(Integer mainRating) { + return new Ratings(mainRating); } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java index 3a39d4ea..2a50f46f 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java @@ -21,13 +21,6 @@ public class CreateMenuReviewRequest { private Long menuId; @Schema(description = "평점-메인", example = "4") private Integer mainRating; - - @Schema(description = "평점-양", example = "4") - private Integer amountRating; - - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; - @Max(150) @Schema(description = "한줄평", example = "맛있어용") private String content; @@ -36,19 +29,8 @@ public class CreateMenuReviewRequest { private String imageUrl; private MenuLikeRequest menuLike; - public CreateMenuReviewRequest(int mainRating, int amountRating, int tasteRating, String content) { - Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); - this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; - this.content = content; - } - public Review toReviewEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + Ratings ratings = Ratings.of(this.mainRating); return Review.builder() .user(user) .content(this.content) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java index 05ba5a92..bf4ee05e 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java @@ -37,8 +37,6 @@ public static MealReviewsResponse of(Long totalReviewCount, List menuNam return MealReviewsResponse.builder() .menuNames(menuNames) .mainRating(ratingAverages.mainRating()) - .amountRating(ratingAverages.amountRating()) - .tasteRating(ratingAverages.tasteRating()) .totalReviewCount(totalReviewCount) .reviewRatingCount(reviewRatingCount) .build(); diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java index 1042f12c..b35c19df 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java @@ -10,6 +10,6 @@ public class MenuLikeRequest { @Schema(description = "메뉴 식별자", example = "123") private Long menuId; - @Schema(description = "좋아요 or 싫어요", example = "좋아요 : true or 싫어요 : false") + @Schema(description = "좋아요 선택", example = "좋아요 : true (기본값은 false)") private Boolean isLike; } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java index 77056b7a..acd2d38b 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java @@ -37,8 +37,6 @@ public static MenuReviewResponse of(Menu menu, .menuName(menu.getName()) .totalReviewCount(menu.getTotalReviewCount()) .mainRating(ratingAverages.mainRating()) - .amountRating(ratingAverages.amountRating()) - .tasteRating(ratingAverages.tasteRating()) .reviewRatingCount(reviewRatingCount) .build(); } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java b/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java index d96d03eb..3a2779bd 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java @@ -2,7 +2,7 @@ import lombok.Builder; -public record RatingAverages(Double mainRating, Double amountRating, Double tasteRating) { +public record RatingAverages(Double mainRating) { @Builder public RatingAverages { diff --git a/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java b/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java index dab7e5f5..bb7a4e37 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java @@ -8,12 +8,5 @@ public Integer getMainRating() { return ratings.getMainRating(); } - public Integer getTasteRating() { - return ratings.getTasteRating(); - } - - public Integer getAmountRating() { - return ratings.getAmountRating(); - } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java index 6843b8cc..f6552e31 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java @@ -31,19 +31,15 @@ public class ReviewCreateRequest { @Schema(description = "한줄평", example = "맛있어용") private String content; - public ReviewCreateRequest(int mainRating, int amountRating, int tasteRating, String content) { + public ReviewCreateRequest(int mainRating, String content) { Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; this.content = content; } public Review toEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + Ratings ratings = Ratings.of(this.mainRating); return Review.builder() .user(user) .content(this.content) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java index 40eb70b5..0d196d27 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java @@ -56,8 +56,6 @@ public static ReviewDetail from(Review review, Long userId) { ReviewDetailBuilder builder = ReviewDetail.builder() .reviewId(review.getId()) .mainRating(review.getRatings().getMainRating()) - .amountRating(review.getRatings().getAmountRating()) - .tasteRating(review.getRatings().getTasteRating()) .writedAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imageUrls(imageUrls) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java index facbdead..b9325e0f 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java @@ -2,9 +2,9 @@ import ssu.eatssu.domain.review.entity.Review; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; //COMMENT: 더 좋은 매개변수 명이 있을 것 같은데 제 머리로는 이게 한계입니다... 멋진 변수명으로 바꿔주세요 @@ -15,18 +15,22 @@ public record ReviewRatingCount(long oneStarCount, long twoStarCount, long three } public static ReviewRatingCount from(List reviews) { - Map ratingDistribution = reviews.stream() - .filter(r -> r.getRating() != null) - .collect(Collectors.groupingBy(Review::getRating, - LinkedHashMap::new, - Collectors.counting())); + Map countsByStar = reviews.stream() + .map(r -> { + Integer main = (r.getRatings() != null) ? r.getRatings() + .getMainRating() : null; + return (main != null) ? main : r.getRating(); + }) + .filter(Objects::nonNull) + .collect(Collectors.groupingBy(Integer::intValue, + Collectors.counting())); return new ReviewRatingCount( - ratingDistribution.getOrDefault(1, 0L), - ratingDistribution.getOrDefault(2, 0L), - ratingDistribution.getOrDefault(3, 0L), - ratingDistribution.getOrDefault(4, 0L), - ratingDistribution.getOrDefault(5, 0L) + countsByStar.getOrDefault(1, 0L), + countsByStar.getOrDefault(2, 0L), + countsByStar.getOrDefault(3, 0L), + countsByStar.getOrDefault(4, 0L), + countsByStar.getOrDefault(5, 0L) ); } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java index 20890cee..e107f306 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java @@ -21,12 +21,6 @@ public class UploadReviewRequest { @Schema(description = "평점-메인", example = "4") private Integer mainRating; - @Schema(description = "평점-양", example = "4") - private Integer amountRating; - - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; - @Max(150) @Schema(description = "한줄평", example = "맛있어용") private String content; @@ -34,19 +28,15 @@ public class UploadReviewRequest { @Schema(description = "리뷰 이미지 URL", example = "https://s3.~~~.jpg") private String imageUrl; - public UploadReviewRequest(int mainRating, int amountRating, int tasteRating, String content) { + public UploadReviewRequest(int mainRating, String content) { Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; this.content = content; } public Review toReviewEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + Ratings ratings = Ratings.of(this.mainRating); return Review.builder() .user(user) .content(this.content) diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index ce98406d..7afffaf6 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -74,9 +74,9 @@ public class Review extends BaseTimeEntity { @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) private List reviewLikes = new ArrayList<>(); - public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { + public void update(String content, Integer mainRate) { this.content = content; - this.ratings = Ratings.of(mainRate, amountRate, tasteRate); + this.ratings = Ratings.of(mainRate); } // TODO : this.user가 null이면? diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java index 183d663c..3c69beb0 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java @@ -42,19 +42,5 @@ public int getTotalMainRating() { .mapToInt(review -> review.getRatings().getMainRating()) .sum(); } - - public int getTotalAmountRating() { - return this.reviews.stream() - .filter(review -> review.getRatings() != null) - .mapToInt(review -> review.getRatings().getAmountRating()) - .sum(); - } - - public int getTotalTasteRating() { - return this.reviews.stream() - .filter(review -> review.getRatings() != null) - .mapToInt(review -> review.getRatings().getTasteRating()).sum(); - } - } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java index cf422bc9..a7de63fc 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java @@ -38,17 +38,13 @@ public ReviewRatingCount menuRatingCount(Menu menu) { @Override public RatingAverages mealAverageRatings(Meal meal) { Double mainRatingAverage = mealRatingCalculator.getMainRatingAverage(meal.getId()); - Double amountRatingAverage = mealRatingCalculator.getAmountRatingAverage(meal.getId()); - Double tasteRatingAverage = mealRatingCalculator.getTasteRatingAverage(meal.getId()); - return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); + return new RatingAverages(mainRatingAverage); } @Override public RatingAverages menuAverageRatings(Menu menu) { Double mainRatingAverage = menuRatingCalculator.getMainRatingAverage(menu.getId()); - Double amountRatingAverage = menuRatingCalculator.getAmountRatingAverage(menu.getId()); - Double tasteRatingAverage = menuRatingCalculator.getTasteRatingAverage(menu.getId()); - return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); + return new RatingAverages(mainRatingAverage); } @Override diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index 5e62ce31..47c550ee 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -132,8 +132,7 @@ public void updateReview(CustomUserDetails userDetails, Long reviewId, throw new BaseException(REVIEW_PERMISSION_DENIED); } - review.update(request.content(), request.mainRating(), request.amountRating(), - request.tasteRating()); + review.update(request.content(), request.mainRating()); } public void deleteReview(CustomUserDetails userDetails, Long reviewId) { diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 56c04f16..637b62d3 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -115,8 +115,11 @@ public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { Double averageRating = Optional.ofNullable(reviews) .orElse(Collections.emptyList()) .stream() - .filter(Objects::nonNull) - .map(Review::getRating) + .map(r -> { + Integer main = (r.getRatings() != null) ? r.getRatings() + .getMainRating() : null; + return (main != null) ? main : r.getRating(); + }) .filter(Objects::nonNull) .mapToInt(Integer::intValue) .average() @@ -230,8 +233,11 @@ public MenuReviewsV2Response findMenuReviews(Long menuId) { double averageRating = Optional.ofNullable(reviews) .orElse(Collections.emptyList()) .stream() - .filter(Objects::nonNull) - .map(Review::getRating) + .map(r -> { + Integer main = (r.getRatings() != null) ? r.getRatings() + .getMainRating() : null; + return (main != null) ? main : r.getRating(); + }) .filter(Objects::nonNull) .mapToInt(Integer::intValue) .average() @@ -241,6 +247,7 @@ public MenuReviewsV2Response findMenuReviews(Long menuId) { ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); + return MenuReviewsV2Response .builder() .menuName(menu.getName()) @@ -262,8 +269,11 @@ public MealReviewsV2Response findMealReviews(Long mealId) { Double averageRating = Optional.ofNullable(reviews) .orElse(Collections.emptyList()) .stream() - .filter(Objects::nonNull) - .map(Review::getRating) + .map(r -> { + Integer main = (r.getRatings() != null) ? r.getRatings() + .getMainRating() : null; + return (main != null) ? main : r.getRating(); + }) .filter(Objects::nonNull) .mapToInt(Integer::intValue) .average() diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java index e45d05e3..2d538487 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java @@ -53,13 +53,9 @@ public static MyReviewDetail from(Review review) { Ratings ratings = review.getRatings(); int mainRating = 0; - int amountRating = 0; - int tasteRating = 0; if (ratings != null) { mainRating = ratings.getMainRating() != null ? ratings.getMainRating() : 0; - amountRating = ratings.getAmountRating() != null ? ratings.getAmountRating() : 0; - tasteRating = ratings.getTasteRating() != null ? ratings.getTasteRating() : 0; } String menuName = review.getMenu() != null ? review.getMenu().getName() : null; @@ -68,8 +64,6 @@ public static MyReviewDetail from(Review review) { return MyReviewDetail.builder() .reviewId(review.getId()) .mainRating(mainRating) - .amountRating(amountRating) - .tasteRating(tasteRating) .writeDate(writeDate) .content(review.getContent()) .imgUrlList(imgUrlList) diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 399b9d53..2bc506ce 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -6,9 +6,9 @@ server: spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: ${EATSSU_DB_URL_DEV} - username: ${EATSSU_DB_USERNAME} - password: ${EATSSU_DB_PASSWORD} + url: jdbc:mysql://eatssu-db.cf0ackgagqzb.ap-northeast-2.rds.amazonaws.com/dev + username: admin + password: ssu2023! jpa: hibernate: diff --git a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java index b2011705..9c22ba6a 100644 --- a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java @@ -85,7 +85,7 @@ void setup() { private Review 리뷰_생성_요청(CustomUserDetails userDetails) { // given Menu menu = createMenu(); - ReviewCreateRequest request = new ReviewCreateRequest(4, 4, 4, "굿"); + ReviewCreateRequest request = new ReviewCreateRequest(4, "굿"); // when Review createdReview = reviewService.createReview(userDetails, menu.getId(), From 903bc479f2630caa8eb4a357906a55dd0d805827 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Sat, 6 Sep 2025 19:38:36 +0900 Subject: [PATCH 264/399] =?UTF-8?q?[Release]=20v2.0.5=20=EB=A6=B4=EB=A6=AC?= =?UTF-8?q?=EC=A6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 ++- .../QuerydslMealRatingCalculator.java | 23 ------------- .../QuerydslMenuRatingCalculator.java | 20 ------------ .../partnership/entity/RestaurantType.java | 2 +- .../JpaLoadCollectionRatingCalculator.java | 32 ++----------------- .../entity/JpaProjectionRatingCalculator.java | 6 +--- .../eatssu/domain/rating/entity/Ratings.java | 14 ++------ .../review/dto/CreateMenuReviewRequest.java | 20 +----------- .../review/dto/MealReviewsResponse.java | 2 -- .../domain/review/dto/MenuLikeRequest.java | 2 +- .../domain/review/dto/MenuReviewResponse.java | 2 -- .../domain/review/dto/RatingAverages.java | 2 +- .../eatssu/domain/review/dto/RatingsDto.java | 7 ---- .../review/dto/ReviewCreateRequest.java | 8 ++--- .../domain/review/dto/ReviewDetail.java | 2 -- .../domain/review/dto/ReviewRatingCount.java | 26 ++++++++------- .../review/dto/UploadReviewRequest.java | 14 ++------ .../eatssu/domain/review/entity/Review.java | 4 +-- .../eatssu/domain/review/entity/Reviews.java | 14 -------- .../review/service/ReviewRatingService.java | 8 ++--- .../domain/review/service/ReviewService.java | 3 +- .../review/service/ReviewServiceV2.java | 22 +++++++++---- .../domain/user/dto/MyReviewDetail.java | 6 ---- src/main/resources/application-local.yml | 6 ++-- .../review/service/ReviewServiceTest.java | 2 +- 25 files changed, 57 insertions(+), 194 deletions(-) diff --git a/.gitignore b/.gitignore index 78ce332e..633f67dc 100644 --- a/.gitignore +++ b/.gitignore @@ -43,4 +43,6 @@ out/ /eat-ssu.tar ### env file ### -.env \ No newline at end of file +.env + +/src/main/resources/application-local.yml \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java index 482cb4dc..00cd0b87 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMealRatingCalculator.java @@ -32,29 +32,6 @@ public Double getMainRatingAverage(Long mealId) { .fetchOne(); } - public Double getTasteRatingAverage(Long mealId) { - List menuIds = mealMenuQueryRepository.getMenuIds(mealId); - return queryFactory - .select(review.ratings.tasteRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdIn(menuIds) - ) - .fetchOne(); - } - - public Double getAmountRatingAverage(Long mealId) { - List menuIds = mealMenuQueryRepository.getMenuIds(mealId); - return queryFactory - .select(review.ratings.amountRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdIn(menuIds) - ) - .fetchOne(); - } private BooleanExpression menuIdIn(List menuIds) { return menuIds != null && !menuIds.isEmpty() ? menu.id.in(menuIds) : null; diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java index 97e33f81..0d8b2843 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java @@ -26,27 +26,7 @@ public Double getMainRatingAverage(Long menuId) { .fetchOne(); } - public Double getTasteRatingAverage(Long menuId) { - return queryFactory - .select(review.ratings.tasteRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId) - ) - .fetchOne(); - } - public Double getAmountRatingAverage(Long menuId) { - return queryFactory - .select(review.ratings.amountRating.avg()) - .from(review) - .join(review.menu, menu) - .where( - menuIdEq(menuId) - ) - .fetchOne(); - } private BooleanExpression menuIdEq(Long menuId) { return menu.id.eq(menuId); diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java index 549b857c..04d75720 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/RestaurantType.java @@ -3,7 +3,7 @@ public enum RestaurantType { RESTAURANT("음식점"), CAFE("카페"), - BEER("주점"); + PUB("주점"); private final String type; diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java index 11572cd5..31166af8 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaLoadCollectionRatingCalculator.java @@ -34,12 +34,10 @@ public RatingAverages mealAverageRatings(Meal meal) { long totalReviewCount = mealTotalReviewCount(meal); if (totalReviewCount == 0) - return new RatingAverages(null, null, null); + return new RatingAverages(null); return RatingAverages.builder() .mainRating(averageRating(mealTotalMainRating(meal), totalReviewCount)) - .amountRating(averageRating(mealTotalAmountRating(meal), totalReviewCount)) - .tasteRating(averageRating(mealTotalTasteRating(meal), totalReviewCount)) .build(); } @@ -48,13 +46,11 @@ public RatingAverages menuAverageRatings(Menu menu) { int totalReviewCount = menu.getTotalReviewCount(); if (totalReviewCount == 0) { - return new RatingAverages(null, null, null); + return new RatingAverages(null); } return RatingAverages.builder() .mainRating(averageRating(menuTotalMainRating(menu), totalReviewCount)) - .amountRating(averageRating(menuTotalAmountRating(menu), totalReviewCount)) - .tasteRating(averageRating(menuTotalTasteRating(menu), totalReviewCount)) .build(); } @@ -101,35 +97,11 @@ public Integer mealTotalMainRating(Meal meal) { .reduce(null, this::sum); } - // 식단 양 평점 총합 - public Integer mealTotalAmountRating(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(menu -> menu.getReviews().getTotalAmountRating()) - .reduce(null, this::sum); - } - - // 식단 맛 평점 총합 - public Integer mealTotalTasteRating(Meal meal) { - return meal.getMealMenus().stream() - .map(MealMenu::getMenu) - .map(menu -> menu.getReviews().getTotalTasteRating()) - .reduce(null, this::sum); - } // 메뉴 메인 평점 총합 public Integer menuTotalMainRating(Menu menu) { return menu.getReviews().getTotalMainRating(); } - // 메뉴 양 평점 총합 - public Integer menuTotalAmountRating(Menu menu) { - return menu.getReviews().getTotalAmountRating(); - } - - // 메뉴 맛 평점 총합 - public Integer menuTotalTasteRating(Menu menu) { - return menu.getReviews().getTotalTasteRating(); - } } \ No newline at end of file diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java index c5fadaac..f6ce4870 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/JpaProjectionRatingCalculator.java @@ -42,18 +42,14 @@ public RatingAverages mealAverageRatings(Meal meal) { long totalReviewCount = mealTotalReviewCount(meal); if (totalReviewCount == 0) - return new RatingAverages(null, null, null); + return new RatingAverages(null); Collection mealRatings = reviewRepository.findByMenu_MealMenus_Meal(meal, RatingsDto.class); Integer totalMainRating = mealRatings.stream().mapToInt(RatingsDto::getMainRating).sum(); - Integer totalTasteRating = mealRatings.stream().mapToInt(RatingsDto::getTasteRating).sum(); - Integer totalAmountRating = mealRatings.stream().mapToInt(RatingsDto::getAmountRating).sum(); return RatingAverages.builder() .mainRating(averageRating(totalMainRating, totalReviewCount)) - .tasteRating(averageRating(totalTasteRating, totalReviewCount)) - .amountRating(averageRating(totalAmountRating, totalReviewCount)) .build(); } diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java b/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java index 99bd8253..c0ac2de7 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java @@ -12,20 +12,12 @@ public class Ratings { private Integer mainRating; - private Integer amountRating; - - private Integer tasteRating; - - private Ratings(Integer mainRating, Integer amountRating, Integer tasteRating) { + private Ratings(Integer mainRating) { Assert.isTrue(mainRating >= 0 && mainRating <= 5, "mainRating must be between 0 and 5"); - Assert.isTrue(amountRating >= 0 && amountRating <= 5, "amountRating must be between 0 and 5"); - Assert.isTrue(tasteRating >= 0 && tasteRating <= 5, "tasteRating must be between 0 and 5"); this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; } - public static Ratings of(Integer mainRating, Integer amountRating, Integer tasteRating) { - return new Ratings(mainRating, amountRating, tasteRating); + public static Ratings of(Integer mainRating) { + return new Ratings(mainRating); } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java index 3a39d4ea..2a50f46f 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java @@ -21,13 +21,6 @@ public class CreateMenuReviewRequest { private Long menuId; @Schema(description = "평점-메인", example = "4") private Integer mainRating; - - @Schema(description = "평점-양", example = "4") - private Integer amountRating; - - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; - @Max(150) @Schema(description = "한줄평", example = "맛있어용") private String content; @@ -36,19 +29,8 @@ public class CreateMenuReviewRequest { private String imageUrl; private MenuLikeRequest menuLike; - public CreateMenuReviewRequest(int mainRating, int amountRating, int tasteRating, String content) { - Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); - this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; - this.content = content; - } - public Review toReviewEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + Ratings ratings = Ratings.of(this.mainRating); return Review.builder() .user(user) .content(this.content) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java index 05ba5a92..bf4ee05e 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsResponse.java @@ -37,8 +37,6 @@ public static MealReviewsResponse of(Long totalReviewCount, List menuNam return MealReviewsResponse.builder() .menuNames(menuNames) .mainRating(ratingAverages.mainRating()) - .amountRating(ratingAverages.amountRating()) - .tasteRating(ratingAverages.tasteRating()) .totalReviewCount(totalReviewCount) .reviewRatingCount(reviewRatingCount) .build(); diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java index 1042f12c..b35c19df 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java @@ -10,6 +10,6 @@ public class MenuLikeRequest { @Schema(description = "메뉴 식별자", example = "123") private Long menuId; - @Schema(description = "좋아요 or 싫어요", example = "좋아요 : true or 싫어요 : false") + @Schema(description = "좋아요 선택", example = "좋아요 : true (기본값은 false)") private Boolean isLike; } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java index 77056b7a..acd2d38b 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuReviewResponse.java @@ -37,8 +37,6 @@ public static MenuReviewResponse of(Menu menu, .menuName(menu.getName()) .totalReviewCount(menu.getTotalReviewCount()) .mainRating(ratingAverages.mainRating()) - .amountRating(ratingAverages.amountRating()) - .tasteRating(ratingAverages.tasteRating()) .reviewRatingCount(reviewRatingCount) .build(); } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java b/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java index d96d03eb..3a2779bd 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/RatingAverages.java @@ -2,7 +2,7 @@ import lombok.Builder; -public record RatingAverages(Double mainRating, Double amountRating, Double tasteRating) { +public record RatingAverages(Double mainRating) { @Builder public RatingAverages { diff --git a/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java b/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java index dab7e5f5..bb7a4e37 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/RatingsDto.java @@ -8,12 +8,5 @@ public Integer getMainRating() { return ratings.getMainRating(); } - public Integer getTasteRating() { - return ratings.getTasteRating(); - } - - public Integer getAmountRating() { - return ratings.getAmountRating(); - } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java index 6843b8cc..f6552e31 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java @@ -31,19 +31,15 @@ public class ReviewCreateRequest { @Schema(description = "한줄평", example = "맛있어용") private String content; - public ReviewCreateRequest(int mainRating, int amountRating, int tasteRating, String content) { + public ReviewCreateRequest(int mainRating, String content) { Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; this.content = content; } public Review toEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + Ratings ratings = Ratings.of(this.mainRating); return Review.builder() .user(user) .content(this.content) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java index 40eb70b5..0d196d27 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java @@ -56,8 +56,6 @@ public static ReviewDetail from(Review review, Long userId) { ReviewDetailBuilder builder = ReviewDetail.builder() .reviewId(review.getId()) .mainRating(review.getRatings().getMainRating()) - .amountRating(review.getRatings().getAmountRating()) - .tasteRating(review.getRatings().getTasteRating()) .writedAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imageUrls(imageUrls) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java index facbdead..b9325e0f 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewRatingCount.java @@ -2,9 +2,9 @@ import ssu.eatssu.domain.review.entity.Review; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; //COMMENT: 더 좋은 매개변수 명이 있을 것 같은데 제 머리로는 이게 한계입니다... 멋진 변수명으로 바꿔주세요 @@ -15,18 +15,22 @@ public record ReviewRatingCount(long oneStarCount, long twoStarCount, long three } public static ReviewRatingCount from(List reviews) { - Map ratingDistribution = reviews.stream() - .filter(r -> r.getRating() != null) - .collect(Collectors.groupingBy(Review::getRating, - LinkedHashMap::new, - Collectors.counting())); + Map countsByStar = reviews.stream() + .map(r -> { + Integer main = (r.getRatings() != null) ? r.getRatings() + .getMainRating() : null; + return (main != null) ? main : r.getRating(); + }) + .filter(Objects::nonNull) + .collect(Collectors.groupingBy(Integer::intValue, + Collectors.counting())); return new ReviewRatingCount( - ratingDistribution.getOrDefault(1, 0L), - ratingDistribution.getOrDefault(2, 0L), - ratingDistribution.getOrDefault(3, 0L), - ratingDistribution.getOrDefault(4, 0L), - ratingDistribution.getOrDefault(5, 0L) + countsByStar.getOrDefault(1, 0L), + countsByStar.getOrDefault(2, 0L), + countsByStar.getOrDefault(3, 0L), + countsByStar.getOrDefault(4, 0L), + countsByStar.getOrDefault(5, 0L) ); } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java index 20890cee..e107f306 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java @@ -21,12 +21,6 @@ public class UploadReviewRequest { @Schema(description = "평점-메인", example = "4") private Integer mainRating; - @Schema(description = "평점-양", example = "4") - private Integer amountRating; - - @Schema(description = "평점-맛", example = "4") - private Integer tasteRating; - @Max(150) @Schema(description = "한줄평", example = "맛있어용") private String content; @@ -34,19 +28,15 @@ public class UploadReviewRequest { @Schema(description = "리뷰 이미지 URL", example = "https://s3.~~~.jpg") private String imageUrl; - public UploadReviewRequest(int mainRating, int amountRating, int tasteRating, String content) { + public UploadReviewRequest(int mainRating, String content) { Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(amountRating >= 1 && amountRating <= 5, "평점은 1에서 5 사이 여야 합니다."); - Assert.isTrue(tasteRating >= 1 && tasteRating <= 5, "평점은 1에서 5 사이 여야 합니다."); Assert.notNull(content, "리뷰는 null이 될 수 없습니다."); this.mainRating = mainRating; - this.amountRating = amountRating; - this.tasteRating = tasteRating; this.content = content; } public Review toReviewEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); + Ratings ratings = Ratings.of(this.mainRating); return Review.builder() .user(user) .content(this.content) diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index ce98406d..7afffaf6 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -74,9 +74,9 @@ public class Review extends BaseTimeEntity { @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) private List reviewLikes = new ArrayList<>(); - public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { + public void update(String content, Integer mainRate) { this.content = content; - this.ratings = Ratings.of(mainRate, amountRate, tasteRate); + this.ratings = Ratings.of(mainRate); } // TODO : this.user가 null이면? diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java index 183d663c..3c69beb0 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Reviews.java @@ -42,19 +42,5 @@ public int getTotalMainRating() { .mapToInt(review -> review.getRatings().getMainRating()) .sum(); } - - public int getTotalAmountRating() { - return this.reviews.stream() - .filter(review -> review.getRatings() != null) - .mapToInt(review -> review.getRatings().getAmountRating()) - .sum(); - } - - public int getTotalTasteRating() { - return this.reviews.stream() - .filter(review -> review.getRatings() != null) - .mapToInt(review -> review.getRatings().getTasteRating()).sum(); - } - } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java index cf422bc9..a7de63fc 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewRatingService.java @@ -38,17 +38,13 @@ public ReviewRatingCount menuRatingCount(Menu menu) { @Override public RatingAverages mealAverageRatings(Meal meal) { Double mainRatingAverage = mealRatingCalculator.getMainRatingAverage(meal.getId()); - Double amountRatingAverage = mealRatingCalculator.getAmountRatingAverage(meal.getId()); - Double tasteRatingAverage = mealRatingCalculator.getTasteRatingAverage(meal.getId()); - return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); + return new RatingAverages(mainRatingAverage); } @Override public RatingAverages menuAverageRatings(Menu menu) { Double mainRatingAverage = menuRatingCalculator.getMainRatingAverage(menu.getId()); - Double amountRatingAverage = menuRatingCalculator.getAmountRatingAverage(menu.getId()); - Double tasteRatingAverage = menuRatingCalculator.getTasteRatingAverage(menu.getId()); - return new RatingAverages(mainRatingAverage, amountRatingAverage, tasteRatingAverage); + return new RatingAverages(mainRatingAverage); } @Override diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index 5e62ce31..47c550ee 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -132,8 +132,7 @@ public void updateReview(CustomUserDetails userDetails, Long reviewId, throw new BaseException(REVIEW_PERMISSION_DENIED); } - review.update(request.content(), request.mainRating(), request.amountRating(), - request.tasteRating()); + review.update(request.content(), request.mainRating()); } public void deleteReview(CustomUserDetails userDetails, Long reviewId) { diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 56c04f16..637b62d3 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -115,8 +115,11 @@ public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { Double averageRating = Optional.ofNullable(reviews) .orElse(Collections.emptyList()) .stream() - .filter(Objects::nonNull) - .map(Review::getRating) + .map(r -> { + Integer main = (r.getRatings() != null) ? r.getRatings() + .getMainRating() : null; + return (main != null) ? main : r.getRating(); + }) .filter(Objects::nonNull) .mapToInt(Integer::intValue) .average() @@ -230,8 +233,11 @@ public MenuReviewsV2Response findMenuReviews(Long menuId) { double averageRating = Optional.ofNullable(reviews) .orElse(Collections.emptyList()) .stream() - .filter(Objects::nonNull) - .map(Review::getRating) + .map(r -> { + Integer main = (r.getRatings() != null) ? r.getRatings() + .getMainRating() : null; + return (main != null) ? main : r.getRating(); + }) .filter(Objects::nonNull) .mapToInt(Integer::intValue) .average() @@ -241,6 +247,7 @@ public MenuReviewsV2Response findMenuReviews(Long menuId) { ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); + return MenuReviewsV2Response .builder() .menuName(menu.getName()) @@ -262,8 +269,11 @@ public MealReviewsV2Response findMealReviews(Long mealId) { Double averageRating = Optional.ofNullable(reviews) .orElse(Collections.emptyList()) .stream() - .filter(Objects::nonNull) - .map(Review::getRating) + .map(r -> { + Integer main = (r.getRatings() != null) ? r.getRatings() + .getMainRating() : null; + return (main != null) ? main : r.getRating(); + }) .filter(Objects::nonNull) .mapToInt(Integer::intValue) .average() diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java index e45d05e3..2d538487 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyReviewDetail.java @@ -53,13 +53,9 @@ public static MyReviewDetail from(Review review) { Ratings ratings = review.getRatings(); int mainRating = 0; - int amountRating = 0; - int tasteRating = 0; if (ratings != null) { mainRating = ratings.getMainRating() != null ? ratings.getMainRating() : 0; - amountRating = ratings.getAmountRating() != null ? ratings.getAmountRating() : 0; - tasteRating = ratings.getTasteRating() != null ? ratings.getTasteRating() : 0; } String menuName = review.getMenu() != null ? review.getMenu().getName() : null; @@ -68,8 +64,6 @@ public static MyReviewDetail from(Review review) { return MyReviewDetail.builder() .reviewId(review.getId()) .mainRating(mainRating) - .amountRating(amountRating) - .tasteRating(tasteRating) .writeDate(writeDate) .content(review.getContent()) .imgUrlList(imgUrlList) diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 399b9d53..2bc506ce 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -6,9 +6,9 @@ server: spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: ${EATSSU_DB_URL_DEV} - username: ${EATSSU_DB_USERNAME} - password: ${EATSSU_DB_PASSWORD} + url: jdbc:mysql://eatssu-db.cf0ackgagqzb.ap-northeast-2.rds.amazonaws.com/dev + username: admin + password: ssu2023! jpa: hibernate: diff --git a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java index b2011705..9c22ba6a 100644 --- a/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java +++ b/src/test/java/ssu/eatssu/domain/review/service/ReviewServiceTest.java @@ -85,7 +85,7 @@ void setup() { private Review 리뷰_생성_요청(CustomUserDetails userDetails) { // given Menu menu = createMenu(); - ReviewCreateRequest request = new ReviewCreateRequest(4, 4, 4, "굿"); + ReviewCreateRequest request = new ReviewCreateRequest(4, "굿"); // when Review createdReview = reviewService.createReview(userDetails, menu.getId(), From cae4fee8a4e9d28638464816c9c552da15b0af72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Wed, 17 Sep 2025 21:25:01 +0900 Subject: [PATCH 265/399] =?UTF-8?q?fix:=20=EB=A6=AC=EB=B7=B0=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=EC=97=90=EC=84=9C=20isWriter=EA=B0=80=20=ED=95=AD?= =?UTF-8?q?=EC=83=81=20false=EB=A1=9C=20=EB=82=98=EC=98=A4=EB=8A=94=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0=20(#225)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: Security Filter Chain 수정 선택적으로 토큰을 받을 수 있돌고 수정 * fix: yml 하드 코딩 제거 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../domain/auth/security/JwtAuthenticationFilter.java | 5 +++++ src/main/resources/application-local.yml | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java index e81d16d2..2566ecec 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java @@ -45,6 +45,11 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha String requestURI = httpRequest.getRequestURI(); if (isWhiteListed(requestURI)) { + String token = resolveToken(httpRequest); + if (token != null && jwtTokenProvider.validateToken(token)) { + Authentication authentication = jwtTokenProvider.getAuthentication(token); + SecurityContextHolder.getContext().setAuthentication(authentication); + } chain.doFilter(request, response); return; } diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 2bc506ce..399b9d53 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -6,9 +6,9 @@ server: spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://eatssu-db.cf0ackgagqzb.ap-northeast-2.rds.amazonaws.com/dev - username: admin - password: ssu2023! + url: ${EATSSU_DB_URL_DEV} + username: ${EATSSU_DB_USERNAME} + password: ${EATSSU_DB_PASSWORD} jpa: hibernate: From 3080c1c4fa1a3c5acbda8101029167a579719d0f Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Sun, 21 Sep 2025 17:50:14 +0900 Subject: [PATCH 266/399] =?UTF-8?q?feat:=20250920=20=EC=8B=9D=EB=8B=B9=20d?= =?UTF-8?q?to=20id=20=EC=88=98=EC=A0=95=20=EC=9A=94=EC=B2=AD=20=EC=82=AC?= =?UTF-8?q?=ED=95=AD=20=EB=B0=98=EC=98=81=20(#227)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/dto/ValidMenuForViewResponse.java | 14 ++++++++++- .../review/service/ReviewServiceV2.java | 25 +++++++++++-------- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java index 6cc2a4a2..494ba5a0 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import java.util.List; @@ -15,6 +16,17 @@ @AllArgsConstructor public class ValidMenuForViewResponse { @Schema(description = "리뷰에 포함되는 메뉴 리스트", example = "[김치볶음밥, 고구마치즈돈까스, 김자반]") - private List menuList; + private List menuList; + + @Getter + @Builder + @AllArgsConstructor + public static class MenuDto { + @Schema(description = "메뉴 ID", example = "3143") + private Long menuId; + + @Schema(description = "메뉴 이름", example = "우삼겹갈비탕") + private String name; + } } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 637b62d3..3950faf1 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -35,7 +35,6 @@ import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; -import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; @@ -382,16 +381,22 @@ public SliceResponse findMyReviews(CustomUserDetails userD public ValidMenuForViewResponse validMenuForReview(Long mealId) { - Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); - List menuNames = meal.getMenuNames(); - List validMenuNames = new ArrayList<>(); - for (String menu : menuNames) { - if (!MenuFilterUtil.isExcludedFromReview(menu)) { - validMenuNames.add(menu); - } - } + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + + List menus = mealMenuRepository.findMenusByMeal(meal); + + List validMenus = menus.stream() + .filter(menu -> !MenuFilterUtil.isExcludedFromReview( + menu.getName())) + .map(menu -> ValidMenuForViewResponse.MenuDto.builder() + .menuId(menu.getId()) + .name(menu.getName()) + .build()) + .collect(Collectors.toList()); return ValidMenuForViewResponse.builder() - .menuList(validMenuNames).build(); + .menuList(validMenus) + .build(); } } From b3575cbcc0ffec606a40eb26ef5706d79d9c5019 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Mon, 22 Sep 2025 04:22:30 +0900 Subject: [PATCH 267/399] =?UTF-8?q?fix:=20=EC=B4=9D=ED=95=99=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EB=AC=B8=EC=A0=9C=20=EC=9E=84=EC=8B=9C=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0=20(#229)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../partnership/dto/PartnershipInfo.java | 8 +++--- .../persistence/PartnershipRepository.java | 26 ++++++++++--------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java index efec513b..f510ec2b 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java @@ -27,10 +27,10 @@ public static PartnershipInfo fromEntity(Partnership partnership, .description(partnership.getDescription()) .startDate(partnership.getStartDate()) .endDate(partnership.getEndDate()) - .collegeName(partnership.getPartnershipCollege() == null ? null : partnership.getPartnershipCollege() - .getName()) - .departmentName(partnership.getPartnershipDepartment() == null ? null : partnership.getPartnershipDepartment() - .getName()) + .collegeName(partnership.getPartnershipCollege() == null && partnership.getPartnershipDepartment() == null + ? "총학" + : (partnership.getPartnershipCollege() != null ? partnership.getPartnershipCollege().getName() : null)) + .departmentName(partnership.getPartnershipDepartment() != null ? partnership.getPartnershipDepartment().getName() : null) .likeCount(restaurant.getLikes() != null ? restaurant.getLikes().size() : 0) .isLiked(isLiked) .build(); diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java index 2ab491ff..15799202 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java @@ -12,18 +12,20 @@ public interface PartnershipRepository extends JpaRepository { @Query(""" - select distinct pr - from PartnershipRestaurant pr - join fetch pr.partnerships p - left join fetch p.partnershipCollege pc - left join fetch p.partnershipDepartment pd - where - (pc = :college - or pd = :department - or (pc is not null and pc.name = '총학')) - and p.startDate <= current_date - and (p.endDate is null or p.endDate >= current_date) - """) + select distinct pr + from PartnershipRestaurant pr + join fetch pr.partnerships p + left join fetch p.partnershipCollege pc + left join fetch p.partnershipDepartment pd + where + ( + pc = :college + or pd = :department + or (pc is null and pd is null) + ) + and p.startDate <= current_date + and (p.endDate is null or p.endDate >= current_date) + """) List findRestaurantsWithMyPartnerships( @Param("college") College college, @Param("department") Department department From 294b9602982500d94e5b5be197902139aacc8455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Mon, 22 Sep 2025 20:58:42 +0900 Subject: [PATCH 268/399] =?UTF-8?q?feature:=20=EC=B6=95=EC=A0=9C=20?= =?UTF-8?q?=EC=A0=9C=ED=9C=B4=EA=B0=80=20=EB=B3=B4=EC=9D=B4=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=9E=84=EC=8B=9C=20=EC=A1=B0=EC=B9=98=20(#232)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java | 2 +- .../domain/partnership/persistence/PartnershipRepository.java | 2 +- .../persistence/PartnershipRestaurantRepository.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java index f510ec2b..bbf39d36 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java @@ -28,7 +28,7 @@ public static PartnershipInfo fromEntity(Partnership partnership, .startDate(partnership.getStartDate()) .endDate(partnership.getEndDate()) .collegeName(partnership.getPartnershipCollege() == null && partnership.getPartnershipDepartment() == null - ? "총학" + ? "총학생회" : (partnership.getPartnershipCollege() != null ? partnership.getPartnershipCollege().getName() : null)) .departmentName(partnership.getPartnershipDepartment() != null ? partnership.getPartnershipDepartment().getName() : null) .likeCount(restaurant.getLikes() != null ? restaurant.getLikes().size() : 0) diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java index 15799202..418fd8bb 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java @@ -23,7 +23,7 @@ public interface PartnershipRepository extends JpaRepository or pd = :department or (pc is null and pd is null) ) - and p.startDate <= current_date + and p.startDate >= current_date - 7 and (p.endDate is null or p.endDate >= current_date) """) List findRestaurantsWithMyPartnerships( diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java index f21e1956..bd17a82a 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java @@ -12,6 +12,6 @@ public interface PartnershipRestaurantRepository extends JpaRepository= CURRENT_DATE)""") + WHERE p.startDate >= current_date - 7 and (p.endDate is null or p.endDate >= CURRENT_DATE)""") List findAllWithDetails(); } From 7d43ae27ea3a0b7dd9549f69ae9376d76dc1c43c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Mon, 22 Sep 2025 21:11:53 +0900 Subject: [PATCH 269/399] =?UTF-8?q?fix:=20=EC=BF=BC=EB=A6=AC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#235)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../domain/partnership/persistence/PartnershipRepository.java | 1 - .../persistence/PartnershipRestaurantRepository.java | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java index 418fd8bb..052a8ae6 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java @@ -23,7 +23,6 @@ public interface PartnershipRepository extends JpaRepository or pd = :department or (pc is null and pd is null) ) - and p.startDate >= current_date - 7 and (p.endDate is null or p.endDate >= current_date) """) List findRestaurantsWithMyPartnerships( diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java index bd17a82a..23e92f98 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java @@ -12,6 +12,6 @@ public interface PartnershipRestaurantRepository extends JpaRepository= current_date - 7 and (p.endDate is null or p.endDate >= CURRENT_DATE)""") + WHERE p.endDate is null or p.endDate >= CURRENT_DATE""") List findAllWithDetails(); } From b62c31709e924dccc7d59a69c5b24db49b4f123b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Mon, 22 Sep 2025 21:51:47 +0900 Subject: [PATCH 270/399] =?UTF-8?q?fix:=20@Where=20=EC=96=B4=EB=85=B8?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=9E=84=EC=8B=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#238)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../java/ssu/eatssu/domain/partnership/entity/Partnership.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java index d4bc4701..91763d0f 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java @@ -26,7 +26,7 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @Builder @AllArgsConstructor -@Where(clause = "start_date <= CURRENT_DATE AND end_date >= CURRENT_DATE") +@Where(clause = "end_date >= CURRENT_DATE") public class Partnership { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) From 5b371ecfd69929fdc78f8433108a5498b7621012 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Tue, 23 Sep 2025 21:49:10 +0900 Subject: [PATCH 271/399] =?UTF-8?q?fix:=20statistics=20valid=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EB=8F=99=EA=B8=B0=ED=99=94=20(#242)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: statistics 공통 메뉴 나오는 문제 해결 * fix: list api 공통 메뉴 안나오게 수정 * feat: /v2/review/meals에서 mealID 추출 시 valid menu만 추출하게끔 변경 * feat: 내리뷰 조회 api dto id,name 형태로 변경 * feat: list dto에 id,name,like / statistics dto에 id, name추가 * refactor: gemini 리뷰 반영 및 menuNames -> menuList로 수정 --- .../ssu/eatssu/domain/menu/entity/Meal.java | 6 ++ .../domain/review/dto/MealReviewResponse.java | 32 ++++--- .../review/dto/MealReviewsV2Response.java | 8 +- .../domain/review/dto/MenuIdNameDto.java | 5 ++ .../domain/review/dto/MenuIdNameLikeDto.java | 8 ++ .../review/service/ReviewServiceV2.java | 53 ++++++++---- .../domain/user/dto/MyMealReviewResponse.java | 58 +++++++++---- src/main/resources/application-local.yml | 84 ------------------- 8 files changed, 123 insertions(+), 131 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/review/dto/MenuIdNameDto.java create mode 100644 src/main/java/ssu/eatssu/domain/review/dto/MenuIdNameLikeDto.java delete mode 100644 src/main/resources/application-local.yml diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java index 7680ff3a..fa7069bd 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Meal.java @@ -64,4 +64,10 @@ public List getMenuNames() { public void addMealMenu(MealMenu mealMenu) { mealMenus.add(mealMenu); } + + public List getMenus() { + return mealMenus.stream() + .map(MealMenu::getMenu) + .toList(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java index 633cb7c6..e0bbbaac 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java @@ -10,6 +10,7 @@ import java.time.LocalDate; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; @AllArgsConstructor @@ -41,19 +42,28 @@ public class MealReviewResponse { @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") private List imageUrls; - @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") - private List likedMenuNames; - @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") - private List menuNames; + @Schema(description = "메뉴 리스트") + private List menuList; - public static MealReviewResponse from(Review review, Long userId) { + public static MealReviewResponse from(Review review, + Long userId, + List validMenus) { List imageUrls = new ArrayList<>(); review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); - List likedMenuNames = review.getMenuLikes().stream() - .filter(ReviewMenuLike::getIsLike) - .map(like -> like.getMenu().getName()) - .collect(Collectors.toList()); + // 좋아요한 메뉴 ID 모음 + Set likedMenuIds = review.getMenuLikes().stream() + .filter(ReviewMenuLike::getIsLike) + .map(like -> like.getMenu().getId()) + .collect(Collectors.toSet()); + + List menuNames = validMenus.stream() + .map(valid -> new MenuIdNameLikeDto( + valid.getMenuId(), + valid.getName(), + likedMenuIds.contains(valid.getMenuId()) + )) + .toList(); MealReviewResponseBuilder builder = MealReviewResponse.builder() .reviewId(review.getId()) @@ -61,8 +71,7 @@ public static MealReviewResponse from(Review review, Long userId) { .writtenAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imageUrls(imageUrls) - .menuNames(review.getMeal().getMenuNames()) - .likedMenuNames(likedMenuNames); + .menuList(menuNames); if (review.getUser() == null) { return builder.writerId(null) @@ -82,5 +91,6 @@ public static MealReviewResponse from(Review review, Long userId) { .writerNickname(review.getUser().getNickname()) .isWriter(false) .build(); + } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java index 2fa91875..7cf41bc7 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java @@ -12,8 +12,8 @@ @AllArgsConstructor @Builder public class MealReviewsV2Response implements ReviewInformationResponse { - @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") - private List menuNames; + @Schema(description = "메뉴 리스트") + private List menuList; @Schema(description = "리뷰 개수", example = "15") private Long totalReviewCount; @@ -26,11 +26,11 @@ public class MealReviewsV2Response implements ReviewInformationResponse { @Schema(description = "평점 별 갯수") private ReviewRatingCount reviewRatingCount; - public static MealReviewsV2Response of(Long totalReviewCount, List menuNames, + public static MealReviewsV2Response of(Long totalReviewCount, List menuNames, RatingAverages ratingAverages, ReviewRatingCount reviewRatingCount) { return MealReviewsV2Response.builder() - .menuNames(menuNames) + .menuList(menuNames) .mainRating(ratingAverages.mainRating()) .totalReviewCount(totalReviewCount) .reviewRatingCount(reviewRatingCount) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuIdNameDto.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuIdNameDto.java new file mode 100644 index 00000000..99fe21ed --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuIdNameDto.java @@ -0,0 +1,5 @@ +package ssu.eatssu.domain.review.dto; + +public record MenuIdNameDto(Long id, + String name) { +} diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuIdNameLikeDto.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuIdNameLikeDto.java new file mode 100644 index 00000000..cb8b9a27 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuIdNameLikeDto.java @@ -0,0 +1,8 @@ +package ssu.eatssu.domain.review.dto; + +public record MenuIdNameLikeDto( + Long id, + String name, + Boolean isLike +) { +} diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 3950faf1..81d69178 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -17,6 +17,7 @@ import ssu.eatssu.domain.review.dto.CreateMenuReviewRequest; import ssu.eatssu.domain.review.dto.MealReviewResponse; import ssu.eatssu.domain.review.dto.MealReviewsV2Response; +import ssu.eatssu.domain.review.dto.MenuIdNameDto; import ssu.eatssu.domain.review.dto.MenuLikeRequest; import ssu.eatssu.domain.review.dto.MenuReviewsV2Response; import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; @@ -159,16 +160,27 @@ public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { */ public SliceResponse findMealReviewList(Long mealId, Long lastReviewId, Pageable pageable, CustomUserDetails userDetails) { - if (!mealRepository.existsById(mealId)) { - throw new BaseException(NOT_FOUND_MEAL); - } - List menuIds = mealMenuRepository.findMenuIdsByMealId(mealId); - if (menuIds.isEmpty()) { + Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + + List menus = mealMenuRepository.findMenusByMeal(meal); + + List validMenus = menus.stream() + .filter(menu -> !MenuFilterUtil.isExcludedFromReview( + menu.getName())) + .map(menu -> ValidMenuForViewResponse.MenuDto.builder() + .menuId(menu.getId()) + .name(menu.getName()) + .build()) + .collect(Collectors.toList()); + + + if (validMenus.isEmpty()) { return SliceResponse.empty(); } - List mealIds = mealMenuRepository.findMealIdsByMenuIds(menuIds); + List validMenuIds = validMenus.stream().map(ValidMenuForViewResponse.MenuDto::getMenuId).toList(); + List mealIds = mealMenuRepository.findMealIdsByMenuIds(validMenuIds); if (mealIds.isEmpty()) { return SliceResponse.empty(); } @@ -176,11 +188,13 @@ public SliceResponse findMealReviewList(Long mealId, Long la Page pageReviews = reviewRepository.findReviewsByMealIds(mealIds, lastReviewId, pageable); Long userId = (userDetails != null) ? userDetails.getId() : null; + + List mealReviewResponses = pageReviews.getContent() .stream() .map(review -> MealReviewResponse.from(review, - userId)) + userId,validMenus)) .collect(Collectors.toList()); return SliceResponse.builder() @@ -265,6 +279,15 @@ public MealReviewsV2Response findMealReviews(Long mealId) { List reviews = reviewRepository.findAllByMeal(meal); List menus = mealMenuRepository.findMenusByMeal(meal); + List validMenus = menus.stream() + .filter(menu -> !MenuFilterUtil.isExcludedFromReview( + menu.getName())) + .map(menu -> ValidMenuForViewResponse.MenuDto.builder() + .menuId(menu.getId()) + .name(menu.getName()) + .build()) + .toList(); + Double averageRating = Optional.ofNullable(reviews) .orElse(Collections.emptyList()) .stream() @@ -288,22 +311,16 @@ public MealReviewsV2Response findMealReviews(Long mealId) { .sum(); - Integer unlikeCount = Optional.ofNullable(menus) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(Menu::getUnlikeCount) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .sum(); - ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); return MealReviewsV2Response .builder() - .menuNames(menus.stream() + .menuList(validMenus.stream() .filter(Objects::nonNull) - .map(Menu::getName) + .map(menu -> new MenuIdNameDto( + menu.getMenuId(), + menu.getName() + )) .filter(Objects::nonNull) .collect(Collectors.toList())) .totalReviewCount((long) reviews.size()) diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index ff8604c2..316fcaad 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -4,13 +4,17 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import ssu.eatssu.domain.review.dto.MenuIdNameLikeDto; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewMenuLike; +import ssu.eatssu.domain.review.utils.MenuFilterUtil; import java.time.LocalDate; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; @AllArgsConstructor @Builder @@ -31,24 +35,51 @@ public class MyMealReviewResponse { @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") private List imageUrls; - - @Schema(description = "좋아요한 메뉴명 리스트", example = "[\"메뉴1\", \"메뉴2\"]") - private List likedMenuNames; - @Schema(description = "메뉴명 리스트", example = "['고구마치즈돈까스', '막국수', '미니밥','단무지', '요구르트']") - private List menuNames; + @Schema(description = "메뉴 리스트", example = "[\n" + + " {\n" + + " \"menuId\": 3143,\n" + + " \"name\": \"생고기제육볶음\"\n" + + " \"isLike\" : true,\n" + + " },\n" + + " {\n" + + " \"menuId\": 3144,\n" + + " \"name\": \"오징어초무침\",\n" + + " \"isLike\" : false,\n" + + " }\n" + + " ]") + private List menuList; public static MyMealReviewResponse from(Review review) { List imgUrlList = new ArrayList<>(); review.getReviewImages().forEach(i -> imgUrlList.add(i.getImageUrl())); - List likedMenuNames = review.getMenuLikes().stream() - .filter(ReviewMenuLike::getIsLike) - .map(like -> like.getMenu().getName()) - .toList(); + Set likedMenuIds = review.getMenuLikes().stream() + .filter(ReviewMenuLike::getIsLike) + .map(like -> like.getMenu().getId()) + .collect(Collectors.toSet()); + + + List menuNames; + + if (review.getMeal() != null) { + menuNames = review.getMeal().getMenus().stream() + .filter(menu -> !MenuFilterUtil.isExcludedFromReview(menu.getName())) + .map(menu -> new MenuIdNameLikeDto( + menu.getId(), + menu.getName(), + likedMenuIds.contains(menu.getId()) + )) + .toList(); + } else { + menuNames = Collections.singletonList( + new MenuIdNameLikeDto( + review.getMenu().getId(), + review.getMenu().getName(), + likedMenuIds.contains(review.getMenu().getId()) + ) + ); + } - List menuNames = review.getMeal() == null ? Collections.singletonList(review.getMenu() - .getName()) : review.getMeal() - .getMenuNames(); return MyMealReviewResponse .builder() .reviewId(review.getId()) @@ -56,8 +87,7 @@ public static MyMealReviewResponse from(Review review) { .writtenAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imageUrls(imgUrlList) - .likedMenuNames(likedMenuNames) - .menuNames(menuNames) + .menuList(menuNames) .build(); } } diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml deleted file mode 100644 index 399b9d53..00000000 --- a/src/main/resources/application-local.yml +++ /dev/null @@ -1,84 +0,0 @@ -server: - port: 9000 - env: local - - -spring: - datasource: - driver-class-name: com.mysql.cj.jdbc.Driver - url: ${EATSSU_DB_URL_DEV} - username: ${EATSSU_DB_USERNAME} - password: ${EATSSU_DB_PASSWORD} - - jpa: - hibernate: - ddl-auto: update - properties: - hibernate: - jdbc: - lob: - non_contextual_creation: true - format_sql: true - show_sql: false - - servlet: - multipart: - max-file-size: 20MB - max-request-size: 20MB - -jwt: - secret: - key: ${EATSSU_JWT_SECRET_LOCAL} - token-validity-in-seconds: 86400 - refresh-token-validity-in-seconds: 604800 - -cloud: - aws: - credentials: - accessKey: ${EATSSU_AWS_ACCESS_KEY_DEV} - secretKey: ${EATSSU_AWS_SECRET_KEY_DEV} - s3: - bucket: eatssu-bucket - region: - static: ap-northeast-2 - stack: - auto: false - -slack: - token: ${EATSSU_SLACK_TOKEN} - -swagger: - url: http://localhost:9000 - description: Test Server Swagger API - -springdoc: - swagger-ui: - path: /swagger-ui.html - groups-order: DESC - operationsSorter: method - disable-swagger-default-url: true - display-request-duration: true - api-docs: - path: /v3/api-docs - show-actuator: true - default-consumes-media-type: application/json - default-produces-media-type: application/json - paths-to-match: - - /** - -logging: - level: - root: INFO - com.zaxxer.hikari: INFO - -management: - endpoint: - metrics: - enabled: true - prometheus: - enabled: true - - endpoints: - web: - exposure: - include: health, info, metrics, prometheus From 1e9ab03ed6494bd31a8d1988dbac7e192d368f9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Thu, 25 Sep 2025 00:46:58 +0900 Subject: [PATCH 272/399] =?UTF-8?q?chore:=20CI/CD=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EB=B0=8F=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EA=B5=AC=EC=A1=B0=20?= =?UTF-8?q?=EA=B5=AC=EC=B6=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 97 +++++++++++++++++++++++++----------- docker-compose.yml | 20 ++++++++ 2 files changed, 87 insertions(+), 30 deletions(-) create mode 100644 docker-compose.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 28b48599..95f1356a 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,8 +1,12 @@ name: EAT-SSU Server 개발 & 운영 서버 배포 파이프라인 +#on: +# push: +# branches: [ "main", "develop", "hotfix/deploy-prod-fail", "hotfix/deploy-dev-fail" ] + on: - push: - branches: [ "main", "develop", "hotfix/deploy-prod-fail", "hotfix/deploy-dev-fail" ] + pull_request: + branches: [ "dev" ] permissions: contents: read @@ -30,13 +34,14 @@ jobs: ${{ runner.os }}-gradle- - name: dev 프로필 설정 - if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' +# if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' run: | echo "spring: profiles: include: dev" > ./src/main/resources/application.yml shell: bash + - name: prod 프로필 설정 if: github.ref_name == 'main' || github.ref_name == 'hotfix/deploy-prod-fail' run: | @@ -64,12 +69,35 @@ jobs: docker push ${{ secrets.DOCKER_REPO }}/eatssu-prod - name: dev 서버 용 Docker 빌드 및 푸시 - if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' +# if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' run: | docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev . docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev - - name: prod에 배포 + - name: prod 서버 docker-compose.yml 복사 + uses: appleboy/scp-action@master + if: github.ref_name == 'main' || github.ref_name == 'hotfix/deploy-prod-fail' + with: + host: ${{ secrets.HOST_PROD }} + username: ${{ secrets.USERNAME }} + key: ${{ secrets.PROD_PRIVATE_KEY }} + port: 22 + source: "docker-compose.yml" + target: "/home/ubuntu/eatssu/" + + - name: dev 서버 docker-compose.yml 복사 + uses: appleboy/scp-action@master + if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' + with: + host: ${{ secrets.HOST_DEV }} + username: ${{ secrets.USERNAME }} + key: ${{ secrets.DEV_PRIVATE_KEY }} + port: 22 + source: "docker-compose.yml" + target: "/home/ubuntu/eatssu/" + + + - name: prod 서버에 배포 uses: appleboy/ssh-action@master id: deploy-prod if: github.ref_name == 'main' || github.ref_name == 'hotfix/deploy-prod-fail' @@ -79,40 +107,49 @@ jobs: key: ${{ secrets.PROD_PRIVATE_KEY }} port: 22 script: | - sudo docker ps - sudo docker rm -f $(docker ps -qa) - sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-prod - sudo docker run -d -p 9000:9000 \ - -e EATSSU_DB_URL_PROD="${{ secrets.EATSSU_DB_URL_PROD }}" \ - -e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \ - -e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \ - -e EATSSU_JWT_SECRET_PROD="${{ secrets.EATSSU_JWT_SECRET_PROD }}" \ - -e EATSSU_AWS_ACCESS_KEY_PROD="${{ secrets.EATSSU_AWS_ACCESS_KEY_PROD }}" \ - -e EATSSU_AWS_SECRET_KEY_PROD="${{ secrets.EATSSU_AWS_SECRET_KEY_PROD }}" \ - -e EATSSU_SLACK_TOKEN="${{ secrets.EATSSU_SLACK_TOKEN }}" \ - ${{ secrets.DOCKER_REPO }}/eatssu-prod + cd /home/ubuntu/eatssu + + # 이미지 및 환경 변수 설정 + export DOCKER_REPO=${{ secrets.DOCKER_REPO }} + export IMAGE_NAME=eatssu-prod + + export EATSSU_DB_URL=${{ secrets.EATSSU_DB_URL_PROD }} + export EATSSU_DB_USERNAME=${{ secrets.EATSSU_DB_USERNAME }} + export EATSSU_DB_PASSWORD=${{ secrets.EATSSU_DB_PASSWORD }} + export EATSSU_JWT_SECRET=${{ secrets.EATSSU_JWT_SECRET_PROD }} + export EATSSU_AWS_ACCESS_KEY=${{ secrets.EATSSU_AWS_ACCESS_KEY_PROD }} + export EATSSU_AWS_SECRET_KEY=${{ secrets.EATSSU_AWS_SECRET_KEY_PROD }} + export EATSSU_SLACK_TOKEN=${{ secrets.EATSSU_SLACK_TOKEN }} + + sudo docker-compose down + sudo docker-compose pull + sudo docker-compose up -d --remove-orphans sudo docker image prune -f - name: dev 서버에 배포 uses: appleboy/ssh-action@master id: deploy-dev - if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' +# if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' with: host: ${{ secrets.HOST_DEV }} username: ${{ secrets.USERNAME }} port: 22 key: ${{ secrets.DEV_PRIVATE_KEY }} script: | - sudo docker ps - sudo docker rm -f $(docker ps -qa) - sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev - sudo docker run -d -p 9000:9000 \ - -e EATSSU_DB_URL_DEV="${{ secrets.EATSSU_DB_URL_DEV }}" \ - -e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \ - -e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \ - -e EATSSU_JWT_SECRET_DEV="${{ secrets.EATSSU_JWT_SECRET_DEV }}" \ - -e EATSSU_AWS_ACCESS_KEY_DEV="${{ secrets.EATSSU_AWS_ACCESS_KEY_DEV }}" \ - -e EATSSU_AWS_SECRET_KEY_DEV="${{ secrets.EATSSU_AWS_SECRET_KEY_DEV }}" \ - -e EATSSU_SLACK_TOKEN="${{ secrets.EATSSU_SLACK_TOKEN }}" \ - ${{ secrets.DOCKER_REPO }}/eatssu-dev + cd /home/ubuntu/eatssu + + export DOCKER_REPO=${{ secrets.DOCKER_REPO }} + export IMAGE_NAME=eatssu-dev + export EATSSU_DB_URL=${{ secrets.EATSSU_DB_URL_DEV }} + export EATSSU_DB_USERNAME=${{ secrets.EATSSU_DB_USERNAME }} + export EATSSU_DB_PASSWORD=${{ secrets.EATSSU_DB_PASSWORD }} + export EATSSU_JWT_SECRET=${{ secrets.EATSSU_JWT_SECRET_DEV }} + export EATSSU_AWS_ACCESS_KEY=${{ secrets.EATSSU_AWS_ACCESS_KEY_DEV }} + export EATSSU_AWS_SECRET_KEY=${{ secrets.EATSSU_AWS_SECRET_KEY_DEV }} + export EATSSU_SLACK_TOKEN=${{ secrets.EATSSU_SLACK_TOKEN }} + + sudo docker-compose down + sudo docker-compose pull + sudo docker-compose up -d --remove-orphans sudo docker image prune -f + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..4d91e0dc --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,20 @@ +version: "3.8" +services: + eat-ssu: + image: ${DOCKER_REPO}/${IMAGE_NAME}:latest + ports: + - "9000:9000" + environment: + - EATSSU_DB_URL=${EATSSU_DB_URL} + - EATSSU_DB_USERNAME=${EATSSU_DB_USERNAME} + - EATSSU_DB_PASSWORD=${EATSSU_DB_PASSWORD} + - EATSSU_JWT_SECRET=${EATSSU_JWT_SECRET} + - EATSSU_AWS_ACCESS_KEY=${EATSSU_AWS_ACCESS_KEY} + - EATSSU_AWS_SECRET_KEY=${EATSSU_AWS_SECRET_KEY} + - EATSSU_SLACK_TOKEN=${EATSSU_SLACK_TOKEN} + volumes: + - eatssu-data:/app/data + - /home/ubuntu/eatssu/logs:/app/logs + +volumes: + eatssu-data: From f61320716aa1836c742a2193ea41d4270089be53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Thu, 25 Sep 2025 03:06:37 +0900 Subject: [PATCH 273/399] =?UTF-8?q?feat:=20logback=20=EC=84=B8=ED=8C=85=20?= =?UTF-8?q?=EB=B0=8F=20Controller=20AOP=20=EB=A1=9C=EA=B9=85=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/log/ControllerLogAspect.java | 47 +++++++++++++ .../eatssu/global/log/MDCLoggingFilter.java | 30 +++++++++ src/main/resources/logback-spring.xml | 67 +++++++++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java create mode 100644 src/main/java/ssu/eatssu/global/log/MDCLoggingFilter.java create mode 100644 src/main/resources/logback-spring.xml diff --git a/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java b/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java new file mode 100644 index 00000000..f74ee4e0 --- /dev/null +++ b/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java @@ -0,0 +1,47 @@ +package ssu.eatssu.global.log; + +import jakarta.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import java.util.Arrays; + +@Aspect +@Component +@Slf4j +public class ControllerLogAspect { + + @Pointcut("within(@org.springframework.web.bind.annotation.RestController *)") + public void restController() {} + + @Around("restController()") + public Object logApi(ProceedingJoinPoint joinPoint) throws Throwable { + long start = System.currentTimeMillis(); + + HttpServletRequest request = + ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); + String uri = request.getRequestURI(); + String method = request.getMethod(); + + Object[] args = joinPoint.getArgs(); + + log.info("REQUEST {} {} args={}", method, uri, Arrays.toString(args)); + + try { + Object result = joinPoint.proceed(); + long time = System.currentTimeMillis() - start; + log.info("RESPONSE {} {} ({} ms) result={}", method, uri, time, result); + return result; + } catch (Throwable e) { + long time = System.currentTimeMillis() - start; + log.error("EXCEPTION {} {} ({} ms) cause={}", method, uri, time, e.getMessage(), e); + throw e; + } + } +} diff --git a/src/main/java/ssu/eatssu/global/log/MDCLoggingFilter.java b/src/main/java/ssu/eatssu/global/log/MDCLoggingFilter.java new file mode 100644 index 00000000..edd496c3 --- /dev/null +++ b/src/main/java/ssu/eatssu/global/log/MDCLoggingFilter.java @@ -0,0 +1,30 @@ +package ssu.eatssu.global.log; + +import jakarta.servlet.*; +import jakarta.servlet.http.HttpServletRequest; +import org.jboss.logging.MDC; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.UUID; + +@Component +@Order(Ordered.HIGHEST_PRECEDENCE) +public class MDCLoggingFilter implements Filter { + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + String requestId = ((HttpServletRequest) request).getHeader("X-RequestID"); + if (requestId == null) { + requestId = UUID.randomUUID().toString().replace("-", ""); + } + MDC.put("request_id", requestId); + try { + chain.doFilter(request, response); + } finally { + MDC.clear(); + } + } +} diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 00000000..62c6d624 --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} %clr([%level]) [%15.15thread] [reqId=%X{requestId}] %cyan(%logger{36}) - %msg%n + + + + + + + ${LOG_PATH}/${APP_NAME}.log + + ${LOG_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log + 1 + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] %logger{36} - %msg%n + + + + + + ${LOG_PATH}/${APP_NAME}-error.log + + ${LOG_PATH}/${APP_NAME}-error-%d{yyyy-MM-dd}.log + 1 + + + ERROR + ACCEPT + DENY + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] %logger{36} - %msg%n + + + + + + true + + + + + true + + + + + + + + + + From ae55113ee64a42bdf0628d9eff8a489af599046d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Thu, 25 Sep 2025 03:26:28 +0900 Subject: [PATCH 274/399] =?UTF-8?q?feat:=20Dockerfile=EC=97=90=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=20=EB=94=94=EB=A0=89=ED=86=A0=EB=A6=AC=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 5 ++- .../global/log/ControllerLogAspect.java | 40 +++++++++++++++++-- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index c68d1129..50e17e73 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,6 +15,9 @@ RUN ./gradlew clean build --no-daemon FROM --platform=linux/amd64 openjdk:17-jdk-slim WORKDIR /app +# 로그 디렉토리 미리 생성 +RUN mkdir -p /app/logs + # 빌드 단계에서 생성된 JAR 파일 복사 (파일명이 프로젝트에 따라 달라질 수 있으므로 와일드카드 사용) COPY --from=builder /home/gradle/project/build/libs/*.jar app.jar @@ -22,4 +25,4 @@ COPY --from=builder /home/gradle/project/build/libs/*.jar app.jar EXPOSE 9000 # 애플리케이션 실행 -ENTRYPOINT ["java", "-jar", "app.jar"] \ No newline at end of file +ENTRYPOINT ["java", "-jar", "app.jar"] diff --git a/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java b/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java index f74ee4e0..afe826c8 100644 --- a/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java +++ b/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java @@ -1,6 +1,8 @@ package ssu.eatssu.global.log; +import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; @@ -11,12 +13,16 @@ import org.springframework.web.context.request.ServletRequestAttributes; import java.util.Arrays; +import java.util.stream.Collectors; @Aspect @Component @Slf4j +@RequiredArgsConstructor public class ControllerLogAspect { + private final ObjectMapper objectMapper; + @Pointcut("within(@org.springframework.web.bind.annotation.RestController *)") public void restController() {} @@ -29,14 +35,32 @@ public Object logApi(ProceedingJoinPoint joinPoint) throws Throwable { String uri = request.getRequestURI(); String method = request.getMethod(); - Object[] args = joinPoint.getArgs(); + String argsJson = Arrays.stream(joinPoint.getArgs()) + .map(arg -> { + try { + return objectMapper.writeValueAsString(arg); + } catch (Exception e) { + return String.valueOf(arg); + } + }) + .collect(Collectors.joining(", ")); - log.info("REQUEST {} {} args={}", method, uri, Arrays.toString(args)); + log.info("REQUEST {} {} args=[{}]", method, uri, argsJson); try { - Object result = joinPoint.proceed(); + Object result = joinPoint.proceed(); long time = System.currentTimeMillis() - start; - log.info("RESPONSE {} {} ({} ms) result={}", method, uri, time, result); + + String resultJson; + try { + resultJson = objectMapper.writeValueAsString(result); + } catch (Exception e) { + resultJson = String.valueOf(result); + } + + resultJson = truncate(resultJson, 200); + + log.info("RESPONSE {} {} ({} ms) result={}", method, uri, time, resultJson); return result; } catch (Throwable e) { long time = System.currentTimeMillis() - start; @@ -44,4 +68,12 @@ public Object logApi(ProceedingJoinPoint joinPoint) throws Throwable { throw e; } } + + private String truncate(String input, int maxLength) { + if (input == null) return null; + return input.length() <= maxLength + ? input + : input.substring(0, maxLength) + "...(truncated)"; + } } + From 07d60a84c04718deea2990a212f1578730bc6514 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Thu, 25 Sep 2025 06:15:39 +0900 Subject: [PATCH 275/399] =?UTF-8?q?feat:=20=EB=A1=9C=EA=B9=85=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 3 +- logs/eatssu-app-error.log | 23816 ++++++++++ logs/eatssu-app.log | 37217 ++++++++++++++++ .../inquiry/service/InquiryService.java | 12 +- .../dto/response/MenusInMealResponse.java | 6 +- .../domain/menu/service/MealService.java | 9 +- .../service/PartnershipService.java | 22 +- .../domain/report/service/ReportService.java | 17 +- .../review/service/ReviewServiceV2.java | 65 +- .../domain/user/service/UserService.java | 17 +- .../ssu/eatssu/global/config/AsyncConfig.java | 9 + .../global/log/ControllerLogAspect.java | 53 +- .../ssu/eatssu/global/log/event/LogEvent.java | 7 + .../global/log/event/LogEventListener.java | 18 + 14 files changed, 61233 insertions(+), 38 deletions(-) create mode 100644 logs/eatssu-app-error.log create mode 100644 logs/eatssu-app.log create mode 100644 src/main/java/ssu/eatssu/global/config/AsyncConfig.java create mode 100644 src/main/java/ssu/eatssu/global/log/event/LogEvent.java create mode 100644 src/main/java/ssu/eatssu/global/log/event/LogEventListener.java diff --git a/build.gradle b/build.gradle index 6cad98bb..9799a10a 100644 --- a/build.gradle +++ b/build.gradle @@ -80,6 +80,7 @@ def generated = 'src/main/generated' tasks.withType(JavaCompile) { options.getGeneratedSourceOutputDirectory().set(file(generated)) + options.compilerArgs += ['-parameters'] } sourceSets { @@ -88,4 +89,4 @@ sourceSets { clean { delete file('src/main/generated') -} \ No newline at end of file +} diff --git a/logs/eatssu-app-error.log b/logs/eatssu-app-error.log new file mode 100644 index 00000000..1d164434 --- /dev/null +++ b/logs/eatssu-app-error.log @@ -0,0 +1,23816 @@ +2025-09-25 03:48:09.633 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:09.648 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:09.653 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.EatSsuApplicationTests@34eb5d01] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5d68be4f testClass = ssu.eatssu.EatSsuApplicationTests, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:10.053 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:10.057 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:10.059 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1892865f] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:10.338 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:10.345 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:10.346 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@648bfebe] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:10.588 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:10.593 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:10.593 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@2df0a4c3] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:10.781 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:10.791 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:10.792 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6b438782] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:10.973 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:10.976 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:10.978 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6e1e9a10] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:11.184 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:11.187 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:11.188 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@8941d98] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:11.381 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:11.385 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:11.386 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@3b5299a3] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:11.551 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:11.556 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:11.557 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@5c8b6b4d] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:11.717 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:11.721 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:11.722 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@2d8ef86b] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:11.879 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:11.883 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:11.887 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@61267fa2] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:12.038 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.042 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.043 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@45ba31bc] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.201 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.204 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.205 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@4ac5bbc8] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.355 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.358 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.359 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@eb52295] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.504 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.508 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.509 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1a408d7e] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.661 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.665 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.666 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@2eaafa39] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.808 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.812 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.813 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@374ea446] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.965 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.968 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.969 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@64ad8c92] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:13.114 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:13.118 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:13.119 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@fed54a6] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:13.274 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:13.278 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:13.278 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@707c4466] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:13.422 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:13.425 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:13.426 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@2588d9b5] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:13.580 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:13.584 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:13.585 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@445265d6] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:13.746 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:13.750 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:13.750 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7c0c380f] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:13.898 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:13.901 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:13.902 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@66a1cbd8] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.044 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.047 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.048 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@4daaeaeb] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.227 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.230 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.230 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@41a421dd] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.384 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.387 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.394 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@119983dd] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.540 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.544 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.544 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@588ee108] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@436739c1 testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.685 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.688 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.689 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@19d7f0d2] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@436739c1 testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.825 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.829 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.829 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@403b0010] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@436739c1 testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.966 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.969 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.969 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MenuServiceTest@656f03c8] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@4d0db87a testClass = ssu.eatssu.domain.menu.service.MenuServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.113 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.117 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.117 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.report.service.ReportServiceTest@14509554] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@1515f02c testClass = ssu.eatssu.domain.report.service.ReportServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.263 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.266 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.267 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@5e557ca8] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@7dd6ef6f testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.400 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.403 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.404 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@2a1d353d] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@7dd6ef6f testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.537 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.540 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.541 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@3471a8da] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@7dd6ef6f testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.689 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.692 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.693 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@5cba43e3] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@65573a97 testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.835 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.838 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.839 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@2384644a] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@65573a97 testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.979 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.983 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.984 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@29f5e2ac] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@65573a97 testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:16.142 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:16.145 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:16.146 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@5a987d76] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@65573a97 testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:30.486 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:30.502 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:30.505 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.EatSsuApplicationTests@57ed02e6] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@4fef5792 testClass = ssu.eatssu.EatSsuApplicationTests, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:30.914 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:30.918 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:30.919 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7d65c0ac] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:31.161 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:31.165 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:31.166 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@ce5a2ea] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:31.412 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:31.417 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:31.418 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@72f71ea2] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:31.615 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:31.625 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:31.626 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@5cdd5ff9] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:31.827 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:31.831 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:31.831 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1b1d2d7b] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:32.001 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:32.005 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:32.006 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7ee45cbe] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:32.185 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:32.188 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:32.189 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6d5ef5ee] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:32.355 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:32.359 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:32.360 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7e7a6f81] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:32.518 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:32.522 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:32.523 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@49f4792a] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:32.686 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:32.690 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:32.691 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@4c601487] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:32.847 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:32.850 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:32.851 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@9a2c163] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.022 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.025 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.026 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@5db33742] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.176 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.179 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.179 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@60e50c6] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.319 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.322 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.323 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@77c8c772] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.485 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.490 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.490 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@628be4f6] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.642 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.646 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.647 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6fcbb7ae] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.802 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.805 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.806 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@72e09a66] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.953 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.957 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.957 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@685f7fd9] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:34.106 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:34.109 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:34.109 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6191335f] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:34.281 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:34.285 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:34.286 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1639f9ae] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:34.440 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:34.443 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:34.443 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@682921cb] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:34.595 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:34.598 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:34.599 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7034bb18] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:34.775 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:34.778 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:34.779 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@3d2bcab9] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:34.919 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:34.922 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:34.923 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1799d41f] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.148 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:35.151 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.152 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@5a2481da] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.298 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:35.302 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.302 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@11e32a5e] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.458 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:35.461 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.461 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@436739c1] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3927903e testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.609 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:35.614 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.615 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@c4b6076] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3927903e testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.781 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:35.786 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.786 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@ca2f6b7] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3927903e testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:36.081 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:36.088 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:36.090 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MenuServiceTest@4d0db87a] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@e361d62 testClass = ssu.eatssu.domain.menu.service.MenuServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:36.446 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:36.453 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:36.454 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.report.service.ReportServiceTest@1515f02c] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@1483f1f8 testClass = ssu.eatssu.domain.report.service.ReportServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:36.860 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:36.865 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:36.866 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@7dd6ef6f] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3bafa0e6 testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.053 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:37.056 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.057 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@16abf193] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3bafa0e6 testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.207 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:37.211 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.211 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@317b33a1] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3bafa0e6 testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.361 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:37.365 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.366 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@51bc0fc0] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@679bd9ff testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.510 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:37.514 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.515 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@6bc1a32c] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@679bd9ff testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.660 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:37.664 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.664 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@a6a4c55] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@679bd9ff testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.802 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:37.806 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.806 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@1e5c691e] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@679bd9ff testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted diff --git a/logs/eatssu-app.log b/logs/eatssu-app.log new file mode 100644 index 00000000..edfc856b --- /dev/null +++ b/logs/eatssu-app.log @@ -0,0 +1,37217 @@ +2025-09-25 03:41:04.330 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final +2025-09-25 03:41:04.346 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 88486 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:41:04.346 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 03:41:04.362 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-09-25 03:41:04.362 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-09-25 03:41:04.833 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:41:04.875 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 39 ms. Found 22 JPA repository interfaces. +2025-09-25 03:41:05.226 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 03:41:05.230 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 03:41:05.230 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 03:41:05.230 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 03:41:05.252 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 03:41:05.253 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 890 ms +2025-09-25 03:41:05.375 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:41:05.393 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final +2025-09-25 03:41:05.501 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-09-25 03:41:05.731 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@258e8ca3 +2025-09-25 03:41:05.732 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-09-25 03:41:05.774 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 03:41:07.084 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 03:41:07.094 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:41:08.199 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 03:41:08.221 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 03:41:08.323 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@43b68ee8, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5c071b23, org.springframework.security.web.context.SecurityContextHolderFilter@44c27436, org.springframework.security.web.header.HeaderWriterFilter@71963b91, org.springframework.web.filter.CorsFilter@56467709, org.springframework.security.web.authentication.logout.LogoutFilter@37596a10, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@7780c03, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@6dea3f5c, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@473fc0f5, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@70ce03ca, org.springframework.security.web.access.ExceptionTranslationFilter@12b155e7, org.springframework.security.web.access.intercept.AuthorizationFilter@63271ca2] +2025-09-25 03:41:08.712 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 03:41:08.748 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 03:41:08.763 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 03:41:08.776 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 4.625 seconds (process running for 4.873) +2025-09-25 03:41:10.451 [INFO] [RMI TCP Connection(2)-10.28.28.218] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-09-25 03:41:10.451 [INFO] [RMI TCP Connection(2)-10.28.28.218] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-09-25 03:41:10.453 [INFO] [RMI TCP Connection(2)-10.28.28.218] o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms +2025-09-25 03:41:29.039 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST GET /partnerships args= +2025-09-25 03:41:29.158 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE GET /partnerships (113 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[{"storeName":"역전할머니맥주","longitude":126.9573923,"latitude":37.4946689,"restaurantType":"RESTAURANT","partnershipInfos":[{"id":23,"colleg...(truncated) +2025-09-25 03:41:58.366 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 1 class path change (1 addition, 0 deletions, 0 modifications) +2025-09-25 03:41:58.376 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] +2025-09-25 03:41:58.377 [INFO] [Thread-7] o.a.catalina.core.StandardService - Stopping service [Tomcat] +2025-09-25 03:41:58.379 [INFO] [Thread-7] o.a.c.c.C.[Tomcat].[localhost].[/] - Destroying Spring FrameworkServlet 'dispatcherServlet' +2025-09-25 03:41:58.383 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] +2025-09-25 03:41:58.387 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] +2025-09-25 03:41:58.418 [INFO] [Thread-7] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:41:58.422 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-09-25 03:41:58.879 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-09-25 03:41:58.969 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 88486 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:41:58.969 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 03:41:59.170 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:41:59.193 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 23 ms. Found 22 JPA repository interfaces. +2025-09-25 03:41:59.276 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 03:41:59.276 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 03:41:59.276 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 03:41:59.276 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 03:41:59.282 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 03:41:59.282 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 312 ms +2025-09-25 03:41:59.343 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:41:59.347 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... +2025-09-25 03:41:59.491 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-2 - Added connection com.mysql.cj.jdbc.ConnectionImpl@752fb3ff +2025-09-25 03:41:59.491 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Start completed. +2025-09-25 03:41:59.498 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 03:42:00.673 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 03:42:00.674 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:42:01.190 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 03:42:01.200 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 03:42:01.247 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@200ba7a8, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@55a86de2, org.springframework.security.web.context.SecurityContextHolderFilter@17350f21, org.springframework.security.web.header.HeaderWriterFilter@4cf056fa, org.springframework.web.filter.CorsFilter@409310b8, org.springframework.security.web.authentication.logout.LogoutFilter@58ad7e5b, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@6df0ccdb, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7a3589f2, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@6177ee04, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@103b102a, org.springframework.security.web.access.ExceptionTranslationFilter@594872e8, org.springframework.security.web.access.intercept.AuthorizationFilter@55541043] +2025-09-25 03:42:01.363 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 03:42:01.376 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 03:42:01.376 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 03:42:01.382 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 2.431 seconds (process running for 57.479) +2025-09-25 03:42:02.281 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-09-25 03:42:02.826 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 1 class path change (0 additions, 0 deletions, 1 modification) +2025-09-25 03:42:02.833 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] +2025-09-25 03:42:02.833 [INFO] [Thread-9] o.a.catalina.core.StandardService - Stopping service [Tomcat] +2025-09-25 03:42:02.835 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] +2025-09-25 03:42:02.836 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] +2025-09-25 03:42:02.842 [INFO] [Thread-9] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:42:02.843 [INFO] [Thread-9] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown initiated... +2025-09-25 03:42:03.464 [INFO] [Thread-9] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown completed. +2025-09-25 03:42:03.532 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 88486 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:42:03.532 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 03:42:03.672 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:42:03.695 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 23 ms. Found 22 JPA repository interfaces. +2025-09-25 03:42:03.782 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 03:42:03.782 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 03:42:03.782 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 03:42:03.782 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 03:42:03.788 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 03:42:03.788 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 256 ms +2025-09-25 03:42:03.847 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:42:03.851 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Starting... +2025-09-25 03:42:04.046 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-3 - Added connection com.mysql.cj.jdbc.ConnectionImpl@dc7dce1 +2025-09-25 03:42:04.046 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Start completed. +2025-09-25 03:42:04.053 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 03:42:05.123 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 03:42:05.124 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:42:05.589 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 03:42:05.599 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 03:42:05.654 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@295dcb0a, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@3da1c6d3, org.springframework.security.web.context.SecurityContextHolderFilter@76108ec2, org.springframework.security.web.header.HeaderWriterFilter@41368639, org.springframework.web.filter.CorsFilter@10593def, org.springframework.security.web.authentication.logout.LogoutFilter@42ff054a, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@1965238b, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@28cc2383, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3d0ec631, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@5ea7ae36, org.springframework.security.web.access.ExceptionTranslationFilter@7ef46958, org.springframework.security.web.access.intercept.AuthorizationFilter@73ecf092] +2025-09-25 03:42:05.788 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 03:42:05.807 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 03:42:05.808 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 03:42:05.816 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 2.301 seconds (process running for 61.913) +2025-09-25 03:42:06.685 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-09-25 03:42:12.605 [INFO] [http-nio-9000-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-09-25 03:42:12.606 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-09-25 03:42:12.612 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Completed initialization in 6 ms +2025-09-25 03:42:12.650 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST GET /partnerships args= +2025-09-25 03:42:12.749 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE GET /partnerships (93 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[{"storeName":"역전할머니맥주","longitude":126.9573923,"latitude":37.4946689,"restaurantType":"RESTAURANT","partnershipInfos":[{"id":23,"colleg...(truncated) +2025-09-25 03:42:24.823 [INFO] [http-nio-9000-exec-3] s.e.global.log.ControllerLogAspect - REQUEST GET /users/department args= +2025-09-25 03:42:24.897 [INFO] [http-nio-9000-exec-3] s.e.global.log.ControllerLogAspect - RESPONSE GET /users/department (69 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":{"departmentId":null,"departmentName":null,"collegeId":null,"collegeName":null}} +2025-09-25 03:43:19.417 [INFO] [http-nio-9000-exec-5] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args="2023-12-31T15:00:00.000+00:00", "DODAM", "MORNING" +2025-09-25 03:43:19.520 [INFO] [http-nio-9000-exec-5] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (107 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[]} +2025-09-25 03:45:20.040 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:45:20.043 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown initiated... +2025-09-25 03:45:20.511 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown completed. +2025-09-25 03:47:08.109 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final +2025-09-25 03:47:08.132 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 88808 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:47:08.133 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 03:47:08.158 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-09-25 03:47:08.158 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-09-25 03:47:09.488 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:47:09.549 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 55 ms. Found 22 JPA repository interfaces. +2025-09-25 03:47:09.994 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 03:47:09.998 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 03:47:09.998 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 03:47:09.998 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 03:47:10.024 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 03:47:10.024 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1866 ms +2025-09-25 03:47:10.168 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:47:10.191 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final +2025-09-25 03:47:10.320 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-09-25 03:47:10.595 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@6d751863 +2025-09-25 03:47:10.596 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-09-25 03:47:10.646 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 03:47:11.967 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 03:47:11.975 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:47:13.000 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 03:47:13.026 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 03:47:13.126 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@494a9f97, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5dc8d54d, org.springframework.security.web.context.SecurityContextHolderFilter@5df09ebc, org.springframework.security.web.header.HeaderWriterFilter@70db8e42, org.springframework.web.filter.CorsFilter@f604c3c, org.springframework.security.web.authentication.logout.LogoutFilter@19de05bb, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@6a1c5db6, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@3c4125e9, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@4eeee2a9, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@77b7d145, org.springframework.security.web.access.ExceptionTranslationFilter@28c2063a, org.springframework.security.web.access.intercept.AuthorizationFilter@5c13ca23] +2025-09-25 03:47:13.368 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 03:47:13.397 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 03:47:13.407 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 03:47:13.417 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 5.577 seconds (process running for 6.283) +2025-09-25 03:47:15.105 [INFO] [RMI TCP Connection(4)-10.28.28.218] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-09-25 03:47:15.105 [INFO] [RMI TCP Connection(4)-10.28.28.218] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-09-25 03:47:15.106 [INFO] [RMI TCP Connection(4)-10.28.28.218] o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms +2025-09-25 03:47:26.931 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args="2023-12-31T15:00:00.000+00:00", "DODAM", "MORNING" +2025-09-25 03:47:27.009 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (78 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[]} +2025-09-25 03:47:40.643 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 266 class path changes (0 additions, 266 deletions, 0 modifications) +2025-09-25 03:47:40.664 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] +2025-09-25 03:47:40.664 [INFO] [Thread-7] o.a.catalina.core.StandardService - Stopping service [Tomcat] +2025-09-25 03:47:40.666 [INFO] [Thread-7] o.a.c.c.C.[Tomcat].[localhost].[/] - Destroying Spring FrameworkServlet 'dispatcherServlet' +2025-09-25 03:47:40.668 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] +2025-09-25 03:47:40.670 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] +2025-09-25 03:47:40.684 [INFO] [Thread-7] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:47:40.692 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-09-25 03:47:41.150 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-09-25 03:47:41.260 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 88808 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:47:41.260 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 03:47:41.566 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:47:41.567 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 1 ms. Found 0 JPA repository interfaces. +2025-09-25 03:47:41.653 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 03:47:41.654 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 03:47:41.654 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 03:47:41.654 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 03:47:41.663 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 03:47:41.664 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 403 ms +2025-09-25 03:47:41.730 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:47:41.734 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... +2025-09-25 03:47:41.881 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-2 - Added connection com.mysql.cj.jdbc.ConnectionImpl@7180641b +2025-09-25 03:47:41.881 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Start completed. +2025-09-25 03:47:41.888 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 03:47:41.896 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 03:47:41.896 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:47:42.004 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 03:47:42.016 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 03:47:42.143 [WARN] [restartedMain] o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - + +Using generated security password: 03fbb7b2-b21a-4f41-ba01-446f2fed98f7 + +This generated password is for development use only. Your security configuration must be updated before running your application in production. + +2025-09-25 03:47:42.163 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@30dee6c7, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@37a90954, org.springframework.security.web.context.SecurityContextHolderFilter@6d979a7b, org.springframework.security.web.header.HeaderWriterFilter@6ed30a0f, org.springframework.web.filter.CorsFilter@42a03244, org.springframework.security.web.csrf.CsrfFilter@15b12f8f, org.springframework.security.web.authentication.logout.LogoutFilter@26db6526, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@19c8ec10, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@4e49a280, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@10ef1954, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@43788101, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@2fab3d3b, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@482711a1, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@57402d50, org.springframework.security.web.access.ExceptionTranslationFilter@5e6a9f94, org.springframework.security.web.access.intercept.AuthorizationFilter@39d9200d] +2025-09-25 03:47:42.185 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 03:47:42.196 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 03:47:42.196 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 03:47:42.202 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 0.978 seconds (process running for 35.068) +2025-09-25 03:47:42.204 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation delta: + + +========================== +CONDITION EVALUATION DELTA +========================== + + +Positive matches: +----------------- + + ManagementWebSecurityAutoConfiguration matched: + - found 'session' scope (OnWebApplicationCondition) + - AllNestedConditions 2 matched 0 did not; NestedCondition on DefaultWebSecurityCondition.Beans @ConditionalOnMissingBean (types: org.springframework.security.web.SecurityFilterChain; SearchStrategy: all) did not find any beans; NestedCondition on DefaultWebSecurityCondition.Classes @ConditionalOnClass found required classes 'org.springframework.security.web.SecurityFilterChain', 'org.springframework.security.config.annotation.web.builders.HttpSecurity' (DefaultWebSecurityCondition) + + SpringBootWebSecurityConfiguration.WebSecurityEnablerConfiguration matched: + - @ConditionalOnClass found required class 'org.springframework.security.config.annotation.web.configuration.EnableWebSecurity' (OnClassCondition) + - @ConditionalOnMissingBean (names: springSecurityFilterChain; SearchStrategy: all) did not find any beans (OnBeanCondition) + + UserDetailsServiceAutoConfiguration matched: + - @ConditionalOnClass found required class 'org.springframework.security.authentication.AuthenticationManager' (OnClassCondition) + - @ConditionalOnBean (types: org.springframework.security.config.annotation.ObjectPostProcessor; SearchStrategy: all) found bean 'objectPostProcessor'; @ConditionalOnMissingBean (types: org.springframework.security.authentication.AuthenticationManager,org.springframework.security.authentication.AuthenticationProvider,org.springframework.security.core.userdetails.UserDetailsService,org.springframework.security.authentication.AuthenticationManagerResolver,org.springframework.security.oauth2.jwt.JwtDecoder,org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector,org.springframework.security.oauth2.client.registration.ClientRegistrationRepository,org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistrationRepository; SearchStrategy: all) did not find any beans (OnBeanCondition) + + +Negative matches: +----------------- + + None + + +Exclusions: +----------- + + None + + +Unconditional classes: +---------------------- + + None + + + +2025-09-25 03:47:43.604 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 2 class path changes (2 additions, 0 deletions, 0 modifications) +2025-09-25 03:47:43.607 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] +2025-09-25 03:47:43.608 [INFO] [Thread-9] o.a.catalina.core.StandardService - Stopping service [Tomcat] +2025-09-25 03:47:43.609 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] +2025-09-25 03:47:43.612 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] +2025-09-25 03:47:43.614 [INFO] [Thread-9] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:47:43.615 [INFO] [Thread-9] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown initiated... +2025-09-25 03:47:43.841 [INFO] [Thread-9] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown completed. +2025-09-25 03:47:43.901 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 88808 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:47:43.901 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 03:47:44.011 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:47:44.011 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 0 ms. Found 0 JPA repository interfaces. +2025-09-25 03:47:44.103 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 03:47:44.104 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 03:47:44.104 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 03:47:44.104 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 03:47:44.123 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 03:47:44.124 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 222 ms +2025-09-25 03:47:44.205 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:47:44.209 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Starting... +2025-09-25 03:47:44.396 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-3 - Added connection com.mysql.cj.jdbc.ConnectionImpl@35b1a620 +2025-09-25 03:47:44.397 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Start completed. +2025-09-25 03:47:44.404 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 03:47:44.413 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 03:47:44.414 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:47:44.503 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 03:47:44.513 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 03:47:44.624 [WARN] [restartedMain] o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - + +Using generated security password: d28e6f7c-d532-46bf-8d68-0e0865484c5b + +This generated password is for development use only. Your security configuration must be updated before running your application in production. + +2025-09-25 03:47:44.638 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@231444fb, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@2415da5a, org.springframework.security.web.context.SecurityContextHolderFilter@7af959b8, org.springframework.security.web.header.HeaderWriterFilter@4edda985, org.springframework.web.filter.CorsFilter@6d6c0be5, org.springframework.security.web.csrf.CsrfFilter@63a9fd7d, org.springframework.security.web.authentication.logout.LogoutFilter@46cbd98c, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@2c4e4f9a, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@4c71372, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@7e4a39b4, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@20a4f44f, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@76b3d630, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@12ff04fe, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@7f78891a, org.springframework.security.web.access.ExceptionTranslationFilter@5ae7f43a, org.springframework.security.web.access.intercept.AuthorizationFilter@2fb9f576] +2025-09-25 03:47:44.659 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 03:47:44.673 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 03:47:44.674 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 03:47:44.679 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 0.797 seconds (process running for 37.546) +2025-09-25 03:47:44.681 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-09-25 03:48:00.110 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:48:00.112 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown initiated... +2025-09-25 03:48:00.611 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown completed. +2025-09-25 03:48:08.583 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final +2025-09-25 03:48:08.633 [INFO] [Test worker] ssu.eatssu.EatSsuApplicationTests - Starting EatSsuApplicationTests using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:08.634 [INFO] [Test worker] ssu.eatssu.EatSsuApplicationTests - The following 1 profile is active: "test" +2025-09-25 03:48:09.120 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:09.168 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 44 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:09.481 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:09.529 [INFO] [Test worker] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final +2025-09-25 03:48:09.627 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-09-25 03:48:09.629 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:09.633 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:09.633 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:09.642 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:09.648 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:09.653 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.EatSsuApplicationTests@34eb5d01] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5d68be4f testClass = ssu.eatssu.EatSsuApplicationTests, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:09.663 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.auth.service.OAuthServiceTest]: OAuthServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. +2025-09-25 03:48:09.674 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.auth.service.OAuthServiceTest +2025-09-25 03:48:09.697 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:09.697 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:09.837 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:09.855 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 17 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:10.044 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:10.049 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... +2025-09-25 03:48:10.051 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:10.053 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:10.053 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:10.057 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:10.057 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:10.059 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1892865f] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:10.090 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:10.090 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:10.227 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:10.245 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 18 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:10.331 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:10.336 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Starting... +2025-09-25 03:48:10.336 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:10.338 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:10.338 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:10.344 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:10.345 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:10.346 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@648bfebe] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:10.373 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:10.373 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:10.508 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:10.524 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 15 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:10.584 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:10.587 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Starting... +2025-09-25 03:48:10.587 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:10.588 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:10.588 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:10.592 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:10.593 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:10.593 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@2df0a4c3] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:10.612 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:10.612 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:10.717 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:10.732 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:10.778 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:10.781 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-5 - Starting... +2025-09-25 03:48:10.781 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:10.781 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:10.781 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:10.791 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:10.791 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:10.792 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6b438782] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:10.808 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:10.808 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:10.904 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:10.919 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:10.970 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:10.972 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-6 - Starting... +2025-09-25 03:48:10.972 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:10.973 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:10.973 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:10.976 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:10.976 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:10.978 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6e1e9a10] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:10.998 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:10.998 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:11.094 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:11.115 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 21 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:11.176 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:11.179 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-7 - Starting... +2025-09-25 03:48:11.179 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:11.184 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:11.184 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:11.187 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:11.187 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:11.188 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@8941d98] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:11.202 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:11.202 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:11.321 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:11.337 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 15 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:11.378 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:11.381 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-8 - Starting... +2025-09-25 03:48:11.381 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:11.381 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:11.381 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:11.385 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:11.385 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:11.386 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@3b5299a3] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:11.399 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:11.399 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:11.495 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:11.508 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:11.548 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:11.550 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-9 - Starting... +2025-09-25 03:48:11.551 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:11.551 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:11.551 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:11.556 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:11.556 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:11.557 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@5c8b6b4d] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:11.572 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:11.572 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:11.659 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:11.673 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:11.714 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:11.716 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-10 - Starting... +2025-09-25 03:48:11.716 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:11.717 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:11.717 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:11.720 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:11.721 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:11.722 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@2d8ef86b] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:11.734 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:11.735 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:11.824 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:11.838 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:11.876 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:11.879 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-11 - Starting... +2025-09-25 03:48:11.879 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:11.879 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:11.879 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:11.883 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:11.883 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:11.887 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@61267fa2] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:11.899 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:11.899 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:11.984 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:11.998 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:12.035 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:12.038 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-12 - Starting... +2025-09-25 03:48:12.038 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:12.038 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.038 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.042 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:12.042 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.043 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@45ba31bc] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.054 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:12.054 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:12.141 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:12.154 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:12.198 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:12.200 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-13 - Starting... +2025-09-25 03:48:12.200 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:12.201 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.201 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.204 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:12.204 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.205 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@4ac5bbc8] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.217 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:12.217 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:12.299 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:12.312 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:12.352 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:12.354 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-14 - Starting... +2025-09-25 03:48:12.354 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:12.355 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.355 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.358 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:12.358 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.359 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@eb52295] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.370 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:12.370 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:12.453 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:12.466 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:12.502 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:12.504 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-15 - Starting... +2025-09-25 03:48:12.504 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:12.504 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.505 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.508 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:12.508 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.509 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1a408d7e] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.522 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:12.522 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:12.602 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:12.616 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:12.658 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:12.660 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-16 - Starting... +2025-09-25 03:48:12.660 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:12.661 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.661 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.664 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:12.665 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.666 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@2eaafa39] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.677 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:12.677 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:12.758 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:12.770 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:12.805 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:12.808 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-17 - Starting... +2025-09-25 03:48:12.808 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:12.808 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.808 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.811 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:12.812 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.813 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@374ea446] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.826 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:12.826 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:12.909 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:12.923 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:12.962 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:12.964 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-18 - Starting... +2025-09-25 03:48:12.965 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:12.965 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.965 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:12.968 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:12.968 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.969 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@64ad8c92] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:12.981 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:12.981 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:13.064 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:13.076 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:13.112 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:13.114 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-19 - Starting... +2025-09-25 03:48:13.114 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:13.114 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:13.115 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:13.118 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:13.118 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:13.119 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@fed54a6] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:13.131 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:13.131 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:13.220 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:13.233 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:13.271 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:13.274 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-20 - Starting... +2025-09-25 03:48:13.274 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:13.274 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:13.275 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:13.277 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:13.278 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:13.278 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@707c4466] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:13.290 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:13.290 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:13.371 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:13.383 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:13.419 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:13.421 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-21 - Starting... +2025-09-25 03:48:13.421 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:13.422 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:13.422 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:13.425 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:13.425 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:13.426 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@2588d9b5] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:13.437 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:13.437 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:13.519 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:13.535 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 15 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:13.577 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:13.579 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-22 - Starting... +2025-09-25 03:48:13.580 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:13.580 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:13.580 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:13.583 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:13.584 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:13.585 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@445265d6] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:13.606 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:13.606 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:13.693 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:13.707 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:13.744 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:13.746 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-23 - Starting... +2025-09-25 03:48:13.746 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:13.746 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:13.747 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:13.749 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:13.750 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:13.750 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7c0c380f] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:13.761 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:13.762 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:13.844 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:13.857 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:13.893 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:13.897 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-24 - Starting... +2025-09-25 03:48:13.897 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:13.898 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:13.898 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:13.900 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:13.901 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:13.902 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@66a1cbd8] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:13.912 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:13.912 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:13.992 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:14.005 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:14.041 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:14.043 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-25 - Starting... +2025-09-25 03:48:14.043 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:14.044 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.044 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.047 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:14.047 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.048 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@4daaeaeb] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.059 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:14.059 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:14.149 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:14.174 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 24 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:14.224 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:14.226 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-26 - Starting... +2025-09-25 03:48:14.226 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:14.227 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.227 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.229 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:14.230 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.230 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@41a421dd] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.242 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:14.242 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:14.325 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:14.339 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:14.381 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:14.383 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-27 - Starting... +2025-09-25 03:48:14.383 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:14.384 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.384 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.387 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:14.387 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.394 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@119983dd] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.395 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.menu.service.MealServiceTest]: MealServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. +2025-09-25 03:48:14.403 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.menu.service.MealServiceTest +2025-09-25 03:48:14.412 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - Starting MealServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:14.412 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:14.488 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:14.501 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:14.538 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:14.540 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-28 - Starting... +2025-09-25 03:48:14.540 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:14.540 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.540 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.543 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:14.544 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.544 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@588ee108] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@436739c1 testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.554 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - Starting MealServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:14.554 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:14.636 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:14.648 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:14.682 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:14.684 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-29 - Starting... +2025-09-25 03:48:14.684 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:14.685 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.685 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.688 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:14.688 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.689 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@19d7f0d2] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@436739c1 testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.698 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - Starting MealServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:14.698 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:14.778 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:14.790 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:14.823 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:14.825 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-30 - Starting... +2025-09-25 03:48:14.825 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:14.825 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.825 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.828 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:14.829 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.829 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@403b0010] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@436739c1 testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.831 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.menu.service.MenuServiceTest]: MenuServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. +2025-09-25 03:48:14.831 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.menu.service.MenuServiceTest +2025-09-25 03:48:14.840 [INFO] [Test worker] s.e.d.menu.service.MenuServiceTest - Starting MenuServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:14.840 [INFO] [Test worker] s.e.d.menu.service.MenuServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:14.917 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:14.931 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:14.963 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:14.965 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-31 - Starting... +2025-09-25 03:48:14.965 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:14.966 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.966 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:14.968 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:14.969 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.969 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MenuServiceTest@656f03c8] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@4d0db87a testClass = ssu.eatssu.domain.menu.service.MenuServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:14.971 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.report.service.ReportServiceTest]: ReportServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. +2025-09-25 03:48:14.977 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.report.service.ReportServiceTest +2025-09-25 03:48:14.986 [INFO] [Test worker] s.e.d.r.service.ReportServiceTest - Starting ReportServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:14.986 [INFO] [Test worker] s.e.d.r.service.ReportServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:15.059 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:15.072 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:15.111 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:15.113 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-32 - Starting... +2025-09-25 03:48:15.113 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:15.113 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.113 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.116 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:15.117 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.117 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.report.service.ReportServiceTest@14509554] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@1515f02c testClass = ssu.eatssu.domain.report.service.ReportServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.119 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.review.service.ReviewServiceTest]: ReviewServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. +2025-09-25 03:48:15.126 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.review.service.ReviewServiceTest +2025-09-25 03:48:15.135 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - Starting ReviewServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:15.135 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:15.208 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:15.221 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:15.260 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:15.263 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-33 - Starting... +2025-09-25 03:48:15.263 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:15.263 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.263 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.266 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:15.266 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.267 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@5e557ca8] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@7dd6ef6f testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.277 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - Starting ReviewServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:15.277 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:15.349 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:15.362 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:15.393 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:15.399 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-34 - Starting... +2025-09-25 03:48:15.400 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:15.400 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.400 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.403 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:15.403 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.404 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@2a1d353d] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@7dd6ef6f testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.413 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - Starting ReviewServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:15.413 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:15.486 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:15.498 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:15.531 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:15.533 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-35 - Starting... +2025-09-25 03:48:15.533 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:15.537 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.537 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.540 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:15.540 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.541 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@3471a8da] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@7dd6ef6f testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.542 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.user.service.UserServiceTest]: UserServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. +2025-09-25 03:48:15.549 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.user.service.UserServiceTest +2025-09-25 03:48:15.559 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - Starting UserServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:15.559 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:15.635 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:15.649 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:15.687 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:15.689 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-36 - Starting... +2025-09-25 03:48:15.689 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:15.689 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.689 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.692 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:15.692 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.693 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@5cba43e3] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@65573a97 testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.702 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - Starting UserServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:15.702 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:15.777 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:15.790 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:15.833 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:15.835 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-37 - Starting... +2025-09-25 03:48:15.835 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:15.835 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.835 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.838 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:15.838 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.839 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@2384644a] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@65573a97 testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.848 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - Starting UserServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:15.848 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:15.919 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:15.936 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 16 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:15.976 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:15.979 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-38 - Starting... +2025-09-25 03:48:15.979 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:15.979 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.979 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:15.982 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:15.983 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.984 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@29f5e2ac] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@65573a97 testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:15.995 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - Starting UserServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:15.996 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:16.088 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:16.102 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:16.139 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:16.141 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-39 - Starting... +2025-09-25 03:48:16.141 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:16.142 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:16.142 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:16.145 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:16.145 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:16.146 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@5a987d76] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@65573a97 testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:29.487 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final +2025-09-25 03:48:29.502 [INFO] [Test worker] ssu.eatssu.EatSsuApplicationTests - Starting EatSsuApplicationTests using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:29.505 [INFO] [Test worker] ssu.eatssu.EatSsuApplicationTests - The following 1 profile is active: "test" +2025-09-25 03:48:30.026 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:30.073 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 43 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:30.355 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:30.373 [INFO] [Test worker] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final +2025-09-25 03:48:30.476 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-09-25 03:48:30.480 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:30.486 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:30.487 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:30.496 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:30.502 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:30.505 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.EatSsuApplicationTests@57ed02e6] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@4fef5792 testClass = ssu.eatssu.EatSsuApplicationTests, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:30.515 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.auth.service.OAuthServiceTest]: OAuthServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. +2025-09-25 03:48:30.530 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.auth.service.OAuthServiceTest +2025-09-25 03:48:30.555 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:30.555 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:30.701 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:30.725 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 24 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:30.910 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:30.913 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... +2025-09-25 03:48:30.913 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:30.914 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:30.914 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:30.917 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:30.918 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:30.919 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7d65c0ac] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:30.947 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:30.947 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:31.074 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:31.093 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 18 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:31.158 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:31.160 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Starting... +2025-09-25 03:48:31.161 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:31.161 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:31.161 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:31.165 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:31.165 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:31.166 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@ce5a2ea] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:31.185 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:31.185 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:31.295 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:31.318 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 22 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:31.407 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:31.411 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Starting... +2025-09-25 03:48:31.411 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:31.412 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:31.412 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:31.416 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:31.417 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:31.418 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@72f71ea2] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:31.433 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:31.433 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:31.545 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:31.561 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 15 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:31.612 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:31.614 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-5 - Starting... +2025-09-25 03:48:31.614 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:31.615 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:31.615 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:31.625 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:31.625 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:31.626 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@5cdd5ff9] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:31.645 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:31.645 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:31.751 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:31.768 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 16 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:31.824 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:31.826 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-6 - Starting... +2025-09-25 03:48:31.826 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:31.827 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:31.827 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:31.830 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:31.831 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:31.831 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1b1d2d7b] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:31.845 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:31.845 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:31.937 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:31.952 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 15 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:31.997 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:32.000 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-7 - Starting... +2025-09-25 03:48:32.001 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:32.001 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:32.001 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:32.004 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:32.005 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:32.006 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7ee45cbe] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:32.021 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:32.021 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:32.126 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:32.140 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:32.182 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:32.184 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-8 - Starting... +2025-09-25 03:48:32.184 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:32.185 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:32.185 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:32.188 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:32.188 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:32.189 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6d5ef5ee] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:32.201 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:32.201 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:32.291 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:32.305 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:32.352 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:32.355 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-9 - Starting... +2025-09-25 03:48:32.355 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:32.355 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:32.355 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:32.358 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:32.359 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:32.360 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7e7a6f81] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:32.372 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:32.372 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:32.455 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:32.470 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:32.515 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:32.517 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-10 - Starting... +2025-09-25 03:48:32.518 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:32.518 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:32.518 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:32.522 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:32.522 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:32.523 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@49f4792a] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:32.535 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:32.535 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:32.626 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:32.640 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:32.682 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:32.685 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-11 - Starting... +2025-09-25 03:48:32.685 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:32.686 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:32.686 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:32.689 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:32.690 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:32.691 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@4c601487] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:32.704 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:32.704 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:32.791 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:32.805 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:32.844 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:32.846 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-12 - Starting... +2025-09-25 03:48:32.846 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:32.847 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:32.847 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:32.850 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:32.850 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:32.851 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@9a2c163] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:32.863 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:32.863 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:32.950 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:32.967 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 16 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:33.018 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:33.021 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-13 - Starting... +2025-09-25 03:48:33.021 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:33.022 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.022 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.024 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:33.025 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.026 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@5db33742] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.038 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:33.038 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:33.120 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:33.132 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:33.173 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:33.175 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-14 - Starting... +2025-09-25 03:48:33.175 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:33.176 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.176 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.178 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:33.179 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.179 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@60e50c6] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.190 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:33.190 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:33.265 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:33.279 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:33.316 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:33.318 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-15 - Starting... +2025-09-25 03:48:33.318 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:33.319 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.319 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.322 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:33.322 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.323 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@77c8c772] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.336 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:33.336 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:33.422 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:33.436 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:33.482 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:33.484 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-16 - Starting... +2025-09-25 03:48:33.484 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:33.485 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.485 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.488 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:33.490 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.490 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@628be4f6] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.501 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:33.501 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:33.585 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:33.600 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:33.639 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:33.642 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-17 - Starting... +2025-09-25 03:48:33.642 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:33.642 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.642 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.645 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:33.646 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.647 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6fcbb7ae] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.659 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:33.659 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:33.746 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:33.761 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 15 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:33.799 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:33.801 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-18 - Starting... +2025-09-25 03:48:33.801 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:33.802 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.802 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.805 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:33.805 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.806 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@72e09a66] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.817 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:33.817 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:33.900 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:33.912 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:33.951 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:33.953 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-19 - Starting... +2025-09-25 03:48:33.953 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:33.953 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.953 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:33.956 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:33.957 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.957 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@685f7fd9] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:33.968 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:33.968 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:34.045 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:34.059 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:34.102 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:34.105 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-20 - Starting... +2025-09-25 03:48:34.105 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:34.106 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:34.106 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:34.108 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:34.109 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:34.109 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6191335f] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:34.136 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:34.136 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:34.230 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:34.242 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:34.278 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:34.281 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-21 - Starting... +2025-09-25 03:48:34.281 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:34.281 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:34.281 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:34.284 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:34.285 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:34.286 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1639f9ae] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:34.298 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:34.298 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:34.383 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:34.396 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:34.437 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:34.439 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-22 - Starting... +2025-09-25 03:48:34.439 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:34.440 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:34.440 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:34.442 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:34.443 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:34.443 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@682921cb] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) + at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) + at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) + at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) + at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 138 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 159 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 174 common frames omitted +2025-09-25 03:48:34.455 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:34.455 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:34.543 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:34.555 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 11 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:34.592 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:34.594 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-23 - Starting... +2025-09-25 03:48:34.594 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:34.595 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:34.595 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:34.598 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:34.598 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:34.599 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7034bb18] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:34.609 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:34.609 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:34.719 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:34.733 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:34.772 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:34.775 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-24 - Starting... +2025-09-25 03:48:34.775 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:34.775 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:34.775 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:34.778 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:34.778 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:34.779 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@3d2bcab9] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:34.790 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:34.790 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:34.867 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:34.882 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 15 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:34.916 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:34.918 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-25 - Starting... +2025-09-25 03:48:34.918 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:34.919 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:34.919 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:34.922 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:34.922 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:34.923 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1799d41f] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:34.933 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:34.933 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:35.017 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:35.030 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:35.145 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:35.147 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-26 - Starting... +2025-09-25 03:48:35.147 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:35.148 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:35.148 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:35.151 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:35.151 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.152 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@5a2481da] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.165 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:35.165 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:35.244 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:35.261 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 16 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:35.296 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:35.298 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-27 - Starting... +2025-09-25 03:48:35.298 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:35.298 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:35.298 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:35.301 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:35.302 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.302 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@11e32a5e] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.304 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.menu.service.MealServiceTest]: MealServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. +2025-09-25 03:48:35.313 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.menu.service.MealServiceTest +2025-09-25 03:48:35.323 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - Starting MealServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:35.323 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:35.405 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:35.419 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:35.455 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:35.457 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-28 - Starting... +2025-09-25 03:48:35.457 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:35.458 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:35.458 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:35.461 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:35.461 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.461 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@436739c1] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3927903e testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.471 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - Starting MealServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:35.471 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:35.553 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:35.568 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:35.606 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:35.608 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-29 - Starting... +2025-09-25 03:48:35.608 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:35.609 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:35.610 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:35.614 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:35.614 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.615 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@c4b6076] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3927903e testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.625 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - Starting MealServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:35.625 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:35.725 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:35.739 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:35.777 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:35.780 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-30 - Starting... +2025-09-25 03:48:35.781 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:35.781 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:35.781 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:35.785 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:35.786 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.786 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@ca2f6b7] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3927903e testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:35.790 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.menu.service.MenuServiceTest]: MenuServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. +2025-09-25 03:48:35.791 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.menu.service.MenuServiceTest +2025-09-25 03:48:35.809 [INFO] [Test worker] s.e.d.menu.service.MenuServiceTest - Starting MenuServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:35.810 [INFO] [Test worker] s.e.d.menu.service.MenuServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:35.951 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:35.977 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 25 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:36.076 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:36.080 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-31 - Starting... +2025-09-25 03:48:36.080 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:36.081 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:36.081 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:36.087 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:36.088 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:36.090 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MenuServiceTest@4d0db87a] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@e361d62 testClass = ssu.eatssu.domain.menu.service.MenuServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:36.093 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.report.service.ReportServiceTest]: ReportServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. +2025-09-25 03:48:36.104 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.report.service.ReportServiceTest +2025-09-25 03:48:36.182 [INFO] [Test worker] s.e.d.r.service.ReportServiceTest - Starting ReportServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:36.182 [INFO] [Test worker] s.e.d.r.service.ReportServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:36.332 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:36.354 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 21 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:36.424 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:36.443 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-32 - Starting... +2025-09-25 03:48:36.443 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:36.446 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:36.446 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:36.451 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:36.453 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:36.454 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.report.service.ReportServiceTest@1515f02c] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@1483f1f8 testClass = ssu.eatssu.domain.report.service.ReportServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:36.456 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.review.service.ReviewServiceTest]: ReviewServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. +2025-09-25 03:48:36.471 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.review.service.ReviewServiceTest +2025-09-25 03:48:36.495 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - Starting ReviewServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:36.495 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:36.633 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:36.657 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 23 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:36.855 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:36.859 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-33 - Starting... +2025-09-25 03:48:36.860 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:36.860 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:36.860 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:36.864 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:36.865 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:36.866 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@7dd6ef6f] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3bafa0e6 testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:36.881 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - Starting ReviewServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:36.881 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:36.994 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:37.009 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:37.050 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:37.052 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-34 - Starting... +2025-09-25 03:48:37.052 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:37.053 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:37.053 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:37.056 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:37.056 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.057 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@16abf193] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3bafa0e6 testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.067 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - Starting ReviewServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:37.067 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:37.156 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:37.170 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:37.204 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:37.206 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-35 - Starting... +2025-09-25 03:48:37.207 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:37.207 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:37.207 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:37.210 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:37.211 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.211 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@317b33a1] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3bafa0e6 testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.213 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.user.service.UserServiceTest]: UserServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. +2025-09-25 03:48:37.219 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.user.service.UserServiceTest +2025-09-25 03:48:37.229 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - Starting UserServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:37.229 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:37.312 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:37.324 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:37.359 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:37.361 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-36 - Starting... +2025-09-25 03:48:37.361 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:37.361 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:37.361 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:37.365 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:37.365 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.366 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@51bc0fc0] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@679bd9ff testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.375 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - Starting UserServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:37.375 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:37.459 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:37.472 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:37.508 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:37.510 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-37 - Starting... +2025-09-25 03:48:37.510 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:37.510 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:37.510 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:37.514 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:37.514 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.515 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@6bc1a32c] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@679bd9ff testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.525 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - Starting UserServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:37.525 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:37.613 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:37.625 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 11 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:37.657 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:37.660 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-38 - Starting... +2025-09-25 03:48:37.660 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:37.660 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:37.660 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:37.663 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:37.664 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.664 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@a6a4c55] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@679bd9ff testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.676 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - Starting UserServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:48:37.676 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - The following 1 profile is active: "test" +2025-09-25 03:48:37.749 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:48:37.761 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. +2025-09-25 03:48:37.800 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:48:37.802 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-39 - Starting... +2025-09-25 03:48:37.802 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} + at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) + at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) + at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +2025-09-25 03:48:37.802 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:37.802 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] +2025-09-25 03:48:37.805 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-09-25 03:48:37.806 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:48:37.806 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@1e5c691e] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@679bd9ff testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) + ... 86 common frames omitted +Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) + at org.hibernate.boot.model.relational.Database.(Database.java:44) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) + ... 107 common frames omitted +Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) + at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) + ... 122 common frames omitted +2025-09-25 03:49:23.832 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final +2025-09-25 03:49:23.875 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 89072 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:49:23.877 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 03:49:23.948 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-09-25 03:49:23.948 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-09-25 03:49:25.060 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:49:25.156 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 89 ms. Found 22 JPA repository interfaces. +2025-09-25 03:49:25.700 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 03:49:25.704 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 03:49:25.704 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 03:49:25.704 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 03:49:25.729 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 03:49:25.729 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1780 ms +2025-09-25 03:49:25.866 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:49:25.883 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final +2025-09-25 03:49:26.004 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-09-25 03:49:26.251 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@1430238c +2025-09-25 03:49:26.252 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-09-25 03:49:26.295 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 03:49:27.788 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 03:49:27.794 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:49:28.951 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 03:49:28.972 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 03:49:29.077 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@2a2f0fed, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@40a4d136, org.springframework.security.web.context.SecurityContextHolderFilter@2a32520a, org.springframework.security.web.header.HeaderWriterFilter@4e1eef14, org.springframework.web.filter.CorsFilter@7e13cd9f, org.springframework.security.web.authentication.logout.LogoutFilter@f211e71, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@4e231414, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@45bbc8, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@5152d8fd, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@1ca13a5a, org.springframework.security.web.access.ExceptionTranslationFilter@1a27a1cb, org.springframework.security.web.access.intercept.AuthorizationFilter@66d6dac8] +2025-09-25 03:49:29.375 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 03:49:29.411 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 03:49:29.420 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 03:49:29.430 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 6.188 seconds (process running for 6.728) +2025-09-25 03:49:30.749 [INFO] [RMI TCP Connection(4)-10.28.28.218] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-09-25 03:49:30.749 [INFO] [RMI TCP Connection(4)-10.28.28.218] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-09-25 03:49:30.751 [INFO] [RMI TCP Connection(4)-10.28.28.218] o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms +2025-09-25 03:50:03.215 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args="2023-12-31T15:00:00.000+00:00", "DODAM", "MORNING" +2025-09-25 03:50:03.297 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (82 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[]} +2025-09-25 03:52:04.564 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:52:04.571 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-09-25 03:52:05.025 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-09-25 03:52:07.168 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final +2025-09-25 03:52:07.183 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 89240 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:52:07.183 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 03:52:07.200 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-09-25 03:52:07.200 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-09-25 03:52:07.985 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:52:08.043 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 54 ms. Found 22 JPA repository interfaces. +2025-09-25 03:52:08.430 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 03:52:08.436 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 03:52:08.436 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 03:52:08.436 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 03:52:08.462 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 03:52:08.463 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1263 ms +2025-09-25 03:52:08.601 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:52:08.619 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final +2025-09-25 03:52:08.810 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-09-25 03:52:09.056 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@54644813 +2025-09-25 03:52:09.057 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-09-25 03:52:09.105 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 03:52:10.532 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 03:52:10.548 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:52:12.162 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 03:52:12.184 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 03:52:12.292 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@18776c4f, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5e11b939, org.springframework.security.web.context.SecurityContextHolderFilter@797a16f6, org.springframework.security.web.header.HeaderWriterFilter@7ef134f, org.springframework.web.filter.CorsFilter@605fe1ba, org.springframework.security.web.authentication.logout.LogoutFilter@647c2cdf, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@7121521e, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1fa4a5f, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@d526e28, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@52975d61, org.springframework.security.web.access.ExceptionTranslationFilter@ebf9244, org.springframework.security.web.access.intercept.AuthorizationFilter@8213bfd] +2025-09-25 03:52:12.564 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 03:52:12.596 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 03:52:12.605 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 03:52:12.615 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 5.636 seconds (process running for 5.977) +2025-09-25 03:52:14.428 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-09-25 03:52:14.428 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-09-25 03:52:14.429 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms +2025-09-25 03:52:43.528 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (68 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[]} +2025-09-25 03:53:49.544 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:53:49.549 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-09-25 03:53:50.010 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-09-25 03:53:52.985 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final +2025-09-25 03:53:53.012 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 89324 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:53:53.013 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 03:53:53.097 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-09-25 03:53:53.097 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-09-25 03:53:54.611 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:53:54.695 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 80 ms. Found 22 JPA repository interfaces. +2025-09-25 03:53:55.119 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 03:53:55.123 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 03:53:55.124 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 03:53:55.124 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 03:53:55.147 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 03:53:55.147 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 2049 ms +2025-09-25 03:53:55.275 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:53:55.292 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final +2025-09-25 03:53:55.418 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-09-25 03:53:55.703 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@6098b587 +2025-09-25 03:53:55.704 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-09-25 03:53:55.887 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 03:53:57.327 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 03:53:57.337 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:53:58.439 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 03:53:58.470 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 03:53:58.580 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@37d066ae, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5cb5615b, org.springframework.security.web.context.SecurityContextHolderFilter@c60dd18, org.springframework.security.web.header.HeaderWriterFilter@26afcb64, org.springframework.web.filter.CorsFilter@255c2dd7, org.springframework.security.web.authentication.logout.LogoutFilter@4c34beda, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@7bea0629, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@5e095da8, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3299cdce, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@4f3beaec, org.springframework.security.web.access.ExceptionTranslationFilter@4c18fd45, org.springframework.security.web.access.intercept.AuthorizationFilter@148c7cf7] +2025-09-25 03:53:58.937 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 03:53:58.969 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 03:53:58.978 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 03:53:58.988 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 6.179 seconds (process running for 6.589) +2025-09-25 03:54:00.775 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-09-25 03:54:00.776 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-09-25 03:54:00.778 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms +2025-09-25 03:54:20.583 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:54:20.587 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-09-25 03:54:21.046 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-09-25 03:54:23.274 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final +2025-09-25 03:54:23.298 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 89357 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:54:23.298 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 03:54:23.316 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-09-25 03:54:23.316 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-09-25 03:54:23.841 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:54:23.882 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 38 ms. Found 22 JPA repository interfaces. +2025-09-25 03:54:24.241 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 03:54:24.245 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 03:54:24.245 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 03:54:24.245 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 03:54:24.267 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 03:54:24.267 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 951 ms +2025-09-25 03:54:24.406 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:54:24.424 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final +2025-09-25 03:54:24.536 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-09-25 03:54:24.773 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@422c84cc +2025-09-25 03:54:24.774 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-09-25 03:54:24.821 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 03:54:26.037 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 03:54:26.045 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:54:27.120 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 03:54:27.142 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 03:54:27.242 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@1f27d280, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@14c17bb7, org.springframework.security.web.context.SecurityContextHolderFilter@7c3bfecb, org.springframework.security.web.header.HeaderWriterFilter@5e73027, org.springframework.web.filter.CorsFilter@7a8ee154, org.springframework.security.web.authentication.logout.LogoutFilter@5995504f, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@47fe4938, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@2f0b336f, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@7ad64958, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@666c2095, org.springframework.security.web.access.ExceptionTranslationFilter@3f1aaec5, org.springframework.security.web.access.intercept.AuthorizationFilter@36d4af3b] +2025-09-25 03:54:27.467 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 03:54:27.494 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 03:54:27.502 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 03:54:27.511 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 4.423 seconds (process running for 4.713) +2025-09-25 03:54:29.264 [INFO] [RMI TCP Connection(1)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-09-25 03:54:29.265 [INFO] [RMI TCP Connection(1)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-09-25 03:54:29.266 [INFO] [RMI TCP Connection(1)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms +2025-09-25 03:54:40.397 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args=date="2023-12-31T15:00:00.000+00:00", restaurant="DODAM", timePart="MORNING" +2025-09-25 03:54:40.459 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (64 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[]} +2025-09-25 03:55:23.244 [INFO] [http-nio-9000-exec-3] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args=date="2025-06-05T15:00:00.000+00:00", restaurant="DODAM", timePart="MORNING" +2025-09-25 03:55:23.314 [INFO] [http-nio-9000-exec-3] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (71 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[]} +2025-09-25 03:55:26.011 [INFO] [http-nio-9000-exec-4] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args=date="2025-06-05T15:00:00.000+00:00", restaurant="DODAM", timePart="DINNER" +2025-09-25 03:55:26.069 [INFO] [http-nio-9000-exec-4] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (58 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[]} +2025-09-25 03:55:45.645 [INFO] [http-nio-9000-exec-6] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args=date="2023-11-22T15:00:00.000+00:00", restaurant="HAKSIK", timePart="DINNER" +2025-09-25 03:55:45.783 [INFO] [http-nio-9000-exec-6] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (139 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[]} +2025-09-25 03:55:49.373 [INFO] [http-nio-9000-exec-8] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args=date="2023-11-22T15:00:00.000+00:00", restaurant="HAKSIK", timePart="LUNCH" +2025-09-25 03:55:49.618 [INFO] [http-nio-9000-exec-8] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (242 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[{"mealId":1,"price":5000,"rating":4.0,"briefMenus":[{"menuId":70,"name":"설렁탕*소면사리"},{"menuId":10,"name":"쇠고기쌀국수"}]},{"mealId":2,"price"...(truncated) +2025-09-25 03:56:33.614 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:56:33.618 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-09-25 03:56:34.073 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-09-25 03:56:36.080 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final +2025-09-25 03:56:36.102 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 89496 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:56:36.102 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 03:56:36.120 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-09-25 03:56:36.121 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-09-25 03:56:36.703 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:56:36.750 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 44 ms. Found 22 JPA repository interfaces. +2025-09-25 03:56:37.088 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 03:56:37.091 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 03:56:37.092 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 03:56:37.092 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 03:56:37.113 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 03:56:37.113 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 992 ms +2025-09-25 03:56:37.241 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:56:37.258 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final +2025-09-25 03:56:37.364 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-09-25 03:56:37.612 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@78e41033 +2025-09-25 03:56:37.614 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-09-25 03:56:37.661 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 03:56:39.626 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 03:56:39.632 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:56:40.739 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 03:56:40.761 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 03:56:40.873 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@46d8d393, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@64405936, org.springframework.security.web.context.SecurityContextHolderFilter@7c432c1d, org.springframework.security.web.header.HeaderWriterFilter@e82a0d7, org.springframework.web.filter.CorsFilter@14af9d9e, org.springframework.security.web.authentication.logout.LogoutFilter@4a105c6f, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@4581f24a, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@a94cf58, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@5f98fe7c, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@4545f522, org.springframework.security.web.access.ExceptionTranslationFilter@60c2f748, org.springframework.security.web.access.intercept.AuthorizationFilter@5d99129c] +2025-09-25 03:56:41.503 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 03:56:41.555 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 03:56:41.575 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 03:56:41.597 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 5.701 seconds (process running for 6.014) +2025-09-25 03:56:42.268 [INFO] [http-nio-9000-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-09-25 03:56:42.268 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-09-25 03:56:42.269 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms +2025-09-25 03:56:42.315 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args=date="2023-11-22T15:00:00.000+00:00", restaurant="HAKSIK", timePart="LUNCH" +2025-09-25 03:56:42.544 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (229 ms) result=ssu.eatssu.global.handler.response.BaseResponse@2e62db4c +2025-09-25 03:57:18.560 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:57:18.573 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-09-25 03:57:19.031 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-09-25 03:57:20.928 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final +2025-09-25 03:57:20.943 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 89546 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 03:57:20.943 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 03:57:20.959 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-09-25 03:57:20.959 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-09-25 03:57:21.523 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 03:57:21.571 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 45 ms. Found 22 JPA repository interfaces. +2025-09-25 03:57:21.920 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 03:57:21.924 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 03:57:21.924 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 03:57:21.924 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 03:57:21.946 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 03:57:21.946 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 987 ms +2025-09-25 03:57:22.074 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 03:57:22.091 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final +2025-09-25 03:57:22.198 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-09-25 03:57:22.432 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@56bcfedd +2025-09-25 03:57:22.433 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-09-25 03:57:22.484 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 03:57:23.783 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 03:57:23.788 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:57:24.779 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 03:57:24.805 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 03:57:24.901 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@31e3e376, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@475eec69, org.springframework.security.web.context.SecurityContextHolderFilter@4c08712c, org.springframework.security.web.header.HeaderWriterFilter@31adc188, org.springframework.web.filter.CorsFilter@704111b, org.springframework.security.web.authentication.logout.LogoutFilter@56efd374, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@e9606c9, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@cdcc4df, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@4b13b780, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@2040bc3e, org.springframework.security.web.access.ExceptionTranslationFilter@6465c35d, org.springframework.security.web.access.intercept.AuthorizationFilter@6703a004] +2025-09-25 03:57:25.219 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 03:57:25.248 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 03:57:25.257 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 03:57:25.267 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 4.525 seconds (process running for 4.803) +2025-09-25 03:57:27.000 [INFO] [RMI TCP Connection(4)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-09-25 03:57:27.001 [INFO] [RMI TCP Connection(4)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-09-25 03:57:27.005 [INFO] [RMI TCP Connection(4)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Completed initialization in 4 ms +2025-09-25 03:57:30.069 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args=date="2023-11-22T15:00:00.000+00:00", restaurant="HAKSIK", timePart="LUNCH" +2025-09-25 03:57:30.284 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (214 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[{"mealId":1,"price":5000,"rating":4.0,"briefMenus":[{"menuId":70,"name":"설렁탕*소면사리"},{"menuId":10,"name":"쇠고기쌀국수"}]},{"mealId":2,"price":5000,"rating":null,"briefMenus":[{"menuId":71,"name":"치킨마요덮밥"}]},{"mealId":3,"price":5000,"rating":null,"briefMenus":[{"menuId":72,"name":"고구마치즈돈까스*막국수"}]}]} +2025-09-25 03:58:12.031 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 03:58:12.039 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-09-25 03:58:12.510 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-09-25 05:30:08.570 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final +2025-09-25 05:30:08.594 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 93370 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 05:30:08.595 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 05:30:08.615 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-09-25 05:30:08.615 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-09-25 05:30:09.219 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 05:30:09.269 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 45 ms. Found 22 JPA repository interfaces. +2025-09-25 05:30:09.730 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 05:30:09.734 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 05:30:09.735 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 05:30:09.735 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 05:30:09.763 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 05:30:09.764 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1148 ms +2025-09-25 05:30:09.943 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 05:30:09.983 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final +2025-09-25 05:30:10.105 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-09-25 05:30:10.393 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@6c470d6c +2025-09-25 05:30:10.394 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-09-25 05:30:10.457 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 05:30:11.847 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 05:30:11.856 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 05:30:13.051 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 05:30:13.081 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 05:30:13.233 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@26c29280, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@27606705, org.springframework.security.web.context.SecurityContextHolderFilter@3ea7092, org.springframework.security.web.header.HeaderWriterFilter@40667dd5, org.springframework.web.filter.CorsFilter@13768d4a, org.springframework.security.web.authentication.logout.LogoutFilter@5c7c2d57, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@6d0d09d6, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@631b8899, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@5a3b10b1, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@5fe9d065, org.springframework.security.web.access.ExceptionTranslationFilter@26d7c913, org.springframework.security.web.access.intercept.AuthorizationFilter@13a6de30] +2025-09-25 05:30:13.640 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 05:30:13.685 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 05:30:13.699 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 05:30:13.709 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 5.396 seconds (process running for 5.926) +2025-09-25 05:30:15.254 [INFO] [http-nio-9000-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-09-25 05:30:15.255 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-09-25 05:30:15.258 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Completed initialization in 3 ms +2025-09-25 05:30:15.319 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST GET /v2/reviews/statistics/restaurant args=restaurant="DODAM" +2025-09-25 05:30:15.927 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE GET /v2/reviews/statistics/restaurant (587 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":{"totalReviewCount":19,"reviewRatingCount":{"oneStarCount":1,"twoStarCount":1,"threeStarCount":0,"fourStarCount":9,"fiveStarCount":5},"mainRating":3.4,"likeCount":15,"unlikeCount":3}} +2025-09-25 05:34:13.237 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 3 class path changes (0 additions, 0 deletions, 3 modifications) +2025-09-25 05:34:13.252 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] +2025-09-25 05:34:13.252 [INFO] [Thread-7] o.a.catalina.core.StandardService - Stopping service [Tomcat] +2025-09-25 05:34:13.253 [INFO] [Thread-7] o.a.c.c.C.[Tomcat].[localhost].[/] - Destroying Spring FrameworkServlet 'dispatcherServlet' +2025-09-25 05:34:13.260 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] +2025-09-25 05:34:13.262 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] +2025-09-25 05:34:13.269 [INFO] [Thread-7] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 05:34:13.274 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-09-25 05:34:13.770 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-09-25 05:34:13.878 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 93370 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 05:34:13.878 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 05:34:14.153 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 05:34:14.181 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 28 ms. Found 22 JPA repository interfaces. +2025-09-25 05:34:14.288 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 05:34:14.288 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 05:34:14.288 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 05:34:14.288 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 05:34:14.294 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 05:34:14.294 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 415 ms +2025-09-25 05:34:14.361 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 05:34:14.364 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... +2025-09-25 05:34:14.687 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-2 - Added connection com.mysql.cj.jdbc.ConnectionImpl@68681ec9 +2025-09-25 05:34:14.688 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Start completed. +2025-09-25 05:34:14.703 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 05:34:17.311 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 05:34:17.312 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 05:34:17.929 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 05:34:17.944 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 05:34:18.038 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@5122f519, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@400491ec, org.springframework.security.web.context.SecurityContextHolderFilter@22651f6, org.springframework.security.web.header.HeaderWriterFilter@1b1a9312, org.springframework.web.filter.CorsFilter@7cb582ca, org.springframework.security.web.authentication.logout.LogoutFilter@7a53a0cb, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@18665fa4, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1db42c51, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@319b3b9d, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@5e2aeb8c, org.springframework.security.web.access.ExceptionTranslationFilter@37671fcb, org.springframework.security.web.access.intercept.AuthorizationFilter@69ff0918] +2025-09-25 05:34:18.188 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 05:34:18.203 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 05:34:18.203 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 05:34:18.209 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 4.351 seconds (process running for 250.425) +2025-09-25 05:34:19.550 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-09-25 05:34:29.335 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 3 class path changes (0 additions, 0 deletions, 3 modifications) +2025-09-25 05:34:29.346 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] +2025-09-25 05:34:29.346 [INFO] [Thread-9] o.a.catalina.core.StandardService - Stopping service [Tomcat] +2025-09-25 05:34:29.350 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] +2025-09-25 05:34:29.352 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] +2025-09-25 05:34:29.357 [INFO] [Thread-9] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 05:34:29.358 [INFO] [Thread-9] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown initiated... +2025-09-25 05:34:29.835 [INFO] [Thread-9] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown completed. +2025-09-25 05:34:29.939 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 93370 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 05:34:29.939 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 05:34:30.122 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 05:34:30.146 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 23 ms. Found 22 JPA repository interfaces. +2025-09-25 05:34:30.242 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 05:34:30.242 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 05:34:30.242 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 05:34:30.242 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 05:34:30.248 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 05:34:30.248 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 308 ms +2025-09-25 05:34:30.311 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 05:34:30.313 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Starting... +2025-09-25 05:34:30.454 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-3 - Added connection com.mysql.cj.jdbc.ConnectionImpl@60ac1cc5 +2025-09-25 05:34:30.454 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Start completed. +2025-09-25 05:34:30.461 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 05:34:31.439 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 05:34:31.440 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 05:34:31.952 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 05:34:31.966 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 05:34:32.025 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@7192cf0b, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@34540bfb, org.springframework.security.web.context.SecurityContextHolderFilter@3b0af8ff, org.springframework.security.web.header.HeaderWriterFilter@4f9e6c5f, org.springframework.web.filter.CorsFilter@2e6fb0af, org.springframework.security.web.authentication.logout.LogoutFilter@797f8277, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@69000e86, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@443be872, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@37d1cca1, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@e0d7e3a, org.springframework.security.web.access.ExceptionTranslationFilter@41c7a7e0, org.springframework.security.web.access.intercept.AuthorizationFilter@3d0f118b] +2025-09-25 05:34:32.159 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 05:34:32.175 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 05:34:32.176 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 05:34:32.182 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 2.259 seconds (process running for 264.397) +2025-09-25 05:34:33.233 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-09-25 05:35:37.111 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 3 class path changes (0 additions, 0 deletions, 3 modifications) +2025-09-25 05:35:37.163 [INFO] [Thread-15] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] +2025-09-25 05:35:37.164 [INFO] [Thread-15] o.a.catalina.core.StandardService - Stopping service [Tomcat] +2025-09-25 05:35:37.174 [INFO] [Thread-15] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] +2025-09-25 05:35:37.176 [INFO] [Thread-15] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] +2025-09-25 05:35:37.186 [INFO] [Thread-15] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 05:35:37.189 [INFO] [Thread-15] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown initiated... +2025-09-25 05:35:37.657 [INFO] [Thread-15] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown completed. +2025-09-25 05:35:37.788 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 93370 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 05:35:37.788 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 05:35:38.053 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 05:35:38.077 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 24 ms. Found 22 JPA repository interfaces. +2025-09-25 05:35:38.201 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 05:35:38.202 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 05:35:38.202 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 05:35:38.202 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 05:35:38.216 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 05:35:38.216 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 428 ms +2025-09-25 05:35:38.309 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 05:35:38.319 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Starting... +2025-09-25 05:35:38.466 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-4 - Added connection com.mysql.cj.jdbc.ConnectionImpl@5618aafd +2025-09-25 05:35:38.466 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Start completed. +2025-09-25 05:35:38.473 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 05:35:39.536 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 05:35:39.536 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 05:35:40.115 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 05:35:40.129 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 05:35:40.202 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@70c6ca52, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@758fc2b7, org.springframework.security.web.context.SecurityContextHolderFilter@50971167, org.springframework.security.web.header.HeaderWriterFilter@1e702ef5, org.springframework.web.filter.CorsFilter@40b5462c, org.springframework.security.web.authentication.logout.LogoutFilter@316db569, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@4c17e837, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@616418c7, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@411018f3, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@a453fbd, org.springframework.security.web.access.ExceptionTranslationFilter@5cf9aa58, org.springframework.security.web.access.intercept.AuthorizationFilter@6adde227] +2025-09-25 05:35:40.397 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 05:35:40.412 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 05:35:40.413 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 05:35:40.419 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 2.649 seconds (process running for 332.634) +2025-09-25 05:35:41.633 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-09-25 05:35:42.629 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 05:35:42.634 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Shutdown initiated... +2025-09-25 05:35:43.245 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Shutdown completed. +2025-09-25 05:49:04.139 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final +2025-09-25 05:49:04.180 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 94160 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 05:49:04.181 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 05:49:04.224 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-09-25 05:49:04.224 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-09-25 05:49:05.045 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 05:49:05.152 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 102 ms. Found 22 JPA repository interfaces. +2025-09-25 05:49:05.626 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 05:49:05.631 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 05:49:05.632 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 05:49:05.632 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 05:49:05.662 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 05:49:05.662 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1438 ms +2025-09-25 05:49:05.842 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 05:49:05.881 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final +2025-09-25 05:49:06.012 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-09-25 05:49:06.540 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@486d8392 +2025-09-25 05:49:06.543 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-09-25 05:49:06.596 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 05:49:07.992 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 05:49:08.002 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 05:49:09.369 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 05:49:09.400 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 05:49:09.535 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@358135c9, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@13463166, org.springframework.security.web.context.SecurityContextHolderFilter@22de5d39, org.springframework.security.web.header.HeaderWriterFilter@2dbfc2ce, org.springframework.web.filter.CorsFilter@51b3fb32, org.springframework.security.web.authentication.logout.LogoutFilter@534f2775, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@506fdbda, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@30ddd678, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@6bcb6c71, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@6c7c8363, org.springframework.security.web.access.ExceptionTranslationFilter@499f7d6, org.springframework.security.web.access.intercept.AuthorizationFilter@3c986292] +2025-09-25 05:49:09.809 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 05:49:09.843 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 05:49:09.852 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 05:49:09.862 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 6.071 seconds (process running for 6.883) +2025-09-25 05:49:11.226 [INFO] [RMI TCP Connection(1)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-09-25 05:49:11.227 [INFO] [RMI TCP Connection(1)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-09-25 05:49:11.230 [INFO] [RMI TCP Connection(1)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Completed initialization in 3 ms +2025-09-25 05:49:54.691 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST POST /v2/reviews/menu args=createMenuReviewRequest={"menuId":1,"mainRating":4,"content":"맛있어용","imageUrl":"https://s3.~~~.jpg","menuLike":{"menuId":123,"isLike":false}} +2025-09-25 05:49:54.858 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE POST /v2/reviews/menu (166 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다."} +2025-09-25 05:51:20.103 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 05:51:20.122 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-09-25 05:51:20.629 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-09-25 05:51:23.362 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final +2025-09-25 05:51:23.381 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 94316 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 05:51:23.381 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 05:51:23.398 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-09-25 05:51:23.398 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-09-25 05:51:23.951 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 05:51:24.002 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 48 ms. Found 22 JPA repository interfaces. +2025-09-25 05:51:24.434 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 05:51:24.438 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 05:51:24.439 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 05:51:24.439 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 05:51:24.462 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 05:51:24.463 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1065 ms +2025-09-25 05:51:24.616 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 05:51:24.636 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final +2025-09-25 05:51:24.753 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-09-25 05:51:25.083 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@165a6845 +2025-09-25 05:51:25.085 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-09-25 05:51:25.137 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 05:51:26.958 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 05:51:26.962 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 05:51:29.011 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 05:51:29.059 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 05:51:29.282 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@ed44378, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@641f5675, org.springframework.security.web.context.SecurityContextHolderFilter@4dff5d7a, org.springframework.security.web.header.HeaderWriterFilter@3f5cefe, org.springframework.web.filter.CorsFilter@39e04a54, org.springframework.security.web.authentication.logout.LogoutFilter@4a476869, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@5e658fe0, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@71622852, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@1b57d329, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@7206d8d7, org.springframework.security.web.access.ExceptionTranslationFilter@2556dfc6, org.springframework.security.web.access.intercept.AuthorizationFilter@7f111bd8] +2025-09-25 05:51:29.871 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 05:51:29.955 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 05:51:29.971 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 05:51:29.983 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 6.82 seconds (process running for 7.604) +2025-09-25 05:51:31.436 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-09-25 05:51:31.436 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-09-25 05:51:31.442 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Completed initialization in 5 ms +2025-09-25 05:51:32.102 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST POST /v2/reviews/menu args=createMenuReviewRequest={"menuId":1,"mainRating":4,"content":"맛있어용","imageUrl":"https://s3.~~~.jpg","menuLike":{"menuId":123,"isLike":false}} +2025-09-25 05:51:43.153 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE POST /v2/reviews/menu (11057 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다."} +2025-09-25 05:56:18.010 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 05:56:18.026 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-09-25 05:56:18.494 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-09-25 05:56:20.894 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final +2025-09-25 05:56:20.909 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 94538 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 05:56:20.910 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 05:56:20.926 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-09-25 05:56:20.926 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-09-25 05:56:21.416 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 05:56:21.460 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 41 ms. Found 22 JPA repository interfaces. +2025-09-25 05:56:22.067 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 05:56:22.071 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 05:56:22.072 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 05:56:22.072 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 05:56:22.097 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 05:56:22.097 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1171 ms +2025-09-25 05:56:22.333 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 05:56:22.361 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final +2025-09-25 05:56:22.486 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-09-25 05:56:22.729 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@25b7fa3d +2025-09-25 05:56:22.730 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-09-25 05:56:22.777 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 05:56:24.155 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 05:56:24.169 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 05:56:25.757 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 05:56:25.801 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 05:56:26.005 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@4f4c1aa3, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@47401591, org.springframework.security.web.context.SecurityContextHolderFilter@82772da, org.springframework.security.web.header.HeaderWriterFilter@1b22e0b0, org.springframework.web.filter.CorsFilter@2c615530, org.springframework.security.web.authentication.logout.LogoutFilter@5c99fef2, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@6a9e836, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@202fd697, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3b392446, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@291f6342, org.springframework.security.web.access.ExceptionTranslationFilter@1c592639, org.springframework.security.web.access.intercept.AuthorizationFilter@782dee86] +2025-09-25 05:56:26.351 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 05:56:26.396 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 05:56:26.428 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 05:56:26.446 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 5.726 seconds (process running for 6.028) +2025-09-25 05:56:27.437 [INFO] [http-nio-9000-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-09-25 05:56:27.437 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-09-25 05:56:27.438 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms +2025-09-25 05:56:27.486 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST POST /v2/reviews/menu args=createMenuReviewRequest={"menuId":1,"mainRating":4,"content":"맛있어용","imageUrl":"https://s3.~~~.jpg","menuLike":{"menuId":123,"isLike":false}} +2025-09-25 05:56:27.596 [INFO] [http-nio-9000-exec-1] s.e.g.log.event.LogEventListener - MenuReview created: reviewId=164, menuId=1, userId=51, isLike=false, imageUrl=https://s3.~~~.jpg +2025-09-25 05:56:27.598 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE POST /v2/reviews/menu (112 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다."} +2025-09-25 06:01:07.166 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 5 class path changes (0 additions, 0 deletions, 5 modifications) +2025-09-25 06:01:07.188 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] +2025-09-25 06:01:07.189 [INFO] [Thread-7] o.a.catalina.core.StandardService - Stopping service [Tomcat] +2025-09-25 06:01:07.190 [INFO] [Thread-7] o.a.c.c.C.[Tomcat].[localhost].[/] - Destroying Spring FrameworkServlet 'dispatcherServlet' +2025-09-25 06:01:07.193 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] +2025-09-25 06:01:07.196 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] +2025-09-25 06:01:07.205 [INFO] [Thread-7] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 06:01:07.211 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-09-25 06:01:07.663 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-09-25 06:01:07.793 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 94538 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 06:01:07.793 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 06:01:08.073 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 06:01:08.100 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 26 ms. Found 22 JPA repository interfaces. +2025-09-25 06:01:08.232 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 06:01:08.232 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 06:01:08.232 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 06:01:08.232 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 06:01:08.239 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 06:01:08.239 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 445 ms +2025-09-25 06:01:08.319 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 06:01:08.322 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... +2025-09-25 06:01:08.469 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-2 - Added connection com.mysql.cj.jdbc.ConnectionImpl@5e2e4b90 +2025-09-25 06:01:08.469 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Start completed. +2025-09-25 06:01:08.477 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 06:01:09.530 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 06:01:09.535 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 06:01:10.319 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 06:01:10.344 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 06:01:10.438 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@3d03c633, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5991b21f, org.springframework.security.web.context.SecurityContextHolderFilter@287f1aa9, org.springframework.security.web.header.HeaderWriterFilter@1ad9c2ce, org.springframework.web.filter.CorsFilter@62541833, org.springframework.security.web.authentication.logout.LogoutFilter@79435b39, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@256c93fe, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@74617929, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@b70f1e0, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@67deb3e, org.springframework.security.web.access.ExceptionTranslationFilter@36ccd2c0, org.springframework.security.web.access.intercept.AuthorizationFilter@361a4d89] +2025-09-25 06:01:10.747 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 06:01:10.765 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 06:01:10.766 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 06:01:10.774 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 3.009 seconds (process running for 290.354) +2025-09-25 06:01:12.943 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-09-25 06:05:08.762 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 5 class path changes (0 additions, 0 deletions, 5 modifications) +2025-09-25 06:05:08.772 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] +2025-09-25 06:05:08.772 [INFO] [Thread-9] o.a.catalina.core.StandardService - Stopping service [Tomcat] +2025-09-25 06:05:08.775 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] +2025-09-25 06:05:08.775 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] +2025-09-25 06:05:08.779 [INFO] [Thread-9] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 06:05:08.782 [INFO] [Thread-9] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown initiated... +2025-09-25 06:05:09.233 [INFO] [Thread-9] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown completed. +2025-09-25 06:05:09.335 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 94538 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 06:05:09.335 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 06:05:09.566 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 06:05:09.595 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 28 ms. Found 22 JPA repository interfaces. +2025-09-25 06:05:09.697 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 06:05:09.697 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 06:05:09.697 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 06:05:09.697 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 06:05:09.703 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 06:05:09.704 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 368 ms +2025-09-25 06:05:09.782 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 06:05:09.785 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Starting... +2025-09-25 06:05:09.921 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-3 - Added connection com.mysql.cj.jdbc.ConnectionImpl@59f5449a +2025-09-25 06:05:09.921 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Start completed. +2025-09-25 06:05:09.934 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 06:05:10.852 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 06:05:10.852 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 06:05:11.609 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 06:05:11.625 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 06:05:11.700 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@18cf430f, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@7d47eadc, org.springframework.security.web.context.SecurityContextHolderFilter@51387be3, org.springframework.security.web.header.HeaderWriterFilter@310613e0, org.springframework.web.filter.CorsFilter@26debe94, org.springframework.security.web.authentication.logout.LogoutFilter@218d4115, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@454872d6, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@295dd2d6, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3dfd2d54, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@27fd964b, org.springframework.security.web.access.ExceptionTranslationFilter@1b066ce3, org.springframework.security.web.access.intercept.AuthorizationFilter@4815af0d] +2025-09-25 06:05:12.217 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 06:05:12.256 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 06:05:12.258 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 06:05:12.267 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 2.956 seconds (process running for 531.847) +2025-09-25 06:05:13.509 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-09-25 06:06:20.784 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 06:06:20.787 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown initiated... +2025-09-25 06:06:21.245 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown completed. +2025-09-25 06:08:46.459 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final +2025-09-25 06:08:46.481 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 95068 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 06:08:46.481 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 06:08:46.497 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-09-25 06:08:46.497 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-09-25 06:08:47.079 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 06:08:47.134 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 50 ms. Found 22 JPA repository interfaces. +2025-09-25 06:08:47.555 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 06:08:47.559 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 06:08:47.559 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 06:08:47.559 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 06:08:47.585 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 06:08:47.585 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1087 ms +2025-09-25 06:08:47.741 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 06:08:47.765 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final +2025-09-25 06:08:47.880 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-09-25 06:08:48.125 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@26440f6f +2025-09-25 06:08:48.126 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-09-25 06:08:48.175 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 06:08:49.475 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 06:08:49.500 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 06:08:51.011 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 06:08:51.039 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 06:08:51.165 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@6fc8980f, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@700ae5bf, org.springframework.security.web.context.SecurityContextHolderFilter@30103778, org.springframework.security.web.header.HeaderWriterFilter@4dfb56f1, org.springframework.web.filter.CorsFilter@79943894, org.springframework.security.web.authentication.logout.LogoutFilter@277cb63e, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@33795dd8, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@37f75660, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3f7e574f, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@185ab358, org.springframework.security.web.access.ExceptionTranslationFilter@67568c81, org.springframework.security.web.access.intercept.AuthorizationFilter@730a8571] +2025-09-25 06:08:51.411 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 06:08:51.441 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 06:08:51.451 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 06:08:51.462 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 5.196 seconds (process running for 5.526) +2025-09-25 06:08:53.572 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-09-25 06:08:53.575 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-09-25 06:08:53.577 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms +2025-09-25 06:08:54.098 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST POST /v2/reviews/menu args=createMenuReviewRequest={"menuId":1,"mainRating":4,"content":"맛있어용","imageUrl":"https://s3.~~~.jpg","menuLike":{"menuId":123,"isLike":false}}, customUserDetails={userId=51} +2025-09-25 06:08:54.208 [INFO] [http-nio-9000-exec-1] s.e.g.log.event.LogEventListener - MenuReview created: reviewId=165, menuId=1, userId=51, isLike=false, imageUrl=https://s3.~~~.jpg +2025-09-25 06:08:54.210 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE POST /v2/reviews/menu (111 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다."} +2025-09-25 06:10:26.399 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 06:10:26.404 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-09-25 06:10:26.861 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-09-25 06:10:37.568 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final +2025-09-25 06:10:37.587 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 95141 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 06:10:37.587 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 06:10:37.621 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable +2025-09-25 06:10:37.622 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' +2025-09-25 06:10:38.438 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 06:10:38.486 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 46 ms. Found 22 JPA repository interfaces. +2025-09-25 06:10:38.845 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 06:10:38.850 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 06:10:38.850 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 06:10:38.851 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 06:10:38.877 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 06:10:38.877 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1254 ms +2025-09-25 06:10:39.030 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 06:10:39.050 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final +2025-09-25 06:10:39.159 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-09-25 06:10:39.399 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@4df8b2d0 +2025-09-25 06:10:39.400 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-09-25 06:10:39.444 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 06:10:40.822 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 06:10:40.829 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 06:10:41.976 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 06:10:42.003 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 06:10:42.320 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@7bc989e6, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@f7016a2, org.springframework.security.web.context.SecurityContextHolderFilter@3499fef2, org.springframework.security.web.header.HeaderWriterFilter@120e3ef, org.springframework.web.filter.CorsFilter@2cc491a8, org.springframework.security.web.authentication.logout.LogoutFilter@6ab4db5b, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@536d66ca, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7c2af1a1, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3a6f1f45, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@645c43f8, org.springframework.security.web.access.ExceptionTranslationFilter@78aa8523, org.springframework.security.web.access.intercept.AuthorizationFilter@44a80ad3] +2025-09-25 06:10:42.657 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 06:10:42.685 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 06:10:42.694 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 06:10:42.703 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 5.336 seconds (process running for 5.578) +2025-09-25 06:10:44.278 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-09-25 06:10:44.278 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-09-25 06:10:44.280 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms +2025-09-25 06:10:56.489 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST POST /v2/reviews/menu args=userId=51, createMenuReviewRequest={"menuId":1,"mainRating":4,"content":"맛있어용","imageUrl":"https://s3.~~~.jpg","menuLike":{"menuId":123,"isLike":false}} +2025-09-25 06:10:56.654 [INFO] [http-nio-9000-exec-1] s.e.g.log.event.LogEventListener - MenuReview created: reviewId=166, menuId=1, userId=51, isLike=false, imageUrl=https://s3.~~~.jpg +2025-09-25 06:10:56.656 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE POST /v2/reviews/menu (168 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다."} +2025-09-25 06:10:57.763 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 1 class path change (0 additions, 0 deletions, 1 modification) +2025-09-25 06:10:57.771 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] +2025-09-25 06:10:57.772 [INFO] [Thread-7] o.a.catalina.core.StandardService - Stopping service [Tomcat] +2025-09-25 06:10:57.773 [INFO] [Thread-7] o.a.c.c.C.[Tomcat].[localhost].[/] - Destroying Spring FrameworkServlet 'dispatcherServlet' +2025-09-25 06:10:57.776 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] +2025-09-25 06:10:57.778 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] +2025-09-25 06:10:57.785 [INFO] [Thread-7] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 06:10:57.787 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-09-25 06:10:58.264 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-09-25 06:10:58.356 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 95141 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) +2025-09-25 06:10:58.356 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" +2025-09-25 06:10:58.623 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-09-25 06:10:58.650 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 27 ms. Found 22 JPA repository interfaces. +2025-09-25 06:10:58.767 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) +2025-09-25 06:10:58.768 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] +2025-09-25 06:10:58.768 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-09-25 06:10:58.768 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] +2025-09-25 06:10:58.774 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-09-25 06:10:58.774 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 417 ms +2025-09-25 06:10:58.845 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-09-25 06:10:58.850 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... +2025-09-25 06:10:58.993 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-2 - Added connection com.mysql.cj.jdbc.ConnectionImpl@4a8eafd5 +2025-09-25 06:10:58.993 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Start completed. +2025-09-25 06:10:59.001 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect +2025-09-25 06:11:00.175 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] +2025-09-25 06:11:00.176 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 06:11:00.911 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' +2025-09-25 06:11:00.925 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-09-25 06:11:01.006 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@42d98c65, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@45ae8a78, org.springframework.security.web.context.SecurityContextHolderFilter@69f842a2, org.springframework.security.web.header.HeaderWriterFilter@636f620c, org.springframework.web.filter.CorsFilter@1986f047, org.springframework.security.web.authentication.logout.LogoutFilter@39aae8d1, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@1ea816fa, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1351f2b9, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@67ba7bd3, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@109c0bee, org.springframework.security.web.access.ExceptionTranslationFilter@1ef73cfb, org.springframework.security.web.access.intercept.AuthorizationFilter@2e053eb8] +2025-09-25 06:11:01.189 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 +2025-09-25 06:11:01.203 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] +2025-09-25 06:11:01.204 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' +2025-09-25 06:11:01.210 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 2.872 seconds (process running for 24.084) +2025-09-25 06:11:02.147 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged +2025-09-25 06:11:11.529 [INFO] [http-nio-9000-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-09-25 06:11:11.530 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-09-25 06:11:11.537 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Completed initialization in 7 ms +2025-09-25 06:11:11.562 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST POST /v2/reviews/menu args=userId=51, createMenuReviewRequest={"menuId":1,"mainRating":4,"content":"맛있어용","imageUrl":"https://s3.~~~.jpg","menuLike":{"menuId":123,"isLike":false}} +2025-09-25 06:11:11.667 [INFO] [http-nio-9000-exec-1] s.e.g.log.event.LogEventListener - MenuReview created: reviewId=167, menuId=1, userId=51, isLike=false, imageUrl=https://s3.~~~.jpg +2025-09-25 06:11:11.669 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE POST /v2/reviews/menu (108 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다."} +2025-09-25 06:11:17.432 [INFO] [http-nio-9000-exec-3] s.e.global.log.ControllerLogAspect - REQUEST POST /v2/reviews/menu args=userId=51, createMenuReviewRequest={"menuId":1,"mainRating":4,"content":"맛있어용","imageUrl":"https://s3.~~~.jpg","menuLike":{"menuId":123,"isLike":false}} +2025-09-25 06:11:17.516 [INFO] [http-nio-9000-exec-3] s.e.g.log.event.LogEventListener - MenuReview created: reviewId=168, menuId=1, userId=51, isLike=false, imageUrl=https://s3.~~~.jpg +2025-09-25 06:11:17.516 [INFO] [http-nio-9000-exec-3] s.e.global.log.ControllerLogAspect - RESPONSE POST /v2/reviews/menu (84 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다."} +2025-09-25 06:11:43.570 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-09-25 06:11:43.574 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown initiated... +2025-09-25 06:11:44.044 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown completed. diff --git a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java index 66c7c7c0..cbcfac24 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.inquiry.service; import lombok.RequiredArgsConstructor; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.auth.security.CustomUserDetails; @@ -10,6 +11,7 @@ import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.log.event.LogEvent; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; @@ -20,14 +22,20 @@ public class InquiryService { private final UserRepository userRepository; private final InquiryRepository inquiryRepository; + private final ApplicationEventPublisher eventPublisher; public Inquiry createUserInquiry(CustomUserDetails userDetails, CreateInquiryRequest request) { User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Inquiry inquiry = new Inquiry(request.getContent(), user, request.getEmail()); + Inquiry saved = inquiryRepository.save(inquiry); - return inquiryRepository.save(inquiry); + eventPublisher.publishEvent(LogEvent.of(String.format( + "Inquiry created: id=%d, userId=%d, email=%s, content=%s", + saved.getId(), user.getId(), request.getEmail(), request.getContent()))); + + return saved; } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java index cc58ea3d..a6222c75 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenusInMealResponse.java @@ -6,6 +6,7 @@ import lombok.NoArgsConstructor; import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.MealMenu; +import ssu.eatssu.domain.menu.entity.Menu; import java.util.List; @@ -18,9 +19,8 @@ public class MenusInMealResponse { @Schema(description = "식단 속 메뉴 목록", example = "[]") private List briefMenus; - public static MenusInMealResponse from(Meal meal) { - List menusInformation = meal.getMealMenus().stream() - .map(MealMenu::getMenu) + public static MenusInMealResponse from(List menus) { + List menusInformation = menus.stream() .map(BriefMenuResponse::new) .toList(); diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MealService.java b/src/main/java/ssu/eatssu/domain/menu/service/MealService.java index 4fc0859d..75cd6445 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MealService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MealService.java @@ -39,8 +39,15 @@ public class MealService { public MenusInMealResponse getMenusInMealByMealId(Long mealId) { Meal meal = mealRepository.findById(mealId) .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_MEAL)); + List menus = meal.getMealMenus().stream() + .map(MealMenu::getMenu) + .toList(); + + if (menus.isEmpty()) { + log.warn("Meal[{}] has no menus.", mealId); + } - return MenusInMealResponse.from(meal); + return MenusInMealResponse.from(menus); } public List getMealDetailsByDateAndRestaurantAndTimePart( diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java index b82a94db..63e5dd98 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -1,6 +1,8 @@ package ssu.eatssu.domain.partnership.service; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.auth.security.CustomUserDetails; @@ -19,6 +21,7 @@ import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.log.event.LogEvent; import java.util.List; import java.util.Optional; @@ -40,6 +43,7 @@ public class PartnershipService { private final UserRepository userRepository; private final PartnershipLikeRepository partnershipLikeRepository; private final PartnershipRestaurantRepository partnerShipRestaurantRepository; + private final ApplicationEventPublisher eventPublisher; @Transactional public void createPartnership(CreatePartnershipRequest request) { @@ -68,22 +72,30 @@ public List getAllPartnerships(CustomUserDetails customUser @Transactional public void togglePartnershipLike(Long partnershipId, CustomUserDetails userDetails) { Partnership partnership = partnershipRepository.findById(partnershipId) - .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); + .orElseThrow(() -> new BaseException(NOT_FOUND_PARTNERSHIP)); User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); PartnershipRestaurant partnershipRestaurant = partnership.getPartnershipRestaurant(); - Optional optionalPartnershipLike = partnershipLikeRepository.findByUserAndPartnershipRestaurant( - user, - partnershipRestaurant); + Optional optionalPartnershipLike = + partnershipLikeRepository.findByUserAndPartnershipRestaurant(user, partnershipRestaurant); + if (optionalPartnershipLike.isPresent()) { PartnershipLike partnershipLike = optionalPartnershipLike.get(); partnershipRestaurant.getLikes().remove(partnershipLike); partnershipLikeRepository.delete(partnershipLike); + + eventPublisher.publishEvent(LogEvent.of( + String.format("User[%d] canceled like on PartnershipRestaurant[%d]", + user.getId(), partnershipRestaurant.getId()))); } else { PartnershipLike partnershipLike = new PartnershipLike(user, partnershipRestaurant); partnershipRestaurant.getLikes().add(partnershipLike); partnershipLikeRepository.save(partnershipLike); + + eventPublisher.publishEvent(LogEvent.of( + String.format("User[%d] liked PartnershipRestaurant[%d]", + user.getId(), partnershipRestaurant.getId()))); } } diff --git a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java index f0d7050b..a146b585 100644 --- a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java +++ b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.report.service; import lombok.RequiredArgsConstructor; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.auth.security.CustomUserDetails; @@ -14,6 +15,7 @@ import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.log.event.LogEvent; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; @@ -26,18 +28,27 @@ public class ReportService { private final ReviewRepository reviewRepository; private final UserRepository userRepository; private final ReportRepository reportRepository; + private final ApplicationEventPublisher eventPublisher; public Report reportReview(CustomUserDetails userDetails, ReportCreateRequest request) { User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Review review = reviewRepository.findById(request.reviewId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); Report report = Report.create(user, review, request, ReportStatus.PENDING); - return reportRepository.save(report); + reportRepository.save(report); + + eventPublisher.publishEvent(LogEvent.of( + String.format("Report created: reportId=%d, reviewId=%d, userId=%d, status=%s", + report.getId(), review.getId(), user.getId(), report.getStatus()) + )); + + return report; } + public ReportTypeList getReportType() { return ReportTypeList.get(); } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 81d69178..66a4bd39 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -1,6 +1,8 @@ package ssu.eatssu.domain.review.service; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; @@ -35,6 +37,7 @@ import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.log.event.LogEvent; import java.util.Collections; import java.util.List; @@ -49,8 +52,9 @@ import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; -@RequiredArgsConstructor +@Slf4j @Service +@RequiredArgsConstructor public class ReviewServiceV2 { private final UserRepository userRepository; private final ReviewRepository reviewRepository; @@ -58,6 +62,7 @@ public class ReviewServiceV2 { private final MealRepository mealRepository; private final MealMenuRepository mealMenuRepository; private final ReviewImageRepository reviewImageRepository; + private final ApplicationEventPublisher eventPublisher; /** * meal에 대한 리뷰 생성 @@ -65,10 +70,10 @@ public class ReviewServiceV2 { @Transactional public void createMealReview(CustomUserDetails userDetails, CreateMealReviewRequest request) { User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Meal meal = mealRepository.findById(request.getMealId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); + .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); Review review = request.toReviewEntity(user, meal); @@ -76,11 +81,20 @@ public void createMealReview(CustomUserDetails userDetails, CreateMealReviewRequ for (MenuLikeRequest menuLike : request.getMenuLikes()) { Menu menu = menuRepository.findById(menuLike.getMenuId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); review.addReviewMenuLike(menu, menuLike.getIsLike()); } reviewRepository.save(review); + + eventPublisher.publishEvent(LogEvent.of( + String.format("MealReview created: reviewId=%d, mealId=%d, userId=%d, images=%d, menuLikes=%d", + review.getId(), + meal.getId(), + user.getId(), + request.getImageUrls().size(), + request.getMenuLikes().size()) + )); } /** @@ -89,10 +103,10 @@ public void createMealReview(CustomUserDetails userDetails, CreateMealReviewRequ @Transactional public void createMenuReview(CustomUserDetails userDetails, CreateMenuReviewRequest request) { User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); Menu menu = menuRepository.findById(request.getMenuId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); Review review = request.toReviewEntity(user, menu); review.addReviewMenuLike(menu, request.getMenuLike().getIsLike()); @@ -102,6 +116,15 @@ public void createMenuReview(CustomUserDetails userDetails, CreateMenuReviewRequ reviewImageRepository.save(reviewImage); menu.addReview(review); + + eventPublisher.publishEvent(LogEvent.of( + String.format("MenuReview created: reviewId=%d, menuId=%d, userId=%d, isLike=%s, imageUrl=%s", + review.getId(), + menu.getId(), + user.getId(), + request.getMenuLike().getIsLike(), + request.getImageUrl()) + )); } /** @@ -164,6 +187,9 @@ public SliceResponse findMealReviewList(Long mealId, Long la Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); List menus = mealMenuRepository.findMenusByMeal(meal); + if (menus.isEmpty()) { + log.warn("No menus found for mealId={}", mealId); + } List validMenus = menus.stream() .filter(menu -> !MenuFilterUtil.isExcludedFromReview( @@ -176,12 +202,14 @@ public SliceResponse findMealReviewList(Long mealId, Long la if (validMenus.isEmpty()) { + log.warn("No valid menus found for mealId={}", mealId); return SliceResponse.empty(); } List validMenuIds = validMenus.stream().map(ValidMenuForViewResponse.MenuDto::getMenuId).toList(); List mealIds = mealMenuRepository.findMealIdsByMenuIds(validMenuIds); if (mealIds.isEmpty()) { + log.warn("No related mealIds found for validMenuIds={} in mealId={}", validMenuIds, mealId); return SliceResponse.empty(); } @@ -256,6 +284,10 @@ public MenuReviewsV2Response findMenuReviews(Long menuId) { .average() .orElse(0.0); + if (!reviews.isEmpty() && averageRating == 0.0) { + log.warn("All reviews for menuId={} have null/invalid ratings", menuId); + } + Integer likeCount = menu.getLikeCount(); ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); @@ -278,6 +310,9 @@ public MealReviewsV2Response findMealReviews(Long mealId) { Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); List reviews = reviewRepository.findAllByMeal(meal); List menus = mealMenuRepository.findMenusByMeal(meal); + if (menus.isEmpty()) { + log.warn("No menus found for mealId={}", meal.getId()); + } List validMenus = menus.stream() .filter(menu -> !MenuFilterUtil.isExcludedFromReview( @@ -288,6 +323,10 @@ public MealReviewsV2Response findMealReviews(Long mealId) { .build()) .toList(); + if (validMenus.isEmpty()) { + log.warn("No valid menus for review found in mealId={}", mealId); + } + Double averageRating = Optional.ofNullable(reviews) .orElse(Collections.emptyList()) .stream() @@ -301,6 +340,10 @@ public MealReviewsV2Response findMealReviews(Long mealId) { .average() .orElse(0.0); + if (!reviews.isEmpty() && averageRating == 0.0) { + log.warn("All reviews have null/invalid ratings for mealId={}", mealId); + } + Integer likeCount = Optional.ofNullable(menus) .orElse(Collections.emptyList()) .stream() @@ -354,6 +397,11 @@ public void updateReview(CustomUserDetails userDetails, Long reviewId, UpdateMea review.update(request.getContent(), request.getRating(), menuLikes); reviewRepository.save(review); + + eventPublisher.publishEvent(LogEvent.of( + String.format("Review updated: reviewId=%d, userId=%d, newRating=%d", + review.getId(), user.getId(), request.getRating()) + )); } /** @@ -372,6 +420,11 @@ public void deleteReview(CustomUserDetails userDetails, Long reviewId) { } review.resetMenuLikes(); + + eventPublisher.publishEvent(LogEvent.of( + String.format("Review deleted: reviewId=%d, userId=%d", review.getId(), user.getId()) + )); + reviewRepository.delete(review); } diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index 9bd2f1e5..465791c2 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -3,6 +3,7 @@ import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; @@ -23,6 +24,7 @@ import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.log.event.LogEvent; import java.util.List; import java.util.UUID; @@ -44,6 +46,7 @@ public class UserService { private final DepartmentRepository departmentRepository; private final UserProperties userProperties; private final CollegeRepository collegeRepository; + private final ApplicationEventPublisher eventPublisher; public User join(String email, OAuthProvider provider, String providerId) { String credentials = createCredentials(provider, providerId); @@ -61,6 +64,11 @@ public void updateNickname(CustomUserDetails userDetails, NicknameUpdateRequest } user.updateNickname(request.nickname()); + + eventPublisher.publishEvent(LogEvent.of( + String.format("User nickname updated: userId=%d, newNickname=%s", + user.getId(), request.nickname())) + ); } public MyPageResponse findMyPage(CustomUserDetails userDetails) { @@ -77,6 +85,13 @@ public boolean withdraw(CustomUserDetails userDetails) { user.getUserInquiries().forEach(inquiry -> inquiry.clearUser()); userRepository.delete(user); + eventPublisher.publishEvent(LogEvent.of( + String.format("User withdrawn: userId=%d, email=%s, nickname=%s", + user.getId(), + user.getEmail(), + user.getNickname()) + )); + return true; } @@ -141,4 +156,4 @@ private boolean isForbiddenNickname(String nickname) { return userProperties.getForbiddenNicknames().stream() .anyMatch(forbidden -> forbidden.equalsIgnoreCase(nickname)); } -} \ No newline at end of file +} diff --git a/src/main/java/ssu/eatssu/global/config/AsyncConfig.java b/src/main/java/ssu/eatssu/global/config/AsyncConfig.java new file mode 100644 index 00000000..ca9284c6 --- /dev/null +++ b/src/main/java/ssu/eatssu/global/config/AsyncConfig.java @@ -0,0 +1,9 @@ +package ssu.eatssu.global.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; + +@Configuration +@EnableAsync +public class AsyncConfig { +} diff --git a/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java b/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java index afe826c8..5e6bc5ae 100644 --- a/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java +++ b/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java @@ -8,12 +8,16 @@ import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; +import ssu.eatssu.domain.auth.security.CustomUserDetails; -import java.util.Arrays; import java.util.stream.Collectors; +import java.util.stream.IntStream; + @Aspect @Component @@ -35,17 +39,41 @@ public Object logApi(ProceedingJoinPoint joinPoint) throws Throwable { String uri = request.getRequestURI(); String method = request.getMethod(); - String argsJson = Arrays.stream(joinPoint.getArgs()) - .map(arg -> { + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); + String[] paramNames = methodSignature.getParameterNames(); + Object[] args = joinPoint.getArgs(); + + // 요청자 + String userIdLog = IntStream.range(0, args.length) + .filter(i -> args[i] instanceof CustomUserDetails) + .mapToObj(i -> { + CustomUserDetails user = (CustomUserDetails) args[i]; + return "userId=" + user.getId(); + }) + .findFirst() + .orElse("userId=anonymous"); + + // 나머지 요청 인자 + String otherArgsJson = IntStream.range(0, args.length) + .filter(i -> !(args[i] instanceof HttpServletRequest)) + .filter(i -> !(args[i] instanceof CustomUserDetails)) + .filter(i -> !(args[i] instanceof org.springframework.validation.BindingResult)) + .mapToObj(i -> { + String name = (paramNames != null && i < paramNames.length) ? paramNames[i] : "arg" + i; + Object arg = args[i]; try { - return objectMapper.writeValueAsString(arg); + String value = objectMapper.writeValueAsString(arg); + if (value.length() > 200) value = value.substring(0, 200) + "...(truncated)"; + return name + "=" + value; } catch (Exception e) { - return String.valueOf(arg); + return name + "=" + String.valueOf(arg); } }) .collect(Collectors.joining(", ")); - log.info("REQUEST {} {} args=[{}]", method, uri, argsJson); + String argsJson = userIdLog + (otherArgsJson.isEmpty() ? "" : ", " + otherArgsJson); + + log.info("REQUEST {} {} args={}", method, uri, argsJson); try { Object result = joinPoint.proceed(); @@ -54,12 +82,13 @@ public Object logApi(ProceedingJoinPoint joinPoint) throws Throwable { String resultJson; try { resultJson = objectMapper.writeValueAsString(result); + if (resultJson.length() > 600) { + resultJson = resultJson.substring(0, 600) + "...(truncated)"; + } } catch (Exception e) { resultJson = String.valueOf(result); } - resultJson = truncate(resultJson, 200); - log.info("RESPONSE {} {} ({} ms) result={}", method, uri, time, resultJson); return result; } catch (Throwable e) { @@ -68,12 +97,4 @@ public Object logApi(ProceedingJoinPoint joinPoint) throws Throwable { throw e; } } - - private String truncate(String input, int maxLength) { - if (input == null) return null; - return input.length() <= maxLength - ? input - : input.substring(0, maxLength) + "...(truncated)"; - } } - diff --git a/src/main/java/ssu/eatssu/global/log/event/LogEvent.java b/src/main/java/ssu/eatssu/global/log/event/LogEvent.java new file mode 100644 index 00000000..c817d949 --- /dev/null +++ b/src/main/java/ssu/eatssu/global/log/event/LogEvent.java @@ -0,0 +1,7 @@ +package ssu.eatssu.global.log.event; + +public record LogEvent(String message) { + public static LogEvent of(String message) { + return new LogEvent(message); + } +} diff --git a/src/main/java/ssu/eatssu/global/log/event/LogEventListener.java b/src/main/java/ssu/eatssu/global/log/event/LogEventListener.java new file mode 100644 index 00000000..bd7b5e08 --- /dev/null +++ b/src/main/java/ssu/eatssu/global/log/event/LogEventListener.java @@ -0,0 +1,18 @@ +package ssu.eatssu.global.log.event; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalEventListener; + +@Component +@RequiredArgsConstructor +@Slf4j +public class LogEventListener { + + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) + public void handleLogEvent(LogEvent event) { + log.info(event.message()); + } +} From b93a7ae2c47deb1bc4aded9ba908683c08dce702 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Thu, 25 Sep 2025 06:19:00 +0900 Subject: [PATCH 276/399] =?UTF-8?q?fix:=20=EB=A1=9C=EA=B7=B8=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logs/eatssu-app-error.log | 23816 ----------------------- logs/eatssu-app.log | 37217 ------------------------------------ 2 files changed, 61033 deletions(-) delete mode 100644 logs/eatssu-app-error.log delete mode 100644 logs/eatssu-app.log diff --git a/logs/eatssu-app-error.log b/logs/eatssu-app-error.log deleted file mode 100644 index 1d164434..00000000 --- a/logs/eatssu-app-error.log +++ /dev/null @@ -1,23816 +0,0 @@ -2025-09-25 03:48:09.633 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:09.648 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:09.653 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.EatSsuApplicationTests@34eb5d01] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5d68be4f testClass = ssu.eatssu.EatSsuApplicationTests, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:10.053 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:10.057 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:10.059 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1892865f] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:10.338 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:10.345 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:10.346 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@648bfebe] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:10.588 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:10.593 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:10.593 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@2df0a4c3] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:10.781 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:10.791 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:10.792 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6b438782] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:10.973 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:10.976 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:10.978 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6e1e9a10] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:11.184 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:11.187 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:11.188 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@8941d98] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:11.381 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:11.385 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:11.386 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@3b5299a3] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:11.551 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:11.556 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:11.557 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@5c8b6b4d] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:11.717 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:11.721 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:11.722 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@2d8ef86b] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:11.879 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:11.883 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:11.887 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@61267fa2] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:12.038 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.042 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.043 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@45ba31bc] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.201 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.204 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.205 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@4ac5bbc8] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.355 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.358 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.359 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@eb52295] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.504 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.508 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.509 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1a408d7e] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.661 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.665 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.666 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@2eaafa39] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.808 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.812 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.813 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@374ea446] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.965 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.968 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.969 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@64ad8c92] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:13.114 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:13.118 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:13.119 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@fed54a6] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:13.274 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:13.278 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:13.278 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@707c4466] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:13.422 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:13.425 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:13.426 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@2588d9b5] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:13.580 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:13.584 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:13.585 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@445265d6] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:13.746 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:13.750 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:13.750 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7c0c380f] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:13.898 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:13.901 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:13.902 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@66a1cbd8] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.044 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.047 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.048 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@4daaeaeb] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.227 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.230 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.230 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@41a421dd] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.384 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.387 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.394 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@119983dd] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.540 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.544 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.544 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@588ee108] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@436739c1 testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.685 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.688 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.689 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@19d7f0d2] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@436739c1 testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.825 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.829 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.829 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@403b0010] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@436739c1 testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.966 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.969 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.969 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MenuServiceTest@656f03c8] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@4d0db87a testClass = ssu.eatssu.domain.menu.service.MenuServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.113 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.117 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.117 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.report.service.ReportServiceTest@14509554] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@1515f02c testClass = ssu.eatssu.domain.report.service.ReportServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.263 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.266 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.267 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@5e557ca8] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@7dd6ef6f testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.400 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.403 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.404 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@2a1d353d] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@7dd6ef6f testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.537 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.540 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.541 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@3471a8da] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@7dd6ef6f testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.689 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.692 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.693 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@5cba43e3] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@65573a97 testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.835 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.838 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.839 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@2384644a] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@65573a97 testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.979 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.983 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.984 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@29f5e2ac] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@65573a97 testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:16.142 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:16.145 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:16.146 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@5a987d76] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@65573a97 testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:30.486 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:30.502 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:30.505 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.EatSsuApplicationTests@57ed02e6] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@4fef5792 testClass = ssu.eatssu.EatSsuApplicationTests, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:30.914 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:30.918 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:30.919 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7d65c0ac] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:31.161 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:31.165 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:31.166 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@ce5a2ea] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:31.412 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:31.417 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:31.418 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@72f71ea2] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:31.615 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:31.625 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:31.626 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@5cdd5ff9] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:31.827 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:31.831 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:31.831 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1b1d2d7b] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:32.001 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:32.005 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:32.006 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7ee45cbe] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:32.185 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:32.188 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:32.189 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6d5ef5ee] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:32.355 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:32.359 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:32.360 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7e7a6f81] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:32.518 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:32.522 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:32.523 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@49f4792a] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:32.686 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:32.690 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:32.691 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@4c601487] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:32.847 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:32.850 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:32.851 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@9a2c163] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.022 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.025 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.026 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@5db33742] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.176 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.179 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.179 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@60e50c6] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.319 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.322 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.323 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@77c8c772] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.485 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.490 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.490 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@628be4f6] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.642 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.646 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.647 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6fcbb7ae] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.802 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.805 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.806 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@72e09a66] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.953 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.957 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.957 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@685f7fd9] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:34.106 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:34.109 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:34.109 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6191335f] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:34.281 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:34.285 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:34.286 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1639f9ae] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:34.440 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:34.443 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:34.443 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@682921cb] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:34.595 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:34.598 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:34.599 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7034bb18] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:34.775 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:34.778 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:34.779 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@3d2bcab9] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:34.919 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:34.922 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:34.923 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1799d41f] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.148 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:35.151 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.152 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@5a2481da] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.298 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:35.302 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.302 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@11e32a5e] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.458 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:35.461 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.461 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@436739c1] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3927903e testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.609 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:35.614 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.615 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@c4b6076] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3927903e testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.781 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:35.786 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.786 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@ca2f6b7] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3927903e testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:36.081 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:36.088 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:36.090 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MenuServiceTest@4d0db87a] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@e361d62 testClass = ssu.eatssu.domain.menu.service.MenuServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:36.446 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:36.453 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:36.454 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.report.service.ReportServiceTest@1515f02c] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@1483f1f8 testClass = ssu.eatssu.domain.report.service.ReportServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:36.860 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:36.865 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:36.866 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@7dd6ef6f] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3bafa0e6 testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.053 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:37.056 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.057 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@16abf193] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3bafa0e6 testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.207 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:37.211 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.211 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@317b33a1] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3bafa0e6 testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.361 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:37.365 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.366 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@51bc0fc0] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@679bd9ff testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.510 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:37.514 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.515 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@6bc1a32c] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@679bd9ff testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.660 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:37.664 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.664 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@a6a4c55] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@679bd9ff testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.802 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:37.806 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.806 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@1e5c691e] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@679bd9ff testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted diff --git a/logs/eatssu-app.log b/logs/eatssu-app.log deleted file mode 100644 index edfc856b..00000000 --- a/logs/eatssu-app.log +++ /dev/null @@ -1,37217 +0,0 @@ -2025-09-25 03:41:04.330 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final -2025-09-25 03:41:04.346 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 88486 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:41:04.346 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 03:41:04.362 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable -2025-09-25 03:41:04.362 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' -2025-09-25 03:41:04.833 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:41:04.875 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 39 ms. Found 22 JPA repository interfaces. -2025-09-25 03:41:05.226 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 03:41:05.230 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 03:41:05.230 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 03:41:05.230 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 03:41:05.252 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 03:41:05.253 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 890 ms -2025-09-25 03:41:05.375 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:41:05.393 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final -2025-09-25 03:41:05.501 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-09-25 03:41:05.731 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@258e8ca3 -2025-09-25 03:41:05.732 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-09-25 03:41:05.774 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 03:41:07.084 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 03:41:07.094 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:41:08.199 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 03:41:08.221 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 03:41:08.323 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@43b68ee8, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5c071b23, org.springframework.security.web.context.SecurityContextHolderFilter@44c27436, org.springframework.security.web.header.HeaderWriterFilter@71963b91, org.springframework.web.filter.CorsFilter@56467709, org.springframework.security.web.authentication.logout.LogoutFilter@37596a10, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@7780c03, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@6dea3f5c, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@473fc0f5, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@70ce03ca, org.springframework.security.web.access.ExceptionTranslationFilter@12b155e7, org.springframework.security.web.access.intercept.AuthorizationFilter@63271ca2] -2025-09-25 03:41:08.712 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 03:41:08.748 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 03:41:08.763 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 03:41:08.776 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 4.625 seconds (process running for 4.873) -2025-09-25 03:41:10.451 [INFO] [RMI TCP Connection(2)-10.28.28.218] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-09-25 03:41:10.451 [INFO] [RMI TCP Connection(2)-10.28.28.218] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-09-25 03:41:10.453 [INFO] [RMI TCP Connection(2)-10.28.28.218] o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms -2025-09-25 03:41:29.039 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST GET /partnerships args= -2025-09-25 03:41:29.158 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE GET /partnerships (113 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[{"storeName":"역전할머니맥주","longitude":126.9573923,"latitude":37.4946689,"restaurantType":"RESTAURANT","partnershipInfos":[{"id":23,"colleg...(truncated) -2025-09-25 03:41:58.366 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 1 class path change (1 addition, 0 deletions, 0 modifications) -2025-09-25 03:41:58.376 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] -2025-09-25 03:41:58.377 [INFO] [Thread-7] o.a.catalina.core.StandardService - Stopping service [Tomcat] -2025-09-25 03:41:58.379 [INFO] [Thread-7] o.a.c.c.C.[Tomcat].[localhost].[/] - Destroying Spring FrameworkServlet 'dispatcherServlet' -2025-09-25 03:41:58.383 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] -2025-09-25 03:41:58.387 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] -2025-09-25 03:41:58.418 [INFO] [Thread-7] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:41:58.422 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-09-25 03:41:58.879 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-09-25 03:41:58.969 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 88486 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:41:58.969 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 03:41:59.170 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:41:59.193 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 23 ms. Found 22 JPA repository interfaces. -2025-09-25 03:41:59.276 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 03:41:59.276 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 03:41:59.276 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 03:41:59.276 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 03:41:59.282 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 03:41:59.282 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 312 ms -2025-09-25 03:41:59.343 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:41:59.347 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... -2025-09-25 03:41:59.491 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-2 - Added connection com.mysql.cj.jdbc.ConnectionImpl@752fb3ff -2025-09-25 03:41:59.491 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Start completed. -2025-09-25 03:41:59.498 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 03:42:00.673 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 03:42:00.674 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:42:01.190 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 03:42:01.200 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 03:42:01.247 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@200ba7a8, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@55a86de2, org.springframework.security.web.context.SecurityContextHolderFilter@17350f21, org.springframework.security.web.header.HeaderWriterFilter@4cf056fa, org.springframework.web.filter.CorsFilter@409310b8, org.springframework.security.web.authentication.logout.LogoutFilter@58ad7e5b, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@6df0ccdb, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7a3589f2, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@6177ee04, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@103b102a, org.springframework.security.web.access.ExceptionTranslationFilter@594872e8, org.springframework.security.web.access.intercept.AuthorizationFilter@55541043] -2025-09-25 03:42:01.363 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 03:42:01.376 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 03:42:01.376 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 03:42:01.382 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 2.431 seconds (process running for 57.479) -2025-09-25 03:42:02.281 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged -2025-09-25 03:42:02.826 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 1 class path change (0 additions, 0 deletions, 1 modification) -2025-09-25 03:42:02.833 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] -2025-09-25 03:42:02.833 [INFO] [Thread-9] o.a.catalina.core.StandardService - Stopping service [Tomcat] -2025-09-25 03:42:02.835 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] -2025-09-25 03:42:02.836 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] -2025-09-25 03:42:02.842 [INFO] [Thread-9] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:42:02.843 [INFO] [Thread-9] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown initiated... -2025-09-25 03:42:03.464 [INFO] [Thread-9] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown completed. -2025-09-25 03:42:03.532 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 88486 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:42:03.532 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 03:42:03.672 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:42:03.695 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 23 ms. Found 22 JPA repository interfaces. -2025-09-25 03:42:03.782 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 03:42:03.782 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 03:42:03.782 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 03:42:03.782 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 03:42:03.788 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 03:42:03.788 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 256 ms -2025-09-25 03:42:03.847 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:42:03.851 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Starting... -2025-09-25 03:42:04.046 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-3 - Added connection com.mysql.cj.jdbc.ConnectionImpl@dc7dce1 -2025-09-25 03:42:04.046 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Start completed. -2025-09-25 03:42:04.053 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 03:42:05.123 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 03:42:05.124 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:42:05.589 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 03:42:05.599 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 03:42:05.654 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@295dcb0a, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@3da1c6d3, org.springframework.security.web.context.SecurityContextHolderFilter@76108ec2, org.springframework.security.web.header.HeaderWriterFilter@41368639, org.springframework.web.filter.CorsFilter@10593def, org.springframework.security.web.authentication.logout.LogoutFilter@42ff054a, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@1965238b, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@28cc2383, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3d0ec631, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@5ea7ae36, org.springframework.security.web.access.ExceptionTranslationFilter@7ef46958, org.springframework.security.web.access.intercept.AuthorizationFilter@73ecf092] -2025-09-25 03:42:05.788 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 03:42:05.807 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 03:42:05.808 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 03:42:05.816 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 2.301 seconds (process running for 61.913) -2025-09-25 03:42:06.685 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged -2025-09-25 03:42:12.605 [INFO] [http-nio-9000-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-09-25 03:42:12.606 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-09-25 03:42:12.612 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Completed initialization in 6 ms -2025-09-25 03:42:12.650 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST GET /partnerships args= -2025-09-25 03:42:12.749 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE GET /partnerships (93 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[{"storeName":"역전할머니맥주","longitude":126.9573923,"latitude":37.4946689,"restaurantType":"RESTAURANT","partnershipInfos":[{"id":23,"colleg...(truncated) -2025-09-25 03:42:24.823 [INFO] [http-nio-9000-exec-3] s.e.global.log.ControllerLogAspect - REQUEST GET /users/department args= -2025-09-25 03:42:24.897 [INFO] [http-nio-9000-exec-3] s.e.global.log.ControllerLogAspect - RESPONSE GET /users/department (69 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":{"departmentId":null,"departmentName":null,"collegeId":null,"collegeName":null}} -2025-09-25 03:43:19.417 [INFO] [http-nio-9000-exec-5] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args="2023-12-31T15:00:00.000+00:00", "DODAM", "MORNING" -2025-09-25 03:43:19.520 [INFO] [http-nio-9000-exec-5] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (107 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[]} -2025-09-25 03:45:20.040 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:45:20.043 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown initiated... -2025-09-25 03:45:20.511 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown completed. -2025-09-25 03:47:08.109 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final -2025-09-25 03:47:08.132 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 88808 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:47:08.133 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 03:47:08.158 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable -2025-09-25 03:47:08.158 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' -2025-09-25 03:47:09.488 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:47:09.549 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 55 ms. Found 22 JPA repository interfaces. -2025-09-25 03:47:09.994 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 03:47:09.998 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 03:47:09.998 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 03:47:09.998 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 03:47:10.024 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 03:47:10.024 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1866 ms -2025-09-25 03:47:10.168 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:47:10.191 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final -2025-09-25 03:47:10.320 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-09-25 03:47:10.595 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@6d751863 -2025-09-25 03:47:10.596 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-09-25 03:47:10.646 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 03:47:11.967 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 03:47:11.975 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:47:13.000 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 03:47:13.026 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 03:47:13.126 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@494a9f97, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5dc8d54d, org.springframework.security.web.context.SecurityContextHolderFilter@5df09ebc, org.springframework.security.web.header.HeaderWriterFilter@70db8e42, org.springframework.web.filter.CorsFilter@f604c3c, org.springframework.security.web.authentication.logout.LogoutFilter@19de05bb, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@6a1c5db6, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@3c4125e9, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@4eeee2a9, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@77b7d145, org.springframework.security.web.access.ExceptionTranslationFilter@28c2063a, org.springframework.security.web.access.intercept.AuthorizationFilter@5c13ca23] -2025-09-25 03:47:13.368 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 03:47:13.397 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 03:47:13.407 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 03:47:13.417 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 5.577 seconds (process running for 6.283) -2025-09-25 03:47:15.105 [INFO] [RMI TCP Connection(4)-10.28.28.218] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-09-25 03:47:15.105 [INFO] [RMI TCP Connection(4)-10.28.28.218] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-09-25 03:47:15.106 [INFO] [RMI TCP Connection(4)-10.28.28.218] o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms -2025-09-25 03:47:26.931 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args="2023-12-31T15:00:00.000+00:00", "DODAM", "MORNING" -2025-09-25 03:47:27.009 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (78 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[]} -2025-09-25 03:47:40.643 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 266 class path changes (0 additions, 266 deletions, 0 modifications) -2025-09-25 03:47:40.664 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] -2025-09-25 03:47:40.664 [INFO] [Thread-7] o.a.catalina.core.StandardService - Stopping service [Tomcat] -2025-09-25 03:47:40.666 [INFO] [Thread-7] o.a.c.c.C.[Tomcat].[localhost].[/] - Destroying Spring FrameworkServlet 'dispatcherServlet' -2025-09-25 03:47:40.668 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] -2025-09-25 03:47:40.670 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] -2025-09-25 03:47:40.684 [INFO] [Thread-7] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:47:40.692 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-09-25 03:47:41.150 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-09-25 03:47:41.260 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 88808 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:47:41.260 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 03:47:41.566 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:47:41.567 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 1 ms. Found 0 JPA repository interfaces. -2025-09-25 03:47:41.653 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 03:47:41.654 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 03:47:41.654 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 03:47:41.654 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 03:47:41.663 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 03:47:41.664 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 403 ms -2025-09-25 03:47:41.730 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:47:41.734 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... -2025-09-25 03:47:41.881 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-2 - Added connection com.mysql.cj.jdbc.ConnectionImpl@7180641b -2025-09-25 03:47:41.881 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Start completed. -2025-09-25 03:47:41.888 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 03:47:41.896 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 03:47:41.896 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:47:42.004 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 03:47:42.016 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 03:47:42.143 [WARN] [restartedMain] o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - - -Using generated security password: 03fbb7b2-b21a-4f41-ba01-446f2fed98f7 - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2025-09-25 03:47:42.163 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@30dee6c7, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@37a90954, org.springframework.security.web.context.SecurityContextHolderFilter@6d979a7b, org.springframework.security.web.header.HeaderWriterFilter@6ed30a0f, org.springframework.web.filter.CorsFilter@42a03244, org.springframework.security.web.csrf.CsrfFilter@15b12f8f, org.springframework.security.web.authentication.logout.LogoutFilter@26db6526, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@19c8ec10, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@4e49a280, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@10ef1954, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@43788101, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@2fab3d3b, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@482711a1, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@57402d50, org.springframework.security.web.access.ExceptionTranslationFilter@5e6a9f94, org.springframework.security.web.access.intercept.AuthorizationFilter@39d9200d] -2025-09-25 03:47:42.185 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 03:47:42.196 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 03:47:42.196 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 03:47:42.202 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 0.978 seconds (process running for 35.068) -2025-09-25 03:47:42.204 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation delta: - - -========================== -CONDITION EVALUATION DELTA -========================== - - -Positive matches: ------------------ - - ManagementWebSecurityAutoConfiguration matched: - - found 'session' scope (OnWebApplicationCondition) - - AllNestedConditions 2 matched 0 did not; NestedCondition on DefaultWebSecurityCondition.Beans @ConditionalOnMissingBean (types: org.springframework.security.web.SecurityFilterChain; SearchStrategy: all) did not find any beans; NestedCondition on DefaultWebSecurityCondition.Classes @ConditionalOnClass found required classes 'org.springframework.security.web.SecurityFilterChain', 'org.springframework.security.config.annotation.web.builders.HttpSecurity' (DefaultWebSecurityCondition) - - SpringBootWebSecurityConfiguration.WebSecurityEnablerConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.security.config.annotation.web.configuration.EnableWebSecurity' (OnClassCondition) - - @ConditionalOnMissingBean (names: springSecurityFilterChain; SearchStrategy: all) did not find any beans (OnBeanCondition) - - UserDetailsServiceAutoConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.security.authentication.AuthenticationManager' (OnClassCondition) - - @ConditionalOnBean (types: org.springframework.security.config.annotation.ObjectPostProcessor; SearchStrategy: all) found bean 'objectPostProcessor'; @ConditionalOnMissingBean (types: org.springframework.security.authentication.AuthenticationManager,org.springframework.security.authentication.AuthenticationProvider,org.springframework.security.core.userdetails.UserDetailsService,org.springframework.security.authentication.AuthenticationManagerResolver,org.springframework.security.oauth2.jwt.JwtDecoder,org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector,org.springframework.security.oauth2.client.registration.ClientRegistrationRepository,org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistrationRepository; SearchStrategy: all) did not find any beans (OnBeanCondition) - - -Negative matches: ------------------ - - None - - -Exclusions: ------------ - - None - - -Unconditional classes: ----------------------- - - None - - - -2025-09-25 03:47:43.604 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 2 class path changes (2 additions, 0 deletions, 0 modifications) -2025-09-25 03:47:43.607 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] -2025-09-25 03:47:43.608 [INFO] [Thread-9] o.a.catalina.core.StandardService - Stopping service [Tomcat] -2025-09-25 03:47:43.609 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] -2025-09-25 03:47:43.612 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] -2025-09-25 03:47:43.614 [INFO] [Thread-9] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:47:43.615 [INFO] [Thread-9] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown initiated... -2025-09-25 03:47:43.841 [INFO] [Thread-9] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown completed. -2025-09-25 03:47:43.901 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 88808 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:47:43.901 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 03:47:44.011 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:47:44.011 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 0 ms. Found 0 JPA repository interfaces. -2025-09-25 03:47:44.103 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 03:47:44.104 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 03:47:44.104 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 03:47:44.104 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 03:47:44.123 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 03:47:44.124 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 222 ms -2025-09-25 03:47:44.205 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:47:44.209 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Starting... -2025-09-25 03:47:44.396 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-3 - Added connection com.mysql.cj.jdbc.ConnectionImpl@35b1a620 -2025-09-25 03:47:44.397 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Start completed. -2025-09-25 03:47:44.404 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 03:47:44.413 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 03:47:44.414 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:47:44.503 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 03:47:44.513 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 03:47:44.624 [WARN] [restartedMain] o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - - -Using generated security password: d28e6f7c-d532-46bf-8d68-0e0865484c5b - -This generated password is for development use only. Your security configuration must be updated before running your application in production. - -2025-09-25 03:47:44.638 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@231444fb, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@2415da5a, org.springframework.security.web.context.SecurityContextHolderFilter@7af959b8, org.springframework.security.web.header.HeaderWriterFilter@4edda985, org.springframework.web.filter.CorsFilter@6d6c0be5, org.springframework.security.web.csrf.CsrfFilter@63a9fd7d, org.springframework.security.web.authentication.logout.LogoutFilter@46cbd98c, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@2c4e4f9a, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@4c71372, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@7e4a39b4, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@20a4f44f, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@76b3d630, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@12ff04fe, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@7f78891a, org.springframework.security.web.access.ExceptionTranslationFilter@5ae7f43a, org.springframework.security.web.access.intercept.AuthorizationFilter@2fb9f576] -2025-09-25 03:47:44.659 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 03:47:44.673 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 03:47:44.674 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 03:47:44.679 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 0.797 seconds (process running for 37.546) -2025-09-25 03:47:44.681 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged -2025-09-25 03:48:00.110 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:48:00.112 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown initiated... -2025-09-25 03:48:00.611 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown completed. -2025-09-25 03:48:08.583 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final -2025-09-25 03:48:08.633 [INFO] [Test worker] ssu.eatssu.EatSsuApplicationTests - Starting EatSsuApplicationTests using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:08.634 [INFO] [Test worker] ssu.eatssu.EatSsuApplicationTests - The following 1 profile is active: "test" -2025-09-25 03:48:09.120 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:09.168 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 44 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:09.481 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:09.529 [INFO] [Test worker] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final -2025-09-25 03:48:09.627 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-09-25 03:48:09.629 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:09.633 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:09.633 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:09.642 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:09.648 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:09.653 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.EatSsuApplicationTests@34eb5d01] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5d68be4f testClass = ssu.eatssu.EatSsuApplicationTests, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:09.663 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.auth.service.OAuthServiceTest]: OAuthServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. -2025-09-25 03:48:09.674 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.auth.service.OAuthServiceTest -2025-09-25 03:48:09.697 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:09.697 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:09.837 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:09.855 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 17 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:10.044 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:10.049 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... -2025-09-25 03:48:10.051 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:10.053 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:10.053 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:10.057 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:10.057 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:10.059 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1892865f] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:10.090 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:10.090 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:10.227 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:10.245 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 18 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:10.331 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:10.336 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Starting... -2025-09-25 03:48:10.336 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:10.338 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:10.338 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:10.344 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:10.345 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:10.346 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@648bfebe] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:10.373 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:10.373 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:10.508 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:10.524 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 15 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:10.584 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:10.587 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Starting... -2025-09-25 03:48:10.587 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:10.588 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:10.588 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:10.592 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:10.593 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:10.593 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@2df0a4c3] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:10.612 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:10.612 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:10.717 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:10.732 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:10.778 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:10.781 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-5 - Starting... -2025-09-25 03:48:10.781 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:10.781 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:10.781 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:10.791 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:10.791 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:10.792 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6b438782] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:10.808 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:10.808 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:10.904 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:10.919 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:10.970 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:10.972 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-6 - Starting... -2025-09-25 03:48:10.972 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:10.973 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:10.973 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:10.976 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:10.976 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:10.978 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6e1e9a10] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:10.998 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:10.998 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:11.094 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:11.115 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 21 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:11.176 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:11.179 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-7 - Starting... -2025-09-25 03:48:11.179 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:11.184 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:11.184 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:11.187 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:11.187 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:11.188 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@8941d98] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:11.202 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:11.202 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:11.321 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:11.337 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 15 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:11.378 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:11.381 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-8 - Starting... -2025-09-25 03:48:11.381 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:11.381 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:11.381 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:11.385 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:11.385 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:11.386 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@3b5299a3] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:11.399 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:11.399 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:11.495 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:11.508 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:11.548 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:11.550 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-9 - Starting... -2025-09-25 03:48:11.551 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:11.551 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:11.551 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:11.556 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:11.556 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:11.557 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@5c8b6b4d] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:11.572 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:11.572 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:11.659 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:11.673 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:11.714 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:11.716 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-10 - Starting... -2025-09-25 03:48:11.716 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:11.717 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:11.717 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:11.720 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:11.721 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:11.722 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@2d8ef86b] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:11.734 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:11.735 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:11.824 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:11.838 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:11.876 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:11.879 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-11 - Starting... -2025-09-25 03:48:11.879 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:11.879 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:11.879 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:11.883 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:11.883 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:11.887 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@61267fa2] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:11.899 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:11.899 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:11.984 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:11.998 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:12.035 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:12.038 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-12 - Starting... -2025-09-25 03:48:12.038 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:12.038 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.038 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.042 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:12.042 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.043 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@45ba31bc] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.054 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:12.054 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:12.141 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:12.154 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:12.198 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:12.200 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-13 - Starting... -2025-09-25 03:48:12.200 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:12.201 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.201 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.204 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:12.204 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.205 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@4ac5bbc8] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.217 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:12.217 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:12.299 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:12.312 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:12.352 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:12.354 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-14 - Starting... -2025-09-25 03:48:12.354 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:12.355 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.355 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.358 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:12.358 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.359 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@eb52295] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.370 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:12.370 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:12.453 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:12.466 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:12.502 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:12.504 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-15 - Starting... -2025-09-25 03:48:12.504 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:12.504 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.505 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.508 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:12.508 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.509 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1a408d7e] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.522 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:12.522 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:12.602 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:12.616 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:12.658 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:12.660 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-16 - Starting... -2025-09-25 03:48:12.660 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:12.661 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.661 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.664 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:12.665 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.666 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@2eaafa39] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.677 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:12.677 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:12.758 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:12.770 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:12.805 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:12.808 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-17 - Starting... -2025-09-25 03:48:12.808 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:12.808 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.808 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.811 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:12.812 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.813 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@374ea446] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.826 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:12.826 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:12.909 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:12.923 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:12.962 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:12.964 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-18 - Starting... -2025-09-25 03:48:12.965 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:12.965 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.965 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:12.968 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:12.968 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.969 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@64ad8c92] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:12.981 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:12.981 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:13.064 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:13.076 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:13.112 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:13.114 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-19 - Starting... -2025-09-25 03:48:13.114 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:13.114 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:13.115 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:13.118 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:13.118 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:13.119 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@fed54a6] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:13.131 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:13.131 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:13.220 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:13.233 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:13.271 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:13.274 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-20 - Starting... -2025-09-25 03:48:13.274 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:13.274 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:13.275 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:13.277 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:13.278 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:13.278 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@707c4466] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:13.290 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:13.290 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:13.371 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:13.383 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:13.419 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:13.421 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-21 - Starting... -2025-09-25 03:48:13.421 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:13.422 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:13.422 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:13.425 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:13.425 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:13.426 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@2588d9b5] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:13.437 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:13.437 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:13.519 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:13.535 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 15 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:13.577 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:13.579 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-22 - Starting... -2025-09-25 03:48:13.580 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:13.580 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:13.580 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:13.583 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:13.584 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:13.585 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@445265d6] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:13.606 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:13.606 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:13.693 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:13.707 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:13.744 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:13.746 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-23 - Starting... -2025-09-25 03:48:13.746 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:13.746 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:13.747 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:13.749 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:13.750 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:13.750 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7c0c380f] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:13.761 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:13.762 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:13.844 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:13.857 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:13.893 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:13.897 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-24 - Starting... -2025-09-25 03:48:13.897 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:13.898 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:13.898 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:13.900 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:13.901 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:13.902 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@66a1cbd8] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:13.912 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:13.912 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:13.992 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:14.005 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:14.041 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:14.043 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-25 - Starting... -2025-09-25 03:48:14.043 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:14.044 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.044 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.047 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:14.047 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.048 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@4daaeaeb] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.059 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:14.059 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:14.149 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:14.174 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 24 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:14.224 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:14.226 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-26 - Starting... -2025-09-25 03:48:14.226 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:14.227 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.227 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.229 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:14.230 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.230 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@41a421dd] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.242 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:14.242 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:14.325 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:14.339 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:14.381 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:14.383 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-27 - Starting... -2025-09-25 03:48:14.383 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:14.384 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.384 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.387 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:14.387 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.394 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@119983dd] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5edaa572 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@140929c2, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.395 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.menu.service.MealServiceTest]: MealServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. -2025-09-25 03:48:14.403 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.menu.service.MealServiceTest -2025-09-25 03:48:14.412 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - Starting MealServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:14.412 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:14.488 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:14.501 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:14.538 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:14.540 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-28 - Starting... -2025-09-25 03:48:14.540 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:14.540 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.540 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.543 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:14.544 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.544 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@588ee108] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@436739c1 testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.554 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - Starting MealServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:14.554 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:14.636 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:14.648 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:14.682 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:14.684 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-29 - Starting... -2025-09-25 03:48:14.684 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:14.685 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.685 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.688 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:14.688 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.689 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@19d7f0d2] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@436739c1 testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.698 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - Starting MealServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:14.698 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:14.778 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:14.790 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:14.823 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:14.825 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-30 - Starting... -2025-09-25 03:48:14.825 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:14.825 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.825 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.828 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:14.829 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.829 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@403b0010] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@436739c1 testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.831 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.menu.service.MenuServiceTest]: MenuServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. -2025-09-25 03:48:14.831 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.menu.service.MenuServiceTest -2025-09-25 03:48:14.840 [INFO] [Test worker] s.e.d.menu.service.MenuServiceTest - Starting MenuServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:14.840 [INFO] [Test worker] s.e.d.menu.service.MenuServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:14.917 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:14.931 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:14.963 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:14.965 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-31 - Starting... -2025-09-25 03:48:14.965 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:14.966 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.966 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:14.968 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:14.969 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.969 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MenuServiceTest@656f03c8] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@4d0db87a testClass = ssu.eatssu.domain.menu.service.MenuServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:14.971 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.report.service.ReportServiceTest]: ReportServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. -2025-09-25 03:48:14.977 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.report.service.ReportServiceTest -2025-09-25 03:48:14.986 [INFO] [Test worker] s.e.d.r.service.ReportServiceTest - Starting ReportServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:14.986 [INFO] [Test worker] s.e.d.r.service.ReportServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:15.059 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:15.072 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:15.111 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:15.113 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-32 - Starting... -2025-09-25 03:48:15.113 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:15.113 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.113 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.116 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:15.117 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.117 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.report.service.ReportServiceTest@14509554] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@1515f02c testClass = ssu.eatssu.domain.report.service.ReportServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.119 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.review.service.ReviewServiceTest]: ReviewServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. -2025-09-25 03:48:15.126 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.review.service.ReviewServiceTest -2025-09-25 03:48:15.135 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - Starting ReviewServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:15.135 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:15.208 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:15.221 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:15.260 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:15.263 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-33 - Starting... -2025-09-25 03:48:15.263 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:15.263 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.263 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.266 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:15.266 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.267 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@5e557ca8] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@7dd6ef6f testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.277 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - Starting ReviewServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:15.277 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:15.349 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:15.362 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:15.393 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:15.399 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-34 - Starting... -2025-09-25 03:48:15.400 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:15.400 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.400 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.403 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:15.403 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.404 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@2a1d353d] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@7dd6ef6f testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.413 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - Starting ReviewServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:15.413 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:15.486 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:15.498 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:15.531 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:15.533 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-35 - Starting... -2025-09-25 03:48:15.533 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:15.537 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.537 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.540 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:15.540 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.541 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@3471a8da] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@7dd6ef6f testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.542 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.user.service.UserServiceTest]: UserServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. -2025-09-25 03:48:15.549 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.user.service.UserServiceTest -2025-09-25 03:48:15.559 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - Starting UserServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:15.559 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:15.635 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:15.649 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:15.687 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:15.689 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-36 - Starting... -2025-09-25 03:48:15.689 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:15.689 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.689 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.692 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:15.692 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.693 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@5cba43e3] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@65573a97 testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.702 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - Starting UserServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:15.702 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:15.777 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:15.790 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:15.833 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:15.835 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-37 - Starting... -2025-09-25 03:48:15.835 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:15.835 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.835 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.838 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:15.838 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.839 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@2384644a] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@65573a97 testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.848 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - Starting UserServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:15.848 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:15.919 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:15.936 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 16 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:15.976 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:15.979 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-38 - Starting... -2025-09-25 03:48:15.979 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:15.979 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.979 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:15.982 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:15.983 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.984 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@29f5e2ac] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@65573a97 testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:15.995 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - Starting UserServiceTest using Java 17.0.11 with PID 88887 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:15.996 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:16.088 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:16.102 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:16.139 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:16.141 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-39 - Starting... -2025-09-25 03:48:16.141 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:16.142 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:16.142 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:16.145 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:16.145 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:16.146 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@5a987d76] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@65573a97 testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:29.487 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final -2025-09-25 03:48:29.502 [INFO] [Test worker] ssu.eatssu.EatSsuApplicationTests - Starting EatSsuApplicationTests using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:29.505 [INFO] [Test worker] ssu.eatssu.EatSsuApplicationTests - The following 1 profile is active: "test" -2025-09-25 03:48:30.026 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:30.073 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 43 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:30.355 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:30.373 [INFO] [Test worker] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final -2025-09-25 03:48:30.476 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-09-25 03:48:30.480 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:30.486 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:30.487 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:30.496 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:30.502 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:30.505 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.EatSsuApplicationTests@57ed02e6] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@4fef5792 testClass = ssu.eatssu.EatSsuApplicationTests, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:30.515 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.auth.service.OAuthServiceTest]: OAuthServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. -2025-09-25 03:48:30.530 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.auth.service.OAuthServiceTest -2025-09-25 03:48:30.555 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:30.555 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:30.701 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:30.725 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 24 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:30.910 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:30.913 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... -2025-09-25 03:48:30.913 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:30.914 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:30.914 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:30.917 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:30.918 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:30.919 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7d65c0ac] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:30.947 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:30.947 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:31.074 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:31.093 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 18 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:31.158 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:31.160 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Starting... -2025-09-25 03:48:31.161 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:31.161 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:31.161 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:31.165 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:31.165 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:31.166 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@ce5a2ea] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:31.185 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:31.185 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:31.295 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:31.318 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 22 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:31.407 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:31.411 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Starting... -2025-09-25 03:48:31.411 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:31.412 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:31.412 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:31.416 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:31.417 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:31.418 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@72f71ea2] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:31.433 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:31.433 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:31.545 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:31.561 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 15 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:31.612 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:31.614 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-5 - Starting... -2025-09-25 03:48:31.614 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:31.615 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:31.615 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:31.625 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:31.625 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:31.626 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@5cdd5ff9] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:31.645 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:31.645 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:31.751 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:31.768 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 16 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:31.824 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:31.826 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-6 - Starting... -2025-09-25 03:48:31.826 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:31.827 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:31.827 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:31.830 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:31.831 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:31.831 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1b1d2d7b] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:31.845 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:31.845 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:31.937 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:31.952 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 15 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:31.997 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:32.000 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-7 - Starting... -2025-09-25 03:48:32.001 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:32.001 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:32.001 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:32.004 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:32.005 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:32.006 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7ee45cbe] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:32.021 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:32.021 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:32.126 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:32.140 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:32.182 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:32.184 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-8 - Starting... -2025-09-25 03:48:32.184 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:32.185 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:32.185 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:32.188 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:32.188 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:32.189 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6d5ef5ee] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:32.201 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:32.201 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:32.291 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:32.305 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:32.352 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:32.355 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-9 - Starting... -2025-09-25 03:48:32.355 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:32.355 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:32.355 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:32.358 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:32.359 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:32.360 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7e7a6f81] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:32.372 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:32.372 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:32.455 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:32.470 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:32.515 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:32.517 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-10 - Starting... -2025-09-25 03:48:32.518 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:32.518 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:32.518 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:32.522 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:32.522 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:32.523 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@49f4792a] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:32.535 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:32.535 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:32.626 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:32.640 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:32.682 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:32.685 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-11 - Starting... -2025-09-25 03:48:32.685 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:32.686 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:32.686 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:32.689 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:32.690 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:32.691 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@4c601487] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:32.704 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:32.704 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:32.791 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:32.805 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:32.844 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:32.846 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-12 - Starting... -2025-09-25 03:48:32.846 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:32.847 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:32.847 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:32.850 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:32.850 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:32.851 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@9a2c163] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:32.863 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:32.863 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:32.950 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:32.967 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 16 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:33.018 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:33.021 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-13 - Starting... -2025-09-25 03:48:33.021 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:33.022 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.022 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.024 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:33.025 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.026 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@5db33742] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.038 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:33.038 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:33.120 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:33.132 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:33.173 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:33.175 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-14 - Starting... -2025-09-25 03:48:33.175 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:33.176 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.176 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.178 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:33.179 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.179 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@60e50c6] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.190 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:33.190 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:33.265 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:33.279 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:33.316 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:33.318 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-15 - Starting... -2025-09-25 03:48:33.318 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:33.319 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.319 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.322 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:33.322 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.323 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@77c8c772] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.336 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:33.336 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:33.422 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:33.436 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:33.482 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:33.484 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-16 - Starting... -2025-09-25 03:48:33.484 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:33.485 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.485 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.488 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:33.490 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.490 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@628be4f6] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.501 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:33.501 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:33.585 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:33.600 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:33.639 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:33.642 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-17 - Starting... -2025-09-25 03:48:33.642 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:33.642 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.642 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.645 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:33.646 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.647 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6fcbb7ae] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.659 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:33.659 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:33.746 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:33.761 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 15 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:33.799 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:33.801 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-18 - Starting... -2025-09-25 03:48:33.801 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:33.802 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.802 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.805 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:33.805 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.806 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@72e09a66] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.817 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:33.817 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:33.900 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:33.912 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:33.951 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:33.953 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-19 - Starting... -2025-09-25 03:48:33.953 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:33.953 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.953 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:33.956 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:33.957 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.957 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@685f7fd9] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:33.968 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:33.968 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:34.045 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:34.059 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:34.102 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:34.105 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-20 - Starting... -2025-09-25 03:48:34.105 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:34.106 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:34.106 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:34.108 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:34.109 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:34.109 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@6191335f] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:34.136 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:34.136 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:34.230 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:34.242 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:34.278 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:34.281 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-21 - Starting... -2025-09-25 03:48:34.281 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:34.281 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:34.281 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:34.284 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:34.285 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:34.286 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1639f9ae] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:34.298 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:34.298 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:34.383 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:34.396 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:34.437 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:34.439 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-22 - Starting... -2025-09-25 03:48:34.439 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:34.440 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:34.440 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:34.442 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:34.443 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:34.443 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@682921cb] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:226) - at org.junit.platform.engine.support.hierarchical.NodeTestTask$DefaultDynamicTestExecutor.execute(NodeTestTask.java:204) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:142) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.lambda$execute$2(TestTemplateTestDescriptor.java:110) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) - at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) - at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) - at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:110) - at org.junit.jupiter.engine.descriptor.TestTemplateTestDescriptor.execute(TestTemplateTestDescriptor.java:44) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 138 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 159 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 174 common frames omitted -2025-09-25 03:48:34.455 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:34.455 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:34.543 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:34.555 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 11 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:34.592 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:34.594 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-23 - Starting... -2025-09-25 03:48:34.594 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:34.595 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:34.595 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:34.598 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:34.598 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:34.599 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@7034bb18] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:34.609 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:34.609 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:34.719 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:34.733 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:34.772 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:34.775 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-24 - Starting... -2025-09-25 03:48:34.775 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:34.775 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:34.775 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:34.778 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:34.778 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:34.779 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@3d2bcab9] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:34.790 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:34.790 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:34.867 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:34.882 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 15 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:34.916 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:34.918 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-25 - Starting... -2025-09-25 03:48:34.918 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:34.919 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:34.919 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:34.922 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:34.922 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:34.923 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@1799d41f] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:34.933 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:34.933 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:35.017 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:35.030 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:35.145 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:35.147 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-26 - Starting... -2025-09-25 03:48:35.147 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:35.148 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:35.148 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:35.151 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:35.151 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.152 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@5a2481da] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.165 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - Starting OAuthServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:35.165 [INFO] [Test worker] s.e.d.auth.service.OAuthServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:35.244 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:35.261 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 16 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:35.296 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:35.298 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-27 - Starting... -2025-09-25 03:48:35.298 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:35.298 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:35.298 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:35.301 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:35.302 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.302 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.auth.service.OAuthServiceTest@11e32a5e] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@761f1a28 testClass = ssu.eatssu.domain.auth.service.OAuthServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@e923d635, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.304 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.menu.service.MealServiceTest]: MealServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. -2025-09-25 03:48:35.313 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.menu.service.MealServiceTest -2025-09-25 03:48:35.323 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - Starting MealServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:35.323 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:35.405 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:35.419 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:35.455 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:35.457 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-28 - Starting... -2025-09-25 03:48:35.457 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:35.458 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:35.458 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:35.461 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:35.461 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.461 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@436739c1] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3927903e testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.471 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - Starting MealServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:35.471 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:35.553 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:35.568 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:35.606 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:35.608 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-29 - Starting... -2025-09-25 03:48:35.608 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:35.609 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:35.610 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:35.614 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:35.614 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.615 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@c4b6076] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3927903e testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.625 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - Starting MealServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:35.625 [INFO] [Test worker] s.e.d.menu.service.MealServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:35.725 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:35.739 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:35.777 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:35.780 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-30 - Starting... -2025-09-25 03:48:35.781 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:35.781 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:35.781 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:35.785 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:35.786 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.786 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MealServiceTest@ca2f6b7] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3927903e testClass = ssu.eatssu.domain.menu.service.MealServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:35.790 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.menu.service.MenuServiceTest]: MenuServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. -2025-09-25 03:48:35.791 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.menu.service.MenuServiceTest -2025-09-25 03:48:35.809 [INFO] [Test worker] s.e.d.menu.service.MenuServiceTest - Starting MenuServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:35.810 [INFO] [Test worker] s.e.d.menu.service.MenuServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:35.951 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:35.977 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 25 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:36.076 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:36.080 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-31 - Starting... -2025-09-25 03:48:36.080 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:36.081 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:36.081 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:36.087 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:36.088 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:36.090 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.menu.service.MenuServiceTest@4d0db87a] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@e361d62 testClass = ssu.eatssu.domain.menu.service.MenuServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:36.093 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.report.service.ReportServiceTest]: ReportServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. -2025-09-25 03:48:36.104 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.report.service.ReportServiceTest -2025-09-25 03:48:36.182 [INFO] [Test worker] s.e.d.r.service.ReportServiceTest - Starting ReportServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:36.182 [INFO] [Test worker] s.e.d.r.service.ReportServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:36.332 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:36.354 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 21 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:36.424 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:36.443 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-32 - Starting... -2025-09-25 03:48:36.443 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:36.446 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:36.446 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:36.451 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:36.453 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:36.454 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.report.service.ReportServiceTest@1515f02c] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@1483f1f8 testClass = ssu.eatssu.domain.report.service.ReportServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:36.456 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.review.service.ReviewServiceTest]: ReviewServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. -2025-09-25 03:48:36.471 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.review.service.ReviewServiceTest -2025-09-25 03:48:36.495 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - Starting ReviewServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:36.495 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:36.633 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:36.657 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 23 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:36.855 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:36.859 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-33 - Starting... -2025-09-25 03:48:36.860 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:36.860 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:36.860 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:36.864 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:36.865 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:36.866 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@7dd6ef6f] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3bafa0e6 testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:36.881 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - Starting ReviewServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:36.881 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:36.994 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:37.009 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 14 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:37.050 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:37.052 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-34 - Starting... -2025-09-25 03:48:37.052 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:37.053 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:37.053 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:37.056 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:37.056 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.057 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@16abf193] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3bafa0e6 testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.067 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - Starting ReviewServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:37.067 [INFO] [Test worker] s.e.d.r.service.ReviewServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:37.156 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:37.170 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:37.204 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:37.206 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-35 - Starting... -2025-09-25 03:48:37.207 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:37.207 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:37.207 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:37.210 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:37.211 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.211 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.review.service.ReviewServiceTest@317b33a1] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3bafa0e6 testClass = ssu.eatssu.domain.review.service.ReviewServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.213 [INFO] [Test worker] o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [ssu.eatssu.domain.user.service.UserServiceTest]: UserServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. -2025-09-25 03:48:37.219 [INFO] [Test worker] o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration ssu.eatssu.EatSsuApplication for test class ssu.eatssu.domain.user.service.UserServiceTest -2025-09-25 03:48:37.229 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - Starting UserServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:37.229 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:37.312 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:37.324 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:37.359 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:37.361 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-36 - Starting... -2025-09-25 03:48:37.361 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:37.361 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:37.361 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:37.365 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:37.365 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.366 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@51bc0fc0] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@679bd9ff testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.375 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - Starting UserServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:37.375 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:37.459 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:37.472 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 13 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:37.508 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:37.510 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-37 - Starting... -2025-09-25 03:48:37.510 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:37.510 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:37.510 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:37.514 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:37.514 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.515 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@6bc1a32c] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@679bd9ff testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.525 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - Starting UserServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:37.525 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:37.613 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:37.625 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 11 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:37.657 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:37.660 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-38 - Starting... -2025-09-25 03:48:37.660 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:37.660 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:37.660 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:37.663 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:37.664 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.664 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@a6a4c55] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@679bd9ff testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.676 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - Starting UserServiceTest using Java 17.0.11 with PID 88942 (started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:48:37.676 [INFO] [Test worker] s.e.d.user.service.UserServiceTest - The following 1 profile is active: "test" -2025-09-25 03:48:37.749 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:48:37.761 [INFO] [Test worker] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 22 JPA repository interfaces. -2025-09-25 03:48:37.800 [INFO] [Test worker] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:48:37.802 [INFO] [Test worker] com.zaxxer.hikari.HikariDataSource - HikariPool-39 - Starting... -2025-09-25 03:48:37.802 [WARN] [Test worker] o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata -java.lang.RuntimeException: Driver com.mysql.cj.jdbc.Driver claims to not accept jdbcUrl, ${EATSSU_DB_URL_TEST} - at com.zaxxer.hikari.util.DriverDataSource.(DriverDataSource.java:110) - at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:326) - at com.zaxxer.hikari.pool.PoolBase.(PoolBase.java:112) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:93) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) - at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:284) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:177) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -2025-09-25 03:48:37.802 [ERROR] [Test worker] o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:37.802 [WARN] [Test worker] o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] -2025-09-25 03:48:37.805 [INFO] [Test worker] o.s.b.a.l.ConditionEvaluationReportLogger - - -Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. -2025-09-25 03:48:37.806 [ERROR] [Test worker] o.s.boot.SpringApplication - Application run failed -org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:48:37.806 [ERROR] [Test worker] o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [ssu.eatssu.domain.user.service.UserServiceTest@1e5c691e] -java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@679bd9ff testClass = ssu.eatssu.domain.user.service.UserServiceTest, locations = [], classes = [ssu.eatssu.EatSsuApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@ebb6851, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@13518f37, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@4b2a01d4, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@77a7cf58, org.springframework.boot.test.context.SpringBootTestAnnotation@abfb5319], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142) - at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127) - at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) - at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) - at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241) - at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377) - at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) - at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) - at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) - at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) - at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) - at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) - at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) - at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278) - at java.base/java.util.Optional.orElseGet(Optional.java:364) - at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277) - at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104) - at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) - at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) - at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) - at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) - at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) - at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) - at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) - at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) - at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) - at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) - at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) - at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) - at java.base/java.lang.reflect.Method.invoke(Method.java:568) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) - at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) - at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) - at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) - at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) - at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) - at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) - at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:121) - at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) - at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) -Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) - at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:59) - at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:47) - at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388) - at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) - at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184) - at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118) - ... 86 common frames omitted -Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:267) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:230) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) - at org.hibernate.boot.model.relational.Database.(Database.java:44) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:218) - at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) - at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:138) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1348) - at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1419) - at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) - at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) - at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) - ... 107 common frames omitted -Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:147) - at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:60) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:244) - at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:36) - at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) - at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:255) - ... 122 common frames omitted -2025-09-25 03:49:23.832 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final -2025-09-25 03:49:23.875 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 89072 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:49:23.877 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 03:49:23.948 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable -2025-09-25 03:49:23.948 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' -2025-09-25 03:49:25.060 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:49:25.156 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 89 ms. Found 22 JPA repository interfaces. -2025-09-25 03:49:25.700 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 03:49:25.704 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 03:49:25.704 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 03:49:25.704 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 03:49:25.729 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 03:49:25.729 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1780 ms -2025-09-25 03:49:25.866 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:49:25.883 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final -2025-09-25 03:49:26.004 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-09-25 03:49:26.251 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@1430238c -2025-09-25 03:49:26.252 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-09-25 03:49:26.295 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 03:49:27.788 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 03:49:27.794 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:49:28.951 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 03:49:28.972 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 03:49:29.077 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@2a2f0fed, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@40a4d136, org.springframework.security.web.context.SecurityContextHolderFilter@2a32520a, org.springframework.security.web.header.HeaderWriterFilter@4e1eef14, org.springframework.web.filter.CorsFilter@7e13cd9f, org.springframework.security.web.authentication.logout.LogoutFilter@f211e71, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@4e231414, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@45bbc8, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@5152d8fd, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@1ca13a5a, org.springframework.security.web.access.ExceptionTranslationFilter@1a27a1cb, org.springframework.security.web.access.intercept.AuthorizationFilter@66d6dac8] -2025-09-25 03:49:29.375 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 03:49:29.411 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 03:49:29.420 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 03:49:29.430 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 6.188 seconds (process running for 6.728) -2025-09-25 03:49:30.749 [INFO] [RMI TCP Connection(4)-10.28.28.218] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-09-25 03:49:30.749 [INFO] [RMI TCP Connection(4)-10.28.28.218] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-09-25 03:49:30.751 [INFO] [RMI TCP Connection(4)-10.28.28.218] o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms -2025-09-25 03:50:03.215 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args="2023-12-31T15:00:00.000+00:00", "DODAM", "MORNING" -2025-09-25 03:50:03.297 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (82 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[]} -2025-09-25 03:52:04.564 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:52:04.571 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-09-25 03:52:05.025 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-09-25 03:52:07.168 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final -2025-09-25 03:52:07.183 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 89240 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:52:07.183 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 03:52:07.200 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable -2025-09-25 03:52:07.200 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' -2025-09-25 03:52:07.985 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:52:08.043 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 54 ms. Found 22 JPA repository interfaces. -2025-09-25 03:52:08.430 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 03:52:08.436 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 03:52:08.436 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 03:52:08.436 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 03:52:08.462 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 03:52:08.463 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1263 ms -2025-09-25 03:52:08.601 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:52:08.619 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final -2025-09-25 03:52:08.810 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-09-25 03:52:09.056 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@54644813 -2025-09-25 03:52:09.057 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-09-25 03:52:09.105 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 03:52:10.532 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 03:52:10.548 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:52:12.162 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 03:52:12.184 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 03:52:12.292 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@18776c4f, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5e11b939, org.springframework.security.web.context.SecurityContextHolderFilter@797a16f6, org.springframework.security.web.header.HeaderWriterFilter@7ef134f, org.springframework.web.filter.CorsFilter@605fe1ba, org.springframework.security.web.authentication.logout.LogoutFilter@647c2cdf, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@7121521e, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1fa4a5f, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@d526e28, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@52975d61, org.springframework.security.web.access.ExceptionTranslationFilter@ebf9244, org.springframework.security.web.access.intercept.AuthorizationFilter@8213bfd] -2025-09-25 03:52:12.564 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 03:52:12.596 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 03:52:12.605 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 03:52:12.615 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 5.636 seconds (process running for 5.977) -2025-09-25 03:52:14.428 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-09-25 03:52:14.428 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-09-25 03:52:14.429 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms -2025-09-25 03:52:43.528 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (68 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[]} -2025-09-25 03:53:49.544 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:53:49.549 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-09-25 03:53:50.010 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-09-25 03:53:52.985 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final -2025-09-25 03:53:53.012 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 89324 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:53:53.013 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 03:53:53.097 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable -2025-09-25 03:53:53.097 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' -2025-09-25 03:53:54.611 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:53:54.695 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 80 ms. Found 22 JPA repository interfaces. -2025-09-25 03:53:55.119 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 03:53:55.123 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 03:53:55.124 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 03:53:55.124 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 03:53:55.147 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 03:53:55.147 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 2049 ms -2025-09-25 03:53:55.275 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:53:55.292 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final -2025-09-25 03:53:55.418 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-09-25 03:53:55.703 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@6098b587 -2025-09-25 03:53:55.704 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-09-25 03:53:55.887 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 03:53:57.327 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 03:53:57.337 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:53:58.439 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 03:53:58.470 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 03:53:58.580 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@37d066ae, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5cb5615b, org.springframework.security.web.context.SecurityContextHolderFilter@c60dd18, org.springframework.security.web.header.HeaderWriterFilter@26afcb64, org.springframework.web.filter.CorsFilter@255c2dd7, org.springframework.security.web.authentication.logout.LogoutFilter@4c34beda, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@7bea0629, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@5e095da8, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3299cdce, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@4f3beaec, org.springframework.security.web.access.ExceptionTranslationFilter@4c18fd45, org.springframework.security.web.access.intercept.AuthorizationFilter@148c7cf7] -2025-09-25 03:53:58.937 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 03:53:58.969 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 03:53:58.978 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 03:53:58.988 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 6.179 seconds (process running for 6.589) -2025-09-25 03:54:00.775 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-09-25 03:54:00.776 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-09-25 03:54:00.778 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms -2025-09-25 03:54:20.583 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:54:20.587 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-09-25 03:54:21.046 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-09-25 03:54:23.274 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final -2025-09-25 03:54:23.298 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 89357 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:54:23.298 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 03:54:23.316 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable -2025-09-25 03:54:23.316 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' -2025-09-25 03:54:23.841 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:54:23.882 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 38 ms. Found 22 JPA repository interfaces. -2025-09-25 03:54:24.241 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 03:54:24.245 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 03:54:24.245 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 03:54:24.245 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 03:54:24.267 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 03:54:24.267 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 951 ms -2025-09-25 03:54:24.406 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:54:24.424 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final -2025-09-25 03:54:24.536 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-09-25 03:54:24.773 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@422c84cc -2025-09-25 03:54:24.774 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-09-25 03:54:24.821 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 03:54:26.037 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 03:54:26.045 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:54:27.120 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 03:54:27.142 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 03:54:27.242 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@1f27d280, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@14c17bb7, org.springframework.security.web.context.SecurityContextHolderFilter@7c3bfecb, org.springframework.security.web.header.HeaderWriterFilter@5e73027, org.springframework.web.filter.CorsFilter@7a8ee154, org.springframework.security.web.authentication.logout.LogoutFilter@5995504f, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@47fe4938, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@2f0b336f, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@7ad64958, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@666c2095, org.springframework.security.web.access.ExceptionTranslationFilter@3f1aaec5, org.springframework.security.web.access.intercept.AuthorizationFilter@36d4af3b] -2025-09-25 03:54:27.467 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 03:54:27.494 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 03:54:27.502 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 03:54:27.511 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 4.423 seconds (process running for 4.713) -2025-09-25 03:54:29.264 [INFO] [RMI TCP Connection(1)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-09-25 03:54:29.265 [INFO] [RMI TCP Connection(1)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-09-25 03:54:29.266 [INFO] [RMI TCP Connection(1)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms -2025-09-25 03:54:40.397 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args=date="2023-12-31T15:00:00.000+00:00", restaurant="DODAM", timePart="MORNING" -2025-09-25 03:54:40.459 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (64 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[]} -2025-09-25 03:55:23.244 [INFO] [http-nio-9000-exec-3] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args=date="2025-06-05T15:00:00.000+00:00", restaurant="DODAM", timePart="MORNING" -2025-09-25 03:55:23.314 [INFO] [http-nio-9000-exec-3] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (71 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[]} -2025-09-25 03:55:26.011 [INFO] [http-nio-9000-exec-4] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args=date="2025-06-05T15:00:00.000+00:00", restaurant="DODAM", timePart="DINNER" -2025-09-25 03:55:26.069 [INFO] [http-nio-9000-exec-4] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (58 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[]} -2025-09-25 03:55:45.645 [INFO] [http-nio-9000-exec-6] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args=date="2023-11-22T15:00:00.000+00:00", restaurant="HAKSIK", timePart="DINNER" -2025-09-25 03:55:45.783 [INFO] [http-nio-9000-exec-6] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (139 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[]} -2025-09-25 03:55:49.373 [INFO] [http-nio-9000-exec-8] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args=date="2023-11-22T15:00:00.000+00:00", restaurant="HAKSIK", timePart="LUNCH" -2025-09-25 03:55:49.618 [INFO] [http-nio-9000-exec-8] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (242 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[{"mealId":1,"price":5000,"rating":4.0,"briefMenus":[{"menuId":70,"name":"설렁탕*소면사리"},{"menuId":10,"name":"쇠고기쌀국수"}]},{"mealId":2,"price"...(truncated) -2025-09-25 03:56:33.614 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:56:33.618 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-09-25 03:56:34.073 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-09-25 03:56:36.080 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final -2025-09-25 03:56:36.102 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 89496 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:56:36.102 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 03:56:36.120 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable -2025-09-25 03:56:36.121 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' -2025-09-25 03:56:36.703 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:56:36.750 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 44 ms. Found 22 JPA repository interfaces. -2025-09-25 03:56:37.088 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 03:56:37.091 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 03:56:37.092 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 03:56:37.092 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 03:56:37.113 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 03:56:37.113 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 992 ms -2025-09-25 03:56:37.241 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:56:37.258 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final -2025-09-25 03:56:37.364 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-09-25 03:56:37.612 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@78e41033 -2025-09-25 03:56:37.614 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-09-25 03:56:37.661 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 03:56:39.626 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 03:56:39.632 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:56:40.739 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 03:56:40.761 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 03:56:40.873 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@46d8d393, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@64405936, org.springframework.security.web.context.SecurityContextHolderFilter@7c432c1d, org.springframework.security.web.header.HeaderWriterFilter@e82a0d7, org.springframework.web.filter.CorsFilter@14af9d9e, org.springframework.security.web.authentication.logout.LogoutFilter@4a105c6f, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@4581f24a, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@a94cf58, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@5f98fe7c, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@4545f522, org.springframework.security.web.access.ExceptionTranslationFilter@60c2f748, org.springframework.security.web.access.intercept.AuthorizationFilter@5d99129c] -2025-09-25 03:56:41.503 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 03:56:41.555 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 03:56:41.575 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 03:56:41.597 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 5.701 seconds (process running for 6.014) -2025-09-25 03:56:42.268 [INFO] [http-nio-9000-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-09-25 03:56:42.268 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-09-25 03:56:42.269 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms -2025-09-25 03:56:42.315 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args=date="2023-11-22T15:00:00.000+00:00", restaurant="HAKSIK", timePart="LUNCH" -2025-09-25 03:56:42.544 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (229 ms) result=ssu.eatssu.global.handler.response.BaseResponse@2e62db4c -2025-09-25 03:57:18.560 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:57:18.573 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-09-25 03:57:19.031 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-09-25 03:57:20.928 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final -2025-09-25 03:57:20.943 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 89546 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 03:57:20.943 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 03:57:20.959 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable -2025-09-25 03:57:20.959 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' -2025-09-25 03:57:21.523 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 03:57:21.571 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 45 ms. Found 22 JPA repository interfaces. -2025-09-25 03:57:21.920 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 03:57:21.924 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 03:57:21.924 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 03:57:21.924 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 03:57:21.946 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 03:57:21.946 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 987 ms -2025-09-25 03:57:22.074 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 03:57:22.091 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final -2025-09-25 03:57:22.198 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-09-25 03:57:22.432 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@56bcfedd -2025-09-25 03:57:22.433 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-09-25 03:57:22.484 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 03:57:23.783 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 03:57:23.788 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:57:24.779 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 03:57:24.805 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 03:57:24.901 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@31e3e376, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@475eec69, org.springframework.security.web.context.SecurityContextHolderFilter@4c08712c, org.springframework.security.web.header.HeaderWriterFilter@31adc188, org.springframework.web.filter.CorsFilter@704111b, org.springframework.security.web.authentication.logout.LogoutFilter@56efd374, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@e9606c9, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@cdcc4df, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@4b13b780, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@2040bc3e, org.springframework.security.web.access.ExceptionTranslationFilter@6465c35d, org.springframework.security.web.access.intercept.AuthorizationFilter@6703a004] -2025-09-25 03:57:25.219 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 03:57:25.248 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 03:57:25.257 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 03:57:25.267 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 4.525 seconds (process running for 4.803) -2025-09-25 03:57:27.000 [INFO] [RMI TCP Connection(4)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-09-25 03:57:27.001 [INFO] [RMI TCP Connection(4)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-09-25 03:57:27.005 [INFO] [RMI TCP Connection(4)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Completed initialization in 4 ms -2025-09-25 03:57:30.069 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST GET /meals args=date="2023-11-22T15:00:00.000+00:00", restaurant="HAKSIK", timePart="LUNCH" -2025-09-25 03:57:30.284 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE GET /meals (214 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":[{"mealId":1,"price":5000,"rating":4.0,"briefMenus":[{"menuId":70,"name":"설렁탕*소면사리"},{"menuId":10,"name":"쇠고기쌀국수"}]},{"mealId":2,"price":5000,"rating":null,"briefMenus":[{"menuId":71,"name":"치킨마요덮밥"}]},{"mealId":3,"price":5000,"rating":null,"briefMenus":[{"menuId":72,"name":"고구마치즈돈까스*막국수"}]}]} -2025-09-25 03:58:12.031 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 03:58:12.039 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-09-25 03:58:12.510 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-09-25 05:30:08.570 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final -2025-09-25 05:30:08.594 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 93370 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 05:30:08.595 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 05:30:08.615 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable -2025-09-25 05:30:08.615 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' -2025-09-25 05:30:09.219 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 05:30:09.269 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 45 ms. Found 22 JPA repository interfaces. -2025-09-25 05:30:09.730 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 05:30:09.734 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 05:30:09.735 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 05:30:09.735 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 05:30:09.763 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 05:30:09.764 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1148 ms -2025-09-25 05:30:09.943 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 05:30:09.983 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final -2025-09-25 05:30:10.105 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-09-25 05:30:10.393 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@6c470d6c -2025-09-25 05:30:10.394 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-09-25 05:30:10.457 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 05:30:11.847 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 05:30:11.856 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 05:30:13.051 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 05:30:13.081 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 05:30:13.233 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@26c29280, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@27606705, org.springframework.security.web.context.SecurityContextHolderFilter@3ea7092, org.springframework.security.web.header.HeaderWriterFilter@40667dd5, org.springframework.web.filter.CorsFilter@13768d4a, org.springframework.security.web.authentication.logout.LogoutFilter@5c7c2d57, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@6d0d09d6, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@631b8899, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@5a3b10b1, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@5fe9d065, org.springframework.security.web.access.ExceptionTranslationFilter@26d7c913, org.springframework.security.web.access.intercept.AuthorizationFilter@13a6de30] -2025-09-25 05:30:13.640 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 05:30:13.685 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 05:30:13.699 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 05:30:13.709 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 5.396 seconds (process running for 5.926) -2025-09-25 05:30:15.254 [INFO] [http-nio-9000-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-09-25 05:30:15.255 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-09-25 05:30:15.258 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Completed initialization in 3 ms -2025-09-25 05:30:15.319 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST GET /v2/reviews/statistics/restaurant args=restaurant="DODAM" -2025-09-25 05:30:15.927 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE GET /v2/reviews/statistics/restaurant (587 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다.","result":{"totalReviewCount":19,"reviewRatingCount":{"oneStarCount":1,"twoStarCount":1,"threeStarCount":0,"fourStarCount":9,"fiveStarCount":5},"mainRating":3.4,"likeCount":15,"unlikeCount":3}} -2025-09-25 05:34:13.237 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 3 class path changes (0 additions, 0 deletions, 3 modifications) -2025-09-25 05:34:13.252 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] -2025-09-25 05:34:13.252 [INFO] [Thread-7] o.a.catalina.core.StandardService - Stopping service [Tomcat] -2025-09-25 05:34:13.253 [INFO] [Thread-7] o.a.c.c.C.[Tomcat].[localhost].[/] - Destroying Spring FrameworkServlet 'dispatcherServlet' -2025-09-25 05:34:13.260 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] -2025-09-25 05:34:13.262 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] -2025-09-25 05:34:13.269 [INFO] [Thread-7] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 05:34:13.274 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-09-25 05:34:13.770 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-09-25 05:34:13.878 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 93370 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 05:34:13.878 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 05:34:14.153 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 05:34:14.181 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 28 ms. Found 22 JPA repository interfaces. -2025-09-25 05:34:14.288 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 05:34:14.288 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 05:34:14.288 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 05:34:14.288 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 05:34:14.294 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 05:34:14.294 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 415 ms -2025-09-25 05:34:14.361 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 05:34:14.364 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... -2025-09-25 05:34:14.687 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-2 - Added connection com.mysql.cj.jdbc.ConnectionImpl@68681ec9 -2025-09-25 05:34:14.688 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Start completed. -2025-09-25 05:34:14.703 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 05:34:17.311 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 05:34:17.312 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 05:34:17.929 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 05:34:17.944 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 05:34:18.038 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@5122f519, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@400491ec, org.springframework.security.web.context.SecurityContextHolderFilter@22651f6, org.springframework.security.web.header.HeaderWriterFilter@1b1a9312, org.springframework.web.filter.CorsFilter@7cb582ca, org.springframework.security.web.authentication.logout.LogoutFilter@7a53a0cb, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@18665fa4, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1db42c51, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@319b3b9d, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@5e2aeb8c, org.springframework.security.web.access.ExceptionTranslationFilter@37671fcb, org.springframework.security.web.access.intercept.AuthorizationFilter@69ff0918] -2025-09-25 05:34:18.188 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 05:34:18.203 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 05:34:18.203 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 05:34:18.209 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 4.351 seconds (process running for 250.425) -2025-09-25 05:34:19.550 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged -2025-09-25 05:34:29.335 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 3 class path changes (0 additions, 0 deletions, 3 modifications) -2025-09-25 05:34:29.346 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] -2025-09-25 05:34:29.346 [INFO] [Thread-9] o.a.catalina.core.StandardService - Stopping service [Tomcat] -2025-09-25 05:34:29.350 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] -2025-09-25 05:34:29.352 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] -2025-09-25 05:34:29.357 [INFO] [Thread-9] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 05:34:29.358 [INFO] [Thread-9] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown initiated... -2025-09-25 05:34:29.835 [INFO] [Thread-9] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown completed. -2025-09-25 05:34:29.939 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 93370 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 05:34:29.939 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 05:34:30.122 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 05:34:30.146 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 23 ms. Found 22 JPA repository interfaces. -2025-09-25 05:34:30.242 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 05:34:30.242 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 05:34:30.242 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 05:34:30.242 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 05:34:30.248 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 05:34:30.248 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 308 ms -2025-09-25 05:34:30.311 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 05:34:30.313 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Starting... -2025-09-25 05:34:30.454 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-3 - Added connection com.mysql.cj.jdbc.ConnectionImpl@60ac1cc5 -2025-09-25 05:34:30.454 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Start completed. -2025-09-25 05:34:30.461 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 05:34:31.439 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 05:34:31.440 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 05:34:31.952 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 05:34:31.966 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 05:34:32.025 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@7192cf0b, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@34540bfb, org.springframework.security.web.context.SecurityContextHolderFilter@3b0af8ff, org.springframework.security.web.header.HeaderWriterFilter@4f9e6c5f, org.springframework.web.filter.CorsFilter@2e6fb0af, org.springframework.security.web.authentication.logout.LogoutFilter@797f8277, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@69000e86, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@443be872, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@37d1cca1, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@e0d7e3a, org.springframework.security.web.access.ExceptionTranslationFilter@41c7a7e0, org.springframework.security.web.access.intercept.AuthorizationFilter@3d0f118b] -2025-09-25 05:34:32.159 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 05:34:32.175 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 05:34:32.176 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 05:34:32.182 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 2.259 seconds (process running for 264.397) -2025-09-25 05:34:33.233 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged -2025-09-25 05:35:37.111 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 3 class path changes (0 additions, 0 deletions, 3 modifications) -2025-09-25 05:35:37.163 [INFO] [Thread-15] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] -2025-09-25 05:35:37.164 [INFO] [Thread-15] o.a.catalina.core.StandardService - Stopping service [Tomcat] -2025-09-25 05:35:37.174 [INFO] [Thread-15] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] -2025-09-25 05:35:37.176 [INFO] [Thread-15] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] -2025-09-25 05:35:37.186 [INFO] [Thread-15] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 05:35:37.189 [INFO] [Thread-15] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown initiated... -2025-09-25 05:35:37.657 [INFO] [Thread-15] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown completed. -2025-09-25 05:35:37.788 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 93370 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 05:35:37.788 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 05:35:38.053 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 05:35:38.077 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 24 ms. Found 22 JPA repository interfaces. -2025-09-25 05:35:38.201 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 05:35:38.202 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 05:35:38.202 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 05:35:38.202 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 05:35:38.216 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 05:35:38.216 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 428 ms -2025-09-25 05:35:38.309 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 05:35:38.319 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Starting... -2025-09-25 05:35:38.466 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-4 - Added connection com.mysql.cj.jdbc.ConnectionImpl@5618aafd -2025-09-25 05:35:38.466 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Start completed. -2025-09-25 05:35:38.473 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 05:35:39.536 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 05:35:39.536 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 05:35:40.115 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 05:35:40.129 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 05:35:40.202 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@70c6ca52, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@758fc2b7, org.springframework.security.web.context.SecurityContextHolderFilter@50971167, org.springframework.security.web.header.HeaderWriterFilter@1e702ef5, org.springframework.web.filter.CorsFilter@40b5462c, org.springframework.security.web.authentication.logout.LogoutFilter@316db569, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@4c17e837, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@616418c7, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@411018f3, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@a453fbd, org.springframework.security.web.access.ExceptionTranslationFilter@5cf9aa58, org.springframework.security.web.access.intercept.AuthorizationFilter@6adde227] -2025-09-25 05:35:40.397 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 05:35:40.412 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 05:35:40.413 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 05:35:40.419 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 2.649 seconds (process running for 332.634) -2025-09-25 05:35:41.633 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged -2025-09-25 05:35:42.629 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 05:35:42.634 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Shutdown initiated... -2025-09-25 05:35:43.245 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Shutdown completed. -2025-09-25 05:49:04.139 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final -2025-09-25 05:49:04.180 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 94160 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 05:49:04.181 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 05:49:04.224 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable -2025-09-25 05:49:04.224 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' -2025-09-25 05:49:05.045 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 05:49:05.152 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 102 ms. Found 22 JPA repository interfaces. -2025-09-25 05:49:05.626 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 05:49:05.631 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 05:49:05.632 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 05:49:05.632 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 05:49:05.662 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 05:49:05.662 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1438 ms -2025-09-25 05:49:05.842 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 05:49:05.881 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final -2025-09-25 05:49:06.012 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-09-25 05:49:06.540 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@486d8392 -2025-09-25 05:49:06.543 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-09-25 05:49:06.596 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 05:49:07.992 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 05:49:08.002 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 05:49:09.369 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 05:49:09.400 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 05:49:09.535 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@358135c9, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@13463166, org.springframework.security.web.context.SecurityContextHolderFilter@22de5d39, org.springframework.security.web.header.HeaderWriterFilter@2dbfc2ce, org.springframework.web.filter.CorsFilter@51b3fb32, org.springframework.security.web.authentication.logout.LogoutFilter@534f2775, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@506fdbda, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@30ddd678, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@6bcb6c71, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@6c7c8363, org.springframework.security.web.access.ExceptionTranslationFilter@499f7d6, org.springframework.security.web.access.intercept.AuthorizationFilter@3c986292] -2025-09-25 05:49:09.809 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 05:49:09.843 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 05:49:09.852 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 05:49:09.862 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 6.071 seconds (process running for 6.883) -2025-09-25 05:49:11.226 [INFO] [RMI TCP Connection(1)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-09-25 05:49:11.227 [INFO] [RMI TCP Connection(1)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-09-25 05:49:11.230 [INFO] [RMI TCP Connection(1)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Completed initialization in 3 ms -2025-09-25 05:49:54.691 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST POST /v2/reviews/menu args=createMenuReviewRequest={"menuId":1,"mainRating":4,"content":"맛있어용","imageUrl":"https://s3.~~~.jpg","menuLike":{"menuId":123,"isLike":false}} -2025-09-25 05:49:54.858 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE POST /v2/reviews/menu (166 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다."} -2025-09-25 05:51:20.103 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 05:51:20.122 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-09-25 05:51:20.629 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-09-25 05:51:23.362 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final -2025-09-25 05:51:23.381 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 94316 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 05:51:23.381 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 05:51:23.398 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable -2025-09-25 05:51:23.398 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' -2025-09-25 05:51:23.951 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 05:51:24.002 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 48 ms. Found 22 JPA repository interfaces. -2025-09-25 05:51:24.434 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 05:51:24.438 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 05:51:24.439 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 05:51:24.439 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 05:51:24.462 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 05:51:24.463 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1065 ms -2025-09-25 05:51:24.616 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 05:51:24.636 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final -2025-09-25 05:51:24.753 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-09-25 05:51:25.083 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@165a6845 -2025-09-25 05:51:25.085 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-09-25 05:51:25.137 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 05:51:26.958 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 05:51:26.962 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 05:51:29.011 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 05:51:29.059 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 05:51:29.282 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@ed44378, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@641f5675, org.springframework.security.web.context.SecurityContextHolderFilter@4dff5d7a, org.springframework.security.web.header.HeaderWriterFilter@3f5cefe, org.springframework.web.filter.CorsFilter@39e04a54, org.springframework.security.web.authentication.logout.LogoutFilter@4a476869, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@5e658fe0, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@71622852, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@1b57d329, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@7206d8d7, org.springframework.security.web.access.ExceptionTranslationFilter@2556dfc6, org.springframework.security.web.access.intercept.AuthorizationFilter@7f111bd8] -2025-09-25 05:51:29.871 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 05:51:29.955 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 05:51:29.971 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 05:51:29.983 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 6.82 seconds (process running for 7.604) -2025-09-25 05:51:31.436 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-09-25 05:51:31.436 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-09-25 05:51:31.442 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Completed initialization in 5 ms -2025-09-25 05:51:32.102 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST POST /v2/reviews/menu args=createMenuReviewRequest={"menuId":1,"mainRating":4,"content":"맛있어용","imageUrl":"https://s3.~~~.jpg","menuLike":{"menuId":123,"isLike":false}} -2025-09-25 05:51:43.153 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE POST /v2/reviews/menu (11057 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다."} -2025-09-25 05:56:18.010 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 05:56:18.026 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-09-25 05:56:18.494 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-09-25 05:56:20.894 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final -2025-09-25 05:56:20.909 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 94538 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 05:56:20.910 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 05:56:20.926 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable -2025-09-25 05:56:20.926 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' -2025-09-25 05:56:21.416 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 05:56:21.460 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 41 ms. Found 22 JPA repository interfaces. -2025-09-25 05:56:22.067 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 05:56:22.071 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 05:56:22.072 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 05:56:22.072 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 05:56:22.097 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 05:56:22.097 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1171 ms -2025-09-25 05:56:22.333 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 05:56:22.361 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final -2025-09-25 05:56:22.486 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-09-25 05:56:22.729 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@25b7fa3d -2025-09-25 05:56:22.730 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-09-25 05:56:22.777 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 05:56:24.155 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 05:56:24.169 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 05:56:25.757 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 05:56:25.801 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 05:56:26.005 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@4f4c1aa3, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@47401591, org.springframework.security.web.context.SecurityContextHolderFilter@82772da, org.springframework.security.web.header.HeaderWriterFilter@1b22e0b0, org.springframework.web.filter.CorsFilter@2c615530, org.springframework.security.web.authentication.logout.LogoutFilter@5c99fef2, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@6a9e836, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@202fd697, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3b392446, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@291f6342, org.springframework.security.web.access.ExceptionTranslationFilter@1c592639, org.springframework.security.web.access.intercept.AuthorizationFilter@782dee86] -2025-09-25 05:56:26.351 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 05:56:26.396 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 05:56:26.428 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 05:56:26.446 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 5.726 seconds (process running for 6.028) -2025-09-25 05:56:27.437 [INFO] [http-nio-9000-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-09-25 05:56:27.437 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-09-25 05:56:27.438 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms -2025-09-25 05:56:27.486 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST POST /v2/reviews/menu args=createMenuReviewRequest={"menuId":1,"mainRating":4,"content":"맛있어용","imageUrl":"https://s3.~~~.jpg","menuLike":{"menuId":123,"isLike":false}} -2025-09-25 05:56:27.596 [INFO] [http-nio-9000-exec-1] s.e.g.log.event.LogEventListener - MenuReview created: reviewId=164, menuId=1, userId=51, isLike=false, imageUrl=https://s3.~~~.jpg -2025-09-25 05:56:27.598 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE POST /v2/reviews/menu (112 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다."} -2025-09-25 06:01:07.166 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 5 class path changes (0 additions, 0 deletions, 5 modifications) -2025-09-25 06:01:07.188 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] -2025-09-25 06:01:07.189 [INFO] [Thread-7] o.a.catalina.core.StandardService - Stopping service [Tomcat] -2025-09-25 06:01:07.190 [INFO] [Thread-7] o.a.c.c.C.[Tomcat].[localhost].[/] - Destroying Spring FrameworkServlet 'dispatcherServlet' -2025-09-25 06:01:07.193 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] -2025-09-25 06:01:07.196 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] -2025-09-25 06:01:07.205 [INFO] [Thread-7] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 06:01:07.211 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-09-25 06:01:07.663 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-09-25 06:01:07.793 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 94538 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 06:01:07.793 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 06:01:08.073 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 06:01:08.100 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 26 ms. Found 22 JPA repository interfaces. -2025-09-25 06:01:08.232 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 06:01:08.232 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 06:01:08.232 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 06:01:08.232 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 06:01:08.239 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 06:01:08.239 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 445 ms -2025-09-25 06:01:08.319 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 06:01:08.322 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... -2025-09-25 06:01:08.469 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-2 - Added connection com.mysql.cj.jdbc.ConnectionImpl@5e2e4b90 -2025-09-25 06:01:08.469 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Start completed. -2025-09-25 06:01:08.477 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 06:01:09.530 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 06:01:09.535 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 06:01:10.319 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 06:01:10.344 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 06:01:10.438 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@3d03c633, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5991b21f, org.springframework.security.web.context.SecurityContextHolderFilter@287f1aa9, org.springframework.security.web.header.HeaderWriterFilter@1ad9c2ce, org.springframework.web.filter.CorsFilter@62541833, org.springframework.security.web.authentication.logout.LogoutFilter@79435b39, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@256c93fe, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@74617929, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@b70f1e0, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@67deb3e, org.springframework.security.web.access.ExceptionTranslationFilter@36ccd2c0, org.springframework.security.web.access.intercept.AuthorizationFilter@361a4d89] -2025-09-25 06:01:10.747 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 06:01:10.765 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 06:01:10.766 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 06:01:10.774 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 3.009 seconds (process running for 290.354) -2025-09-25 06:01:12.943 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged -2025-09-25 06:05:08.762 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 5 class path changes (0 additions, 0 deletions, 5 modifications) -2025-09-25 06:05:08.772 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] -2025-09-25 06:05:08.772 [INFO] [Thread-9] o.a.catalina.core.StandardService - Stopping service [Tomcat] -2025-09-25 06:05:08.775 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] -2025-09-25 06:05:08.775 [INFO] [Thread-9] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] -2025-09-25 06:05:08.779 [INFO] [Thread-9] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 06:05:08.782 [INFO] [Thread-9] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown initiated... -2025-09-25 06:05:09.233 [INFO] [Thread-9] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown completed. -2025-09-25 06:05:09.335 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 94538 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 06:05:09.335 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 06:05:09.566 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 06:05:09.595 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 28 ms. Found 22 JPA repository interfaces. -2025-09-25 06:05:09.697 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 06:05:09.697 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 06:05:09.697 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 06:05:09.697 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 06:05:09.703 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 06:05:09.704 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 368 ms -2025-09-25 06:05:09.782 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 06:05:09.785 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Starting... -2025-09-25 06:05:09.921 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-3 - Added connection com.mysql.cj.jdbc.ConnectionImpl@59f5449a -2025-09-25 06:05:09.921 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Start completed. -2025-09-25 06:05:09.934 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 06:05:10.852 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 06:05:10.852 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 06:05:11.609 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 06:05:11.625 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 06:05:11.700 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@18cf430f, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@7d47eadc, org.springframework.security.web.context.SecurityContextHolderFilter@51387be3, org.springframework.security.web.header.HeaderWriterFilter@310613e0, org.springframework.web.filter.CorsFilter@26debe94, org.springframework.security.web.authentication.logout.LogoutFilter@218d4115, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@454872d6, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@295dd2d6, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3dfd2d54, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@27fd964b, org.springframework.security.web.access.ExceptionTranslationFilter@1b066ce3, org.springframework.security.web.access.intercept.AuthorizationFilter@4815af0d] -2025-09-25 06:05:12.217 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 06:05:12.256 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 06:05:12.258 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 06:05:12.267 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 2.956 seconds (process running for 531.847) -2025-09-25 06:05:13.509 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged -2025-09-25 06:06:20.784 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 06:06:20.787 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown initiated... -2025-09-25 06:06:21.245 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown completed. -2025-09-25 06:08:46.459 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final -2025-09-25 06:08:46.481 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 95068 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 06:08:46.481 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 06:08:46.497 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable -2025-09-25 06:08:46.497 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' -2025-09-25 06:08:47.079 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 06:08:47.134 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 50 ms. Found 22 JPA repository interfaces. -2025-09-25 06:08:47.555 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 06:08:47.559 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 06:08:47.559 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 06:08:47.559 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 06:08:47.585 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 06:08:47.585 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1087 ms -2025-09-25 06:08:47.741 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 06:08:47.765 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final -2025-09-25 06:08:47.880 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-09-25 06:08:48.125 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@26440f6f -2025-09-25 06:08:48.126 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-09-25 06:08:48.175 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 06:08:49.475 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 06:08:49.500 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 06:08:51.011 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 06:08:51.039 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 06:08:51.165 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@6fc8980f, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@700ae5bf, org.springframework.security.web.context.SecurityContextHolderFilter@30103778, org.springframework.security.web.header.HeaderWriterFilter@4dfb56f1, org.springframework.web.filter.CorsFilter@79943894, org.springframework.security.web.authentication.logout.LogoutFilter@277cb63e, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@33795dd8, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@37f75660, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3f7e574f, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@185ab358, org.springframework.security.web.access.ExceptionTranslationFilter@67568c81, org.springframework.security.web.access.intercept.AuthorizationFilter@730a8571] -2025-09-25 06:08:51.411 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 06:08:51.441 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 06:08:51.451 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 06:08:51.462 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 5.196 seconds (process running for 5.526) -2025-09-25 06:08:53.572 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-09-25 06:08:53.575 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-09-25 06:08:53.577 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms -2025-09-25 06:08:54.098 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST POST /v2/reviews/menu args=createMenuReviewRequest={"menuId":1,"mainRating":4,"content":"맛있어용","imageUrl":"https://s3.~~~.jpg","menuLike":{"menuId":123,"isLike":false}}, customUserDetails={userId=51} -2025-09-25 06:08:54.208 [INFO] [http-nio-9000-exec-1] s.e.g.log.event.LogEventListener - MenuReview created: reviewId=165, menuId=1, userId=51, isLike=false, imageUrl=https://s3.~~~.jpg -2025-09-25 06:08:54.210 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE POST /v2/reviews/menu (111 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다."} -2025-09-25 06:10:26.399 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 06:10:26.404 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-09-25 06:10:26.861 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-09-25 06:10:37.568 [INFO] [background-preinit] o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.0.Final -2025-09-25 06:10:37.587 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 95141 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 06:10:37.587 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 06:10:37.621 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable -2025-09-25 06:10:37.622 [INFO] [restartedMain] o.s.b.d.e.DevToolsPropertyDefaultsPostProcessor - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' -2025-09-25 06:10:38.438 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 06:10:38.486 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 46 ms. Found 22 JPA repository interfaces. -2025-09-25 06:10:38.845 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 06:10:38.850 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 06:10:38.850 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 06:10:38.851 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 06:10:38.877 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 06:10:38.877 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1254 ms -2025-09-25 06:10:39.030 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 06:10:39.050 [INFO] [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.1.7.Final -2025-09-25 06:10:39.159 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2025-09-25 06:10:39.399 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@4df8b2d0 -2025-09-25 06:10:39.400 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2025-09-25 06:10:39.444 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 06:10:40.822 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 06:10:40.829 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 06:10:41.976 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 06:10:42.003 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 06:10:42.320 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@7bc989e6, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@f7016a2, org.springframework.security.web.context.SecurityContextHolderFilter@3499fef2, org.springframework.security.web.header.HeaderWriterFilter@120e3ef, org.springframework.web.filter.CorsFilter@2cc491a8, org.springframework.security.web.authentication.logout.LogoutFilter@6ab4db5b, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@536d66ca, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@7c2af1a1, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@3a6f1f45, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@645c43f8, org.springframework.security.web.access.ExceptionTranslationFilter@78aa8523, org.springframework.security.web.access.intercept.AuthorizationFilter@44a80ad3] -2025-09-25 06:10:42.657 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 06:10:42.685 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 06:10:42.694 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 06:10:42.703 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 5.336 seconds (process running for 5.578) -2025-09-25 06:10:44.278 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-09-25 06:10:44.278 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-09-25 06:10:44.280 [INFO] [RMI TCP Connection(2)-127.0.0.1] o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms -2025-09-25 06:10:56.489 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST POST /v2/reviews/menu args=userId=51, createMenuReviewRequest={"menuId":1,"mainRating":4,"content":"맛있어용","imageUrl":"https://s3.~~~.jpg","menuLike":{"menuId":123,"isLike":false}} -2025-09-25 06:10:56.654 [INFO] [http-nio-9000-exec-1] s.e.g.log.event.LogEventListener - MenuReview created: reviewId=166, menuId=1, userId=51, isLike=false, imageUrl=https://s3.~~~.jpg -2025-09-25 06:10:56.656 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE POST /v2/reviews/menu (168 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다."} -2025-09-25 06:10:57.763 [INFO] [File Watcher] o.s.b.d.a.LocalDevToolsAutoConfiguration$RestartingClassPathChangeChangedEventListener - Restarting due to 1 class path change (0 additions, 0 deletions, 1 modification) -2025-09-25 06:10:57.771 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Pausing ProtocolHandler ["http-nio-9000"] -2025-09-25 06:10:57.772 [INFO] [Thread-7] o.a.catalina.core.StandardService - Stopping service [Tomcat] -2025-09-25 06:10:57.773 [INFO] [Thread-7] o.a.c.c.C.[Tomcat].[localhost].[/] - Destroying Spring FrameworkServlet 'dispatcherServlet' -2025-09-25 06:10:57.776 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Stopping ProtocolHandler ["http-nio-9000"] -2025-09-25 06:10:57.778 [INFO] [Thread-7] o.a.coyote.http11.Http11NioProtocol - Destroying ProtocolHandler ["http-nio-9000"] -2025-09-25 06:10:57.785 [INFO] [Thread-7] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 06:10:57.787 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... -2025-09-25 06:10:58.264 [INFO] [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. -2025-09-25 06:10:58.356 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Starting EatSsuApplication using Java 17.0.11 with PID 95141 (/Users/nayongjun/Desktop/Server/build/classes/java/main started by nayongjun in /Users/nayongjun/Desktop/Server) -2025-09-25 06:10:58.356 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - The following 1 profile is active: "local" -2025-09-25 06:10:58.623 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2025-09-25 06:10:58.650 [INFO] [restartedMain] o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 27 ms. Found 22 JPA repository interfaces. -2025-09-25 06:10:58.767 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port(s): 9000 (http) -2025-09-25 06:10:58.768 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-9000"] -2025-09-25 06:10:58.768 [INFO] [restartedMain] o.a.catalina.core.StandardService - Starting service [Tomcat] -2025-09-25 06:10:58.768 [INFO] [restartedMain] o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.5] -2025-09-25 06:10:58.774 [INFO] [restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2025-09-25 06:10:58.774 [INFO] [restartedMain] o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 417 ms -2025-09-25 06:10:58.845 [INFO] [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2025-09-25 06:10:58.850 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... -2025-09-25 06:10:58.993 [INFO] [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-2 - Added connection com.mysql.cj.jdbc.ConnectionImpl@4a8eafd5 -2025-09-25 06:10:58.993 [INFO] [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Start completed. -2025-09-25 06:10:59.001 [INFO] [restartedMain] SQL dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect -2025-09-25 06:11:00.175 [INFO] [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] -2025-09-25 06:11:00.176 [INFO] [restartedMain] o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 06:11:00.911 [INFO] [restartedMain] o.s.b.a.e.web.EndpointLinksResolver - Exposing 4 endpoint(s) beneath base path '/actuator' -2025-09-25 06:11:00.925 [WARN] [restartedMain] o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning -2025-09-25 06:11:01.006 [INFO] [restartedMain] o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@42d98c65, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@45ae8a78, org.springframework.security.web.context.SecurityContextHolderFilter@69f842a2, org.springframework.security.web.header.HeaderWriterFilter@636f620c, org.springframework.web.filter.CorsFilter@1986f047, org.springframework.security.web.authentication.logout.LogoutFilter@39aae8d1, ssu.eatssu.domain.auth.security.JwtAuthenticationFilter@1ea816fa, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1351f2b9, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@67ba7bd3, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@109c0bee, org.springframework.security.web.access.ExceptionTranslationFilter@1ef73cfb, org.springframework.security.web.access.intercept.AuthorizationFilter@2e053eb8] -2025-09-25 06:11:01.189 [INFO] [restartedMain] o.s.b.d.a.OptionalLiveReloadServer - LiveReload server is running on port 35729 -2025-09-25 06:11:01.203 [INFO] [restartedMain] o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-9000"] -2025-09-25 06:11:01.204 [INFO] [restartedMain] o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 9000 (http) with context path '' -2025-09-25 06:11:01.210 [INFO] [restartedMain] ssu.eatssu.EatSsuApplication - Started EatSsuApplication in 2.872 seconds (process running for 24.084) -2025-09-25 06:11:02.147 [INFO] [restartedMain] o.s.b.d.a.ConditionEvaluationDeltaLoggingListener - Condition evaluation unchanged -2025-09-25 06:11:11.529 [INFO] [http-nio-9000-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2025-09-25 06:11:11.530 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2025-09-25 06:11:11.537 [INFO] [http-nio-9000-exec-1] o.s.web.servlet.DispatcherServlet - Completed initialization in 7 ms -2025-09-25 06:11:11.562 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - REQUEST POST /v2/reviews/menu args=userId=51, createMenuReviewRequest={"menuId":1,"mainRating":4,"content":"맛있어용","imageUrl":"https://s3.~~~.jpg","menuLike":{"menuId":123,"isLike":false}} -2025-09-25 06:11:11.667 [INFO] [http-nio-9000-exec-1] s.e.g.log.event.LogEventListener - MenuReview created: reviewId=167, menuId=1, userId=51, isLike=false, imageUrl=https://s3.~~~.jpg -2025-09-25 06:11:11.669 [INFO] [http-nio-9000-exec-1] s.e.global.log.ControllerLogAspect - RESPONSE POST /v2/reviews/menu (108 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다."} -2025-09-25 06:11:17.432 [INFO] [http-nio-9000-exec-3] s.e.global.log.ControllerLogAspect - REQUEST POST /v2/reviews/menu args=userId=51, createMenuReviewRequest={"menuId":1,"mainRating":4,"content":"맛있어용","imageUrl":"https://s3.~~~.jpg","menuLike":{"menuId":123,"isLike":false}} -2025-09-25 06:11:17.516 [INFO] [http-nio-9000-exec-3] s.e.g.log.event.LogEventListener - MenuReview created: reviewId=168, menuId=1, userId=51, isLike=false, imageUrl=https://s3.~~~.jpg -2025-09-25 06:11:17.516 [INFO] [http-nio-9000-exec-3] s.e.global.log.ControllerLogAspect - RESPONSE POST /v2/reviews/menu (84 ms) result={"isSuccess":true,"code":1000,"message":"요청에 성공하였습니다."} -2025-09-25 06:11:43.570 [INFO] [SpringApplicationShutdownHook] o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' -2025-09-25 06:11:43.574 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown initiated... -2025-09-25 06:11:44.044 [INFO] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown completed. From 82dbce3dcda2c0d52ca6d6834c46850705390632 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Thu, 25 Sep 2025 06:22:06 +0900 Subject: [PATCH 277/399] =?UTF-8?q?fix:=20dev=20=EC=98=A4=ED=83=80=20?= =?UTF-8?q?=EC=A0=95=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 95f1356a..97ad4ead 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -6,7 +6,7 @@ name: EAT-SSU Server 개발 & 운영 서버 배포 파이프라인 on: pull_request: - branches: [ "dev" ] + branches: [ "develop" ] permissions: contents: read From 08a8c2fda68fbc5a810752e940173a2185877c66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Thu, 25 Sep 2025 06:25:43 +0900 Subject: [PATCH 278/399] =?UTF-8?q?fix:=20docker-compose=20=EB=B3=B5?= =?UTF-8?q?=EC=82=AC=20=EC=A1=B0=EA=B1=B4=20=EC=A3=BC=EC=84=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 97ad4ead..d6bf558e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -87,7 +87,7 @@ jobs: - name: dev 서버 docker-compose.yml 복사 uses: appleboy/scp-action@master - if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' +# if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' with: host: ${{ secrets.HOST_DEV }} username: ${{ secrets.USERNAME }} From 81c791bdfcbe6d81b006183e9d8bb75154f77291 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Thu, 25 Sep 2025 06:32:43 +0900 Subject: [PATCH 279/399] =?UTF-8?q?refactor:=20docker=20compose=20?= =?UTF-8?q?=EB=B2=84=EC=A0=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d6bf558e..089a2bbc 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -148,8 +148,8 @@ jobs: export EATSSU_AWS_SECRET_KEY=${{ secrets.EATSSU_AWS_SECRET_KEY_DEV }} export EATSSU_SLACK_TOKEN=${{ secrets.EATSSU_SLACK_TOKEN }} - sudo docker-compose down - sudo docker-compose pull - sudo docker-compose up -d --remove-orphans + sudo docker compose down + sudo docker compose pull + sudo docker compose up -d --remove-orphans sudo docker image prune -f From b1ef8281b16a9b967550ad443da2b7d2d7ce81e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Thu, 25 Sep 2025 16:38:40 +0900 Subject: [PATCH 280/399] =?UTF-8?q?refactor:=20=EA=B8=B0=EC=A1=B4=20?= =?UTF-8?q?=EB=B0=B0=ED=8F=AC=20=EB=B0=A9=EC=8B=9D=20=EC=9C=A0=EC=A7=80=20?= =?UTF-8?q?=EB=B0=8F=20logback-spring.xml=20stdout=20=EB=B0=A9=EC=8B=9D?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=BD=98=EC=86=94=20=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 83 ++++++------------- docker-compose.yml | 20 ----- .../inquiry/service/InquiryService.java | 8 +- .../domain/report/service/ReportService.java | 10 ++- src/main/resources/logback-spring.xml | 58 +++---------- 5 files changed, 49 insertions(+), 130 deletions(-) delete mode 100644 docker-compose.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 089a2bbc..99e81d88 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -41,7 +41,6 @@ jobs: include: dev" > ./src/main/resources/application.yml shell: bash - - name: prod 프로필 설정 if: github.ref_name == 'main' || github.ref_name == 'hotfix/deploy-prod-fail' run: | @@ -74,30 +73,7 @@ jobs: docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev . docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev - - name: prod 서버 docker-compose.yml 복사 - uses: appleboy/scp-action@master - if: github.ref_name == 'main' || github.ref_name == 'hotfix/deploy-prod-fail' - with: - host: ${{ secrets.HOST_PROD }} - username: ${{ secrets.USERNAME }} - key: ${{ secrets.PROD_PRIVATE_KEY }} - port: 22 - source: "docker-compose.yml" - target: "/home/ubuntu/eatssu/" - - - name: dev 서버 docker-compose.yml 복사 - uses: appleboy/scp-action@master -# if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' - with: - host: ${{ secrets.HOST_DEV }} - username: ${{ secrets.USERNAME }} - key: ${{ secrets.DEV_PRIVATE_KEY }} - port: 22 - source: "docker-compose.yml" - target: "/home/ubuntu/eatssu/" - - - - name: prod 서버에 배포 + - name: prod에 배포 uses: appleboy/ssh-action@master id: deploy-prod if: github.ref_name == 'main' || github.ref_name == 'hotfix/deploy-prod-fail' @@ -107,23 +83,18 @@ jobs: key: ${{ secrets.PROD_PRIVATE_KEY }} port: 22 script: | - cd /home/ubuntu/eatssu - - # 이미지 및 환경 변수 설정 - export DOCKER_REPO=${{ secrets.DOCKER_REPO }} - export IMAGE_NAME=eatssu-prod - - export EATSSU_DB_URL=${{ secrets.EATSSU_DB_URL_PROD }} - export EATSSU_DB_USERNAME=${{ secrets.EATSSU_DB_USERNAME }} - export EATSSU_DB_PASSWORD=${{ secrets.EATSSU_DB_PASSWORD }} - export EATSSU_JWT_SECRET=${{ secrets.EATSSU_JWT_SECRET_PROD }} - export EATSSU_AWS_ACCESS_KEY=${{ secrets.EATSSU_AWS_ACCESS_KEY_PROD }} - export EATSSU_AWS_SECRET_KEY=${{ secrets.EATSSU_AWS_SECRET_KEY_PROD }} - export EATSSU_SLACK_TOKEN=${{ secrets.EATSSU_SLACK_TOKEN }} - - sudo docker-compose down - sudo docker-compose pull - sudo docker-compose up -d --remove-orphans + sudo docker ps + sudo docker rm -f $(docker ps -qa) + sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-prod + sudo docker run -d -p 9000:9000 \ + -e EATSSU_DB_URL_PROD="${{ secrets.EATSSU_DB_URL_PROD }}" \ + -e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \ + -e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \ + -e EATSSU_JWT_SECRET_PROD="${{ secrets.EATSSU_JWT_SECRET_PROD }}" \ + -e EATSSU_AWS_ACCESS_KEY_PROD="${{ secrets.EATSSU_AWS_ACCESS_KEY_PROD }}" \ + -e EATSSU_AWS_SECRET_KEY_PROD="${{ secrets.EATSSU_AWS_SECRET_KEY_PROD }}" \ + -e EATSSU_SLACK_TOKEN="${{ secrets.EATSSU_SLACK_TOKEN }}" \ + ${{ secrets.DOCKER_REPO }}/eatssu-prod sudo docker image prune -f - name: dev 서버에 배포 @@ -136,20 +107,16 @@ jobs: port: 22 key: ${{ secrets.DEV_PRIVATE_KEY }} script: | - cd /home/ubuntu/eatssu - - export DOCKER_REPO=${{ secrets.DOCKER_REPO }} - export IMAGE_NAME=eatssu-dev - export EATSSU_DB_URL=${{ secrets.EATSSU_DB_URL_DEV }} - export EATSSU_DB_USERNAME=${{ secrets.EATSSU_DB_USERNAME }} - export EATSSU_DB_PASSWORD=${{ secrets.EATSSU_DB_PASSWORD }} - export EATSSU_JWT_SECRET=${{ secrets.EATSSU_JWT_SECRET_DEV }} - export EATSSU_AWS_ACCESS_KEY=${{ secrets.EATSSU_AWS_ACCESS_KEY_DEV }} - export EATSSU_AWS_SECRET_KEY=${{ secrets.EATSSU_AWS_SECRET_KEY_DEV }} - export EATSSU_SLACK_TOKEN=${{ secrets.EATSSU_SLACK_TOKEN }} - - sudo docker compose down - sudo docker compose pull - sudo docker compose up -d --remove-orphans + sudo docker ps + sudo docker rm -f $(docker ps -qa) + sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev + sudo docker run -d -p 9000:9000 \ + -e EATSSU_DB_URL_DEV="${{ secrets.EATSSU_DB_URL_DEV }}" \ + -e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \ + -e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \ + -e EATSSU_JWT_SECRET_DEV="${{ secrets.EATSSU_JWT_SECRET_DEV }}" \ + -e EATSSU_AWS_ACCESS_KEY_DEV="${{ secrets.EATSSU_AWS_ACCESS_KEY_DEV }}" \ + -e EATSSU_AWS_SECRET_KEY_DEV="${{ secrets.EATSSU_AWS_SECRET_KEY_DEV }}" \ + -e EATSSU_SLACK_TOKEN="${{ secrets.EATSSU_SLACK_TOKEN }}" \ + ${{ secrets.DOCKER_REPO }}/eatssu-dev sudo docker image prune -f - diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 4d91e0dc..00000000 --- a/docker-compose.yml +++ /dev/null @@ -1,20 +0,0 @@ -version: "3.8" -services: - eat-ssu: - image: ${DOCKER_REPO}/${IMAGE_NAME}:latest - ports: - - "9000:9000" - environment: - - EATSSU_DB_URL=${EATSSU_DB_URL} - - EATSSU_DB_USERNAME=${EATSSU_DB_USERNAME} - - EATSSU_DB_PASSWORD=${EATSSU_DB_PASSWORD} - - EATSSU_JWT_SECRET=${EATSSU_JWT_SECRET} - - EATSSU_AWS_ACCESS_KEY=${EATSSU_AWS_ACCESS_KEY} - - EATSSU_AWS_SECRET_KEY=${EATSSU_AWS_SECRET_KEY} - - EATSSU_SLACK_TOKEN=${EATSSU_SLACK_TOKEN} - volumes: - - eatssu-data:/app/data - - /home/ubuntu/eatssu/logs:/app/logs - -volumes: - eatssu-data: diff --git a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java index cbcfac24..21bdd38f 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java @@ -32,8 +32,12 @@ public Inquiry createUserInquiry(CustomUserDetails userDetails, CreateInquiryReq Inquiry saved = inquiryRepository.save(inquiry); eventPublisher.publishEvent(LogEvent.of(String.format( - "Inquiry created: id=%d, userId=%d, email=%s, content=%s", - saved.getId(), user.getId(), request.getEmail(), request.getContent()))); + "Inquiry created: id=%d, userId=%d, email=%s, status=%s", + saved.getId(), + user.getId(), + request.getEmail(), + saved.getStatus() + ))); return saved; } diff --git a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java index a146b585..4105629e 100644 --- a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java +++ b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java @@ -41,8 +41,14 @@ public Report reportReview(CustomUserDetails userDetails, ReportCreateRequest re reportRepository.save(report); eventPublisher.publishEvent(LogEvent.of( - String.format("Report created: reportId=%d, reviewId=%d, userId=%d, status=%s", - report.getId(), review.getId(), user.getId(), report.getStatus()) + String.format( + "Report created: reportId=%d, reviewId=%d, userId=%d, reportType=%s, status=%s", + report.getId(), + report.getReview().getId(), + report.getUser().getId(), + report.getReportType(), + report.getStatus() + ) )); return report; diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml index 62c6d624..28f81a9d 100644 --- a/src/main/resources/logback-spring.xml +++ b/src/main/resources/logback-spring.xml @@ -1,67 +1,29 @@ - + - - - - - - - - %d{yyyy-MM-dd HH:mm:ss.SSS} %clr([%level]) [%15.15thread] [reqId=%X{requestId}] %cyan(%logger{36}) - %msg%n - - - + - - - ${LOG_PATH}/${APP_NAME}.log - - ${LOG_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log - 1 - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] %logger{36} - %msg%n - - - - - - ${LOG_PATH}/${APP_NAME}-error.log - - ${LOG_PATH}/${APP_NAME}-error-%d{yyyy-MM-dd}.log - 1 - - - ERROR - ACCEPT - DENY - + + - %d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] %logger{36} - %msg%n + ${LOG_PATTERN} - - + + true - - - - - true - + - - - + From 51dd849e882787ee3ebdd8028c43981427181bdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Thu, 25 Sep 2025 16:51:18 +0900 Subject: [PATCH 281/399] =?UTF-8?q?feat:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 99e81d88..28b48599 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,12 +1,8 @@ name: EAT-SSU Server 개발 & 운영 서버 배포 파이프라인 -#on: -# push: -# branches: [ "main", "develop", "hotfix/deploy-prod-fail", "hotfix/deploy-dev-fail" ] - on: - pull_request: - branches: [ "develop" ] + push: + branches: [ "main", "develop", "hotfix/deploy-prod-fail", "hotfix/deploy-dev-fail" ] permissions: contents: read @@ -34,7 +30,7 @@ jobs: ${{ runner.os }}-gradle- - name: dev 프로필 설정 -# if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' + if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' run: | echo "spring: profiles: @@ -68,7 +64,7 @@ jobs: docker push ${{ secrets.DOCKER_REPO }}/eatssu-prod - name: dev 서버 용 Docker 빌드 및 푸시 -# if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' + if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' run: | docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev . docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev @@ -100,7 +96,7 @@ jobs: - name: dev 서버에 배포 uses: appleboy/ssh-action@master id: deploy-dev -# if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' + if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' with: host: ${{ secrets.HOST_DEV }} username: ${{ secrets.USERNAME }} From 412577b62e88d0d079c80b5cf3d0079d6523415e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Thu, 25 Sep 2025 19:02:31 +0900 Subject: [PATCH 282/399] =?UTF-8?q?fix:=20reqId=EA=B0=92=EC=9D=B4=20?= =?UTF-8?q?=EB=82=98=EC=98=A4=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ssu/eatssu/global/log/MDCLoggingFilter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ssu/eatssu/global/log/MDCLoggingFilter.java b/src/main/java/ssu/eatssu/global/log/MDCLoggingFilter.java index edd496c3..e1d6ce9e 100644 --- a/src/main/java/ssu/eatssu/global/log/MDCLoggingFilter.java +++ b/src/main/java/ssu/eatssu/global/log/MDCLoggingFilter.java @@ -2,7 +2,7 @@ import jakarta.servlet.*; import jakarta.servlet.http.HttpServletRequest; -import org.jboss.logging.MDC; +import org.slf4j.MDC; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @@ -20,7 +20,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha if (requestId == null) { requestId = UUID.randomUUID().toString().replace("-", ""); } - MDC.put("request_id", requestId); + MDC.put("requestId", requestId); try { chain.doFilter(request, response); } finally { From 88254146b0bc1bd7381333379c21308f47e6e54a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Thu, 25 Sep 2025 20:00:22 +0900 Subject: [PATCH 283/399] =?UTF-8?q?fix:=20=EB=AF=BC=EA=B0=90=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EA=B4=80=EB=A0=A8=20=EC=82=AC=ED=95=AD=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 --- .../domain/auth/dto/AppleLoginRequest.java | 2 ++ .../domain/auth/dto/KakaoLoginRequest.java | 3 ++ .../eatssu/domain/auth/dto/ValidRequest.java | 2 ++ .../inquiry/service/InquiryService.java | 3 +- .../domain/user/service/UserService.java | 6 ++-- .../global/log/ControllerLogAspect.java | 29 ++++++++++++++++++- .../eatssu/global/log/annotation/LogMask.java | 11 +++++++ 7 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 src/main/java/ssu/eatssu/global/log/annotation/LogMask.java diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java b/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java index 2d5416ad..8752f2d8 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequest.java @@ -1,9 +1,11 @@ package ssu.eatssu.domain.auth.dto; import io.swagger.v3.oas.annotations.media.Schema; +import ssu.eatssu.global.log.annotation.LogMask; @Schema(title = "애플 로그인 및 회원가입") public record AppleLoginRequest( + @LogMask @Schema(description = "identityToken", example = "eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi...") String identityToken ) { diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java b/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java index eacf8e65..140f0191 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequest.java @@ -3,14 +3,17 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; +import ssu.eatssu.global.log.annotation.LogMask; @Schema(title = "카카오 로그인 및 회원가입") public record KakaoLoginRequest( + @LogMask @NotBlank(message = "이메일을 입력해주세요.") @Email(message = "올바른 이메일 주소를 입력해주세요.") @Schema(description = "이메일", example = "test@email.com") String email, + @LogMask @Schema(description = "providerId", example = "10378247832195") String providerId ) { diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/ValidRequest.java b/src/main/java/ssu/eatssu/domain/auth/dto/ValidRequest.java index 748028e6..0a70ed4d 100644 --- a/src/main/java/ssu/eatssu/domain/auth/dto/ValidRequest.java +++ b/src/main/java/ssu/eatssu/domain/auth/dto/ValidRequest.java @@ -2,9 +2,11 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; +import ssu.eatssu.global.log.annotation.LogMask; @Schema(title = "유효한 토큰 확인") public record ValidRequest( + @LogMask @NotBlank(message = "토큰을 입력해주세요") @Schema(description = "토큰", example = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ7XCJpZFwiOjcsXCJlbWFpbFwiOlwidGVzdEBlbWFpbC5jb21cIixcInJvbGVcIjpcIlJPTEVfVVNFUlwifSIsImF1dGgiOiJST0xFX1VTRVIiLCJleHAiOjE3NDQzNzQ0MjB9.mhIWYX_Vj3xW1eXuVflbzpH6vLTcC9b1twbIcqovVjDVnS7tjegu3nQHGXUsUa_WG2DIAtJMFZT_Q1XcVq1jPw") String token diff --git a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java index 21bdd38f..7a38ab08 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/service/InquiryService.java @@ -32,10 +32,9 @@ public Inquiry createUserInquiry(CustomUserDetails userDetails, CreateInquiryReq Inquiry saved = inquiryRepository.save(inquiry); eventPublisher.publishEvent(LogEvent.of(String.format( - "Inquiry created: id=%d, userId=%d, email=%s, status=%s", + "Inquiry created: id=%d, userId=%d, status=%s", saved.getId(), user.getId(), - request.getEmail(), saved.getStatus() ))); diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index 465791c2..630b7832 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -86,10 +86,8 @@ public boolean withdraw(CustomUserDetails userDetails) { userRepository.delete(user); eventPublisher.publishEvent(LogEvent.of( - String.format("User withdrawn: userId=%d, email=%s, nickname=%s", - user.getId(), - user.getEmail(), - user.getNickname()) + String.format("User withdrawn: userId=%d", + user.getId()) )); return true; diff --git a/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java b/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java index 5e6bc5ae..2de93aad 100644 --- a/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java +++ b/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java @@ -14,7 +14,11 @@ import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.global.log.annotation.LogMask; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -62,7 +66,13 @@ public Object logApi(ProceedingJoinPoint joinPoint) throws Throwable { String name = (paramNames != null && i < paramNames.length) ? paramNames[i] : "arg" + i; Object arg = args[i]; try { - String value = objectMapper.writeValueAsString(arg); + String value; + if (arg != null) { + Map safeMap = toSafeMap(arg); + value = objectMapper.writeValueAsString(safeMap); + } else { + value = "null"; + } if (value.length() > 200) value = value.substring(0, 200) + "...(truncated)"; return name + "=" + value; } catch (Exception e) { @@ -97,4 +107,21 @@ public Object logApi(ProceedingJoinPoint joinPoint) throws Throwable { throw e; } } + + private Map toSafeMap(Object arg) { + Map result = new HashMap<>(); + for (Field field : arg.getClass().getDeclaredFields()) { + field.setAccessible(true); + try { + Object value = field.get(arg); + if (field.isAnnotationPresent(LogMask.class)) { + value = "***"; + } + result.put(field.getName(), value); + } catch (IllegalAccessException e) { + result.put(field.getName(), "ERROR"); + } + } + return result; + } } diff --git a/src/main/java/ssu/eatssu/global/log/annotation/LogMask.java b/src/main/java/ssu/eatssu/global/log/annotation/LogMask.java new file mode 100644 index 00000000..bec4c56d --- /dev/null +++ b/src/main/java/ssu/eatssu/global/log/annotation/LogMask.java @@ -0,0 +1,11 @@ +package ssu.eatssu.global.log.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.FIELD, ElementType.RECORD_COMPONENT}) +@Retention(RetentionPolicy.RUNTIME) +public @interface LogMask { +} From fe945b733e33d15bbe01be78ccbd953b334e1b4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Thu, 25 Sep 2025 20:02:22 +0900 Subject: [PATCH 284/399] =?UTF-8?q?chore:=20=EC=9E=84=EC=8B=9C=20=EB=B0=B0?= =?UTF-8?q?=ED=8F=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 28b48599..9dd353f8 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -3,6 +3,8 @@ name: EAT-SSU Server 개발 & 운영 서버 배포 파이프라인 on: push: branches: [ "main", "develop", "hotfix/deploy-prod-fail", "hotfix/deploy-dev-fail" ] + pull_request: + branches: [ "develop" ] permissions: contents: read @@ -30,7 +32,7 @@ jobs: ${{ runner.os }}-gradle- - name: dev 프로필 설정 - if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' +# if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' run: | echo "spring: profiles: @@ -64,7 +66,7 @@ jobs: docker push ${{ secrets.DOCKER_REPO }}/eatssu-prod - name: dev 서버 용 Docker 빌드 및 푸시 - if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' +# if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' run: | docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev . docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev @@ -96,7 +98,7 @@ jobs: - name: dev 서버에 배포 uses: appleboy/ssh-action@master id: deploy-dev - if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' +# if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' with: host: ${{ secrets.HOST_DEV }} username: ${{ secrets.USERNAME }} From 8b5ab253f8df1a17be9fc21ef712f1197844c0da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Thu, 25 Sep 2025 20:06:09 +0900 Subject: [PATCH 285/399] =?UTF-8?q?chore:=20PR=20=EB=A7=88=EB=AC=B4?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 9dd353f8..28b48599 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -3,8 +3,6 @@ name: EAT-SSU Server 개발 & 운영 서버 배포 파이프라인 on: push: branches: [ "main", "develop", "hotfix/deploy-prod-fail", "hotfix/deploy-dev-fail" ] - pull_request: - branches: [ "develop" ] permissions: contents: read @@ -32,7 +30,7 @@ jobs: ${{ runner.os }}-gradle- - name: dev 프로필 설정 -# if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' + if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' run: | echo "spring: profiles: @@ -66,7 +64,7 @@ jobs: docker push ${{ secrets.DOCKER_REPO }}/eatssu-prod - name: dev 서버 용 Docker 빌드 및 푸시 -# if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' + if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' run: | docker build -f Dockerfile -t ${{ secrets.DOCKER_REPO }}/eatssu-dev . docker push ${{ secrets.DOCKER_REPO }}/eatssu-dev @@ -98,7 +96,7 @@ jobs: - name: dev 서버에 배포 uses: appleboy/ssh-action@master id: deploy-dev -# if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' + if: github.ref_name == 'develop' || github.ref_name == 'hotfix/deploy-dev-fail' with: host: ${{ secrets.HOST_DEV }} username: ${{ secrets.USERNAME }} From 4cda70dc1c5e7cf46000020687d89ff00cf107bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Fri, 26 Sep 2025 02:30:09 +0900 Subject: [PATCH 286/399] =?UTF-8?q?feat:=20=EB=AF=BC=EA=B0=90=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EB=A7=88=EC=8A=A4=ED=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java b/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java index 318664e3..703dcbd7 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/dto/CreateInquiryRequest.java @@ -3,6 +3,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import lombok.NoArgsConstructor; +import ssu.eatssu.global.log.annotation.LogMask; @Schema(title = "문의 남기기") @NoArgsConstructor @@ -10,8 +11,10 @@ public class CreateInquiryRequest { @Schema(description = "답장 받을 이메일", example = "sandy1017@gmail.com") + @LogMask private String email; @Schema(description = "문의 내용", example = "어쩌고 저쩌고 문의 남깁니다") + @LogMask private String content; } From 58aeebd06cf51296b36aef76a1610b591d191301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:57:36 +0900 Subject: [PATCH 287/399] =?UTF-8?q?refactor:=20=EB=A1=9C=EA=B7=B8=20?= =?UTF-8?q?=EB=A1=A4=EB=A7=81=20=EC=A0=95=EC=B1=85=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 6 ++++++ Dockerfile | 3 --- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 28b48599..9d1886ff 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -83,6 +83,9 @@ jobs: sudo docker rm -f $(docker ps -qa) sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-prod sudo docker run -d -p 9000:9000 \ + --log-driver=json-file \ + --log-opt max-size=20m \ + --log-opt max-file=5 \ -e EATSSU_DB_URL_PROD="${{ secrets.EATSSU_DB_URL_PROD }}" \ -e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \ -e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \ @@ -107,6 +110,9 @@ jobs: sudo docker rm -f $(docker ps -qa) sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev sudo docker run -d -p 9000:9000 \ + --log-driver=json-file \ + --log-opt max-size=20m \ + --log-opt max-file=5 \ -e EATSSU_DB_URL_DEV="${{ secrets.EATSSU_DB_URL_DEV }}" \ -e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \ -e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \ diff --git a/Dockerfile b/Dockerfile index 50e17e73..5bd8e119 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,9 +15,6 @@ RUN ./gradlew clean build --no-daemon FROM --platform=linux/amd64 openjdk:17-jdk-slim WORKDIR /app -# 로그 디렉토리 미리 생성 -RUN mkdir -p /app/logs - # 빌드 단계에서 생성된 JAR 파일 복사 (파일명이 프로젝트에 따라 달라질 수 있으므로 와일드카드 사용) COPY --from=builder /home/gradle/project/build/libs/*.jar app.jar From 00d14094680dea4525e6fac4af350fe96a349e8c Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Tue, 30 Sep 2025 23:06:26 +0900 Subject: [PATCH 288/399] =?UTF-8?q?fix:=20250930=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=EC=9A=94=EC=B2=AD=EC=82=AC=ED=95=AD=20(#248)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 자장밥 필터링 안되게 추가 * refactor: /v2/reviews/my swagger json 깨지는 문제 수정 * refactor: valid-for-review swagger menulist 수정 * refactor: /list/menu mainRating->rating, 맛/양 rating 필드 삭제 * chore: 코드 포맷팅 * refactor: mainRating->rating으로 필드 변경 * /list/menu에 id,name,isLike추가 * fix: gemini 리뷰 반영 --- .../auth/infrastructure/SecurityConfig.java | 1 - .../security/JwtAuthenticationFilter.java | 2 -- .../ssu/eatssu/domain/menu/entity/Menu.java | 7 ++--- .../QuerydslMenuRatingCalculator.java | 1 - .../partnership/dto/PartnershipInfo.java | 8 +++-- .../partnership/entity/Partnership.java | 4 +-- .../persistence/PartnershipRepository.java | 26 ++++++++--------- .../domain/restaurant/entity/Restaurant.java | 2 +- .../review/dto/CreateMenuReviewRequest.java | 1 - .../domain/review/dto/MealReviewResponse.java | 15 +++++++++- .../review/dto/MealReviewsV2Response.java | 6 ++-- .../review/dto/MenuReviewsV2Response.java | 6 ++-- .../review/dto/RestaurantReviewResponse.java | 2 +- .../domain/review/dto/ReviewDetail.java | 29 +++++++++++-------- .../review/dto/ValidMenuForViewResponse.java | 3 +- .../review/service/ReviewServiceV2.java | 21 +++++++------- .../domain/review/utils/MenuFilterUtil.java | 1 + .../user/department/entity/College.java | 11 +++---- .../user/department/entity/Department.java | 7 ++--- .../user/dto/GetDepartmentResponse.java | 2 +- .../domain/user/dto/MyMealReviewResponse.java | 26 +++++++++-------- .../domain/user/service/UserService.java | 8 ++--- .../handler/GlobalExceptionHandler.java | 2 +- .../handler/response/BaseResponseStatus.java | 2 +- 24 files changed, 99 insertions(+), 94 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index b8d7fee4..959cfc3a 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -14,7 +14,6 @@ import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import ssu.eatssu.domain.auth.security.JwtAuthenticationFilter; import ssu.eatssu.domain.auth.security.JwtTokenProvider; -import ssu.eatssu.domain.slack.service.SlackErrorNotifier; import ssu.eatssu.global.handler.JwtAccessDeniedHandler; import ssu.eatssu.global.handler.JwtAuthenticationEntryPoint; diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java index 2566ecec..327108b4 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java @@ -15,8 +15,6 @@ import org.springframework.util.StringUtils; import org.springframework.web.filter.GenericFilterBean; - - import java.io.IOException; import java.util.List; diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index b3346b03..a64d9c56 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -33,6 +33,8 @@ public class Menu { private final Reviews reviews = new Reviews(); @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL) private final List mealMenus = new ArrayList<>(); + @Column(name = "unlike_count") + private Integer unlikeCount = 0; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "menu_id") @@ -44,15 +46,10 @@ public class Menu { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "menu_category_id") private MenuCategory category; - private boolean isDiscontinued = false; - @Column(name = "like_count") private Integer likeCount = 0; - @Column(name = "unlike_count") - private final Integer unlikeCount = 0; - private Menu(String name, Restaurant restaurant, Integer price, MenuCategory category) { this.name = name; this.restaurant = restaurant; diff --git a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java index 0d8b2843..160b9f2b 100644 --- a/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java +++ b/src/main/java/ssu/eatssu/domain/menu/persistence/QuerydslMenuRatingCalculator.java @@ -27,7 +27,6 @@ public Double getMainRatingAverage(Long menuId) { } - private BooleanExpression menuIdEq(Long menuId) { return menu.id.eq(menuId); } diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java index bbf39d36..b50fe3e1 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java @@ -28,9 +28,11 @@ public static PartnershipInfo fromEntity(Partnership partnership, .startDate(partnership.getStartDate()) .endDate(partnership.getEndDate()) .collegeName(partnership.getPartnershipCollege() == null && partnership.getPartnershipDepartment() == null - ? "총학생회" - : (partnership.getPartnershipCollege() != null ? partnership.getPartnershipCollege().getName() : null)) - .departmentName(partnership.getPartnershipDepartment() != null ? partnership.getPartnershipDepartment().getName() : null) + ? "총학생회" + : (partnership.getPartnershipCollege() != null ? partnership.getPartnershipCollege() + .getName() : null)) + .departmentName(partnership.getPartnershipDepartment() != null ? partnership.getPartnershipDepartment() + .getName() : null) .likeCount(restaurant.getLikes() != null ? restaurant.getLikes().size() : 0) .isLiked(isLiked) .build(); diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java index 91763d0f..3f32b6a1 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java @@ -2,8 +2,6 @@ import jakarta.persistence.Column; import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; @@ -32,7 +30,7 @@ public class Partnership { @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "partnership_id") private Long id; - + @Column(name = "description", nullable = false) private String description; diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java index 052a8ae6..a64fd259 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRepository.java @@ -12,19 +12,19 @@ public interface PartnershipRepository extends JpaRepository { @Query(""" - select distinct pr - from PartnershipRestaurant pr - join fetch pr.partnerships p - left join fetch p.partnershipCollege pc - left join fetch p.partnershipDepartment pd - where - ( - pc = :college - or pd = :department - or (pc is null and pd is null) - ) - and (p.endDate is null or p.endDate >= current_date) - """) + select distinct pr + from PartnershipRestaurant pr + join fetch pr.partnerships p + left join fetch p.partnershipCollege pc + left join fetch p.partnershipDepartment pd + where + ( + pc = :college + or pd = :department + or (pc is null and pd is null) + ) + and (p.endDate is null or p.endDate >= current_date) + """) List findRestaurantsWithMyPartnerships( @Param("college") College college, @Param("department") Department department diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index 553e53bd..3bd2554f 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -15,7 +15,7 @@ public enum Restaurant { FOOD_COURT("FOOD_COURT", null), SNACK_CORNER("SNACK_CORNER", null), HAKSIK("HAKSIK", 5000), - FACULTY("FACULTY",null); + FACULTY("FACULTY", null); private final String restaurantName; private final Integer restaurantPrice; diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java index 2a50f46f..b688ff5d 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java @@ -6,7 +6,6 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import org.springframework.util.Assert; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.review.entity.Review; diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java index e0bbbaac..07d3ab40 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java @@ -42,7 +42,20 @@ public class MealReviewResponse { @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") private List imageUrls; - @Schema(description = "메뉴 리스트") + @Schema(description = "메뉴 리스트", example = """ + [ + { + "menuId": 3143, + "name": "생고기제육볶음", + "isLike": true + }, + { + "menuId": 3144, + "name": "오징어초무침", + "isLike": false + } + ] + """) private List menuList; public static MealReviewResponse from(Review review, diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java index 7cf41bc7..1d98f7c0 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewsV2Response.java @@ -18,8 +18,8 @@ public class MealReviewsV2Response implements ReviewInformationResponse { @Schema(description = "리뷰 개수", example = "15") private Long totalReviewCount; - @Schema(description = "평점-메인", example = "4.4") - private Double mainRating; + @Schema(description = "평점", example = "4.4") + private Double rating; @Schema(description = "좋아요 개수", example = "4.4") private Integer likeCount; @@ -31,7 +31,7 @@ public static MealReviewsV2Response of(Long totalReviewCount, List imageUrls; + public static ReviewDetail from(Review review, Long userId) { List imageUrls = new ArrayList<>(); review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); + Menu menu = review.getMenu(); + + Set likedMenuIds = review.getMenuLikes().stream() + .filter(ReviewMenuLike::getIsLike) + .map(like -> like.getMenu().getId()) + .collect(Collectors.toSet()); ReviewDetailBuilder builder = ReviewDetail.builder() .reviewId(review.getId()) - .mainRating(review.getRatings().getMainRating()) + .rating(review.getRatings().getMainRating()) .writedAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imageUrls(imageUrls) - .menu(review.getMenu().getName()); + .menu(new MenuIdNameLikeDto(menu.getId(),menu.getName(),likedMenuIds.contains(menu.getId()))); if (review.getUser() == null) { return builder diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java index 494ba5a0..d787cc07 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ValidMenuForViewResponse.java @@ -4,7 +4,6 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; -import lombok.NoArgsConstructor; import lombok.Setter; import java.util.List; @@ -15,7 +14,7 @@ @Schema(title = "리뷰에 포함되는 메뉴") @AllArgsConstructor public class ValidMenuForViewResponse { - @Schema(description = "리뷰에 포함되는 메뉴 리스트", example = "[김치볶음밥, 고구마치즈돈까스, 김자반]") + @Schema(description = "리뷰에 포함되는 메뉴 리스트") private List menuList; @Getter diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 66a4bd39..89fb03d6 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -172,7 +172,7 @@ public RestaurantReviewResponse findRestaurantReviews(Restaurant restaurant) { return RestaurantReviewResponse.builder() .totalReviewCount(reviews.size()) .reviewRatingCount(reviewRatingCount) - .mainRating(Math.round(averageRating * 10) / 10.0) + .rating(Math.round(averageRating * 10) / 10.0) .likeCount(likeCount) .unlikeCount(unlikeCount) .build(); @@ -222,7 +222,7 @@ public SliceResponse findMealReviewList(Long mealId, Long la pageReviews.getContent() .stream() .map(review -> MealReviewResponse.from(review, - userId,validMenus)) + userId, validMenus)) .collect(Collectors.toList()); return SliceResponse.builder() @@ -298,7 +298,7 @@ public MenuReviewsV2Response findMenuReviews(Long menuId) { .menuName(menu.getName()) .totalReviewCount((long) reviews.size()) .reviewRatingCount(reviewRatingCount) - .mainRating(Math.round(averageRating * 10) / 10.0) + .rating(Math.round(averageRating * 10) / 10.0) .likeCount(likeCount != null ? likeCount : 0) .build(); } @@ -359,16 +359,15 @@ public MealReviewsV2Response findMealReviews(Long mealId) { return MealReviewsV2Response .builder() .menuList(validMenus.stream() - .filter(Objects::nonNull) - .map(menu -> new MenuIdNameDto( - menu.getMenuId(), - menu.getName() - )) - .filter(Objects::nonNull) - .collect(Collectors.toList())) + .filter(Objects::nonNull) + .map(menu -> new MenuIdNameDto( + menu.getMenuId(), + menu.getName() + )) + .collect(Collectors.toList())) .totalReviewCount((long) reviews.size()) .reviewRatingCount(reviewRatingCount) - .mainRating(Math.round(averageRating * 10) / 10.0) + .rating(Math.round(averageRating * 10) / 10.0) .likeCount(likeCount) .build(); } diff --git a/src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java b/src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java index a587501f..e705a7e4 100644 --- a/src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java +++ b/src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java @@ -23,6 +23,7 @@ public static boolean isExcludedFromReview(String menuName) { } if (menuName.contains("밥") + && !menuName.contains("자장밥") && !menuName.contains("볶음밥") && !menuName.contains("비빔밥")) { return true; diff --git a/src/main/java/ssu/eatssu/domain/user/department/entity/College.java b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java index 70ae0260..b8447a40 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/entity/College.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java @@ -19,20 +19,17 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class College { + @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) + private final List departments = new ArrayList<>(); + @OneToMany(mappedBy = "partnershipCollege", cascade = CascadeType.ALL, orphanRemoval = true) + private final List partnerships = new ArrayList<>(); @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "college_id") private Long id; - @Column(nullable = false, unique = true) private String name; - @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) - private final List departments = new ArrayList<>(); - - @OneToMany(mappedBy = "partnershipCollege", cascade = CascadeType.ALL, orphanRemoval = true) - private final List partnerships = new ArrayList<>(); - public College(String name) { this.name = name; } diff --git a/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java index 9c5f227c..51f02653 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java @@ -22,21 +22,18 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Department { + @OneToMany(mappedBy = "partnershipDepartment", cascade = CascadeType.ALL, orphanRemoval = true) + private final List partnerships = new ArrayList<>(); @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "department_id") private Long id; - @Column(nullable = false) private String name; - @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "college_id") private College college; - @OneToMany(mappedBy = "partnershipDepartment", cascade = CascadeType.ALL, orphanRemoval = true) - private final List partnerships = new ArrayList<>(); - public Department(String name) { this.name = name; } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/GetDepartmentResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/GetDepartmentResponse.java index 128b9d92..73774bc0 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/GetDepartmentResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/GetDepartmentResponse.java @@ -4,5 +4,5 @@ @Builder public record GetDepartmentResponse(Long id, - String name) { + String name) { } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index 316fcaad..c10579af 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -35,18 +35,20 @@ public class MyMealReviewResponse { @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") private List imageUrls; - @Schema(description = "메뉴 리스트", example = "[\n" + - " {\n" + - " \"menuId\": 3143,\n" + - " \"name\": \"생고기제육볶음\"\n" + - " \"isLike\" : true,\n" + - " },\n" + - " {\n" + - " \"menuId\": 3144,\n" + - " \"name\": \"오징어초무침\",\n" + - " \"isLike\" : false,\n" + - " }\n" + - " ]") + @Schema(description = "메뉴 리스트", example = """ + [ + { + "menuId": 3143, + "name": "생고기제육볶음", + "isLike": true + }, + { + "menuId": 3144, + "name": "오징어초무침", + "isLike": false + } + ] + """) private List menuList; public static MyMealReviewResponse from(Review review) { diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index 630b7832..aa5332ca 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -144,10 +144,10 @@ public List getDepartmentList(Long collegeId) { .orElseThrow(() -> new BaseException(VALIDATION_ERROR)); List departments = departmentRepository.findByCollege(college); return departments.stream().map(department -> GetDepartmentResponse.builder() - .id(department.getId()) - .name(department.getName()) - .build()) - .toList(); + .id(department.getId()) + .name(department.getName()) + .build()) + .toList(); } private boolean isForbiddenNickname(String nickname) { diff --git a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java index d05810e1..8507c6af 100644 --- a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java @@ -46,7 +46,7 @@ public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { */ @ExceptionHandler(BaseException.class) public ResponseEntity> handleBaseException(BaseException e) { - if(BaseResponseStatus.sendSlackNotification(e.getStatus())){ + if (BaseResponseStatus.sendSlackNotification(e.getStatus())) { slackErrorNotifier.notify(e); } return ResponseEntity.status(e.getStatus().getHttpStatus()).body(BaseResponse.fail(e.getStatus())); diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index e7352315..2fb26288 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -59,7 +59,7 @@ public enum BaseResponseStatus { NOT_FOUND_DEPARTMENT(false, HttpStatus.NOT_FOUND, 40409, "해당 학과를 찾을 수 없습니다."), NOT_FOUND_PARTNERSHIP(false, HttpStatus.NOT_FOUND, 40410, "해당 제휴를 찾을 수 없습니다."), NOT_FOUND_PARTNERSHIP_RESTAURANT(false, HttpStatus.NOT_FOUND, 40411, "해당 제휴 식당을 찾을 수 없습니다."), - INVALID_NICKNAME(false,HttpStatus.NOT_FOUND,40412,"잘못된 닉네임입니다."), + INVALID_NICKNAME(false, HttpStatus.NOT_FOUND, 40412, "잘못된 닉네임입니다."), /** * 405 METHOD_NOT_ALLOWED 지원하지 않은 method 호출 From 9c251939a82d8ee7f86f2d8de27021eec49847f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Wed, 1 Oct 2025 00:34:21 +0900 Subject: [PATCH 289/399] =?UTF-8?q?fix:=20=EC=A0=9C=ED=9C=B4=20=EC=A7=80?= =?UTF-8?q?=EB=8F=84=20&=20=EC=8B=A0=EA=B3=A0=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EC=82=AC=ED=95=AD=20(20250930)=20(#249)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: DS 파일 git ignore * refactor: 만료된 제휴가 보이지 않도록 수정 * feat: 24시간 이내에 댓글 신고 횟수 제한 * refactor: 스웨거 문서 업데이트 * chore: CI/CD test * chore: CI/CD test * fix: 공백 제거 * fix: CI/CD 수정 완료 * fix: gemini 수정 사항 반영 * fix: writtenAt 필드 수정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .github/workflows/deploy.yml | 2 +- .gitignore | 6 +++++- .../PartnershipRestaurantRepository.java | 11 ++++++----- .../domain/report/dto/ReportCreateRequest.java | 4 ++-- .../report/repository/ReportRepository.java | 15 +++++++++++++++ .../domain/report/service/ReportService.java | 9 +++++++-- .../eatssu/domain/review/dto/ReviewDetail.java | 4 ++-- .../handler/response/BaseResponseStatus.java | 1 + 8 files changed, 39 insertions(+), 13 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 9d1886ff..a78cf57e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -112,7 +112,7 @@ jobs: sudo docker run -d -p 9000:9000 \ --log-driver=json-file \ --log-opt max-size=20m \ - --log-opt max-file=5 \ + --log-opt max-file=5 \ -e EATSSU_DB_URL_DEV="${{ secrets.EATSSU_DB_URL_DEV }}" \ -e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \ -e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \ diff --git a/.gitignore b/.gitignore index 633f67dc..21461390 100644 --- a/.gitignore +++ b/.gitignore @@ -45,4 +45,8 @@ out/ ### env file ### .env -/src/main/resources/application-local.yml \ No newline at end of file +/src/main/resources/application-local.yml + +### DS File ### +.DS_Store +*/.DS_Store diff --git a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java index 23e92f98..bbe83b6d 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java +++ b/src/main/java/ssu/eatssu/domain/partnership/persistence/PartnershipRestaurantRepository.java @@ -8,10 +8,11 @@ public interface PartnershipRestaurantRepository extends JpaRepository { @Query(""" - SELECT DISTINCT pr FROM PartnershipRestaurant pr - LEFT JOIN FETCH pr.partnerships p - LEFT JOIN FETCH p.partnershipCollege - LEFT JOIN FETCH p.partnershipDepartment - WHERE p.endDate is null or p.endDate >= CURRENT_DATE""") + SELECT DISTINCT pr FROM PartnershipRestaurant pr + JOIN FETCH pr.partnerships p + LEFT JOIN FETCH p.partnershipCollege + LEFT JOIN FETCH p.partnershipDepartment + WHERE p.endDate IS NULL OR p.endDate >= CURRENT_DATE + """) List findAllWithDetails(); } diff --git a/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java b/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java index 6ddd6800..6f96af91 100644 --- a/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java +++ b/src/main/java/ssu/eatssu/domain/report/dto/ReportCreateRequest.java @@ -9,10 +9,10 @@ public record ReportCreateRequest( @Schema(description = "신고할 리뷰 id", example = "4") Long reviewId, - @Schema(description = "신고 타입", example = "BAD_WORD") + @Schema(description = "신고 타입", example = "NO_ASSOCIATE_CONTENT") ReportType reportType, - @Schema(description = "신고 내용", example = "음란성, 욕설 등 부적절한 내용") + @Schema(description = "신고 내용", example = "리뷰 작성 취지에 맞지 않는 내용") String content) { } diff --git a/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java b/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java index 58d0a066..51edfeba 100644 --- a/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java +++ b/src/main/java/ssu/eatssu/domain/report/repository/ReportRepository.java @@ -1,7 +1,22 @@ package ssu.eatssu.domain.report.repository; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import ssu.eatssu.domain.review.entity.Report; +import java.time.LocalDateTime; + public interface ReportRepository extends JpaRepository { + + @Query(""" + SELECT count(r) > 0 + FROM Report r + WHERE r.user.id = :userId + AND r.review.id = :reviewId + AND r.createdDate >= :threshold +""") + boolean existsRecentReport(@Param("userId") Long userId, + @Param("reviewId") Long reviewId, + @Param("threshold") LocalDateTime threshold); } diff --git a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java index 4105629e..929d801c 100644 --- a/src/main/java/ssu/eatssu/domain/report/service/ReportService.java +++ b/src/main/java/ssu/eatssu/domain/report/service/ReportService.java @@ -17,8 +17,9 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.log.event.LogEvent; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import java.time.LocalDateTime; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; @RequiredArgsConstructor @Service @@ -37,6 +38,10 @@ public Report reportReview(CustomUserDetails userDetails, ReportCreateRequest re Review review = reviewRepository.findById(request.reviewId()) .orElseThrow(() -> new BaseException(NOT_FOUND_REVIEW)); + if(reportRepository.existsRecentReport(user.getId(), review.getId(), LocalDateTime.now().minusHours(24))){ + throw new BaseException(RECENT_REPORT_ON_REVIEW); + } + Report report = Report.create(user, review, request, ReportStatus.PENDING); reportRepository.save(report); diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java index ddc2f1ba..ca5979cd 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java @@ -39,7 +39,7 @@ public class ReviewDetail { private Integer rating; @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") - private LocalDate writedAt; + private LocalDate writtenAt; @Schema(description = "리뷰 내용", example = "맛있습니당") private String content; @@ -61,7 +61,7 @@ public static ReviewDetail from(Review review, Long userId) { ReviewDetailBuilder builder = ReviewDetail.builder() .reviewId(review.getId()) .rating(review.getRatings().getMainRating()) - .writedAt(review.getCreatedDate().toLocalDate()) + .writtenAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imageUrls(imageUrls) .menu(new MenuIdNameLikeDto(menu.getId(),menu.getName(),likedMenuIds.contains(menu.getId()))); diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index 2fb26288..eb418ff1 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -31,6 +31,7 @@ public enum BaseResponseStatus { EXISTED_MEAL(false, HttpStatus.BAD_REQUEST, 40011, "이미 존재하는 식단입니다."), INVALID_TARGET_TYPE(false, HttpStatus.BAD_REQUEST, 40012, "잘못된 targetType 입니다."), MISSING_USER_DEPARTMENT(false, HttpStatus.BAD_REQUEST, 40013, "사용자의 학과 정보가 없습니다."), + RECENT_REPORT_ON_REVIEW(false, HttpStatus.BAD_REQUEST, 40014, "24시간 이내에 동일 댓글을 신고했습니다."), /** * 401 UNAUTHORIZED 권한없음(인증 실패) From 6b381ce9e96d5813f6f47a7f49af8c96e9a5b97b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Wed, 1 Oct 2025 01:10:59 +0900 Subject: [PATCH 290/399] =?UTF-8?q?fix:=20=EC=96=B4=EB=85=B8=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EC=85=98=20=EC=B6=94=EA=B0=80=20(#252)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- src/main/java/ssu/eatssu/global/log/event/LogEventListener.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/ssu/eatssu/global/log/event/LogEventListener.java b/src/main/java/ssu/eatssu/global/log/event/LogEventListener.java index bd7b5e08..d687a2c0 100644 --- a/src/main/java/ssu/eatssu/global/log/event/LogEventListener.java +++ b/src/main/java/ssu/eatssu/global/log/event/LogEventListener.java @@ -2,6 +2,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import org.springframework.transaction.event.TransactionPhase; import org.springframework.transaction.event.TransactionalEventListener; @@ -11,6 +12,7 @@ @Slf4j public class LogEventListener { + @Async @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) public void handleLogEvent(LogEvent event) { log.info(event.message()); From 3aadb52c3e59982591d22aebf8d71b5485feabe8 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Wed, 1 Oct 2025 07:40:58 +0900 Subject: [PATCH 291/399] =?UTF-8?q?fix:=20review=20v1=20list=20500?= =?UTF-8?q?=EC=97=90=EB=9F=AC=20=EB=82=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(#254)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/rating/entity/Ratings.java | 18 +++- .../review/dto/CreateMenuReviewRequest.java | 6 +- .../review/dto/ReviewCreateRequest.java | 2 +- .../domain/review/dto/ReviewDetailV1.java | 88 +++++++++++++++++++ .../review/dto/UploadReviewRequest.java | 6 +- .../eatssu/domain/review/entity/Review.java | 35 ++++---- .../review/presentation/ReviewController.java | 5 +- .../domain/review/service/ReviewService.java | 2 +- .../domain/slice/service/SliceService.java | 42 +++++++++ 9 files changed, 176 insertions(+), 28 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/review/dto/ReviewDetailV1.java diff --git a/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java b/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java index c0ac2de7..dbef0cce 100644 --- a/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java +++ b/src/main/java/ssu/eatssu/domain/rating/entity/Ratings.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.rating.entity; import io.jsonwebtoken.lang.Assert; +import jakarta.persistence.Column; import jakarta.persistence.Embeddable; import lombok.Getter; import lombok.NoArgsConstructor; @@ -10,14 +11,25 @@ @Embeddable public class Ratings { + @Column(name = "main_rating") private Integer mainRating; - private Ratings(Integer mainRating) { + @Column(name = "amount_rating") + private Integer amountRating; + + @Column(name = "taste_rating") + private Integer tasteRating; + + private Ratings(Integer mainRating, Integer amountRating, Integer tasteRating) { Assert.isTrue(mainRating >= 0 && mainRating <= 5, "mainRating must be between 0 and 5"); + Assert.isTrue(amountRating >= 0 && amountRating <= 5, "amountRating must be between 0 and 5"); + Assert.isTrue(tasteRating >= 0 && tasteRating <= 5, "tasteRating must be between 0 and 5"); this.mainRating = mainRating; + this.amountRating = amountRating; + this.tasteRating = tasteRating; } - public static Ratings of(Integer mainRating) { - return new Ratings(mainRating); + public static Ratings of(Integer mainRating, Integer amountRating, Integer tasteRating) { + return new Ratings(mainRating, amountRating, tasteRating); } } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java index b688ff5d..2e922cf0 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java @@ -20,6 +20,10 @@ public class CreateMenuReviewRequest { private Long menuId; @Schema(description = "평점-메인", example = "4") private Integer mainRating; + @Schema(description = "평점-맛", example = "4") + private Integer amountRating; + @Schema(description = "평점-양", example = "4") + private Integer tasteRating; @Max(150) @Schema(description = "한줄평", example = "맛있어용") private String content; @@ -29,7 +33,7 @@ public class CreateMenuReviewRequest { private MenuLikeRequest menuLike; public Review toReviewEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating); + Ratings ratings = Ratings.of(this.mainRating,this.amountRating,this.tasteRating); return Review.builder() .user(user) .content(this.content) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java index f6552e31..3ef1fa59 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java @@ -39,7 +39,7 @@ public ReviewCreateRequest(int mainRating, String content) { } public Review toEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating); + Ratings ratings = Ratings.of(this.mainRating,this.amountRating,this.tasteRating); return Review.builder() .user(user) .content(this.content) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetailV1.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetailV1.java new file mode 100644 index 00000000..196cb4c0 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetailV1.java @@ -0,0 +1,88 @@ +package ssu.eatssu.domain.review.dto; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import ssu.eatssu.domain.review.entity.Review; + +@AllArgsConstructor +@Builder +@Schema(title = "리뷰 상세") +@Getter +public class ReviewDetailV1 { + + @Schema(description = "리뷰 식별자", example = "123") + Long reviewId; + + @Schema(description = "메뉴 이름", example = "콥샐러드") + String menu; + + @Schema(description = "작성자 식별자", example = "123") + Long writerId; + + @Schema(description = "본인 글인지 여부(true/false)", example = "true") + Boolean isWriter; + + @Schema(description = "작성자 닉네임", example = "숭시리시리") + private String writerNickname; + + @Schema(description = "평점-메인", example = "4") + private Integer mainRating; + + @Schema(description = "평점-양", example = "4") + private Integer amountRating; + + @Schema(description = "평점-맛", example = "4") + private Integer tasteRating; + + @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") + private LocalDate writedAt; + + @Schema(description = "리뷰 내용", example = "맛있습니당") + private String content; + + @Schema(description = "리뷰 이미지 url 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; + + public static ReviewDetailV1 from(Review review, Long userId) { + List imageUrls = new ArrayList<>(); + review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); + + ReviewDetailV1Builder builder = ReviewDetailV1.builder() + .reviewId(review.getId()) + .mainRating(review.getRatings().getMainRating()) + .amountRating(review.getRatings().getAmountRating()) + .tasteRating(review.getRatings().getTasteRating()) + .writedAt(review.getCreatedDate().toLocalDate()) + .content(review.getContent()) + .imageUrls(imageUrls) + .menu(review.getMenu().getName()); + + if (review.getUser() == null) { + return builder + .writerId(null) + .writerNickname("알 수 없음") + .isWriter(false) + .build(); + } + + if (review.getUser().getId().equals(userId)) { + return builder + .writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(true) + .build(); + } + + return builder + .writerId(review.getUser().getId()) + .writerNickname(review.getUser().getNickname()) + .isWriter(false) + .build(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java index e107f306..244852b0 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java @@ -20,6 +20,10 @@ public class UploadReviewRequest { @Schema(description = "평점-메인", example = "4") private Integer mainRating; + @Schema(description = "평점-밋", example = "4") + private Integer tasteRating; + @Schema(description = "평점-양", example = "4") + private Integer amountRating; @Max(150) @Schema(description = "한줄평", example = "맛있어용") @@ -36,7 +40,7 @@ public UploadReviewRequest(int mainRating, String content) { } public Review toReviewEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating); + Ratings ratings = Ratings.of(this.mainRating,this.amountRating,this.tasteRating); return Review.builder() .user(user) .content(this.content) diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index 7afffaf6..4e6b2ef7 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -1,5 +1,12 @@ package ssu.eatssu.domain.review.entity; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import jakarta.persistence.AttributeOverride; +import jakarta.persistence.AttributeOverrides; import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Embedded; @@ -23,11 +30,10 @@ import ssu.eatssu.domain.user.entity.BaseTimeEntity; import ssu.eatssu.domain.user.entity.User; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - +/* +* 251001 이정민 +* 해당 엔티티의 rating은 reviewV1, reviewV2 api의 유지를 위해 지우지 마셔야 합니다. +* */ @Entity @Getter @Setter @@ -40,13 +46,12 @@ public class Review extends BaseTimeEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "review_id") private Long id; - @Column(length = 300) - private String content; - // TODO : 삭제되어야 함 + private String content; @Embedded private Ratings ratings; + // v2용 rating private Integer rating; @ManyToOne(fetch = FetchType.LAZY) @@ -70,13 +75,13 @@ public class Review extends BaseTimeEntity { @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) private List menuLikes = new ArrayList<>(); - // @TODO: 리뷰v2 배포 이후 제거 해야함 @OneToMany(mappedBy = "review", cascade = CascadeType.ALL, orphanRemoval = true) private List reviewLikes = new ArrayList<>(); - public void update(String content, Integer mainRate) { + public void update(String content, Integer mainRate, Integer amountRate, Integer tasteRate) { this.content = content; - this.ratings = Ratings.of(mainRate); + this.rating = mainRate; + this.ratings = Ratings.of(mainRate, amountRate, tasteRate); } // TODO : this.user가 null이면? @@ -102,14 +107,6 @@ public void addReviewMenuLike(Menu menu, boolean isLike) { } } - public void removeReviewMenuLike(ReviewMenuLike reviewMenuLike) { - this.menuLikes.remove(reviewMenuLike); - - if (reviewMenuLike.getIsLike()) { - reviewMenuLike.getMenu().decreaseLikeCount(); - } - } - public void update(String content, int rating, Map updatedMenuLikes) { this.content = content; this.rating = rating; diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java index b58361ee..35439833 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewController.java @@ -33,6 +33,7 @@ import ssu.eatssu.domain.review.dto.MenuReviewResponse; import ssu.eatssu.domain.review.dto.ReviewCreateRequest; import ssu.eatssu.domain.review.dto.ReviewDetail; +import ssu.eatssu.domain.review.dto.ReviewDetailV1; import ssu.eatssu.domain.review.dto.ReviewUpdateRequest; import ssu.eatssu.domain.review.dto.SavedReviewImage; import ssu.eatssu.domain.review.dto.UploadReviewRequest; @@ -66,7 +67,7 @@ public class ReviewController { @ApiResponse(responseCode = "404", description = "존재하지 않는 식단", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("") - public BaseResponse> getReviews( + public BaseResponse> getReviews( @Parameter(description = "타입(변동메뉴(식단)/고정메뉴)") @RequestParam("menuType") MenuType menuType, @Parameter(description = "menuId(고정메뉴)") @RequestParam(value = "menuId", required = false) Long menuId, @Parameter(description = "mealId(변동메뉴)") @RequestParam(value = "mealId", required = false) Long mealId, @@ -74,7 +75,7 @@ public BaseResponse> getReviews( @RequestParam(value = "lastReviewId", required = false) Long lastReviewId, @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = sliceService.findReviews(menuType, menuId, mealId, + SliceResponse myReviews = sliceService.findReviewsV1(menuType, menuId, mealId, pageable, lastReviewId, customUserDetails); return BaseResponse.success(myReviews); diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index 47c550ee..03337dd9 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -132,7 +132,7 @@ public void updateReview(CustomUserDetails userDetails, Long reviewId, throw new BaseException(REVIEW_PERMISSION_DENIED); } - review.update(request.content(), request.mainRating()); + review.update(request.content(), request.mainRating(),request.amountRating(),request.tasteRating()); } public void deleteReview(CustomUserDetails userDetails, Long reviewId) { diff --git a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java index bc4bd390..51ae0a9f 100644 --- a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java +++ b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java @@ -11,6 +11,7 @@ import ssu.eatssu.domain.menu.persistence.MealRepository; import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.review.dto.ReviewDetail; +import ssu.eatssu.domain.review.dto.ReviewDetailV1; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.slice.dto.SliceResponse; @@ -22,6 +23,7 @@ import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.logging.Logger; import java.util.stream.Collectors; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; @@ -50,6 +52,31 @@ public SliceResponse findMyReviews( return convertToMyReviewDetail(sliceReviews); } + public SliceResponse findReviewsV1(MenuType menuType, + Long menuId, + Long mealId, + Pageable pageable, + Long lastReviewId, + CustomUserDetails userDetails) { + Slice sliceReviews = null; + if (menuType == MenuType.FIXED) { + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + sliceReviews = reviewRepository.findAllByMenuOrderByIdDesc(menu, lastReviewId, + pageable); + } + + if (menuType == MenuType.VARIABLE) { + Meal meal = mealRepository.findById(mealId) + .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + sliceReviews = reviewRepository.findAllByMealOrderByIdDesc(meal, lastReviewId, + pageable); + } + + Long userId = (userDetails != null) ? userDetails.getId() : null; + return convertToReviewDetailV1(sliceReviews, userId); + } + public SliceResponse findReviews(MenuType menuType, Long menuId, Long mealId, @@ -72,9 +99,24 @@ public SliceResponse findReviews(MenuType menuType, } Long userId = (userDetails != null) ? userDetails.getId() : null; + assert sliceReviews != null; return convertToReviewDetail(sliceReviews, userId); } + private SliceResponse convertToReviewDetailV1(Slice sliceReviews, + Long userId) { + + List reviewDetails = sliceReviews.getContent().stream() + .map(review -> ReviewDetailV1.from(review, userId)) + .collect(Collectors.toList()); + + return SliceResponse.builder() + .numberOfElements(sliceReviews.getNumberOfElements()) + .hasNext(sliceReviews.hasNext()) + .dataList(reviewDetails) + .build(); + } + private SliceResponse convertToReviewDetail(Slice sliceReviews, Long userId) { List reviewDetails = sliceReviews.getContent().stream() From 1934cba63428fb9b980ba20632fbecdf953164b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Wed, 1 Oct 2025 22:33:30 +0900 Subject: [PATCH 292/399] =?UTF-8?q?refactor:=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=97=90=20=EA=B2=80=EC=A6=9D=EC=9E=90=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20(#256)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../domain/review/dto/CreateMealReviewRequest.java | 4 ++++ .../domain/review/dto/CreateMenuReviewRequest.java | 11 +++++++++-- .../review/presentation/ReviewControllerV2.java | 5 +++-- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java index d510ca1a..c1bf0ae1 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMealReviewRequest.java @@ -1,6 +1,8 @@ package ssu.eatssu.domain.review.dto; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; import lombok.AllArgsConstructor; import lombok.Getter; import ssu.eatssu.domain.menu.entity.Meal; @@ -18,6 +20,8 @@ public class CreateMealReviewRequest { @Schema(description = "식단 식별자", example = "123") private Long mealId; @Schema(description = "평점", example = "4") + @Min(1) + @Max(5) private Integer rating; private List menuLikes; @Schema(description = "한줄평", example = "맛있어용") diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java index 2e922cf0..c3702bfc 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java @@ -2,6 +2,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -19,10 +20,16 @@ public class CreateMenuReviewRequest { @Schema(description = "메뉴 식별자", example = "123") private Long menuId; @Schema(description = "평점-메인", example = "4") + @Min(1) + @Max(5) private Integer mainRating; - @Schema(description = "평점-맛", example = "4") - private Integer amountRating; @Schema(description = "평점-양", example = "4") + @Min(1) + @Max(5) + private Integer amountRating; + @Schema(description = "평점-맛", example = "4") + @Min(1) + @Max(5) private Integer tasteRating; @Max(150) @Schema(description = "한줄평", example = "맛있어용") diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java index 4efe696e..fb8590ed 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java @@ -8,6 +8,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springdoc.core.annotations.ParameterObject; import org.springframework.data.domain.PageRequest; @@ -56,7 +57,7 @@ public class ReviewControllerV2 { }) @PostMapping("/meal") public BaseResponse createMealReview( - @RequestBody CreateMealReviewRequest createMealReviewRequest, + @Valid @RequestBody CreateMealReviewRequest createMealReviewRequest, @AuthenticationPrincipal CustomUserDetails customUserDetails) { reviewServiceV2.createMealReview(customUserDetails, createMealReviewRequest); return BaseResponse.success(); @@ -205,7 +206,7 @@ public BaseResponse> getMenuReviewList( @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), }) @PostMapping("/menu") - public BaseResponse createMenuReview(@RequestBody CreateMenuReviewRequest createMenuReviewRequest, + public BaseResponse createMenuReview(@Valid @RequestBody CreateMenuReviewRequest createMenuReviewRequest, @AuthenticationPrincipal CustomUserDetails customUserDetails) { reviewServiceV2.createMenuReview(customUserDetails, createMenuReviewRequest); return BaseResponse.success(); From b74603053ebfdd394f982a4971f699b2b0b486e2 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Sun, 5 Oct 2025 07:56:06 +0900 Subject: [PATCH 293/399] =?UTF-8?q?fix:=20=ED=95=84=ED=84=B0=EB=A7=81=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20contains->Pattern=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=A0=84=EB=A9=B4=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?(#258)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 필터링 로직 contains->Pattern으로 로직 전면 수정 * refactor: gemini 리뷰 반영 --- .../domain/review/utils/MenuFilterUtil.java | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java b/src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java index e705a7e4..8c23f44f 100644 --- a/src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java +++ b/src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java @@ -1,39 +1,39 @@ package ssu.eatssu.domain.review.utils; +import java.util.Arrays; import java.util.Set; import java.util.regex.Pattern; public class MenuFilterUtil { + private static final Set EXCLUDED_KEYWORDS = Set.of( "작은밥", "쌀밥", "잡곡밥", "찰흑미밥", "귀리밥", "백미밥", "깍두기", "열무김치", "포기김치", "맛김치", "배추김치", "단무지", "오이피클", "야쿠르트", "요구르트", "우동국물" ); + private static final Pattern SAUCE_PATTERN = Pattern.compile(".*소스.*"); + private static final Pattern SINGLE_KIMCHI_PATTERN = Pattern.compile("(^|\\s)김치($|\\s)"); + private static final Pattern SINGLE_BAP_PATTERN = Pattern.compile("(^|\\s)밥($|\\s)"); public static boolean isExcludedFromReview(String menuName) { if (menuName == null || menuName.isBlank()) return true; - menuName = menuName.trim(); - for (String keyword : EXCLUDED_KEYWORDS) { - if (menuName.contains(keyword)) { - return true; - } - } - - if (menuName.contains("밥") - && !menuName.contains("자장밥") - && !menuName.contains("볶음밥") - && !menuName.contains("비빔밥")) { - return true; - } - - if (menuName.contains("김치") - && !menuName.contains("김치볶음밥")) { - return true; - } - - return SAUCE_PATTERN.matcher(menuName).matches(); + String[] items = menuName.split("[+,&/\\s]+"); + + return Arrays.stream(items) + .map(String::trim) + .filter(s -> !s.isBlank()) + .allMatch(MenuFilterUtil::isExcludedSingle); + } + + private static boolean isExcludedSingle(String name) { + if (EXCLUDED_KEYWORDS.contains(name)) return true; + + if (SINGLE_KIMCHI_PATTERN.matcher(name).find()) return true; + if (SINGLE_BAP_PATTERN.matcher(name).find()) return true; + + return SAUCE_PATTERN.matcher(name).matches(); } } From eceda69664cc6b2d49fbb6fec1cbb169c7b71c91 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Sun, 12 Oct 2025 23:10:15 +0900 Subject: [PATCH 294/399] =?UTF-8?q?fix:=20=EB=A6=AC=EB=B7=B0=20v2=20menu?= =?UTF-8?q?=20=EC=9E=91=EC=84=B1=EC=97=90=20=EB=8C=80=ED=95=9C=20api=20dto?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20(#261)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 리뷰 v2 menu에 대한 api dto 수정 * chore: 스웨거 스키마 수정 * chore: gemini 코드리뷰 반영 --- .../review/dto/CreateMenuReviewRequestV2.java | 39 +++++++++++++++++++ .../presentation/ReviewControllerV2.java | 5 ++- .../review/service/ReviewServiceV2.java | 20 +++++----- 3 files changed, 51 insertions(+), 13 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequestV2.java diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequestV2.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequestV2.java new file mode 100644 index 00000000..9041e548 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequestV2.java @@ -0,0 +1,39 @@ +package ssu.eatssu.domain.review.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import lombok.AllArgsConstructor; +import lombok.Getter; +import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.user.entity.User; + +import java.util.List; + +@Schema(title = "menu에 대한 리뷰 작성 (리뷰v2)") +@Getter +@AllArgsConstructor +public class CreateMenuReviewRequestV2 { + @Schema(description = "평점", example = "5") + @Min(1) + @Max(5) + private Integer rating; + + private MenuLikeRequest menuLike; + + @Schema(description = "한줄평", example = "이 메뉴 진짜 맛있어요!") + private String content; + + @Schema(description = "리뷰 이미지 URL 리스트", example = "[\"imgurl1\", \"imgurl2\"]") + private List imageUrls; + + public Review toReviewEntity(User user, Menu menu) { + return Review.builder() + .user(user) + .menu(menu) + .content(content) + .rating(rating) + .build(); + } +} diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java index fb8590ed..dc25bda0 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java @@ -29,6 +29,7 @@ import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; import ssu.eatssu.domain.review.dto.CreateMenuReviewRequest; +import ssu.eatssu.domain.review.dto.CreateMenuReviewRequestV2; import ssu.eatssu.domain.review.dto.MealReviewResponse; import ssu.eatssu.domain.review.dto.MealReviewsV2Response; import ssu.eatssu.domain.review.dto.MenuReviewsV2Response; @@ -206,9 +207,9 @@ public BaseResponse> getMenuReviewList( @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), }) @PostMapping("/menu") - public BaseResponse createMenuReview(@Valid @RequestBody CreateMenuReviewRequest createMenuReviewRequest, + public BaseResponse createMenuReview(@Valid @RequestBody CreateMenuReviewRequestV2 createMenuReviewRequestV2, @AuthenticationPrincipal CustomUserDetails customUserDetails) { - reviewServiceV2.createMenuReview(customUserDetails, createMenuReviewRequest); + reviewServiceV2.createMenuReview(customUserDetails, createMenuReviewRequestV2); return BaseResponse.success(); } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 89fb03d6..28597926 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -16,7 +16,7 @@ import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; -import ssu.eatssu.domain.review.dto.CreateMenuReviewRequest; +import ssu.eatssu.domain.review.dto.CreateMenuReviewRequestV2; import ssu.eatssu.domain.review.dto.MealReviewResponse; import ssu.eatssu.domain.review.dto.MealReviewsV2Response; import ssu.eatssu.domain.review.dto.MenuIdNameDto; @@ -28,7 +28,6 @@ import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; import ssu.eatssu.domain.review.dto.ValidMenuForViewResponse; import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.review.entity.ReviewImage; import ssu.eatssu.domain.review.repository.ReviewImageRepository; import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.review.utils.MenuFilterUtil; @@ -101,29 +100,28 @@ public void createMealReview(CustomUserDetails userDetails, CreateMealReviewRequ * menu에 대한 리뷰 작성 */ @Transactional - public void createMenuReview(CustomUserDetails userDetails, CreateMenuReviewRequest request) { + public void createMenuReview(CustomUserDetails userDetails, CreateMenuReviewRequestV2 request) { User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Menu menu = menuRepository.findById(request.getMenuId()) + Menu menu = menuRepository.findById(request.getMenuLike().getMenuId()) .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); Review review = request.toReviewEntity(user, menu); review.addReviewMenuLike(menu, request.getMenuLike().getIsLike()); + request.getImageUrls().forEach(review::addReviewImage); reviewRepository.save(review); - ReviewImage reviewImage = new ReviewImage(review, request.getImageUrl()); - reviewImageRepository.save(reviewImage); menu.addReview(review); eventPublisher.publishEvent(LogEvent.of( String.format("MenuReview created: reviewId=%d, menuId=%d, userId=%d, isLike=%s, imageUrl=%s", - review.getId(), - menu.getId(), - user.getId(), - request.getMenuLike().getIsLike(), - request.getImageUrl()) + review.getId(), + menu.getId(), + user.getId(), + request.getMenuLike().getIsLike(), + request.getImageUrls().size()) )); } From 98a7d829eb1442515a8ca7fb3f09b01518ba5ed1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Wed, 22 Oct 2025 16:56:57 +0900 Subject: [PATCH 295/399] =?UTF-8?q?feat:=20=EC=8A=A4=EC=9B=A8=EA=B1=B0=20?= =?UTF-8?q?=EA=B2=BD=EB=A1=9C=20=EC=88=98=EC=A0=95=20(#269)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- src/main/resources/application-dev.yml | 2 +- src/main/resources/application-prod.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 20b92233..c328707f 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -63,7 +63,7 @@ slack: #Swagger swagger: - url: https://dev.eat-ssu.store + url: ${EATSSU_DEV_DOMAIN} description: Test Server Swagger API springdoc: diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 3786480b..945f7fa8 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -63,7 +63,7 @@ slack: #Swagger swagger: - url: https://eat-ssu.store + url: ${EATSSU_PROD_DOMAIN} description: Prod-Server url springdoc: From f7d632f82e34327f2a7704095edcbfe4bc4dcdd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Wed, 22 Oct 2025 17:08:27 +0900 Subject: [PATCH 296/399] =?UTF-8?q?fix:=20=EB=B0=B0=ED=8F=AC=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=EC=88=98=EC=A0=95=20(#272)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .github/workflows/deploy.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a78cf57e..0b2f5133 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -93,6 +93,7 @@ jobs: -e EATSSU_AWS_ACCESS_KEY_PROD="${{ secrets.EATSSU_AWS_ACCESS_KEY_PROD }}" \ -e EATSSU_AWS_SECRET_KEY_PROD="${{ secrets.EATSSU_AWS_SECRET_KEY_PROD }}" \ -e EATSSU_SLACK_TOKEN="${{ secrets.EATSSU_SLACK_TOKEN }}" \ + -e EATSSU_PROD_DOMAIN="${{ secrets.EATSSU_PROD_DOMAIN }}" \ ${{ secrets.DOCKER_REPO }}/eatssu-prod sudo docker image prune -f @@ -120,5 +121,6 @@ jobs: -e EATSSU_AWS_ACCESS_KEY_DEV="${{ secrets.EATSSU_AWS_ACCESS_KEY_DEV }}" \ -e EATSSU_AWS_SECRET_KEY_DEV="${{ secrets.EATSSU_AWS_SECRET_KEY_DEV }}" \ -e EATSSU_SLACK_TOKEN="${{ secrets.EATSSU_SLACK_TOKEN }}" \ + -e EATSSU_DEV_DOMAIN="${{ secrets.EATSSU_DEV_DOMAIN }}" \ ${{ secrets.DOCKER_REPO }}/eatssu-dev sudo docker image prune -f From 1de36d397226a67737a623461b30dd91e6e978f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Mon, 27 Oct 2025 17:14:43 +0900 Subject: [PATCH 297/399] =?UTF-8?q?fix:=20=EC=8B=A0=EA=B3=A0=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=EC=8A=AC=EB=9E=99=EB=B4=87=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0=20&=20=EB=8B=89=EB=84=A4=EC=9E=84=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?(#274)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: @Size 어노테이션 수정 * fix: 신고하기 슬랙봇 수정 * feat: 닉네임 생성 로직 변경 * refactor: 닉네임 알고리즘 변경 * feat: 닉네임 검증 로직 추가 * test: 테스트 코드 작성 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../domain/auth/service/OAuthService.java | 3 +- .../domain/auth/util/RandomNicknameUtil.java | 45 +++++++++ .../review/dto/CreateMenuReviewRequest.java | 3 +- .../review/dto/ReviewCreateRequest.java | 3 +- .../review/dto/ReviewUpdateRequest.java | 5 +- .../review/dto/UpdateMealReviewRequest.java | 3 +- .../review/dto/UploadReviewRequest.java | 3 +- .../slack/entity/SlackMessageFormat.java | 17 ++-- .../user/presentation/UserController.java | 12 +-- .../domain/user/service/UserService.java | 33 +++---- .../domain/user/util/NicknameValidator.java | 58 ++++++++++++ .../handler/response/BaseResponseStatus.java | 12 +++ .../user/util/NicknameValidatorTest.java | 92 +++++++++++++++++++ 13 files changed, 249 insertions(+), 40 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/auth/util/RandomNicknameUtil.java create mode 100644 src/main/java/ssu/eatssu/domain/user/util/NicknameValidator.java create mode 100644 src/test/java/ssu/eatssu/domain/user/util/NicknameValidatorTest.java diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java index 96338a6e..7c263e70 100644 --- a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java @@ -13,6 +13,7 @@ import ssu.eatssu.domain.auth.entity.AppleAuthenticator; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.JwtTokenProvider; +import ssu.eatssu.domain.auth.util.RandomNicknameUtil; import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; @@ -27,8 +28,6 @@ @RequiredArgsConstructor public class OAuthService { - private static final String AUTHORIZATION_HEADER = "Authorization"; - private static final String BEARER_TYPE = "Bearer"; private final UserService userService; private final UserRepository userRepository; private final AppleAuthenticator appleAuthenticator; diff --git a/src/main/java/ssu/eatssu/domain/auth/util/RandomNicknameUtil.java b/src/main/java/ssu/eatssu/domain/auth/util/RandomNicknameUtil.java new file mode 100644 index 00000000..38865501 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/auth/util/RandomNicknameUtil.java @@ -0,0 +1,45 @@ +package ssu.eatssu.domain.auth.util; + +import org.springframework.stereotype.Component; + +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; + +@Component +public class RandomNicknameUtil { + + private static final String[] PREFIX = { + "덜익은", "잘익은", "타버린", "밍밍한", "짭짤한", "달달한", "씁쓸한", "매콤한", "얼큰한", "구수한", + "새콤한", "상큼한", "고소한", "담백한", "느끼한", "촉촉한", "바삭한", "쫄깃한", "꾸덕한", "진한", + "깔끔한", "시원한", "은은한", "중독적인", "화끈한", "감칠한", "개운한", "살짝탄", "부드러운", "향긋한", + "자극적인", "산뜻한", "짙은", "진득한", "기름진", "촉촉한", "살짝매운", "은근한", "쌉쌀한", "따뜻한", + "따끈한", "시큼한", "고급진", "정겨운", "친숙한", "투박한", "소박한", "짠내나는", "심심한", "묵직한", + "포근한", "통통한", "말랑한", "폭신한", "몽글한", "보들한", "꼬숩한", "달콤한", "쫀득한", "도톰한", + "부들한", "귀여운", "탱글한", "포슬한", "말캉한", "보송한", "탱탱한", "보드라운", "살짝단", "순한", + "푸근한", "따스한", "도리도리한", "통실한", "쫄깃짠", "말랑짠", "꼬들한", "탱글짠", "보드짠", "포근짠", + "귀염한", "소프트한", "도톰짠", "살포시한", "오동통한", "말랑짭짤", "탱탱짭조름", "쫀쫀한", "통통짭짤", "귀엽짭짤", + "말캉짭짤", "부들짭조름", "포슬짭조름", "도톰짭짤", "몽글짭조름", "탱글달달", "보들짭조름", "통실짭짤", "말캉달달", "보송짭짤" + }; + + private static final String[] MENU_NAME = { + "등심돈가스","콥샐러드","팟타이","김치찌개","단호박죽","김치볶음밥","미소장국","총각김치","제육덮밥","단무지", + "볶음김치","야채피클","나주곰탕","갈비탕","동태전","떡갈비조림","칠리탕수육","소고기국밥","콩나물밥","고구마맛탕", + "계란찜","한식잡채","치킨너겟","타코야끼","비엔나볶음","떡볶이","두부장국","동지죽","감귤","야채튀김", + "미니우동","챠슈덮밥","가츠동","새우튀김","탕수육강정","두부조림","부추전","검정콩밥","망고샐러드","비빔만두", + "비빔밥","닭볶음탕","수수밥","쟁반짜장","깍두기","볶음김치","연근조림","멸치볶음","오이생채","감자조림", + "순대국밥","핫도그","소떡소떡","만두라면","찰흑미밥","차조밥","해물잡채","장어덮밥","비빔국수","김말이", + "닭곰탕","우불고기","딸기쿠키","치킨텐더","냉메밀국수","가쓰오장국","간짜장밥","물만두국","오이피클","물만두찜", + "카레라이스","얼큰김치국","군만두","연두부","가자미튀김","양장피","비빔쫄면","만두전골","비빔막국수","버섯불고기", + "취나물밥","곰국","닭봉튀김","피자춘권","오징어튀김","육개장","콩나물국","새우까스","낙지비빔밥","도토리묵", + "차돌짬뽕","목살갈비찜","들기름김","마라탕","간장찜닭","미니약과","파계란국","야끼소바","치즈고로케","설렁탕" + }; + + public String generate() { + ThreadLocalRandom random = ThreadLocalRandom.current(); + + String prefix = PREFIX[random.nextInt(PREFIX.length)]; + String category = MENU_NAME[random.nextInt(MENU_NAME.length)]; + + return prefix + category; + } +} diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java index c3702bfc..c59d089c 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequest.java @@ -3,6 +3,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.Size; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -31,7 +32,7 @@ public class CreateMenuReviewRequest { @Min(1) @Max(5) private Integer tasteRating; - @Max(150) + @Size(max = 150) @Schema(description = "한줄평", example = "맛있어용") private String content; diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java index 3ef1fa59..5190935a 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewCreateRequest.java @@ -2,6 +2,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Size; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -27,7 +28,7 @@ public class ReviewCreateRequest { @Schema(description = "평점-맛", example = "4") private Integer tasteRating; - @Max(150) + @Size(max = 150) @Schema(description = "한줄평", example = "맛있어용") private String content; diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java index fd2b6565..9516bf4c 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewUpdateRequest.java @@ -2,6 +2,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Size; @Schema(title = "리뷰 수정(글)") public record ReviewUpdateRequest( @@ -15,9 +16,9 @@ public record ReviewUpdateRequest( @Schema(description = "평점-맛", example = "4") Integer tasteRating, - @Max(150) + @Size(max = 150) @Schema(description = "한줄평", example = "맛있어용") String content ) { -} \ No newline at end of file +} diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java index dce5e9ad..7802b39a 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/UpdateMealReviewRequest.java @@ -2,6 +2,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Getter; @@ -14,7 +15,7 @@ public class UpdateMealReviewRequest { @Schema(description = "평점", example = "4") private Integer rating; private List menuLikes; - @Max(150) + @Size(max = 150) @Schema(description = "한줄평", example = "맛있어용") private String content; } diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java index 244852b0..9963d290 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java @@ -2,6 +2,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Size; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -25,7 +26,7 @@ public class UploadReviewRequest { @Schema(description = "평점-양", example = "4") private Integer amountRating; - @Max(150) + @Size(max = 150) @Schema(description = "한줄평", example = "맛있어용") private String content; diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java index adb4cb1d..38b0387e 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java @@ -33,17 +33,22 @@ public static String sendReport(Report report) { - 리뷰 작성자 ID : {3} - 리뷰 작성자 닉네임 : {4} - 리뷰 메뉴: {5} - - 리뷰 내용: {6} - - 리뷰 날짜: {7} + - 리뷰 식단 ID: {6} + - 리뷰 내용: {7} + - 리뷰 날짜: {8} *신고 INFO* - - 신고사유: {8} - - 신고내용: {9} - - 신고 날짜: {10} + - 신고사유: {9} + - 신고내용: {10} + - 신고 날짜: {11} =================== """ ); + + String menuName = review.getMenu() != null ? review.getMenu().getName() : ""; + String mealId = review.getMeal() != null ? String.valueOf(review.getMeal().getId()) : ""; + Object[] args = {reporter.getId(), reporter.getNickname(), review.getId(), review.getUser().getId(), - review.getUser().getNickname(), review.getMenu().getName(), review.getContent(), + review.getUser().getNickname(), menuName, mealId, review.getContent(), review.getModifiedDate().toString(), report.getReportType().getDescription(), report.getContent(), report.getCreatedDate()}; return messageFormat.format(args); diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 65338a03..5fda7d6b 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -67,17 +67,17 @@ public BaseResponse validateDuplicatedEmail( return BaseResponse.success(userService.validateDuplicatedEmail(email)); } - @Operation(summary = "닉네임 중복 체크", description = """ - 닉네임 중복 체크 API 입니다.

- 중복되지 않은 닉네임이면 true 를 반환합니다 + @Operation(summary = "닉네임 중복 및 유효성 체크", description = """ + 닉네임 중복 및 유효성 체크 API 입니다.

+ 유효하고 중복되지 않은 닉네임이면 true 를 반환합니다 """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "중복되지 않은 닉네임") + @ApiResponse(responseCode = "200", description = "유효하고 중복되지 않은 닉네임") }) @GetMapping("/validate/nickname") - public BaseResponse validateDuplicatedNickname(@Parameter(description = "닉네임") + public BaseResponse validateNickname(@Parameter(description = "닉네임") @RequestParam(value = "nickname") String nickname) { - return BaseResponse.success(userService.validateDuplicatedNickname(nickname)); + return BaseResponse.success(userService.validateNickname(nickname)); } @Operation(summary = "닉네임 수정", description = "닉네임 수정 API 입니다.") diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index aa5332ca..a9020694 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -9,8 +9,8 @@ import org.springframework.stereotype.Service; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.domain.auth.util.RandomNicknameUtil; import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.user.config.UserProperties; import ssu.eatssu.domain.user.department.entity.College; import ssu.eatssu.domain.user.department.entity.Department; import ssu.eatssu.domain.user.department.persistence.CollegeRepository; @@ -23,11 +23,11 @@ import ssu.eatssu.domain.user.dto.UpdateDepartmentRequest; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; +import ssu.eatssu.domain.user.util.NicknameValidator; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.log.event.LogEvent; import java.util.List; -import java.util.UUID; import static ssu.eatssu.global.handler.response.BaseResponseStatus.DUPLICATE_NICKNAME; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_DEPARTMENT; @@ -44,13 +44,14 @@ public class UserService { private final UserRepository userRepository; private final PasswordEncoder passwordEncoder; private final DepartmentRepository departmentRepository; - private final UserProperties userProperties; private final CollegeRepository collegeRepository; private final ApplicationEventPublisher eventPublisher; + private final RandomNicknameUtil randomNicknameUtil; + private final NicknameValidator nicknameValidator; public User join(String email, OAuthProvider provider, String providerId) { String credentials = createCredentials(provider, providerId); - String nickname = createNickname(); + String nickname = randomNicknameUtil.generate(); User user = User.create(email, nickname, provider, providerId, credentials); return userRepository.save(user); } @@ -59,7 +60,10 @@ public void updateNickname(CustomUserDetails userDetails, NicknameUpdateRequest User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - if (isForbiddenNickname(request.nickname()) || userRepository.existsByNickname(request.nickname())) { + nicknameValidator.validateNickname(request.nickname()); + + // 닉네임 생성 직전 다른 사람이 생성한 경우. + if (userRepository.existsByNickname(request.nickname())) { throw new BaseException(DUPLICATE_NICKNAME); } @@ -97,17 +101,11 @@ public Boolean validateDuplicatedEmail(String email) { return !userRepository.existsByEmail(email); } - public Boolean validateDuplicatedNickname(String nickname) { - if (isForbiddenNickname(nickname)) { - return false; - } - return !userRepository.existsByNickname(nickname); - } + public Boolean validateNickname(String nickname) { - public String createNickname() { - String uuid = UUID.randomUUID().toString(); - String shortUUID = uuid.substring(0, 4); - return "user-" + shortUUID; + nicknameValidator.validateNickname(nickname); + + return !userRepository.existsByNickname(nickname); } private String createCredentials(OAuthProvider provider, String providerId) { @@ -149,9 +147,4 @@ public List getDepartmentList(Long collegeId) { .build()) .toList(); } - - private boolean isForbiddenNickname(String nickname) { - return userProperties.getForbiddenNicknames().stream() - .anyMatch(forbidden -> forbidden.equalsIgnoreCase(nickname)); - } } diff --git a/src/main/java/ssu/eatssu/domain/user/util/NicknameValidator.java b/src/main/java/ssu/eatssu/domain/user/util/NicknameValidator.java new file mode 100644 index 00000000..e21a2232 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/user/util/NicknameValidator.java @@ -0,0 +1,58 @@ +package ssu.eatssu.domain.user.util; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import ssu.eatssu.domain.user.config.UserProperties; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponseStatus; + +@Component +@RequiredArgsConstructor +public class NicknameValidator { + + private final UserProperties userProperties; + + public void validateNickname(String nickname){ + + // 금지된 닉네임 + if(userProperties.getForbiddenNicknames().stream() + .anyMatch(forbidden -> forbidden.equalsIgnoreCase(nickname))){ + throw new BaseException(BaseResponseStatus.FORBIDDEN_NICKNAME); + } + + // 부적절한 길이 + if(nickname.length() <= 0 || nickname.length() > 16){ + throw new BaseException(BaseResponseStatus.INVALID_NICKNAME_LENGTH); + } + + // 숫자로만 구성된 닉네임 + if (nickname.matches("^[0-9]+$")) { + throw new BaseException(BaseResponseStatus.NUMBER_ONLY_NICKNAME); + } + + // 연속된 공백 + if (nickname.matches(".*\\s{2,}.*")){ + throw new BaseException(BaseResponseStatus.CONSECUTIVE_SPACES_NICKNAME); + } + + // 연속된 하이폰(-) + if (nickname.matches(".*-{2,}.*")){ + throw new BaseException(BaseResponseStatus.CONSECUTIVE_HYPHEN_NICKNAME); + } + + // 한글 영어가 아닌 것으로 시작 + if (nickname.matches("^[^A-Za-z가-힣].*")) { + throw new BaseException(BaseResponseStatus.INVALID_START_OF_NICKNAME); + } + + // 한글 영어가 아닌 것으로 마무리 + if (nickname.matches(".*[^A-Za-z가-힣]$")) { + throw new BaseException(BaseResponseStatus.INVALID_END_OF_NICKNAME); + } + + // 한글, 숫자, 영어, 하이폰(-), 공백을 제외한 것이 포함됨. + if (!nickname.matches("^[A-Za-z0-9가-힣- ]+$")){ + throw new BaseException(BaseResponseStatus.INVALID_SYMBOL_NICKNAME); + } + } +} diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index eb418ff1..e6a6d76a 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -33,6 +33,18 @@ public enum BaseResponseStatus { MISSING_USER_DEPARTMENT(false, HttpStatus.BAD_REQUEST, 40013, "사용자의 학과 정보가 없습니다."), RECENT_REPORT_ON_REVIEW(false, HttpStatus.BAD_REQUEST, 40014, "24시간 이내에 동일 댓글을 신고했습니다."), + /** + * 닉네임 관련 + */ + NUMBER_ONLY_NICKNAME(false,HttpStatus.BAD_REQUEST,40015,"숫자로만 이루어진 닉네임은 사용할 수 없습니다."), + CONSECUTIVE_SPACES_NICKNAME(false,HttpStatus.BAD_REQUEST,40016,"연속된 공백은 사용할 수 없습니다."), + CONSECUTIVE_HYPHEN_NICKNAME(false,HttpStatus.BAD_REQUEST,40017,"연속된 하이폰(-)은 사용할 수 없습니다."), + INVALID_START_OF_NICKNAME(false,HttpStatus.BAD_REQUEST,40018,"첫 글자는 한글, 영문, 숫자만 사용할 수 있습니다."), + INVALID_END_OF_NICKNAME(false,HttpStatus.BAD_REQUEST,40019,"마지막 글자는 한글, 영문, 숫자만 사용할 수 있습니다."), + INVALID_SYMBOL_NICKNAME(false,HttpStatus.BAD_REQUEST,40020,"한글, 영문, 숫자, 공백, 하이폰(-)만 사용할 수 있습니다."), + INVALID_NICKNAME_LENGTH(false,HttpStatus.BAD_REQUEST,40021,"닉네임은 1자 이상 16자 이하로 입력해 주세요."), + FORBIDDEN_NICKNAME(false,HttpStatus.BAD_REQUEST,40022,"금지된 닉네임입니다. ex) EAT-SSU, 이슈, 잇슈"), + /** * 401 UNAUTHORIZED 권한없음(인증 실패) */ diff --git a/src/test/java/ssu/eatssu/domain/user/util/NicknameValidatorTest.java b/src/test/java/ssu/eatssu/domain/user/util/NicknameValidatorTest.java new file mode 100644 index 00000000..22884eaa --- /dev/null +++ b/src/test/java/ssu/eatssu/domain/user/util/NicknameValidatorTest.java @@ -0,0 +1,92 @@ +package ssu.eatssu.domain.user.util; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import ssu.eatssu.domain.user.config.UserProperties; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponseStatus; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; + +class NicknameValidatorTest { + + private NicknameValidator nicknameValidator = new NicknameValidator(new UserProperties()); + + @ParameterizedTest + @ValueSource(strings = {"유효한 닉네임","available nic","가능한-닉네임","유-효-한-닉-네-임","유 효 한 닉 1 2 a"}) + void 유효한_이름을_입력하면_예외가_발생하지_않는다(String input) { + // when & then + assertDoesNotThrow(()-> nicknameValidator.validateNickname(input)); + } + + @ParameterizedTest + @ValueSource(strings = {"","testtesttesttesttesttesttest"}) + void 길이가_1자_이상_16자_이하가_아닌_경우_예외가_발생한다(String input) { + // when & then + assertThatThrownBy(()->nicknameValidator.validateNickname(input)) + .isInstanceOf(BaseException.class) + .extracting("status") + .isEqualTo(BaseResponseStatus.INVALID_NICKNAME_LENGTH); + } + + @ParameterizedTest + @ValueSource(strings = {"12","1234","532532","4444"}) + void 숫자로만_구성된_닉네임인_경우_예외가_발생한다(String input) { + // when & then + assertThatThrownBy(()->nicknameValidator.validateNickname(input)) + .isInstanceOf(BaseException.class) + .extracting("status") + .isEqualTo(BaseResponseStatus.NUMBER_ONLY_NICKNAME); + } + + @ParameterizedTest + @ValueSource(strings = {"이름 이름","q q","te st","t t t"}) + void 연속된_공백으로_구성된_닉네임인_경우_예외가_발생한다(String input) { + // when & then + assertThatThrownBy(()->nicknameValidator.validateNickname(input)) + .isInstanceOf(BaseException.class) + .extracting("status") + .isEqualTo(BaseResponseStatus.CONSECUTIVE_SPACES_NICKNAME); + } + + @ParameterizedTest + @ValueSource(strings = {"이름--이름","q--q","te--st","t--t--t"}) + void 연속된_하이폰으로_구성된_닉네임인_경우_예외가_발생한다(String input) { + // when & then + assertThatThrownBy(()->nicknameValidator.validateNickname(input)) + .isInstanceOf(BaseException.class) + .extracting("status") + .isEqualTo(BaseResponseStatus.CONSECUTIVE_HYPHEN_NICKNAME); + } + + @ParameterizedTest + @ValueSource(strings = {"0이름","0test","-test"," test"}) + void 한글_또는_영어로_시작하지_않는_닉네임인_경우_예외가_발생한다(String input) { + // when & then + assertThatThrownBy(()->nicknameValidator.validateNickname(input)) + .isInstanceOf(BaseException.class) + .extracting("status") + .isEqualTo(BaseResponseStatus.INVALID_START_OF_NICKNAME); + } + + @ParameterizedTest + @ValueSource(strings = {"이름0","test0","test-","test "}) + void 한글_또는_영어로_끝나지_않는_닉네임인_경우_예외가_발생한다(String input) { + // when & then + assertThatThrownBy(()->nicknameValidator.validateNickname(input)) + .isInstanceOf(BaseException.class) + .extracting("status") + .isEqualTo(BaseResponseStatus.INVALID_END_OF_NICKNAME); + } + + @ParameterizedTest + @ValueSource(strings = {"이름$이름","특수**^munza","포함^^입니다","test~~nick"}) + void 한글_영어_숫자_공백_하이폰을_제외한_특수문자를_포함하면_예외가_발생한다(String input) { + // when & then + assertThatThrownBy(()->nicknameValidator.validateNickname(input)) + .isInstanceOf(BaseException.class) + .extracting("status") + .isEqualTo(BaseResponseStatus.INVALID_SYMBOL_NICKNAME); + } +} From c7715f17c091fece9c97204df7e888b3d90706f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Mon, 27 Oct 2025 21:18:21 +0900 Subject: [PATCH 298/399] =?UTF-8?q?feat:=20=EC=9A=95=EC=84=A4,=20=EC=9A=B4?= =?UTF-8?q?=EC=98=81=EC=9E=90=20=ED=98=BC=EB=8F=99,=20=EB=B8=8C=EB=9E=9C?= =?UTF-8?q?=EB=93=9C=20=EC=9D=B4=EB=A6=84=20=ED=8F=AC=ED=95=A8=20=EB=8B=89?= =?UTF-8?q?=EB=84=A4=EC=9E=84=20=ED=95=84=ED=84=B0=EB=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20(#276)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 단독 브랜드명 사용/ 관리자 혼동 닉네임 검증 추가 * feat: 욕설 필터링 추가 * fix: 오타 정정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../domain/user/util/NicknameValidator.java | 74 +++++++++++++++++-- .../handler/response/BaseResponseStatus.java | 4 +- src/main/resources/application.yml | 35 --------- .../user/util/NicknameValidatorTest.java | 34 ++++++++- 4 files changed, 103 insertions(+), 44 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/user/util/NicknameValidator.java b/src/main/java/ssu/eatssu/domain/user/util/NicknameValidator.java index e21a2232..850e8108 100644 --- a/src/main/java/ssu/eatssu/domain/user/util/NicknameValidator.java +++ b/src/main/java/ssu/eatssu/domain/user/util/NicknameValidator.java @@ -2,22 +2,84 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; -import ssu.eatssu.domain.user.config.UserProperties; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; +import java.util.Set; +import java.util.regex.Pattern; + @Component @RequiredArgsConstructor public class NicknameValidator { - private final UserProperties userProperties; + private static final Set SERVICE_NAME_BRAND = Set.of( + "EAT-SSU", "EATSSU", "잇슈", "읻슈", "잍슈", "잇쓔", "잇쓲", "잇씨유", "잇슈우", "잇슈웅", + "eat-ssu", "eatssu", "eatsu", "e4tssu", "3at-ssu", "ea7-ssu", "e @t-ssu", "e.at.ssu", "e-a-t-s-s-u", "e_a_t_s_s_u", + "e a t ssu", "eat_ssu", "eatssu_", "eatssu123", "e @tssu", "ēat-ssu", "3atssu", "eat$u", "eat5su", "eats$u", + "eats-u", "E4T슈" + ); + + private static final Set ADMIN_LIKE_WORDS = Set.of( + "admin", "manager", "운영자", "관리자", "system" + ); + + private static final String PROFANITY_REGEX = + "[시씨씪슈쓔쉬쉽쒸쓉](?:[0-9]*|[0-9]+ *)[바발벌빠빡빨뻘파팔펄]|" + + "[섊좆좇졷좄좃좉졽썅춍봊]|" + + "[ㅈ조][0-9]*까|ㅅㅣㅂㅏㄹ?|ㅂ[0-9]*ㅅ|" + + "[ㅄᄲᇪᄺᄡᄣᄦᇠ]|" + + "[ㅅㅆᄴ][0-9]*[ㄲㅅㅆᄴㅂ]|" + + "[존좉좇][0-9 ]*나|" + + "[자보][0-9]+지|보빨|" + + "[봊봋봇봈볻봁봍] *[빨이]|" + + "[후훚훐훛훋훗훘훟훝훑][장앙]|" + + "[엠앰]창|애[미비]|애자|" + + "[가-탏탑-힣]색기|" + + "(?:[샊샛세쉐쉑쉨쉒객갞갟갯갰갴겍겎겏겤곅곆곇곗곘곜걕걖걗걧걨걬] *[끼키퀴])|" + + "새 *[키퀴]|" + + "[병븅][0-9]*[신딱딲]|" + + "미친[가-닣닥-힣]|[믿밑]힌|[염옘][0-9]*병|" + + "[샊샛샜샠섹섺셋셌셐셱솃솄솈섁섂섓섔섘]기|" + + "[섹섺섻쎅쎆쎇쎽쎾쎿섁섂섃썍썎썏][스쓰]|" + + "[지야][0-9]*랄|니[애에]미|" + + "갈[0-9]*보[^가-힣]|" + + "[뻐뻑뻒뻙뻨][0-9]*[뀨큐킹낑)]|" + + "꼬[0-9]*추|곧[0-9]*휴|" + + "[가-힣]슬아치|자[0-9]*박꼼|빨통|" + + "[사싸](?:이코|가지|[0-9]*까시)|" + + "육[0-9]*시[랄럴]|육[0-9]*실[알얼할헐]|" + + "즐[^가-힣]|찌[0-9]*(?:질이|랭이)|" + + "찐[0-9]*따|찐[0-9]*찌버거|창[녀놈]|" + + "[가-힣]{2,}충[^가-힣]|[가-힣]{2,}츙|" + + "부녀자|화냥년|환[양향]년|호[0-9]*[구모]|" + + "조[선센][징]|조센|" + + "[쪼쪽쪾](?:[발빨]이|[바빠]리)|" + + "盧|무현|찌끄[레래]기|(?:하악){2,}|하[앍앜]|" + + "[낭당랑앙항남담람암함][ ]?[가-힣]+[띠찌]|" + + "느[금급]마|文在|在寅|" + + "(?<=[^\\n])[家哥]|속냐|" + + "[tT]l[qQ]kf|Wls|" + + "[ㅂ]신|[ㅅ]발|[ㅈ]밥"; + + private static final Pattern PROFANITY_PATTERN = Pattern.compile(PROFANITY_REGEX); + public void validateNickname(String nickname){ - // 금지된 닉네임 - if(userProperties.getForbiddenNicknames().stream() - .anyMatch(forbidden -> forbidden.equalsIgnoreCase(nickname))){ - throw new BaseException(BaseResponseStatus.FORBIDDEN_NICKNAME); + // 비속어 포함 닉네임 + if (PROFANITY_PATTERN.matcher(nickname).find()) { + throw new BaseException(BaseResponseStatus.PROFANITY_NICKNAME); + } + + // 서비스 브랜드명 포함 닉네임 + if(SERVICE_NAME_BRAND.stream().anyMatch(nickname::equalsIgnoreCase)){ + throw new BaseException(BaseResponseStatus.SERVICE_BRAND_NICKNAME); + } + + // 운영자, 관리자 혼동 닉네임 + if (ADMIN_LIKE_WORDS.stream() + .anyMatch(word -> nickname.toLowerCase().contains(word.toLowerCase()))) { + throw new BaseException(BaseResponseStatus.ADMIN_MANAGER_NICKNAME); } // 부적절한 길이 diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index e6a6d76a..6009d49f 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -43,7 +43,9 @@ public enum BaseResponseStatus { INVALID_END_OF_NICKNAME(false,HttpStatus.BAD_REQUEST,40019,"마지막 글자는 한글, 영문, 숫자만 사용할 수 있습니다."), INVALID_SYMBOL_NICKNAME(false,HttpStatus.BAD_REQUEST,40020,"한글, 영문, 숫자, 공백, 하이폰(-)만 사용할 수 있습니다."), INVALID_NICKNAME_LENGTH(false,HttpStatus.BAD_REQUEST,40021,"닉네임은 1자 이상 16자 이하로 입력해 주세요."), - FORBIDDEN_NICKNAME(false,HttpStatus.BAD_REQUEST,40022,"금지된 닉네임입니다. ex) EAT-SSU, 이슈, 잇슈"), + SERVICE_BRAND_NICKNAME(false,HttpStatus.BAD_REQUEST,40022,"서비스명/브랜드명 단독 닉네임은 사용할 수 없어요. ex) EAT-SSU, 이슈, 잇슈"), + ADMIN_MANAGER_NICKNAME(false,HttpStatus.BAD_REQUEST,40023,"관리자로 혼동될 수 있는 닉네임은 사용할 수 없어요. ex) admin, 운영자"), + PROFANITY_NICKNAME(false,HttpStatus.BAD_REQUEST,40024,"욕설, 비속어 등의 표현이 포함된 닉네임은 사용할 수 없어요."), /** * 401 UNAUTHORIZED 권한없음(인증 실패) diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index fb673485..5f59b7c3 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -3,38 +3,3 @@ spring: active: local config: import: optional:file:.env[.properties] - -user: - forbidden-nicknames: - - EAT-SSU - - EATSSU - - 잇슈 - - 읻슈 - - 잍슈 - - 잇쓔 - - 잇쓲 - - 잇씨유 - - 잇슈우 - - 잇슈웅 - - eat-ssu - - eatssu - - eatsu - - e4tssu - - 3at-ssu - - ea7-ssu - - "e @t-ssu" - - e.at.ssu - - e-a-t-s-s-u - - e_a_t_s_s_u - - "e a t ssu" - - eat_ssu - - eatssu_ - - eatssu123 - - "e @tssu" - - ēat-ssu - - 3atssu - - "eat$u" - - eat5su - - "eats$u" - - eats-u - - E4T슈 diff --git a/src/test/java/ssu/eatssu/domain/user/util/NicknameValidatorTest.java b/src/test/java/ssu/eatssu/domain/user/util/NicknameValidatorTest.java index 22884eaa..e7a4d14f 100644 --- a/src/test/java/ssu/eatssu/domain/user/util/NicknameValidatorTest.java +++ b/src/test/java/ssu/eatssu/domain/user/util/NicknameValidatorTest.java @@ -2,7 +2,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; -import ssu.eatssu.domain.user.config.UserProperties; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; @@ -11,7 +10,38 @@ class NicknameValidatorTest { - private NicknameValidator nicknameValidator = new NicknameValidator(new UserProperties()); + private NicknameValidator nicknameValidator = new NicknameValidator(); + + @ParameterizedTest + @ValueSource(strings = {"ㅅㅂ","뻐킹","미친사람"}) + void 비속어_포함_시_예외가_발생한다(String input) { + // when & then + assertThatThrownBy(()->nicknameValidator.validateNickname(input)) + .isInstanceOf(BaseException.class) + .extracting("status") + .isEqualTo(BaseResponseStatus.PROFANITY_NICKNAME); + } + + + @ParameterizedTest + @ValueSource(strings = {"잇슈","EAT-SSU","eatssu"}) + void 단독으로_브랜드명_사용_시_예외가_발생한다(String input) { + // when & then + assertThatThrownBy(()->nicknameValidator.validateNickname(input)) + .isInstanceOf(BaseException.class) + .extracting("status") + .isEqualTo(BaseResponseStatus.SERVICE_BRAND_NICKNAME); + } + + @ParameterizedTest + @ValueSource(strings = {"이슈 운영자","서버 관리자","admin입니다"}) + void 관리자로_혼동될_수_있는_단어를_포함하면_예외가_발생한다(String input) { + // when & then + assertThatThrownBy(()->nicknameValidator.validateNickname(input)) + .isInstanceOf(BaseException.class) + .extracting("status") + .isEqualTo(BaseResponseStatus.ADMIN_MANAGER_NICKNAME); + } @ParameterizedTest @ValueSource(strings = {"유효한 닉네임","available nic","가능한-닉네임","유-효-한-닉-네-임","유 효 한 닉 1 2 a"}) From 319451d4d35c5ce14cb2ba9097c7c24db1db316e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Wed, 29 Oct 2025 21:00:02 +0900 Subject: [PATCH 299/399] =?UTF-8?q?fix:=20=EC=BD=94=EB=93=9C=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=A0=90=EA=B2=80=20(#278)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 수정 사항 반영 * fix: 제미나이 수정 사항 반영 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../auth/presentation/OAuthController.java | 3 +-- .../report/presentation/ReportController.java | 3 ++- .../domain/slice/service/SliceService.java | 5 ++-- .../user/presentation/UserController.java | 25 +++++++++++++++++-- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java index d80b88fd..1ba3868f 100644 --- a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java @@ -54,8 +54,7 @@ public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest req 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "애플 회원가입/로그인 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "200", description = "애플 회원가입/로그인 성공") }) @PostMapping("/apple") public BaseResponse appleLogin(@Valid @RequestBody AppleLoginRequest request) { diff --git a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java index ccec0ac1..e760a02c 100644 --- a/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java +++ b/src/main/java/ssu/eatssu/domain/report/presentation/ReportController.java @@ -46,7 +46,8 @@ public BaseResponse getReportType() { @PostMapping("") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "리뷰 신고 성공", content = @Content(schema = @Schema(implementation = BaseResponse.class))), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 리뷰", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) public BaseResponse reportReview(@RequestBody ReportCreateRequest createReportRequest, @AuthenticationPrincipal CustomUserDetails customUserDetails) { diff --git a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java index 51ae0a9f..5e42051a 100644 --- a/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java +++ b/src/main/java/ssu/eatssu/domain/slice/service/SliceService.java @@ -26,8 +26,7 @@ import java.util.logging.Logger; import java.util.stream.Collectors; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; @Service @RequiredArgsConstructor @@ -68,7 +67,7 @@ public SliceResponse findReviewsV1(MenuType menuType, if (menuType == MenuType.VARIABLE) { Meal meal = mealRepository.findById(mealId) - .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); + .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); sliceReviews = reviewRepository.findAllByMealOrderByIdDesc(meal, lastReviewId, pageable); } diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 5fda7d6b..1b198be2 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -72,7 +72,17 @@ public BaseResponse validateDuplicatedEmail( 유효하고 중복되지 않은 닉네임이면 true 를 반환합니다 """) @ApiResponses(value = { - @ApiResponse(responseCode = "200", description = "유효하고 중복되지 않은 닉네임") + @ApiResponse(responseCode = "200", description = "유효하고 중복되지 않은 닉네임"), + @ApiResponse(responseCode = "400", description = "숫자로만 이루어진 닉네임", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "연속된 공백을 포함하는 닉네임", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "연속된 하이폰을 사용하는 닉네임", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "첫 글자가 한글,영문,숫자가 아닌 경우", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "마지막 글자가 한글,영문,숫자가 아닌 경우", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "한글,영문,숫자,공백,하이폰(-)이외의 문자를 쓴 경우", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "닉네임이 1자 이상 16이하가 아닌 경우", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "서비스명/브랜드명 단독 닉네임", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "관리자로 혼동될 수 있는 닉네임", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "욕설/비속어가 이름에 포함되는 경우", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("/validate/nickname") public BaseResponse validateNickname(@Parameter(description = "닉네임") @@ -83,7 +93,18 @@ public BaseResponse validateNickname(@Parameter(description = "닉네 @Operation(summary = "닉네임 수정", description = "닉네임 수정 API 입니다.") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "닉네임 수정 성공"), - @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "숫자로만 이루어진 닉네임", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "연속된 공백을 포함하는 닉네임", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "연속된 하이폰을 사용하는 닉네임", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "첫 글자가 한글,영문,숫자가 아닌 경우", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "마지막 글자가 한글,영문,숫자가 아닌 경우", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "한글,영문,숫자,공백,하이폰(-)이외의 문자를 쓴 경우", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "닉네임이 1자 이상 16이하가 아닌 경우", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "서비스명/브랜드명 단독 닉네임", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "관리자로 혼동될 수 있는 닉네임", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "400", description = "욕설/비속어가 이름에 포함되는 경우", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "409", description = "중복된 닉네임", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @PatchMapping("/nickname") public BaseResponse updateNickname( From d43711d0090f874cc7c888cd8b77ab420892dca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Wed, 29 Oct 2025 21:10:55 +0900 Subject: [PATCH 300/399] =?UTF-8?q?feat:=20=EB=8F=84=EB=8B=B4=20=EA=B0=80?= =?UTF-8?q?=EA=B2=A9=20=EC=9D=B8=EC=83=81=20(#281)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../java/ssu/eatssu/domain/restaurant/entity/Restaurant.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index 3bd2554f..6b86bc75 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -10,7 +10,7 @@ @Getter public enum Restaurant { - DODAM("DODAM", 6000), + DODAM("DODAM", 7000), DORMITORY("DORMITORY", 5500), FOOD_COURT("FOOD_COURT", null), SNACK_CORNER("SNACK_CORNER", null), @@ -32,4 +32,4 @@ public static Restaurant from(String restaurantName) { .findAny() .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_RESTAURANT)); } -} \ No newline at end of file +} From 3d033abfdb295a4910280ed6bbd890f67148e3ed Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Sat, 1 Nov 2025 22:45:03 +0900 Subject: [PATCH 301/399] =?UTF-8?q?fix:=20rating=20=EC=82=B0=EC=B6=9C?= =?UTF-8?q?=EB=B0=A9=EC=8B=9D=20meal=EC=97=90=20=ED=95=B4=EB=8B=B9?= =?UTF-8?q?=ED=95=98=EB=8A=94=20menu=20=EB=AA=A8=EC=95=84=EC=84=9C=20?= =?UTF-8?q?=EC=82=B0=EC=B6=9C=ED=95=98=EA=B2=8C=20=EB=B3=80=EA=B2=BD=20(#2?= =?UTF-8?q?83)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/review/dto/MealReviewResponse.java | 7 +++---- .../review/service/ReviewServiceV2.java | 19 +++++-------------- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java index 07d3ab40..b6eeca59 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java @@ -31,7 +31,7 @@ public class MealReviewResponse { private String writerNickname; @Schema(description = "평점", example = "4") - private Integer rating; + private Double rating; @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") private LocalDate writtenAt; @@ -60,7 +60,7 @@ public class MealReviewResponse { public static MealReviewResponse from(Review review, Long userId, - List validMenus) { + List validMenus,Double rating) { List imageUrls = new ArrayList<>(); review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); @@ -77,10 +77,9 @@ public static MealReviewResponse from(Review review, likedMenuIds.contains(valid.getMenuId()) )) .toList(); - MealReviewResponseBuilder builder = MealReviewResponse.builder() .reviewId(review.getId()) - .rating(review.getRating()) + .rating(rating) .writtenAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imageUrls(imageUrls) diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 28597926..190ff9f5 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -14,6 +14,7 @@ import ssu.eatssu.domain.menu.persistence.MealMenuRepository; import ssu.eatssu.domain.menu.persistence.MealRepository; import ssu.eatssu.domain.menu.persistence.MenuRepository; +import ssu.eatssu.domain.menu.service.MealRatingService; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; import ssu.eatssu.domain.review.dto.CreateMenuReviewRequestV2; @@ -63,6 +64,8 @@ public class ReviewServiceV2 { private final ReviewImageRepository reviewImageRepository; private final ApplicationEventPublisher eventPublisher; + private final MealRatingService mealRatingService; + /** * meal에 대한 리뷰 생성 */ @@ -215,12 +218,11 @@ public SliceResponse findMealReviewList(Long mealId, Long la Long userId = (userDetails != null) ? userDetails.getId() : null; - List mealReviewResponses = pageReviews.getContent() .stream() .map(review -> MealReviewResponse.from(review, - userId, validMenus)) + userId, validMenus,mealRatingService.getMainRatingAverage(review.getMeal().getId()))) .collect(Collectors.toList()); return SliceResponse.builder() @@ -325,18 +327,7 @@ public MealReviewsV2Response findMealReviews(Long mealId) { log.warn("No valid menus for review found in mealId={}", mealId); } - Double averageRating = Optional.ofNullable(reviews) - .orElse(Collections.emptyList()) - .stream() - .map(r -> { - Integer main = (r.getRatings() != null) ? r.getRatings() - .getMainRating() : null; - return (main != null) ? main : r.getRating(); - }) - .filter(Objects::nonNull) - .mapToInt(Integer::intValue) - .average() - .orElse(0.0); + Double averageRating = mealRatingService.getMainRatingAverage(meal.getId()); if (!reviews.isEmpty() && averageRating == 0.0) { log.warn("All reviews have null/invalid ratings for mealId={}", mealId); From ff19a42fb3dd48c7a80358f3ec5be77728a2de43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Sun, 2 Nov 2025 19:09:55 +0900 Subject: [PATCH 302/399] =?UTF-8?q?fix:=20=EC=B4=88=EC=84=B1=EC=9D=84=20?= =?UTF-8?q?=ED=97=88=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#285)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../java/ssu/eatssu/domain/user/util/NicknameValidator.java | 6 +++--- .../ssu/eatssu/domain/user/util/NicknameValidatorTest.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/user/util/NicknameValidator.java b/src/main/java/ssu/eatssu/domain/user/util/NicknameValidator.java index 850e8108..37326bf6 100644 --- a/src/main/java/ssu/eatssu/domain/user/util/NicknameValidator.java +++ b/src/main/java/ssu/eatssu/domain/user/util/NicknameValidator.java @@ -103,17 +103,17 @@ public void validateNickname(String nickname){ } // 한글 영어가 아닌 것으로 시작 - if (nickname.matches("^[^A-Za-z가-힣].*")) { + if (nickname.matches("^[^A-Za-z가-힣ㄱ-ㅎㅏ-ㅣ].*")) { throw new BaseException(BaseResponseStatus.INVALID_START_OF_NICKNAME); } // 한글 영어가 아닌 것으로 마무리 - if (nickname.matches(".*[^A-Za-z가-힣]$")) { + if (nickname.matches(".*[^A-Za-z가-힣ㄱ-ㅎㅏ-ㅣ]$")) { throw new BaseException(BaseResponseStatus.INVALID_END_OF_NICKNAME); } // 한글, 숫자, 영어, 하이폰(-), 공백을 제외한 것이 포함됨. - if (!nickname.matches("^[A-Za-z0-9가-힣- ]+$")){ + if (!nickname.matches("^[A-Za-z0-9가-힣ㄱ-ㅎㅏ-ㅣ- ]+$")){ throw new BaseException(BaseResponseStatus.INVALID_SYMBOL_NICKNAME); } } diff --git a/src/test/java/ssu/eatssu/domain/user/util/NicknameValidatorTest.java b/src/test/java/ssu/eatssu/domain/user/util/NicknameValidatorTest.java index e7a4d14f..6c24e257 100644 --- a/src/test/java/ssu/eatssu/domain/user/util/NicknameValidatorTest.java +++ b/src/test/java/ssu/eatssu/domain/user/util/NicknameValidatorTest.java @@ -44,7 +44,7 @@ class NicknameValidatorTest { } @ParameterizedTest - @ValueSource(strings = {"유효한 닉네임","available nic","가능한-닉네임","유-효-한-닉-네-임","유 효 한 닉 1 2 a"}) + @ValueSource(strings = {"유효한 닉네임","available nic","가능한-닉네임","유-효-한-닉-네-임","유 효 한 닉 1 2 a","ㅇㅅㅎㅇㅌ"}) void 유효한_이름을_입력하면_예외가_발생하지_않는다(String input) { // when & then assertDoesNotThrow(()-> nicknameValidator.validateNickname(input)); From 5811e09b9b6c9ed6482bc1915c4e2c9796c10d84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Tue, 4 Nov 2025 14:43:14 +0900 Subject: [PATCH 303/399] =?UTF-8?q?feat:=20cloud=20watch=20log=20driver=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20(#288)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .github/workflows/deploy.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 0b2f5133..18704696 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -83,9 +83,10 @@ jobs: sudo docker rm -f $(docker ps -qa) sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-prod sudo docker run -d -p 9000:9000 \ - --log-driver=json-file \ - --log-opt max-size=20m \ - --log-opt max-file=5 \ + --log-driver=awslogs \ + --log-opt awslogs-region=ap-northeast-2 \ + --log-opt awslogs-group=prod-ec2-group \ + --log-opt awslogs-stream=prod-$(date +%Y%m%d-%H%M%S) \ -e EATSSU_DB_URL_PROD="${{ secrets.EATSSU_DB_URL_PROD }}" \ -e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \ -e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \ @@ -111,9 +112,10 @@ jobs: sudo docker rm -f $(docker ps -qa) sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev sudo docker run -d -p 9000:9000 \ - --log-driver=json-file \ - --log-opt max-size=20m \ - --log-opt max-file=5 \ + --log-driver=awslogs \ + --log-opt awslogs-region=ap-northeast-2 \ + --log-opt awslogs-group=dev-ec2-group \ + --log-opt awslogs-stream=dev-$(date +%Y%m%d-%H%M%S) \ -e EATSSU_DB_URL_DEV="${{ secrets.EATSSU_DB_URL_DEV }}" \ -e EATSSU_DB_USERNAME="${{ secrets.EATSSU_DB_USERNAME }}" \ -e EATSSU_DB_PASSWORD="${{ secrets.EATSSU_DB_PASSWORD }}" \ From 203f2b1378852c323d2d101ab16fdd1fdbe8fac5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Tue, 4 Nov 2025 14:50:57 +0900 Subject: [PATCH 304/399] =?UTF-8?q?fix:=20jdk=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=20=EC=88=98=EC=A0=95=20(#290)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 5bd8e119..27a5185f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,7 @@ RUN chmod +x gradlew RUN ./gradlew clean build --no-daemon # 2단계: 실행 단계 (빌드 결과물 실행을 위한 환경) -FROM --platform=linux/amd64 openjdk:17-jdk-slim +FROM --platform=linux/amd64 eclipse-temurin:17-jdk-slim WORKDIR /app # 빌드 단계에서 생성된 JAR 파일 복사 (파일명이 프로젝트에 따라 달라질 수 있으므로 와일드카드 사용) From 872659d449e4587871db708b5a72d28b392c5a6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Tue, 4 Nov 2025 14:56:06 +0900 Subject: [PATCH 305/399] =?UTF-8?q?fix:=20airplane=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20(#292)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 27a5185f..800c1fe0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,7 @@ RUN chmod +x gradlew RUN ./gradlew clean build --no-daemon # 2단계: 실행 단계 (빌드 결과물 실행을 위한 환경) -FROM --platform=linux/amd64 eclipse-temurin:17-jdk-slim +FROM --platform=linux/amd64 eclipse-temurin:17-jdk-alpine WORKDIR /app # 빌드 단계에서 생성된 JAR 파일 복사 (파일명이 프로젝트에 따라 달라질 수 있으므로 와일드카드 사용) From e1d93ce6c9e9879d6450f2b5b7f317762aa38b83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Tue, 4 Nov 2025 20:18:32 +0900 Subject: [PATCH 306/399] =?UTF-8?q?fix:=20=EB=A6=AC=EB=B7=B0=20=ED=95=84?= =?UTF-8?q?=ED=84=B0=20=EC=88=98=EC=A0=95=20(#286)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 정규 표현식 및 KEYWORD 추가 * fix: 닉네임 생성 규칙 공백 추가 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../java/ssu/eatssu/domain/auth/util/RandomNicknameUtil.java | 2 +- .../java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/util/RandomNicknameUtil.java b/src/main/java/ssu/eatssu/domain/auth/util/RandomNicknameUtil.java index 38865501..3d8f8097 100644 --- a/src/main/java/ssu/eatssu/domain/auth/util/RandomNicknameUtil.java +++ b/src/main/java/ssu/eatssu/domain/auth/util/RandomNicknameUtil.java @@ -40,6 +40,6 @@ public String generate() { String prefix = PREFIX[random.nextInt(PREFIX.length)]; String category = MENU_NAME[random.nextInt(MENU_NAME.length)]; - return prefix + category; + return prefix + " " + category; } } diff --git a/src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java b/src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java index 8c23f44f..9148807c 100644 --- a/src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java +++ b/src/main/java/ssu/eatssu/domain/review/utils/MenuFilterUtil.java @@ -8,11 +8,14 @@ public class MenuFilterUtil { private static final Set EXCLUDED_KEYWORDS = Set.of( "작은밥", "쌀밥", "잡곡밥", "찰흑미밥", "귀리밥", "백미밥", + "강황밥","찰밥","흑미밥","기장밥","현미밥", + "미니밥","오곡밥","무밥","옥수수밥","검정콩밥", + "추가밥","한솥밥","수수밥","찰현미밥","차조밥","공기밥", "깍두기", "열무김치", "포기김치", "맛김치", "배추김치", "단무지", "오이피클", "야쿠르트", "요구르트", "우동국물" ); - private static final Pattern SAUCE_PATTERN = Pattern.compile(".*소스.*"); + private static final Pattern SAUCE_PATTERN = Pattern.compile("소스$"); private static final Pattern SINGLE_KIMCHI_PATTERN = Pattern.compile("(^|\\s)김치($|\\s)"); private static final Pattern SINGLE_BAP_PATTERN = Pattern.compile("(^|\\s)밥($|\\s)"); From 6747b3d28e91e5a5933f9b3f6170befcd69a8912 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Tue, 4 Nov 2025 20:28:49 +0900 Subject: [PATCH 307/399] =?UTF-8?q?feat:=20logging=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?&=20slack=20notification=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= =?UTF-8?q?=20(#294)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: 커스텀 에러 메시지가 보이도록 수정 * refactor: 로그 처리중 slack알림 보내도록 설정 * refactor: 중복 코드 제거 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../slack/entity/SlackMessageFormat.java | 49 ++++++++++++++----- .../slack/service/SlackErrorNotifier.java | 4 +- .../handler/GlobalExceptionHandler.java | 8 --- .../global/log/ControllerLogAspect.java | 27 ++++++++-- 4 files changed, 61 insertions(+), 27 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java index 38b0387e..b603870e 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java @@ -73,23 +73,46 @@ public static String sendUserInquiry(Inquiry inquiry) { return messageFormat.format(args); } - - public static String sendServerError(BaseException ex) { - MessageFormat messageFormat = new MessageFormat( - """ + public static String sendServerError(Throwable ex, String method, String uri, String userId, String args) { + final String messageTemplate = """ =================== *서버 에러 발생* - - 예외 상태코드: {0} - - 예외 메시지: {1} - - 개발환경: {2} + - {0}: {1} + - 예외 메시지: {2} + - 개발환경: {3} + *요청 정보* + - HTTP Method: {4} + - URI: {5} + - User ID: {6} + - 요청 파라미터: {7} =================== - """ - ); - Object[] args = { - ex.getStatus(), - ex.getStatus().getMessage(), + """; + MessageFormat messageFormat = new MessageFormat(messageTemplate); + + String errorTypeLabel; + Object errorTypeValue; + String errorMessage; + + if (ex instanceof BaseException baseException) { + errorTypeLabel = "예외 상태코드"; + errorTypeValue = baseException.getStatus(); + errorMessage = baseException.getStatus().getMessage(); + } else { + errorTypeLabel = "예외 타입"; + errorTypeValue = ex.getClass().getSimpleName(); + errorMessage = ex.getMessage() != null ? ex.getMessage() : "메시지 없음"; + } + + Object[] formatArgs = { + errorTypeLabel, + errorTypeValue, + errorMessage, serverEnv, + method, + uri, + userId, + args != null && args.length() > 500 ? args.substring(0, 500) + "...(truncated)" : args }; - return messageFormat.format(args); + return messageFormat.format(formatArgs); } } diff --git a/src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java b/src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java index e9c1d316..3433eb6d 100644 --- a/src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java +++ b/src/main/java/ssu/eatssu/domain/slack/service/SlackErrorNotifier.java @@ -18,12 +18,12 @@ public SlackErrorNotifier(SlackService slackService) { this.slackService = slackService; } - public void notify(BaseException ex) { + public void notify(Throwable ex, String method, String uri, String userId, String args) { if (!"prod".equals(serverEnv)) { return; } try { - String message = SlackMessageFormat.sendServerError(ex); + String message = SlackMessageFormat.sendServerError(ex, method, uri, userId, args); slackService.sendSlackMessage(message, SlackChannel.SERVER_ERROR); } catch (Exception slackEx) { log.warn("슬랙 전송 실패: {}", slackEx.getMessage()); diff --git a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java index 8507c6af..16613daa 100644 --- a/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java +++ b/src/main/java/ssu/eatssu/global/handler/GlobalExceptionHandler.java @@ -46,15 +46,11 @@ public class GlobalExceptionHandler extends ResponseEntityExceptionHandler { */ @ExceptionHandler(BaseException.class) public ResponseEntity> handleBaseException(BaseException e) { - if (BaseResponseStatus.sendSlackNotification(e.getStatus())) { - slackErrorNotifier.notify(e); - } return ResponseEntity.status(e.getStatus().getHttpStatus()).body(BaseResponse.fail(e.getStatus())); } @ExceptionHandler(Exception.class) public ResponseEntity> handleAllUnhandledException(Exception ex) { - slackErrorNotifier.notify(new BaseException(BaseResponseStatus.BAD_REQUEST)); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(BaseResponse.fail(BaseResponseStatus.INTERNAL_SERVER_ERROR)); } @@ -241,10 +237,6 @@ protected ResponseEntity handleExceptionInternal( HttpStatus status = HttpStatus.valueOf(statusCode.value()); - if (status.is5xxServerError()) { - slackErrorNotifier.notify(new BaseException(BaseResponseStatus.BAD_REQUEST)); - } - BaseResponseStatus responseStatus = status.is4xxClientError() ? BaseResponseStatus.BAD_REQUEST : BaseResponseStatus.INTERNAL_SERVER_ERROR; diff --git a/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java b/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java index 2de93aad..ec7eda66 100644 --- a/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java +++ b/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java @@ -14,6 +14,9 @@ import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import ssu.eatssu.domain.auth.security.CustomUserDetails; +import ssu.eatssu.domain.slack.service.SlackErrorNotifier; +import ssu.eatssu.global.handler.response.BaseException; +import ssu.eatssu.global.handler.response.BaseResponseStatus; import ssu.eatssu.global.log.annotation.LogMask; import java.lang.reflect.Field; @@ -30,6 +33,7 @@ public class ControllerLogAspect { private final ObjectMapper objectMapper; + private final SlackErrorNotifier slackErrorNotifier; @Pointcut("within(@org.springframework.web.bind.annotation.RestController *)") public void restController() {} @@ -48,14 +52,16 @@ public Object logApi(ProceedingJoinPoint joinPoint) throws Throwable { Object[] args = joinPoint.getArgs(); // 요청자 - String userIdLog = IntStream.range(0, args.length) + String userId = IntStream.range(0, args.length) .filter(i -> args[i] instanceof CustomUserDetails) .mapToObj(i -> { CustomUserDetails user = (CustomUserDetails) args[i]; - return "userId=" + user.getId(); + return String.valueOf(user.getId()); }) .findFirst() - .orElse("userId=anonymous"); + .orElse("anonymous"); + + String userIdLog = "userId=" + userId; // 나머지 요청 인자 String otherArgsJson = IntStream.range(0, args.length) @@ -103,11 +109,24 @@ public Object logApi(ProceedingJoinPoint joinPoint) throws Throwable { return result; } catch (Throwable e) { long time = System.currentTimeMillis() - start; - log.error("EXCEPTION {} {} ({} ms) cause={}", method, uri, time, e.getMessage(), e); + String causeMessage = getCauseMessage(e); + String exceptionType = e.getClass().getSimpleName(); + log.error("EXCEPTION {} {} ({} ms) type={} cause={}", method, uri, time, exceptionType, causeMessage, e); + + slackErrorNotifier.notify(e, method, uri, userId, argsJson); throw e; } } + private String getCauseMessage(Throwable e) { + if (e instanceof BaseException) { + BaseException baseException = (BaseException) e; + return baseException.getStatus().getMessage(); + } + String message = e.getMessage(); + return message != null ? message : e.getClass().getSimpleName(); + } + private Map toSafeMap(Object arg) { Map result = new HashMap<>(); for (Field field : arg.getClass().getDeclaredFields()) { From 5ad9366897efebc8f27937af25202edab7ec5cb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Thu, 6 Nov 2025 21:11:25 +0900 Subject: [PATCH 308/399] =?UTF-8?q?fix:=20=EC=A4=91=EB=B3=B5=20=EC=9D=8C?= =?UTF-8?q?=EC=8B=9D=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ssu/eatssu/domain/auth/util/RandomNicknameUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/util/RandomNicknameUtil.java b/src/main/java/ssu/eatssu/domain/auth/util/RandomNicknameUtil.java index 3d8f8097..0390eb6a 100644 --- a/src/main/java/ssu/eatssu/domain/auth/util/RandomNicknameUtil.java +++ b/src/main/java/ssu/eatssu/domain/auth/util/RandomNicknameUtil.java @@ -12,7 +12,7 @@ public class RandomNicknameUtil { "덜익은", "잘익은", "타버린", "밍밍한", "짭짤한", "달달한", "씁쓸한", "매콤한", "얼큰한", "구수한", "새콤한", "상큼한", "고소한", "담백한", "느끼한", "촉촉한", "바삭한", "쫄깃한", "꾸덕한", "진한", "깔끔한", "시원한", "은은한", "중독적인", "화끈한", "감칠한", "개운한", "살짝탄", "부드러운", "향긋한", - "자극적인", "산뜻한", "짙은", "진득한", "기름진", "촉촉한", "살짝매운", "은근한", "쌉쌀한", "따뜻한", + "자극적인", "산뜻한", "짙은", "진득한", "기름진", "살짝매운", "은근한", "쌉쌀한", "따뜻한", "식어버린", "따끈한", "시큼한", "고급진", "정겨운", "친숙한", "투박한", "소박한", "짠내나는", "심심한", "묵직한", "포근한", "통통한", "말랑한", "폭신한", "몽글한", "보들한", "꼬숩한", "달콤한", "쫀득한", "도톰한", "부들한", "귀여운", "탱글한", "포슬한", "말캉한", "보송한", "탱탱한", "보드라운", "살짝단", "순한", @@ -26,7 +26,7 @@ public class RandomNicknameUtil { "볶음김치","야채피클","나주곰탕","갈비탕","동태전","떡갈비조림","칠리탕수육","소고기국밥","콩나물밥","고구마맛탕", "계란찜","한식잡채","치킨너겟","타코야끼","비엔나볶음","떡볶이","두부장국","동지죽","감귤","야채튀김", "미니우동","챠슈덮밥","가츠동","새우튀김","탕수육강정","두부조림","부추전","검정콩밥","망고샐러드","비빔만두", - "비빔밥","닭볶음탕","수수밥","쟁반짜장","깍두기","볶음김치","연근조림","멸치볶음","오이생채","감자조림", + "비빔밥","닭볶음탕","수수밥","쟁반짜장","깍두기","연근조림","멸치볶음","오이생채","감자조림", "순대볶음", "순대국밥","핫도그","소떡소떡","만두라면","찰흑미밥","차조밥","해물잡채","장어덮밥","비빔국수","김말이", "닭곰탕","우불고기","딸기쿠키","치킨텐더","냉메밀국수","가쓰오장국","간짜장밥","물만두국","오이피클","물만두찜", "카레라이스","얼큰김치국","군만두","연두부","가자미튀김","양장피","비빔쫄면","만두전골","비빔막국수","버섯불고기", From 074c967425aafe0403bd98db994fe5e38879ef82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Thu, 6 Nov 2025 21:22:25 +0900 Subject: [PATCH 309/399] =?UTF-8?q?feat:=20=EB=A7=88=EC=9D=B4=EA=B7=B8?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=85=98=EC=9A=A9=20=EC=9E=84=EC=8B=9C=20API?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ManageUserController.java | 42 +++++++++++++++++++ .../user/repository/UserRepository.java | 6 +++ 2 files changed, 48 insertions(+) create mode 100644 src/main/java/ssu/eatssu/domain/admin/controller/ManageUserController.java diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageUserController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageUserController.java new file mode 100644 index 00000000..fcbe2c67 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/admin/controller/ManageUserController.java @@ -0,0 +1,42 @@ +package ssu.eatssu.domain.admin.controller; + +import lombok.RequiredArgsConstructor; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import ssu.eatssu.domain.auth.util.RandomNicknameUtil; +import ssu.eatssu.domain.user.entity.User; +import ssu.eatssu.domain.user.repository.UserRepository; +import ssu.eatssu.global.handler.response.BaseResponse; + +import java.util.List; + +@RestController +@RequestMapping("/admin/users") +@RequiredArgsConstructor +public class ManageUserController { + + private final UserRepository userRepository; + private final RandomNicknameUtil randomNicknameUtil; + + @ResponseBody + @PostMapping("/update-default-nicknames") + @Transactional + public BaseResponse updateDefaultNicknames() { + List users = userRepository.findByNicknameLikeUserPattern(); + + int updatedCount = 0; + for (User user : users) { + String newNickname = randomNicknameUtil.generate(); + user.updateNickname(newNickname); + updatedCount++; + } + + userRepository.saveAll(users); + + return BaseResponse.success(updatedCount); + } +} + diff --git a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java index 6170adc4..dbe8425e 100644 --- a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java @@ -1,8 +1,11 @@ package ssu.eatssu.domain.user.repository; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import ssu.eatssu.domain.user.entity.User; +import java.util.List; import java.util.Optional; public interface UserRepository extends JpaRepository { @@ -15,4 +18,7 @@ public interface UserRepository extends JpaRepository { Optional findByProviderId(String providerId); Optional findByNickname(String nickname); + + @Query(value = "SELECT * FROM user WHERE nickname REGEXP '^user-.{4}$'", nativeQuery = true) + List findByNicknameLikeUserPattern(); } From 753f992fe70c4c94fcf9337a2d463b5ed584e2ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Thu, 6 Nov 2025 22:27:50 +0900 Subject: [PATCH 310/399] =?UTF-8?q?feat:=20=EB=A7=88=EC=9D=B4=EA=B7=B8?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=85=98=EC=9A=A9=20=EC=9E=84=EC=8B=9C=20API?= =?UTF-8?q?=20=EC=82=AD=EC=A0=9C=20(#300)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../controller/ManageUserController.java | 42 ------------------- .../user/repository/UserRepository.java | 3 -- 2 files changed, 45 deletions(-) delete mode 100644 src/main/java/ssu/eatssu/domain/admin/controller/ManageUserController.java diff --git a/src/main/java/ssu/eatssu/domain/admin/controller/ManageUserController.java b/src/main/java/ssu/eatssu/domain/admin/controller/ManageUserController.java deleted file mode 100644 index fcbe2c67..00000000 --- a/src/main/java/ssu/eatssu/domain/admin/controller/ManageUserController.java +++ /dev/null @@ -1,42 +0,0 @@ -package ssu.eatssu.domain.admin.controller; - -import lombok.RequiredArgsConstructor; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; -import ssu.eatssu.domain.auth.util.RandomNicknameUtil; -import ssu.eatssu.domain.user.entity.User; -import ssu.eatssu.domain.user.repository.UserRepository; -import ssu.eatssu.global.handler.response.BaseResponse; - -import java.util.List; - -@RestController -@RequestMapping("/admin/users") -@RequiredArgsConstructor -public class ManageUserController { - - private final UserRepository userRepository; - private final RandomNicknameUtil randomNicknameUtil; - - @ResponseBody - @PostMapping("/update-default-nicknames") - @Transactional - public BaseResponse updateDefaultNicknames() { - List users = userRepository.findByNicknameLikeUserPattern(); - - int updatedCount = 0; - for (User user : users) { - String newNickname = randomNicknameUtil.generate(); - user.updateNickname(newNickname); - updatedCount++; - } - - userRepository.saveAll(users); - - return BaseResponse.success(updatedCount); - } -} - diff --git a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java index dbe8425e..fbc10d27 100644 --- a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java @@ -18,7 +18,4 @@ public interface UserRepository extends JpaRepository { Optional findByProviderId(String providerId); Optional findByNickname(String nickname); - - @Query(value = "SELECT * FROM user WHERE nickname REGEXP '^user-.{4}$'", nativeQuery = true) - List findByNicknameLikeUserPattern(); } From b1e35e75353a189007dfb9d492c43b934342e905 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Mon, 10 Nov 2025 22:33:47 +0900 Subject: [PATCH 311/399] =?UTF-8?q?fix:=20=EC=97=90=EB=9F=AC=20=EC=95=8C?= =?UTF-8?q?=EB=A6=BC=20=EB=B3=80=EA=B2=BD=20(#303)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java index b603870e..bc8d0749 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackMessageFormat.java @@ -84,7 +84,7 @@ public static String sendServerError(Throwable ex, String method, String uri, St - HTTP Method: {4} - URI: {5} - User ID: {6} - - 요청 파라미터: {7} + - 로그 내용 (파라미터 정보 포함): {7} =================== """; MessageFormat messageFormat = new MessageFormat(messageTemplate); From c3da532b5e0b02faef04c2c51bbeb06df9498945 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Sat, 15 Nov 2025 17:27:45 +0900 Subject: [PATCH 312/399] =?UTF-8?q?fix:=20security=20context=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EA=BA=BC=EB=82=B4=EC=98=A4=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(#305)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: security context에서 꺼내오도록 수정 * fix: gemini 수정 사항 적용 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../global/log/ControllerLogAspect.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java b/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java index ec7eda66..6690b3de 100644 --- a/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java +++ b/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java @@ -9,6 +9,8 @@ import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; @@ -51,15 +53,7 @@ public Object logApi(ProceedingJoinPoint joinPoint) throws Throwable { String[] paramNames = methodSignature.getParameterNames(); Object[] args = joinPoint.getArgs(); - // 요청자 - String userId = IntStream.range(0, args.length) - .filter(i -> args[i] instanceof CustomUserDetails) - .mapToObj(i -> { - CustomUserDetails user = (CustomUserDetails) args[i]; - return String.valueOf(user.getId()); - }) - .findFirst() - .orElse("anonymous"); + String userId = getUserIdFromSecurityContext(); String userIdLog = "userId=" + userId; @@ -127,6 +121,15 @@ private String getCauseMessage(Throwable e) { return message != null ? message : e.getClass().getSimpleName(); } + private String getUserIdFromSecurityContext() { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication != null && authentication.isAuthenticated() && authentication.getPrincipal() instanceof CustomUserDetails) { + CustomUserDetails userDetails = (CustomUserDetails) authentication.getPrincipal(); + return String.valueOf(userDetails.getId()); + } + return "anonymous"; + } + private Map toSafeMap(Object arg) { Map result = new HashMap<>(); for (Field field : arg.getClass().getDeclaredFields()) { From 3ec24be2a9fdc277110ab5f36e5d3c70bf027cc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Sat, 15 Nov 2025 18:09:12 +0900 Subject: [PATCH 313/399] =?UTF-8?q?fix:=20=EA=B0=80=EA=B2=A9=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#307)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../java/ssu/eatssu/domain/restaurant/entity/Restaurant.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java index 6b86bc75..30f59354 100644 --- a/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java +++ b/src/main/java/ssu/eatssu/domain/restaurant/entity/Restaurant.java @@ -10,7 +10,7 @@ @Getter public enum Restaurant { - DODAM("DODAM", 7000), + DODAM("DODAM", 6000), DORMITORY("DORMITORY", 5500), FOOD_COURT("FOOD_COURT", null), SNACK_CORNER("SNACK_CORNER", null), From d6bafe763b076ba324991248ea167b329c52df93 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Sat, 22 Nov 2025 20:25:41 +0900 Subject: [PATCH 314/399] =?UTF-8?q?fix:=20reviewCalculator=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EC=97=AC=20reviewCount,=20starCount=20?= =?UTF-8?q?=EC=95=88=EB=A7=9E=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#310)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/service/ReviewServiceV2.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 190ff9f5..92ea1fb5 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -15,6 +15,7 @@ import ssu.eatssu.domain.menu.persistence.MealRepository; import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.menu.service.MealRatingService; +import ssu.eatssu.domain.rating.entity.RatingCalculator; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; import ssu.eatssu.domain.review.dto.CreateMenuReviewRequestV2; @@ -23,6 +24,7 @@ import ssu.eatssu.domain.review.dto.MenuIdNameDto; import ssu.eatssu.domain.review.dto.MenuLikeRequest; import ssu.eatssu.domain.review.dto.MenuReviewsV2Response; +import ssu.eatssu.domain.review.dto.RatingAverages; import ssu.eatssu.domain.review.dto.RestaurantReviewResponse; import ssu.eatssu.domain.review.dto.ReviewDetail; import ssu.eatssu.domain.review.dto.ReviewRatingCount; @@ -61,9 +63,8 @@ public class ReviewServiceV2 { private final MenuRepository menuRepository; private final MealRepository mealRepository; private final MealMenuRepository mealMenuRepository; - private final ReviewImageRepository reviewImageRepository; private final ApplicationEventPublisher eventPublisher; - + private final RatingCalculator ratingCalculator; private final MealRatingService mealRatingService; /** @@ -327,13 +328,16 @@ public MealReviewsV2Response findMealReviews(Long mealId) { log.warn("No valid menus for review found in mealId={}", mealId); } - Double averageRating = mealRatingService.getMainRatingAverage(meal.getId()); + long reviewCount = ratingCalculator.mealTotalReviewCount(meal); - if (!reviews.isEmpty() && averageRating == 0.0) { + RatingAverages averageRating = ratingCalculator.mealAverageRatings(meal); + ReviewRatingCount ratingCountMap = ratingCalculator.mealRatingCount(meal); + + if (!reviews.isEmpty() && averageRating.mainRating() == 0.0) { log.warn("All reviews have null/invalid ratings for mealId={}", mealId); } - Integer likeCount = Optional.ofNullable(menus) + Integer likeCount = Optional.of(menus) .orElse(Collections.emptyList()) .stream() .filter(Objects::nonNull) @@ -343,8 +347,6 @@ public MealReviewsV2Response findMealReviews(Long mealId) { .sum(); - ReviewRatingCount reviewRatingCount = ReviewRatingCount.from(reviews); - return MealReviewsV2Response .builder() .menuList(validMenus.stream() @@ -354,9 +356,9 @@ public MealReviewsV2Response findMealReviews(Long mealId) { menu.getName() )) .collect(Collectors.toList())) - .totalReviewCount((long) reviews.size()) - .reviewRatingCount(reviewRatingCount) - .rating(Math.round(averageRating * 10) / 10.0) + .totalReviewCount(reviewCount) + .reviewRatingCount(ratingCountMap) + .rating(averageRating.mainRating()) .likeCount(likeCount) .build(); } From 667a5862ceda12d9e40ca8a35432152812533f04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=A7=84?= Date: Sun, 30 Nov 2025 22:09:32 +0900 Subject: [PATCH 315/399] =?UTF-8?q?[Fix]=20=EB=A6=AC=EB=B7=B0=20V2?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EB=A6=AC=EB=B7=B0=20=EC=9A=94=EC=95=BD?= =?UTF-8?q?=EA=B3=BC=20=EB=A6=AC=EB=B7=B0=20=EB=A6=AC=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EA=B0=80=20=EB=B6=88=EC=9D=BC=EC=B9=98=20=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EC=83=81=ED=99=A9=20=EA=B0=9C=EC=84=A0=20(#311)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 리뷰 리스트 속 아이템의 별점이 평점이 아닌 그 리뷰의 별점을 반환하도록 수정 * fix: 리뷰 리스트가 메뉴에 대한 리뷰 + 밀에 대한 리뷰를 합쳐서 반환하도록 수정 * fix: menu reviewlist에서 rating이 없을시 mainrating을 내보내도록 수정 * fix: meal list에서도 rating, 없을시 mainrating을 내보내도록 수정 --- .../domain/review/dto/MealReviewResponse.java | 58 +++++++++------ .../domain/review/dto/ReviewDetail.java | 17 +++-- .../review/repository/ReviewRepository.java | 23 +++++- .../review/service/ReviewServiceV2.java | 74 ++++++++++--------- 4 files changed, 106 insertions(+), 66 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java index b6eeca59..7412264d 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MealReviewResponse.java @@ -1,17 +1,17 @@ package ssu.eatssu.domain.review.dto; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.review.entity.ReviewMenuLike; - import java.time.LocalDate; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.review.entity.ReviewMenuLike; @AllArgsConstructor @Builder @@ -31,7 +31,7 @@ public class MealReviewResponse { private String writerNickname; @Schema(description = "평점", example = "4") - private Double rating; + private Integer rating; @Schema(description = "리뷰 작성 날짜(format = yyyy-MM-dd)", example = "2023-04-07") private LocalDate writtenAt; @@ -60,26 +60,40 @@ public class MealReviewResponse { public static MealReviewResponse from(Review review, Long userId, - List validMenus,Double rating) { + List validMenus, Integer rating) { List imageUrls = new ArrayList<>(); review.getReviewImages().forEach(i -> imageUrls.add(i.getImageUrl())); - // 좋아요한 메뉴 ID 모음 - Set likedMenuIds = review.getMenuLikes().stream() - .filter(ReviewMenuLike::getIsLike) - .map(like -> like.getMenu().getId()) - .collect(Collectors.toSet()); - - List menuNames = validMenus.stream() - .map(valid -> new MenuIdNameLikeDto( - valid.getMenuId(), - valid.getName(), - likedMenuIds.contains(valid.getMenuId()) - )) - .toList(); + List menuNames; + if (review.getMeal() != null) { + Set likedMenuIds = review.getMenuLikes().stream() + .filter(ReviewMenuLike::getIsLike) + .map(like -> like.getMenu().getId()) + .collect(Collectors.toSet()); + + menuNames = validMenus.stream() + .map(valid -> new MenuIdNameLikeDto( + valid.getMenuId(), + valid.getName(), + likedMenuIds.contains(valid.getMenuId()) + )) + .toList(); + } else if (review.getMenu() != null) { + menuNames = Collections.singletonList( + new MenuIdNameLikeDto(review.getMenu().getId(), + review.getMenu().getName(), + false) + ); + } else { + menuNames = Collections.emptyList(); + } + Integer resolvedRating = (review.getRating() != null) + ? review.getRating() + : (review.getRatings() != null ? review.getRatings().getMainRating() : null); + MealReviewResponseBuilder builder = MealReviewResponse.builder() .reviewId(review.getId()) - .rating(rating) + .rating(resolvedRating) .writtenAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imageUrls(imageUrls) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java index ca5979cd..32db01aa 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/ReviewDetail.java @@ -1,6 +1,11 @@ package ssu.eatssu.domain.review.dto; import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -8,12 +13,6 @@ import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewMenuLike; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - @AllArgsConstructor @Builder @Schema(title = "리뷰 상세") @@ -58,9 +57,13 @@ public static ReviewDetail from(Review review, Long userId) { .map(like -> like.getMenu().getId()) .collect(Collectors.toSet()); + Integer rating = (review.getRating() != null) + ? review.getRating() + : review.getRatings().getMainRating(); + ReviewDetailBuilder builder = ReviewDetail.builder() .reviewId(review.getId()) - .rating(review.getRatings().getMainRating()) + .rating(rating) .writtenAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imageUrls(imageUrls) diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java index d817cfcb..e4c87a4c 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java @@ -1,5 +1,7 @@ package ssu.eatssu.domain.review.repository; +import java.util.Collection; +import java.util.List; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -9,9 +11,6 @@ import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.review.entity.Review; -import java.util.Collection; -import java.util.List; - public interface ReviewRepository extends JpaRepository, ReviewRepositoryCustom { List findAllByMenu(Menu menu); @@ -31,4 +30,22 @@ public interface ReviewRepository extends JpaRepository, ReviewRep Page findReviewsByMealIds(@Param("mealIds") List mealIds, @Param("lastReviewId") Long lastReviewId, Pageable pageable); + + @Query(""" + SELECT r FROM Review r + WHERE (r.meal.id = :mealId + OR r.menu.id IN (SELECT mm.menu.id FROM MealMenu mm WHERE mm.meal.id = :mealId)) + """) + List findAllMealAndMenuReviews(@Param("mealId") Long mealId); + + @Query(""" + SELECT r FROM Review r + WHERE (r.meal.id = :mealId + OR r.menu.id IN (SELECT mm.menu.id FROM MealMenu mm WHERE mm.meal.id = :mealId)) + AND (:lastReviewId IS NULL OR r.id < :lastReviewId) + ORDER BY r.id DESC + """) + Page findMealAndMenuReviews(@Param("mealId") Long mealId, + @Param("lastReviewId") Long lastReviewId, + Pageable pageable); } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 92ea1fb5..9de77832 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -1,5 +1,17 @@ package ssu.eatssu.domain.review.service; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MEAL; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationEventPublisher; @@ -15,7 +27,6 @@ import ssu.eatssu.domain.menu.persistence.MealRepository; import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.menu.service.MealRatingService; -import ssu.eatssu.domain.rating.entity.RatingCalculator; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; import ssu.eatssu.domain.review.dto.CreateMenuReviewRequestV2; @@ -31,7 +42,6 @@ import ssu.eatssu.domain.review.dto.UpdateMealReviewRequest; import ssu.eatssu.domain.review.dto.ValidMenuForViewResponse; import ssu.eatssu.domain.review.entity.Review; -import ssu.eatssu.domain.review.repository.ReviewImageRepository; import ssu.eatssu.domain.review.repository.ReviewRepository; import ssu.eatssu.domain.review.utils.MenuFilterUtil; import ssu.eatssu.domain.slice.dto.SliceResponse; @@ -41,19 +51,6 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.log.event.LogEvent; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; - -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MEAL; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; - @Slf4j @Service @RequiredArgsConstructor @@ -64,7 +61,6 @@ public class ReviewServiceV2 { private final MealRepository mealRepository; private final MealMenuRepository mealMenuRepository; private final ApplicationEventPublisher eventPublisher; - private final RatingCalculator ratingCalculator; private final MealRatingService mealRatingService; /** @@ -208,14 +204,8 @@ public SliceResponse findMealReviewList(Long mealId, Long la return SliceResponse.empty(); } - List validMenuIds = validMenus.stream().map(ValidMenuForViewResponse.MenuDto::getMenuId).toList(); - List mealIds = mealMenuRepository.findMealIdsByMenuIds(validMenuIds); - if (mealIds.isEmpty()) { - log.warn("No related mealIds found for validMenuIds={} in mealId={}", validMenuIds, mealId); - return SliceResponse.empty(); - } - - Page pageReviews = reviewRepository.findReviewsByMealIds(mealIds, lastReviewId, pageable); + Page pageReviews = reviewRepository.findMealAndMenuReviews(mealId, lastReviewId, + pageable); Long userId = (userDetails != null) ? userDetails.getId() : null; @@ -223,7 +213,7 @@ public SliceResponse findMealReviewList(Long mealId, Long la pageReviews.getContent() .stream() .map(review -> MealReviewResponse.from(review, - userId, validMenus,mealRatingService.getMainRatingAverage(review.getMeal().getId()))) + userId, validMenus, review.getRating())) .collect(Collectors.toList()); return SliceResponse.builder() @@ -309,15 +299,15 @@ public MenuReviewsV2Response findMenuReviews(Long menuId) { */ public MealReviewsV2Response findMealReviews(Long mealId) { Meal meal = mealRepository.findById(mealId).orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); - List reviews = reviewRepository.findAllByMeal(meal); + List combinedReviews = reviewRepository.findAllMealAndMenuReviews(mealId); List menus = mealMenuRepository.findMenusByMeal(meal); if (menus.isEmpty()) { log.warn("No menus found for mealId={}", meal.getId()); } List validMenus = menus.stream() - .filter(menu -> !MenuFilterUtil.isExcludedFromReview( - menu.getName())) +// .filter(menu -> !MenuFilterUtil.isExcludedFromReview( +// menu.getName())) .map(menu -> ValidMenuForViewResponse.MenuDto.builder() .menuId(menu.getId()) .name(menu.getName()) @@ -328,12 +318,28 @@ public MealReviewsV2Response findMealReviews(Long mealId) { log.warn("No valid menus for review found in mealId={}", mealId); } - long reviewCount = ratingCalculator.mealTotalReviewCount(meal); - - RatingAverages averageRating = ratingCalculator.mealAverageRatings(meal); - ReviewRatingCount ratingCountMap = ratingCalculator.mealRatingCount(meal); - - if (!reviews.isEmpty() && averageRating.mainRating() == 0.0) { + long reviewCount = combinedReviews.size(); + + Double mainRatingAverage = combinedReviews.stream() + .map(review -> { + Integer main = (review.getRatings() != null) ? review.getRatings() + .getMainRating() : null; + return (main != null) ? main : review.getRating(); + }) + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .average() + .stream() + .boxed() + .findFirst() + .orElse(null); + + RatingAverages averageRating = RatingAverages.builder() + .mainRating(mainRatingAverage) + .build(); + ReviewRatingCount ratingCountMap = ReviewRatingCount.from(combinedReviews); + + if (!combinedReviews.isEmpty() && averageRating.mainRating() == null) { log.warn("All reviews have null/invalid ratings for mealId={}", mealId); } From b519095a8468b4821cace45637fae51a1366da23 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Thu, 4 Dec 2025 13:56:17 +0900 Subject: [PATCH 316/399] =?UTF-8?q?fix:=20[POST]=20/reviews/write/{menuID}?= =?UTF-8?q?=20List=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20(#313)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/review/dto/UploadReviewRequest.java | 9 +++++---- .../ssu/eatssu/domain/review/service/ReviewService.java | 4 +--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java index 9963d290..4874ca7c 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java @@ -1,7 +1,6 @@ package ssu.eatssu.domain.review.dto; import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.Max; import jakarta.validation.constraints.Size; import lombok.AccessLevel; import lombok.Getter; @@ -13,6 +12,8 @@ import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; +import java.util.List; + @Getter @Setter @Schema(title = "리뷰 작성") @@ -30,8 +31,8 @@ public class UploadReviewRequest { @Schema(description = "한줄평", example = "맛있어용") private String content; - @Schema(description = "리뷰 이미지 URL", example = "https://s3.~~~.jpg") - private String imageUrl; + @Schema(description = "리뷰 이미지 URL", example = "[\"https://s3.~~~.jpg\",\"https://s3.~~~.jpg\"]") + private List imageUrls; public UploadReviewRequest(int mainRating, String content) { Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); @@ -41,7 +42,7 @@ public UploadReviewRequest(int mainRating, String content) { } public Review toReviewEntity(User user, Menu menu) { - Ratings ratings = Ratings.of(this.mainRating,this.amountRating,this.tasteRating); + Ratings ratings = Ratings.of(this.mainRating, this.amountRating, this.tasteRating); return Review.builder() .user(user) .content(this.content) diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index 03337dd9..ec39528a 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -112,11 +112,9 @@ public void uploadReview(CustomUserDetails userDetails, Long menuId, UploadRevie .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); Review review = request.toReviewEntity(user, menu); + request.getImageUrls().forEach(review::addReviewImage); reviewRepository.save(review); - ReviewImage reviewImage = new ReviewImage(review, request.getImageUrl()); - reviewImageRepository.save(reviewImage); - menu.addReview(review); } From 12a446addd64797afe8f574aa6f49321cd3fb065 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Thu, 4 Dec 2025 14:17:56 +0900 Subject: [PATCH 317/399] =?UTF-8?q?hotfix:=20image=20url=20list=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B0=94=EA=BE=BC=EA=B2=83=20=EC=9B=90=EC=83=81?= =?UTF-8?q?=EB=B3=B5=EA=B7=80=20(#314)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: [POST] /reviews/write/{menuID} List으로 변경 * fix: List String으로 바꾸는 것 불요하여 원상 복귀 From 959bd791af780335d27cf2bc4870ddd9552074e9 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Thu, 4 Dec 2025 14:41:02 +0900 Subject: [PATCH 318/399] =?UTF-8?q?hotfix:=20List=20->=20String?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20imageURL=20=EC=9B=90=EB=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/review/dto/UploadReviewRequest.java | 6 ++---- .../ssu/eatssu/domain/review/service/ReviewService.java | 4 +++- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java index 4874ca7c..8d0e2d6e 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/UploadReviewRequest.java @@ -12,8 +12,6 @@ import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.user.entity.User; -import java.util.List; - @Getter @Setter @Schema(title = "리뷰 작성") @@ -31,8 +29,8 @@ public class UploadReviewRequest { @Schema(description = "한줄평", example = "맛있어용") private String content; - @Schema(description = "리뷰 이미지 URL", example = "[\"https://s3.~~~.jpg\",\"https://s3.~~~.jpg\"]") - private List imageUrls; + @Schema(description = "리뷰 이미지 URL", example = "https://s3.~~~.jpg") + private String imageUrl; public UploadReviewRequest(int mainRating, String content) { Assert.isTrue(mainRating >= 1 && mainRating <= 5, "평점은 1에서 5 사이 여야 합니다."); diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java index ec39528a..03337dd9 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewService.java @@ -112,9 +112,11 @@ public void uploadReview(CustomUserDetails userDetails, Long menuId, UploadRevie .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); Review review = request.toReviewEntity(user, menu); - request.getImageUrls().forEach(review::addReviewImage); reviewRepository.save(review); + ReviewImage reviewImage = new ReviewImage(review, request.getImageUrl()); + reviewImageRepository.save(reviewImage); + menu.addReview(review); } From e56449c93dbbfca1a7b45afe8b67883393638acf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Fri, 19 Dec 2025 00:26:31 +0900 Subject: [PATCH 319/399] =?UTF-8?q?feat:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20V?= =?UTF-8?q?2=20API=20=EA=B5=AC=ED=98=84=20(#316)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 기능 구현 * chore: enum 대문자화 * fix: 오타 정정 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../domain/auth/dto/AppleLoginRequestV2.java | 15 ++++++++ .../domain/auth/dto/KakaoLoginRequestV2.java | 21 +++++++++++ .../auth/presentation/OAuthController.java | 37 +++++++++++++++++-- .../security/JwtAuthenticationFilter.java | 4 +- .../domain/auth/service/OAuthService.java | 24 ++++++++++-- .../eatssu/domain/user/entity/DeviceType.java | 5 +++ .../ssu/eatssu/domain/user/entity/User.java | 23 ++++++++++-- .../domain/user/service/UserService.java | 8 ++++ 8 files changed, 125 insertions(+), 12 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequestV2.java create mode 100644 src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequestV2.java create mode 100644 src/main/java/ssu/eatssu/domain/user/entity/DeviceType.java diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequestV2.java b/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequestV2.java new file mode 100644 index 00000000..33042483 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/auth/dto/AppleLoginRequestV2.java @@ -0,0 +1,15 @@ +package ssu.eatssu.domain.auth.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import ssu.eatssu.domain.user.entity.DeviceType; +import ssu.eatssu.global.log.annotation.LogMask; + +// 애플 계정을 통해서 갤럭시 기기에도 접속을 할 수도 있다고 생각해서, DeviceType을 받도록 설계 +@Schema(title = "애플 로그인 및 회원가입 V2") +public record AppleLoginRequestV2( + @LogMask + @Schema(description = "identityToken", example = "eyJraWQiOiJXNldjT0tCIiwiYWxnIjoi...") + String identityToken, + @Schema(description = "deviceType", example = "IOS") + DeviceType deviceType +) {} diff --git a/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequestV2.java b/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequestV2.java new file mode 100644 index 00000000..20baf406 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/auth/dto/KakaoLoginRequestV2.java @@ -0,0 +1,21 @@ +package ssu.eatssu.domain.auth.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import ssu.eatssu.domain.user.entity.DeviceType; +import ssu.eatssu.global.log.annotation.LogMask; + +@Schema(title = "카카오 로그인 및 회원가입 V2") +public record KakaoLoginRequestV2( + @LogMask + @NotBlank(message = "이메일을 입력해주세요.") + @Email(message = "올바른 이메일 주소를 입력해주세요.") + @Schema(description = "이메일", example = "test@email.com") + String email, + @LogMask + @Schema(description = "providerId", example = "10378247832195") + String providerId, + @Schema(description = "deviceType", example = "IOS") + DeviceType deviceType +) {} diff --git a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java index 1ba3868f..d425ae70 100644 --- a/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java +++ b/src/main/java/ssu/eatssu/domain/auth/presentation/OAuthController.java @@ -13,9 +13,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import ssu.eatssu.domain.auth.dto.AppleLoginRequest; -import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; -import ssu.eatssu.domain.auth.dto.ValidRequest; +import ssu.eatssu.domain.auth.dto.*; import ssu.eatssu.domain.auth.service.OAuthService; import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.global.handler.response.BaseResponse; @@ -31,6 +29,7 @@ public class OAuthController { private final OAuthService oauthService; + // TODO : 로그인 & 회원 가입 마이그레이션 이후에 지울 것. @Operation(summary = "카카오 회원가입, 로그인 [인증 토큰 필요 X]", description = """ 카카오 회원가입, 로그인 API 입니다.

가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. @@ -49,6 +48,25 @@ public BaseResponse kakaoLogin(@Valid @RequestBody KakaoLoginRequest req return BaseResponse.success(tokens); } + @Operation(summary = "카카오 회원가입, 로그인 V2 [인증 토큰 필요 X]", description = """ + 카카오 회원가입, 로그인 V2 API 입니다.

+ 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "카카오 회원가입/로그인 성공") + }) + @PostMapping("/v2/kakao") + public BaseResponse kakaoLoginV2(@Valid @RequestBody KakaoLoginRequestV2 request) { + long startTime = System.currentTimeMillis(); + Tokens tokens = oauthService.kakaoLoginV2(request); + long endTime = System.currentTimeMillis(); + long duration = endTime - startTime; + log.info("OAuthWarmupRunner 완료 - 소요 시간: {} ms", duration); + + return BaseResponse.success(tokens); + } + + // TODO : 로그인 & 회원 가입 마이그레이션 이후에 지울 것. @Operation(summary = "애플 회원가입, 로그인 [인증 토큰 필요 X]", description = """ 애플 로그인, 회원가입 API 입니다.

가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. @@ -62,6 +80,19 @@ public BaseResponse appleLogin(@Valid @RequestBody AppleLoginRequest req return BaseResponse.success(tokens); } + @Operation(summary = "애플 회원가입, 로그인 V2 [인증 토큰 필요 X]", description = """ + 애플 로그인, 회원가입 API V2 입니다.

+ 가입된 회원일 경우 카카오 로그인, 미가입 회원일 경우 회원가입 후 자동 로그인됩니다. + """) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "애플 회원가입/로그인 성공") + }) + @PostMapping("/v2/apple") + public BaseResponse appleLoginV2(@Valid @RequestBody AppleLoginRequestV2 request) { + Tokens tokens = oauthService.appleLoginV2(request); + return BaseResponse.success(tokens); + } + @Operation(summary = "토큰 재발급", description = "accessToken, refreshToken 재발급 API 입니다.") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "토큰 재발급 성공") diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java index 327108b4..46dab1fb 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtAuthenticationFilter.java @@ -31,8 +31,8 @@ public class JwtAuthenticationFilter extends GenericFilterBean { "/v2/reviews/menus/**", "/v2/reviews/meals/**", "/actuator/**", "/error-test/**", "/swagger-ui.html", "/swagger-ui/**", "/v3/api-docs/**", "/swagger-resources/**", "/oauths/valid/token", "/admin/img/**", "/css/**", "/js/**", - "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**" - ); + "/favicon.ico", "/error/**", "/webjars/**", "/h2-console/**", + "/oauths/v2/kakao", "/oauths/v2/apple"); private final JwtTokenProvider jwtTokenProvider; @Override diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java index 7c263e70..737f5a53 100644 --- a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java @@ -6,10 +6,7 @@ import org.springframework.security.core.Authentication; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import ssu.eatssu.domain.auth.dto.AppleLoginRequest; -import ssu.eatssu.domain.auth.dto.KakaoLoginRequest; -import ssu.eatssu.domain.auth.dto.OAuthInfo; -import ssu.eatssu.domain.auth.dto.ValidRequest; +import ssu.eatssu.domain.auth.dto.*; import ssu.eatssu.domain.auth.entity.AppleAuthenticator; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.JwtTokenProvider; @@ -41,6 +38,14 @@ public Tokens kakaoLogin(KakaoLoginRequest request) { return generateOauthJwtTokens(user.getEmail(), KAKAO, request.providerId()); } + public Tokens kakaoLoginV2(KakaoLoginRequestV2 request) { + User user = userRepository.findByProviderId(request.providerId()) + .orElseGet(() -> userService.joinV2(request.email(), KAKAO, request.providerId(),request.deviceType())); + + return generateOauthJwtTokens(user.getEmail(), KAKAO, request.providerId()); + } + + public Tokens appleLogin(AppleLoginRequest request) { OAuthInfo oAuthInfo = appleAuthenticator.getOAuthInfoByIdentityToken(request.identityToken()); @@ -52,6 +57,17 @@ public Tokens appleLogin(AppleLoginRequest request) { return generateOauthJwtTokens(user.getEmail(), APPLE, oAuthInfo.providerId()); } + public Tokens appleLoginV2(AppleLoginRequestV2 request) { + OAuthInfo oAuthInfo = appleAuthenticator.getOAuthInfoByIdentityToken(request.identityToken()); + + User user = userRepository.findByProviderId(oAuthInfo.providerId()) + .orElseGet(() -> userService.joinV2(oAuthInfo.email(), APPLE, oAuthInfo.providerId(),request.deviceType())); + + updateAppleUserEmail(user, oAuthInfo.email()); + + return generateOauthJwtTokens(user.getEmail(), APPLE, oAuthInfo.providerId()); + } + public Tokens refreshTokens(Authentication authentication) { return jwtTokenProvider.generateTokens(authentication); } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/DeviceType.java b/src/main/java/ssu/eatssu/domain/user/entity/DeviceType.java new file mode 100644 index 00000000..a4679293 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/user/entity/DeviceType.java @@ -0,0 +1,5 @@ +package ssu.eatssu.domain.user.entity; + +public enum DeviceType { + IOS, ANDROID +} diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index 58e0c6f0..f1a75444 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -58,6 +58,8 @@ public class User extends BaseTimeEntity { private String credentials; @Enumerated(EnumType.STRING) private UserStatus status; + @Enumerated(EnumType.STRING) + private DeviceType deviceType; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "department_id") private Department department; @@ -66,7 +68,7 @@ public class User extends BaseTimeEntity { * Oauth 회원가입 용 생성자 */ private User(@NotNull String email, String nickname, @NotNull Role role, @NotNull OAuthProvider provider, - @NotNull String providerId, @NotNull UserStatus status, @NotNull String credentials) { + @NotNull String providerId, @NotNull UserStatus status, @NotNull String credentials, DeviceType deviceType) { this.email = email; this.nickname = nickname; this.role = role; @@ -74,8 +76,12 @@ private User(@NotNull String email, String nickname, @NotNull Role role, @NotNul this.providerId = providerId; this.status = status; this.credentials = credentials; + this.deviceType = deviceType; } + // TODO : 회원 가입 V2 마이그레이션 이후 삭제. + // 기본 생성자 : DeviceType을 Null로 받고 있는데 마이그레이션 이후 기본 생성자도 NotNull 붙이기. + // admin 정적 펙토리 : 여기도 null 넣는 부분 바꿔주기. /** * <--Static Factory Method--> * Oauth 회원가입 @@ -83,7 +89,18 @@ private User(@NotNull String email, String nickname, @NotNull Role role, @NotNul public static User create(@NotNull String email, @NotNull String nickname, @NotNull OAuthProvider provider, String providerId, String credentials) { - return new User(email, nickname, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials); + return new User(email, nickname, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials, null); + } + + /** + * <--Static Factory Method--> + * Oauth 회원가입 V2 + */ + public static User createV2(@NotNull String email, @NotNull String nickname, @NotNull OAuthProvider provider, + String providerId, + String credentials, + DeviceType deviceType) { + return new User(email, nickname, Role.USER, provider, providerId, UserStatus.ACTIVE, credentials, deviceType); } /** @@ -92,7 +109,7 @@ public static User create(@NotNull String email, @NotNull String nickname, @NotN * Role 은 다른 방법으로 세팅할 예정 */ public static User adminJoin(@NotNull String loginId, @NotNull String credentials) { - return new User(loginId, null, Role.USER, OAuthProvider.EATSSU, loginId, UserStatus.INACTIVE, credentials); + return new User(loginId, null, Role.USER, OAuthProvider.EATSSU, loginId, UserStatus.INACTIVE, credentials, null); } public void updateNickname(@NotNull String nickname) { diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index a9020694..d970b265 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -21,6 +21,7 @@ import ssu.eatssu.domain.user.dto.MyPageResponse; import ssu.eatssu.domain.user.dto.NicknameUpdateRequest; import ssu.eatssu.domain.user.dto.UpdateDepartmentRequest; +import ssu.eatssu.domain.user.entity.DeviceType; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.user.util.NicknameValidator; @@ -56,6 +57,13 @@ public User join(String email, OAuthProvider provider, String providerId) { return userRepository.save(user); } + public User joinV2(String email, OAuthProvider provider, String providerId, DeviceType deviceType) { + String credentials = createCredentials(provider, providerId); + String nickname = randomNicknameUtil.generate(); + User user = User.createV2(email, nickname, provider, providerId, credentials, deviceType); + return userRepository.save(user); + } + public void updateNickname(CustomUserDetails userDetails, NicknameUpdateRequest request) { User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); From 64e58bd09bad3f0769eb3bba12dc58f548f2239a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Sun, 21 Dec 2025 14:07:20 +0900 Subject: [PATCH 320/399] =?UTF-8?q?feat:=20Slack=20=EC=B1=84=EB=84=90?= =?UTF-8?q?=EB=AA=85=20=EB=B3=80=EA=B2=BD=EC=97=90=20=EB=94=B0=EB=A5=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EC=82=AC=ED=95=AD=20(#318)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../domain/inquiry/presentation/InquiryController.java | 4 ++++ .../java/ssu/eatssu/domain/slack/entity/SlackChannel.java | 5 ++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java b/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java index b5e346b9..081a050b 100644 --- a/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java +++ b/src/main/java/ssu/eatssu/domain/inquiry/presentation/InquiryController.java @@ -21,6 +21,10 @@ import ssu.eatssu.domain.slack.service.SlackService; import ssu.eatssu.global.handler.response.BaseResponse; +/** + * 문의하기는 카카오톡으로 이동되어 사용되지 않고 있습니다. + */ +@Deprecated @RestController @RequiredArgsConstructor @RequestMapping("/inquiries") diff --git a/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java b/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java index d9b142dc..8a39b807 100644 --- a/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java +++ b/src/main/java/ssu/eatssu/domain/slack/entity/SlackChannel.java @@ -4,9 +4,8 @@ public enum SlackChannel { - REPORT_CHANNEL("#신고"), - ADDMENU_CHANNEL("#메뉴_추가"), - ERROR_CHANNEL("#장애"), + REPORT_CHANNEL("#01-신고"), + // TODO: 회의에서 제안 후 삭제한다 USER_INQUIRY_CHANNEL("#유저-문의"), SERVER_ERROR("C092J4J6F0U"); From 0cc848a516f88102510db9d18b45bdb3b9205cfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Sun, 21 Dec 2025 15:02:04 +0900 Subject: [PATCH 321/399] =?UTF-8?q?feat:=20userDevice=20=EB=A1=9C=EA=B9=85?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=20(#320)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../auth/security/CustomUserDetails.java | 3 ++ .../auth/security/JwtTokenProvider.java | 2 +- .../auth/security/UserPrincipalDto.java | 5 ++- .../domain/auth/service/OAuthService.java | 16 +++++++++- .../ssu/eatssu/domain/user/entity/User.java | 2 ++ .../global/log/ControllerLogAspect.java | 32 ++++++++++++------- 6 files changed, 45 insertions(+), 15 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java index eb05c2a5..f24179e3 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetails.java @@ -5,6 +5,7 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; +import ssu.eatssu.domain.user.entity.DeviceType; import ssu.eatssu.domain.user.entity.User; import java.util.ArrayList; @@ -17,12 +18,14 @@ public class CustomUserDetails implements UserDetails { private final String email; private final String credentials; private final GrantedAuthority role; + private final DeviceType deviceType; public CustomUserDetails(User user) { this.id = user.getId(); this.email = user.getEmail(); this.credentials = user.getCredentials(); this.role = user.getRole(); + this.deviceType = user.getDeviceType(); } @Override diff --git a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java index e13ffaa1..2efd9a99 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/JwtTokenProvider.java @@ -146,7 +146,7 @@ public Authentication getAuthentication(String token) throws JsonProcessingExcep UserPrincipalDto userPrincipalDto = objectMapper.readValue(claims.getSubject(), UserPrincipalDto.class); CustomUserDetails principal = new CustomUserDetails(userPrincipalDto.getId(), userPrincipalDto.getEmail(), "", - authorities.get(0)); + authorities.get(0),userPrincipalDto.getDeviceType()); return new UsernamePasswordAuthenticationToken(principal, token, authorities); } diff --git a/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java b/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java index d2d189e6..163756f7 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/UserPrincipalDto.java @@ -4,6 +4,7 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import ssu.eatssu.domain.user.entity.DeviceType; @Getter @Builder @@ -12,13 +13,15 @@ public class UserPrincipalDto { private Long id; private String email; + private DeviceType deviceType; private String role; public static UserPrincipalDto from(CustomUserDetails userDetails) { return UserPrincipalDto.builder() .id(userDetails.getId()) .email(userDetails.getEmail()) + .deviceType(userDetails.getDeviceType()) .role(userDetails.getRole().getAuthority()) .build(); } -} \ No newline at end of file +} diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java index 737f5a53..2d6e7ad3 100644 --- a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java @@ -12,6 +12,7 @@ import ssu.eatssu.domain.auth.security.JwtTokenProvider; import ssu.eatssu.domain.auth.util.RandomNicknameUtil; import ssu.eatssu.domain.user.dto.Tokens; +import ssu.eatssu.domain.user.entity.DeviceType; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.user.service.UserService; @@ -38,10 +39,17 @@ public Tokens kakaoLogin(KakaoLoginRequest request) { return generateOauthJwtTokens(user.getEmail(), KAKAO, request.providerId()); } + /** + * V1 -> V2로 넘어가면서 DeviceType(IOS,ANDROID) 정보를 추가로 받게 되었고, 기존에 가입한 유저들은 추가로 기입해 주게 됩니다. + */ public Tokens kakaoLoginV2(KakaoLoginRequestV2 request) { User user = userRepository.findByProviderId(request.providerId()) .orElseGet(() -> userService.joinV2(request.email(), KAKAO, request.providerId(),request.deviceType())); + if (user.getDeviceType() == null) { + user.updateDeviceType(request.deviceType()); + } + return generateOauthJwtTokens(user.getEmail(), KAKAO, request.providerId()); } @@ -57,6 +65,9 @@ public Tokens appleLogin(AppleLoginRequest request) { return generateOauthJwtTokens(user.getEmail(), APPLE, oAuthInfo.providerId()); } + /** + * V1 -> V2로 넘어가면서 DeviceType(IOS,ANDROID) 정보를 추가로 받게 되었고, 기존에 가입한 유저들은 추가로 기입해 주게 됩니다. + */ public Tokens appleLoginV2(AppleLoginRequestV2 request) { OAuthInfo oAuthInfo = appleAuthenticator.getOAuthInfoByIdentityToken(request.identityToken()); @@ -65,6 +76,10 @@ public Tokens appleLoginV2(AppleLoginRequestV2 request) { updateAppleUserEmail(user, oAuthInfo.email()); + if (user.getDeviceType() == null) { + user.updateDeviceType(request.deviceType()); + } + return generateOauthJwtTokens(user.getEmail(), APPLE, oAuthInfo.providerId()); } @@ -113,5 +128,4 @@ private Tokens generateOauthJwtTokens(String email, OAuthProvider provider, Stri private String makeOauthCredentials(OAuthProvider provider, String providerId) { return provider + providerId; } - } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index f1a75444..5dc57fc0 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -124,4 +124,6 @@ public void updateDepartment(Department department) { this.department = department; } + // 회원 가입 v2 마이그레이션을 위한 메서드 (원래는 가입시 DeviceType을 받아야 합니다.) + public void updateDeviceType(DeviceType deviceType) { this.deviceType = deviceType; } } diff --git a/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java b/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java index 6690b3de..9c203f00 100644 --- a/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java +++ b/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java @@ -11,14 +11,12 @@ import org.aspectj.lang.reflect.MethodSignature; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.slack.service.SlackErrorNotifier; import ssu.eatssu.global.handler.response.BaseException; -import ssu.eatssu.global.handler.response.BaseResponseStatus; import ssu.eatssu.global.log.annotation.LogMask; import java.lang.reflect.Field; @@ -27,7 +25,6 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; - @Aspect @Component @Slf4j @@ -54,10 +51,11 @@ public Object logApi(ProceedingJoinPoint joinPoint) throws Throwable { Object[] args = joinPoint.getArgs(); String userId = getUserIdFromSecurityContext(); + String deviceType = getDeviceTypeFromSecurityContext(); - String userIdLog = "userId=" + userId; + String userLog = "userId=" + userId + ", deviceType=" + deviceType; - // 나머지 요청 인자 + // 나머지 요청 인자 조합 String otherArgsJson = IntStream.range(0, args.length) .filter(i -> !(args[i] instanceof HttpServletRequest)) .filter(i -> !(args[i] instanceof CustomUserDetails)) @@ -81,7 +79,7 @@ public Object logApi(ProceedingJoinPoint joinPoint) throws Throwable { }) .collect(Collectors.joining(", ")); - String argsJson = userIdLog + (otherArgsJson.isEmpty() ? "" : ", " + otherArgsJson); + String argsJson = userLog + (otherArgsJson.isEmpty() ? "" : ", " + otherArgsJson); log.info("REQUEST {} {} args={}", method, uri, argsJson); @@ -113,23 +111,33 @@ public Object logApi(ProceedingJoinPoint joinPoint) throws Throwable { } private String getCauseMessage(Throwable e) { - if (e instanceof BaseException) { - BaseException baseException = (BaseException) e; + if (e instanceof BaseException baseException) { return baseException.getStatus().getMessage(); } - String message = e.getMessage(); - return message != null ? message : e.getClass().getSimpleName(); + return e.getMessage() != null ? e.getMessage() : e.getClass().getSimpleName(); } private String getUserIdFromSecurityContext() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - if (authentication != null && authentication.isAuthenticated() && authentication.getPrincipal() instanceof CustomUserDetails) { - CustomUserDetails userDetails = (CustomUserDetails) authentication.getPrincipal(); + if (authentication != null && authentication.isAuthenticated() && + authentication.getPrincipal() instanceof CustomUserDetails userDetails) { return String.valueOf(userDetails.getId()); } return "anonymous"; } + private String getDeviceTypeFromSecurityContext() { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication != null && authentication.isAuthenticated() && + authentication.getPrincipal() instanceof CustomUserDetails userDetails) { + + return userDetails.getDeviceType() != null + ? userDetails.getDeviceType().name() + : "null"; + } + return "unknown"; + } + private Map toSafeMap(Object arg) { Map result = new HashMap<>(); for (Field field : arg.getClass().getDeclaredFields()) { From df29bb54833a5140fc84ac5a5e8f3e93106c2180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Sun, 21 Dec 2025 15:37:46 +0900 Subject: [PATCH 322/399] =?UTF-8?q?fix:=20security=20white=20list=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20(#322)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 959cfc3a..3072cee1 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -27,7 +27,7 @@ public class SecurityConfig { }; private static final String[] AUTH_WHITELIST = { - "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", + "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", "/oauths/v2/kakao","/oauths/v2/apple", "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics/**", "/v2/reviews/menus/**", "/v2/reviews/meals/**", "/actuator/**", "/error-test/**" }; From c88e926df79f6632e91b2b882e78d2bddffac0e3 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Tue, 23 Dec 2025 11:12:54 +0900 Subject: [PATCH 323/399] =?UTF-8?q?fix:=20=EB=A7=88=EC=9D=B4=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20rating=20null=EC=9D=B8=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=EC=88=98=EC=A0=95=20(#325)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 마이페이지 rating null인 문제 수정 * refactor: gemini 리뷰 반영 --- .../java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index c10579af..d38b3ebe 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -85,7 +85,7 @@ public static MyMealReviewResponse from(Review review) { return MyMealReviewResponse .builder() .reviewId(review.getId()) - .rating(review.getRating()) + .rating(review.getRating() != null ? review.getRating() : (review.getRatings() != null ? review.getRatings().getMainRating() : null)) .writtenAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imageUrls(imgUrlList) From 7e7727f89d78337c094158e8200acfcf71a357db Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Tue, 23 Dec 2025 11:43:43 +0900 Subject: [PATCH 324/399] =?UTF-8?q?hotfix:=20=EB=A7=88=EC=9D=B4=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20rating=20null=EC=9D=B8=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=EC=88=98=EC=A0=95=20(#326)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 마이페이지 rating null인 문제 수정 * refactor: gemini 리뷰 반영 * fix: rating null나오는 문제 수정 --- .../eatssu/domain/user/dto/MyMealReviewResponse.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index d38b3ebe..94196e26 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.review.dto.MenuIdNameLikeDto; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.ReviewMenuLike; @@ -82,10 +83,17 @@ public static MyMealReviewResponse from(Review review) { ); } + Ratings ratings = review.getRatings(); + int rating = 0; + + if (ratings != null) { + rating = ratings.getMainRating() != null ? ratings.getMainRating() : 0; + } + return MyMealReviewResponse .builder() .reviewId(review.getId()) - .rating(review.getRating() != null ? review.getRating() : (review.getRatings() != null ? review.getRatings().getMainRating() : null)) + .rating(rating) .writtenAt(review.getCreatedDate().toLocalDate()) .content(review.getContent()) .imageUrls(imgUrlList) From 94be4766c3d90aea8320b23e098400b9871d4eb3 Mon Sep 17 00:00:00 2001 From: JungminLee <85864699+JjungminLee@users.noreply.github.com> Date: Tue, 23 Dec 2025 12:19:32 +0900 Subject: [PATCH 325/399] =?UTF-8?q?fix:=20=EB=A7=88=EC=9D=B4=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20rating=20Primitive=ED=98=95=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#327)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 마이페이지 rating null인 문제 수정 * refactor: gemini 리뷰 반영 * fix: rating null나오는 문제 수정 * refactor: primitive형 rating 수정 --- .../eatssu/domain/review/entity/Review.java | 15 +++++++---- .../review/service/ReviewServiceV2.java | 26 +++++++++---------- .../domain/user/dto/MyMealReviewResponse.java | 4 +-- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index 4e6b2ef7..9c6a0299 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -1,10 +1,5 @@ package ssu.eatssu.domain.review.entity; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - import jakarta.persistence.AttributeOverride; import jakarta.persistence.AttributeOverrides; import jakarta.persistence.CascadeType; @@ -30,6 +25,11 @@ import ssu.eatssu.domain.user.entity.BaseTimeEntity; import ssu.eatssu.domain.user.entity.User; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /* * 251001 이정민 * 해당 엔티티의 rating은 reviewV1, reviewV2 api의 유지를 위해 지우지 마셔야 합니다. @@ -49,6 +49,11 @@ public class Review extends BaseTimeEntity { private String content; @Embedded + @AttributeOverrides({ + @AttributeOverride(name = "mainRating", column = @Column(name = "main_rating")), + @AttributeOverride(name = "amountRating", column = @Column(name = "amount_rating")), + @AttributeOverride(name = "tasteRating", column = @Column(name = "taste_rating")) + }) private Ratings ratings; // v2용 rating diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 9de77832..97f1049d 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -1,17 +1,5 @@ package ssu.eatssu.domain.review.service; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MEAL; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationEventPublisher; @@ -51,6 +39,19 @@ import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.log.event.LogEvent; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MEAL; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; + @Slf4j @Service @RequiredArgsConstructor @@ -112,7 +113,6 @@ public void createMenuReview(CustomUserDetails userDetails, CreateMenuReviewRequ request.getImageUrls().forEach(review::addReviewImage); reviewRepository.save(review); - menu.addReview(review); eventPublisher.publishEvent(LogEvent.of( diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index 94196e26..a70cf654 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -84,10 +84,10 @@ public static MyMealReviewResponse from(Review review) { } Ratings ratings = review.getRatings(); - int rating = 0; + Integer rating = review.getRating(); if (ratings != null) { - rating = ratings.getMainRating() != null ? ratings.getMainRating() : 0; + rating = ratings.getMainRating() != null ? ratings.getMainRating() : rating; } return MyMealReviewResponse From fb3b53e71f38735eb5d2c7bd0b993f4c92b368b8 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Tue, 23 Dec 2025 12:29:45 +0900 Subject: [PATCH 326/399] =?UTF-8?q?hotfix:=20rating=EC=9D=B4=20null?= =?UTF-8?q?=EC=9D=B8=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index a70cf654..be7fb078 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -86,8 +86,8 @@ public static MyMealReviewResponse from(Review review) { Ratings ratings = review.getRatings(); Integer rating = review.getRating(); - if (ratings != null) { - rating = ratings.getMainRating() != null ? ratings.getMainRating() : rating; + if (rating == null) { + rating = ratings.getMainRating(); } return MyMealReviewResponse From e2f32fa8eb9c5b8377cdc77517d7d54e436cae30 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Tue, 23 Dec 2025 12:45:44 +0900 Subject: [PATCH 327/399] =?UTF-8?q?hotfix:=20=EB=A7=88=EC=9D=B4=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20rating=20null=EB=82=98=EC=98=A4=EB=8A=94?= =?UTF-8?q?=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ssu/eatssu/domain/review/entity/Review.java | 5 ----- .../ssu/eatssu/domain/user/dto/MyMealReviewResponse.java | 6 ++++-- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/entity/Review.java b/src/main/java/ssu/eatssu/domain/review/entity/Review.java index 9c6a0299..5a8535cf 100644 --- a/src/main/java/ssu/eatssu/domain/review/entity/Review.java +++ b/src/main/java/ssu/eatssu/domain/review/entity/Review.java @@ -49,11 +49,6 @@ public class Review extends BaseTimeEntity { private String content; @Embedded - @AttributeOverrides({ - @AttributeOverride(name = "mainRating", column = @Column(name = "main_rating")), - @AttributeOverride(name = "amountRating", column = @Column(name = "amount_rating")), - @AttributeOverride(name = "tasteRating", column = @Column(name = "taste_rating")) - }) private Ratings ratings; // v2용 rating diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index be7fb078..99baae25 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -84,10 +84,12 @@ public static MyMealReviewResponse from(Review review) { } Ratings ratings = review.getRatings(); - Integer rating = review.getRating(); + Integer rating = 0; - if (rating == null) { + if (ratings != null) { rating = ratings.getMainRating(); + }else{ + rating = review.getRating(); } return MyMealReviewResponse From ef26c9ae320da0c1d71dd1fbd6717795b678a4d3 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Tue, 23 Dec 2025 13:06:41 +0900 Subject: [PATCH 328/399] =?UTF-8?q?hotfix:=20findMyReviews=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=EC=97=90=20Transactional=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 --- .../java/ssu/eatssu/domain/review/service/ReviewServiceV2.java | 1 + .../java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 97f1049d..97426794 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -427,6 +427,7 @@ public void deleteReview(CustomUserDetails userDetails, Long reviewId) { /** * 내 리뷰 리스트 조회 */ + @Transactional(readOnly = true) public SliceResponse findMyReviews(CustomUserDetails userDetails, Long lastReviewId, Pageable pageable) { User user = userRepository.findById(userDetails.getId()) diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index 99baae25..e82275d0 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -84,7 +84,7 @@ public static MyMealReviewResponse from(Review review) { } Ratings ratings = review.getRatings(); - Integer rating = 0; + Integer rating; if (ratings != null) { rating = ratings.getMainRating(); From 3844769fb4faf4b20ff8ce1eda7ba3b6f0d061c0 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Tue, 23 Dec 2025 13:28:44 +0900 Subject: [PATCH 329/399] =?UTF-8?q?hotfix:=20queryDSL=20->=20JPA=EB=A1=9C?= =?UTF-8?q?=20=EC=98=81=EC=86=8D=EC=84=B1=20=EC=BB=A8=ED=85=8D=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=B4=88=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/ReviewControllerV2.java | 7 ++-- .../review/repository/ReviewRepository.java | 35 ++++++++++++----- .../review/service/ReviewServiceV2.java | 39 +++++++++++++++++++ .../domain/user/dto/MyMealReviewResponse.java | 6 +-- 4 files changed, 70 insertions(+), 17 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java index dc25bda0..4904d764 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java @@ -28,7 +28,6 @@ import ssu.eatssu.domain.auth.security.CustomUserDetails; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; -import ssu.eatssu.domain.review.dto.CreateMenuReviewRequest; import ssu.eatssu.domain.review.dto.CreateMenuReviewRequestV2; import ssu.eatssu.domain.review.dto.MealReviewResponse; import ssu.eatssu.domain.review.dto.MealReviewsV2Response; @@ -223,9 +222,9 @@ public BaseResponse> getMyReviews( @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = reviewServiceV2.findMyReviews(customUserDetails, - lastReviewId, - pageable); + SliceResponse myReviews = reviewServiceV2.findMyReviewsV2(customUserDetails, + lastReviewId, + pageable); return BaseResponse.success(myReviews); } diff --git a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java index e4c87a4c..0f08ab08 100644 --- a/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java +++ b/src/main/java/ssu/eatssu/domain/review/repository/ReviewRepository.java @@ -1,7 +1,5 @@ package ssu.eatssu.domain.review.repository; -import java.util.Collection; -import java.util.List; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -10,6 +8,10 @@ import ssu.eatssu.domain.menu.entity.Meal; import ssu.eatssu.domain.menu.entity.Menu; import ssu.eatssu.domain.review.entity.Review; +import ssu.eatssu.domain.user.entity.User; + +import java.util.Collection; +import java.util.List; public interface ReviewRepository extends JpaRepository, ReviewRepositoryCustom { @@ -39,13 +41,26 @@ OR r.menu.id IN (SELECT mm.menu.id FROM MealMenu mm WHERE mm.meal.id = :mealId)) List findAllMealAndMenuReviews(@Param("mealId") Long mealId); @Query(""" - SELECT r FROM Review r - WHERE (r.meal.id = :mealId - OR r.menu.id IN (SELECT mm.menu.id FROM MealMenu mm WHERE mm.meal.id = :mealId)) - AND (:lastReviewId IS NULL OR r.id < :lastReviewId) - ORDER BY r.id DESC - """) + SELECT r FROM Review r + WHERE (r.meal.id = :mealId + OR r.menu.id IN (SELECT mm.menu.id FROM MealMenu mm WHERE mm.meal.id = :mealId)) + AND (:lastReviewId IS NULL OR r.id < :lastReviewId) + ORDER BY r.id DESC + """) Page findMealAndMenuReviews(@Param("mealId") Long mealId, - @Param("lastReviewId") Long lastReviewId, - Pageable pageable); + @Param("lastReviewId") Long lastReviewId, + Pageable pageable); + + @Query(""" + select r + from Review r + where r.user = :user + and (:lastReviewId is null or r.id < :lastReviewId) + order by r.id desc + """) + List findMyReviews( + @Param("user") User user, + @Param("lastReviewId") Long lastReviewId, + Pageable pageable + ); } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 97426794..14f4b3ad 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -4,8 +4,10 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationEventPublisher; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.auth.security.CustomUserDetails; @@ -446,6 +448,43 @@ public SliceResponse findMyReviews(CustomUserDetails userD .build(); } + @Transactional(readOnly = true) + public SliceResponse findMyReviewsV2( + CustomUserDetails userDetails, + Long lastReviewId, + Pageable pageable + ) { + User user = userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + + // pageSize + 1 로 조회 + Pageable slicePageable = + PageRequest.of( + pageable.getPageNumber(), + pageable.getPageSize() + 1, + Sort.by(Sort.Direction.DESC, "id") + ); + + List reviews = + reviewRepository.findMyReviews(user, lastReviewId, slicePageable); + + boolean hasNext = reviews.size() > pageable.getPageSize(); + if (hasNext) { + reviews.remove(pageable.getPageSize()); + } + + List responses = + reviews.stream() + .map(MyMealReviewResponse::from) + .toList(); + + return SliceResponse.builder() + .numberOfElements(responses.size()) + .hasNext(hasNext) + .dataList(responses) + .build(); + } + public ValidMenuForViewResponse validMenuForReview(Long mealId) { Meal meal = mealRepository.findById(mealId) diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index e82275d0..1544da42 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -84,11 +84,11 @@ public static MyMealReviewResponse from(Review review) { } Ratings ratings = review.getRatings(); - Integer rating; + Integer rating = null; - if (ratings != null) { + if (ratings != null && ratings.getMainRating() != null) { rating = ratings.getMainRating(); - }else{ + } else if (review.getRating() != null) { rating = review.getRating(); } From a7b34245fd6a723a8b1c3f5bbdb84efdd62252c7 Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Tue, 23 Dec 2025 13:44:09 +0900 Subject: [PATCH 330/399] =?UTF-8?q?hotfix:=20log=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/ReviewControllerV2.java | 6 +-- .../review/service/ReviewServiceV2.java | 53 +++++-------------- 2 files changed, 15 insertions(+), 44 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java index 4904d764..320c8e70 100644 --- a/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java +++ b/src/main/java/ssu/eatssu/domain/review/presentation/ReviewControllerV2.java @@ -222,9 +222,9 @@ public BaseResponse> getMyReviews( @Parameter(description = "마지막으로 조회된 reviewId값(첫 조회시 값 필요 없음)", in = ParameterIn.QUERY) @RequestParam(required = false) Long lastReviewId, @ParameterObject @PageableDefault(size = 20, sort = "date", direction = Sort.Direction.DESC) Pageable pageable, @AuthenticationPrincipal CustomUserDetails customUserDetails) { - SliceResponse myReviews = reviewServiceV2.findMyReviewsV2(customUserDetails, - lastReviewId, - pageable); + SliceResponse myReviews = reviewServiceV2.findMyReviews(customUserDetails, + lastReviewId, + pageable); return BaseResponse.success(myReviews); } diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 14f4b3ad..7028711c 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -4,10 +4,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationEventPublisher; import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; -import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ssu.eatssu.domain.auth.security.CustomUserDetails; @@ -17,6 +15,7 @@ import ssu.eatssu.domain.menu.persistence.MealRepository; import ssu.eatssu.domain.menu.persistence.MenuRepository; import ssu.eatssu.domain.menu.service.MealRatingService; +import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.dto.CreateMealReviewRequest; import ssu.eatssu.domain.review.dto.CreateMenuReviewRequestV2; @@ -429,7 +428,6 @@ public void deleteReview(CustomUserDetails userDetails, Long reviewId) { /** * 내 리뷰 리스트 조회 */ - @Transactional(readOnly = true) public SliceResponse findMyReviews(CustomUserDetails userDetails, Long lastReviewId, Pageable pageable) { User user = userRepository.findById(userDetails.getId()) @@ -438,6 +436,17 @@ public SliceResponse findMyReviews(CustomUserDetails userD Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, pageable); + sliceReviews.forEach(item -> { + Ratings r = item.getRatings(); + log.info( + "reviewId=" + item.getId() + + ", ratingCol=" + item.getRating() + + ", ratingsObj=" + (r == null ? "null" : "not-null") + + ", main=" + (r == null ? null : r.getMainRating()) + + ", amount=" + (r == null ? null : r.getAmountRating()) + ); + }); + List myMealReviewResponses = sliceReviews.getContent().stream() .map(MyMealReviewResponse::from).toList(); @@ -448,44 +457,6 @@ public SliceResponse findMyReviews(CustomUserDetails userD .build(); } - @Transactional(readOnly = true) - public SliceResponse findMyReviewsV2( - CustomUserDetails userDetails, - Long lastReviewId, - Pageable pageable - ) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - - // pageSize + 1 로 조회 - Pageable slicePageable = - PageRequest.of( - pageable.getPageNumber(), - pageable.getPageSize() + 1, - Sort.by(Sort.Direction.DESC, "id") - ); - - List reviews = - reviewRepository.findMyReviews(user, lastReviewId, slicePageable); - - boolean hasNext = reviews.size() > pageable.getPageSize(); - if (hasNext) { - reviews.remove(pageable.getPageSize()); - } - - List responses = - reviews.stream() - .map(MyMealReviewResponse::from) - .toList(); - - return SliceResponse.builder() - .numberOfElements(responses.size()) - .hasNext(hasNext) - .dataList(responses) - .build(); - } - - public ValidMenuForViewResponse validMenuForReview(Long mealId) { Meal meal = mealRepository.findById(mealId) .orElseThrow(() -> new BaseException(NOT_FOUND_MEAL)); From 0bccc08774b0422424b051c32a7cea04bbf3b51c Mon Sep 17 00:00:00 2001 From: JjungminLee Date: Tue, 23 Dec 2025 14:11:03 +0900 Subject: [PATCH 331/399] =?UTF-8?q?hotfix:=20legacy=20rating=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/review/service/ReviewServiceV2.java | 2 ++ .../ssu/eatssu/domain/user/dto/MyMealReviewResponse.java | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index 7028711c..f4318608 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -428,6 +428,7 @@ public void deleteReview(CustomUserDetails userDetails, Long reviewId) { /** * 내 리뷰 리스트 조회 */ + @Transactional(readOnly = true) public SliceResponse findMyReviews(CustomUserDetails userDetails, Long lastReviewId, Pageable pageable) { User user = userRepository.findById(userDetails.getId()) @@ -436,6 +437,7 @@ public SliceResponse findMyReviews(CustomUserDetails userD Slice sliceReviews = reviewRepository.findByUserOrderByIdDesc(user, lastReviewId, pageable); + sliceReviews.forEach(item -> { Ratings r = item.getRatings(); log.info( diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java index 1544da42..c3e2d904 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyMealReviewResponse.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; +import lombok.extern.slf4j.Slf4j; import ssu.eatssu.domain.rating.entity.Ratings; import ssu.eatssu.domain.review.dto.MenuIdNameLikeDto; import ssu.eatssu.domain.review.entity.Review; @@ -21,6 +22,7 @@ @Builder @Schema(title = "리뷰 상세 - 내 리뷰 리스트 조회 용") @Getter +@Slf4j public class MyMealReviewResponse { @Schema(description = "리뷰 식별자", example = "123") Long reviewId; @@ -83,6 +85,12 @@ public static MyMealReviewResponse from(Review review) { ); } + log.info("ratings = {}", review.getRatings()); + if (review.getRatings() != null) { + log.info("mainRating = {}", review.getRatings().getMainRating()); + } + log.info("legacy rating = {}", review.getRating()); + Ratings ratings = review.getRatings(); Integer rating = null; From 4ecb3af96479d4ad673784963e1f8ed9437954dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Thu, 1 Jan 2026 15:31:14 +0900 Subject: [PATCH 332/399] =?UTF-8?q?fix:=20=EC=88=AB=EC=9E=90=20=ED=97=88?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/user/util/NicknameValidator.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/user/util/NicknameValidator.java b/src/main/java/ssu/eatssu/domain/user/util/NicknameValidator.java index 37326bf6..119ebe36 100644 --- a/src/main/java/ssu/eatssu/domain/user/util/NicknameValidator.java +++ b/src/main/java/ssu/eatssu/domain/user/util/NicknameValidator.java @@ -102,13 +102,13 @@ public void validateNickname(String nickname){ throw new BaseException(BaseResponseStatus.CONSECUTIVE_HYPHEN_NICKNAME); } - // 한글 영어가 아닌 것으로 시작 - if (nickname.matches("^[^A-Za-z가-힣ㄱ-ㅎㅏ-ㅣ].*")) { + // 한글, 영어, 숫자가 아닌 것으로 시작 + if (nickname.matches("^[^A-Za-z가-힣ㄱ-ㅎㅏ-ㅣ0-9].*")) { throw new BaseException(BaseResponseStatus.INVALID_START_OF_NICKNAME); } - // 한글 영어가 아닌 것으로 마무리 - if (nickname.matches(".*[^A-Za-z가-힣ㄱ-ㅎㅏ-ㅣ]$")) { + // 한글, 영어, 숫자가 아닌 것으로 끝남 + if (nickname.matches(".*[^A-Za-z가-힣ㄱ-ㅎㅏ-ㅣ0-9]$")) { throw new BaseException(BaseResponseStatus.INVALID_END_OF_NICKNAME); } From eb2807787cd3b1537a3ea027ed474e43c11f6176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Mon, 19 Jan 2026 00:23:15 +0900 Subject: [PATCH 333/399] =?UTF-8?q?feat:=20=EC=9E=87=EC=8A=88=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EA=B4=80=EB=A0=A8=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EB=A1=9C=EA=B9=85=20+=20email=20unique=20=EC=A0=9C=EC=95=BD=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=20=EC=A0=9C=EA=B1=B0=20(#334)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: NPE관련 로깅 추가 * refactor: email unique제약 조건 제거 --------- Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../auth/entity/SystemAppleAuthenticator.java | 17 +++++++++++++---- .../ssu/eatssu/domain/user/entity/User.java | 1 - .../handler/response/BaseResponseStatus.java | 2 ++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java index 904c99b6..b560e71c 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java @@ -25,7 +25,7 @@ import java.util.Base64; import java.util.Map; -import static ssu.eatssu.global.handler.response.BaseResponseStatus.INVALID_IDENTITY_TOKEN; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.*; @Component @RequiredArgsConstructor @@ -49,10 +49,19 @@ private OAuthInfo getOAuthInfoByPublicKey(String identityToken, PublicKey public .parseClaimsJws(identityToken) .getBody(); - //Claims 에서 email, providerId(사용자 식별값) 를 추출한다. + Object emailObj = claims.get("email"); + Object providerIdObj = claims.get("sub"); + + if (providerIdObj == null) { + throw new BaseException(NOT_FOUND_PROVIDER_ID); + } + if (emailObj == null) { + throw new BaseException(NOT_FOUND_EMAIL); + } + try { - String email = claims.get("email").toString(); - String providerId = claims.get("sub").toString(); + String email = emailObj.toString(); + String providerId = providerIdObj.toString(); return new OAuthInfo(email, providerId); } catch (ExpiredJwtException exception) { throw new BaseException(INVALID_IDENTITY_TOKEN); diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index 5dc57fc0..10135982 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -49,7 +49,6 @@ public class User extends BaseTimeEntity { private Long id; @Enumerated(EnumType.STRING) private Role role; - @Column(unique = true) private String email; private String nickname; @Enumerated(EnumType.STRING) diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index 6009d49f..4189568e 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -75,6 +75,8 @@ public enum BaseResponseStatus { NOT_FOUND_PARTNERSHIP(false, HttpStatus.NOT_FOUND, 40410, "해당 제휴를 찾을 수 없습니다."), NOT_FOUND_PARTNERSHIP_RESTAURANT(false, HttpStatus.NOT_FOUND, 40411, "해당 제휴 식당을 찾을 수 없습니다."), INVALID_NICKNAME(false, HttpStatus.NOT_FOUND, 40412, "잘못된 닉네임입니다."), + NOT_FOUND_PROVIDER_ID(false, HttpStatus.NOT_FOUND, 40413, "Claims에서 ProviderId(sub)를 찾을 수 없습니다."), + NOT_FOUND_EMAIL(false, HttpStatus.NOT_FOUND, 40414, "Claims에서 이메일을 찾을 수 없습니다."), /** * 405 METHOD_NOT_ALLOWED 지원하지 않은 method 호출 From 33c6d8afb5c9005897d461b6c6f70e6eed1f7387 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Sat, 24 Jan 2026 12:19:23 +0900 Subject: [PATCH 334/399] Merge pull request #337 from EAT-SSU/chore/#336-login-v2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit chore: Login V2관련 조건문과 주석 변경 --- .../ssu/eatssu/domain/auth/service/OAuthService.java | 9 +++------ src/main/java/ssu/eatssu/domain/user/entity/User.java | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java index 2d6e7ad3..8310a54c 100644 --- a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java @@ -46,9 +46,8 @@ public Tokens kakaoLoginV2(KakaoLoginRequestV2 request) { User user = userRepository.findByProviderId(request.providerId()) .orElseGet(() -> userService.joinV2(request.email(), KAKAO, request.providerId(),request.deviceType())); - if (user.getDeviceType() == null) { - user.updateDeviceType(request.deviceType()); - } + user.updateDeviceType(request.deviceType()); + return generateOauthJwtTokens(user.getEmail(), KAKAO, request.providerId()); } @@ -76,9 +75,7 @@ public Tokens appleLoginV2(AppleLoginRequestV2 request) { updateAppleUserEmail(user, oAuthInfo.email()); - if (user.getDeviceType() == null) { - user.updateDeviceType(request.deviceType()); - } + user.updateDeviceType(request.deviceType()); return generateOauthJwtTokens(user.getEmail(), APPLE, oAuthInfo.providerId()); } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index 10135982..912d2129 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -123,6 +123,6 @@ public void updateDepartment(Department department) { this.department = department; } - // 회원 가입 v2 마이그레이션을 위한 메서드 (원래는 가입시 DeviceType을 받아야 합니다.) + // 추후에 기종이 바뀌더라도 업데이트합니다. + V1-> V2 마이그레이션을 수행하는 역할을 하기도 합니다. public void updateDeviceType(DeviceType deviceType) { this.deviceType = deviceType; } } From 5951fe219795789069be6fe28e1a248bb1dc8b16 Mon Sep 17 00:00:00 2001 From: Eunseo Song <162149585+eunseo9311@users.noreply.github.com> Date: Mon, 26 Jan 2026 17:37:35 +0900 Subject: [PATCH 335/399] =?UTF-8?q?chore:=20dev=20=ED=99=98=EA=B2=BD=20?= =?UTF-8?q?=ED=86=A0=ED=81=B0=20=EB=A7=8C=EB=A3=8C=20=EC=8B=9C=EA=B0=84=20?= =?UTF-8?q?=EB=8B=A8=EC=B6=95=20(=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=9A=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-dev.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index c328707f..e201296e 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -41,8 +41,8 @@ spring: jwt: secret: key: ${EATSSU_JWT_SECRET_DEV} - token-validity-in-seconds: 86400 - refresh-token-validity-in-seconds: 604800 + token-validity-in-seconds: 60 + refresh-token-validity-in-seconds: 180 #S3 cloud: From 5447d0ce2b4c2d321d9a87e8598fecb7f692f0d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= Date: Sun, 1 Feb 2026 23:23:41 +0900 Subject: [PATCH 336/399] =?UTF-8?q?fix:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0=20(#339)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 나용준 <141994188+youngJun99@users.noreply.github.com> --- .../auth/security/CustomUserDetailsService.java | 3 ++- .../ssu/eatssu/domain/auth/service/OAuthService.java | 12 ++++++++---- .../domain/user/repository/UserRepository.java | 4 +--- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java index 3e528821..3b1f6a5a 100644 --- a/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java +++ b/src/main/java/ssu/eatssu/domain/auth/security/CustomUserDetailsService.java @@ -17,9 +17,10 @@ public class CustomUserDetailsService implements UserDetailsService { private final UserRepository userRepository; + // OrderByIdAsc로 해줌으로써 처음 생성된 계정으로 연결된다. @Override public UserDetails loadUserByUsername(String username) { - User user = userRepository.findByEmail(username) + User user = userRepository.findFirstByEmailOrderByIdAsc(username) .orElseThrow(() -> new BaseException(BaseResponseStatus.NOT_FOUND_USER)); return new CustomUserDetails(user); } diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java index 8310a54c..1b46af83 100644 --- a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java @@ -34,7 +34,8 @@ public class OAuthService { public Tokens kakaoLogin(KakaoLoginRequest request) { User user = userRepository.findByProviderId(request.providerId()) - .orElseGet(() -> userService.join(request.email(), KAKAO, request.providerId())); + .orElseGet(() -> userRepository.findFirstByEmailOrderByIdAsc(request.email()) + .orElseGet(() -> userService.join(request.email(), KAKAO, request.providerId()))); return generateOauthJwtTokens(user.getEmail(), KAKAO, request.providerId()); } @@ -44,7 +45,8 @@ public Tokens kakaoLogin(KakaoLoginRequest request) { */ public Tokens kakaoLoginV2(KakaoLoginRequestV2 request) { User user = userRepository.findByProviderId(request.providerId()) - .orElseGet(() -> userService.joinV2(request.email(), KAKAO, request.providerId(),request.deviceType())); + .orElseGet(() -> userRepository.findFirstByEmailOrderByIdAsc(request.email()) + .orElseGet(() -> userService.joinV2(request.email(), KAKAO, request.providerId(),request.deviceType()))); user.updateDeviceType(request.deviceType()); @@ -57,7 +59,8 @@ public Tokens appleLogin(AppleLoginRequest request) { OAuthInfo oAuthInfo = appleAuthenticator.getOAuthInfoByIdentityToken(request.identityToken()); User user = userRepository.findByProviderId(oAuthInfo.providerId()) - .orElseGet(() -> userService.join(oAuthInfo.email(), APPLE, oAuthInfo.providerId())); + .orElseGet(() -> userRepository.findFirstByEmailOrderByIdAsc(oAuthInfo.email()) + .orElseGet(() -> userService.join(oAuthInfo.email(), APPLE, oAuthInfo.providerId()))); updateAppleUserEmail(user, oAuthInfo.email()); @@ -71,7 +74,8 @@ public Tokens appleLoginV2(AppleLoginRequestV2 request) { OAuthInfo oAuthInfo = appleAuthenticator.getOAuthInfoByIdentityToken(request.identityToken()); User user = userRepository.findByProviderId(oAuthInfo.providerId()) - .orElseGet(() -> userService.joinV2(oAuthInfo.email(), APPLE, oAuthInfo.providerId(),request.deviceType())); + .orElseGet(() -> userRepository.findFirstByEmailOrderByIdAsc(oAuthInfo.email()) + .orElseGet(() -> userService.joinV2(oAuthInfo.email(), APPLE, oAuthInfo.providerId(),request.deviceType()))); updateAppleUserEmail(user, oAuthInfo.email()); diff --git a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java index fbc10d27..de6fa15f 100644 --- a/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/repository/UserRepository.java @@ -13,9 +13,7 @@ public interface UserRepository extends JpaRepository { boolean existsByNickname(String nickname); - Optional findByEmail(String email); - Optional findByProviderId(String providerId); - Optional findByNickname(String nickname); + Optional findFirstByEmailOrderByIdAsc(String email); } From 3c57a1cf396ad9348ad70979baff4b3b19a11b0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=82=98=EC=9A=A9=EC=A4=80?= <141994188+youngJun99@users.noreply.github.com> Date: Wed, 4 Feb 2026 00:11:28 +0900 Subject: [PATCH 337/399] =?UTF-8?q?fix:=20=EA=B8=B0=EC=A1=B4=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=20=EC=A0=95=EB=B3=B4=EB=A1=9C=20credential=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ssu/eatssu/domain/auth/service/OAuthService.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java index 1b46af83..0f72b6dd 100644 --- a/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java +++ b/src/main/java/ssu/eatssu/domain/auth/service/OAuthService.java @@ -37,7 +37,7 @@ public Tokens kakaoLogin(KakaoLoginRequest request) { .orElseGet(() -> userRepository.findFirstByEmailOrderByIdAsc(request.email()) .orElseGet(() -> userService.join(request.email(), KAKAO, request.providerId()))); - return generateOauthJwtTokens(user.getEmail(), KAKAO, request.providerId()); + return generateOauthJwtTokens(user.getEmail(), user.getProvider(), user.getProviderId()); } /** @@ -51,7 +51,7 @@ public Tokens kakaoLoginV2(KakaoLoginRequestV2 request) { user.updateDeviceType(request.deviceType()); - return generateOauthJwtTokens(user.getEmail(), KAKAO, request.providerId()); + return generateOauthJwtTokens(user.getEmail(), user.getProvider(), user.getProviderId()); } @@ -64,7 +64,7 @@ public Tokens appleLogin(AppleLoginRequest request) { updateAppleUserEmail(user, oAuthInfo.email()); - return generateOauthJwtTokens(user.getEmail(), APPLE, oAuthInfo.providerId()); + return generateOauthJwtTokens(user.getEmail(), user.getProvider(), user.getProviderId()); } /** @@ -81,7 +81,7 @@ public Tokens appleLoginV2(AppleLoginRequestV2 request) { user.updateDeviceType(request.deviceType()); - return generateOauthJwtTokens(user.getEmail(), APPLE, oAuthInfo.providerId()); + return generateOauthJwtTokens(user.getEmail(), user.getProvider(), user.getProviderId()); } public Tokens refreshTokens(Authentication authentication) { From 244712f6c5c6ba95cf57e20f3b8967ca59e36a86 Mon Sep 17 00:00:00 2001 From: Eunseo Song <162149585+eunseo9311@users.noreply.github.com> Date: Wed, 4 Feb 2026 14:31:08 +0900 Subject: [PATCH 338/399] =?UTF-8?q?chore:=20dev=20=ED=99=98=EA=B2=BD=20?= =?UTF-8?q?=ED=86=A0=ED=81=B0=20=EB=A7=8C=EB=A3=8C=20=EC=8B=9C=EA=B0=84=20?= =?UTF-8?q?=EC=9B=90=EB=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-dev.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index e201296e..c328707f 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -41,8 +41,8 @@ spring: jwt: secret: key: ${EATSSU_JWT_SECRET_DEV} - token-validity-in-seconds: 60 - refresh-token-validity-in-seconds: 180 + token-validity-in-seconds: 86400 + refresh-token-validity-in-seconds: 604800 #S3 cloud: From 92fd5752fd0e312afc25d2ef6fd7d70d06ac7fbc Mon Sep 17 00:00:00 2001 From: Eunseo Song <162149585+eunseo9311@users.noreply.github.com> Date: Sat, 7 Feb 2026 18:05:50 +0900 Subject: [PATCH 339/399] =?UTF-8?q?feat:=20DB=20=EB=A7=88=EC=9D=B4?= =?UTF-8?q?=EA=B7=B8=EB=A0=88=EC=9D=B4=EC=85=98=20=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EB=A6=BD=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - V1: 베이스라인 스키마 정의 - V2: PK/FK 타입 정렬 (int → bigint) - V3: varchar → enum 타입 변환 - V4: 제약조건 및 기본값 추가 - 검증 SQL 및 마이그레이션 가이드 문서 추가 --- MIGRATION_GUIDE.md | 208 +++++++++++++++++ check_fk_constraints.sql | 31 +++ run_validation.sh | 44 ++++ .../resources/db/migration/V1__baseline.sql | 212 ++++++++++++++++++ .../migration/V2__align_pk_and_fk_types.sql | 38 ++++ .../migration/V3__convert_varchar_to_enum.sql | 52 +++++ .../V4__add_constraints_and_defaults.sql | 37 +++ validate_enum_data.sql | 80 +++++++ validate_simple.sql | 49 ++++ 9 files changed, 751 insertions(+) create mode 100644 MIGRATION_GUIDE.md create mode 100644 check_fk_constraints.sql create mode 100755 run_validation.sh create mode 100644 src/main/resources/db/migration/V1__baseline.sql create mode 100644 src/main/resources/db/migration/V2__align_pk_and_fk_types.sql create mode 100644 src/main/resources/db/migration/V3__convert_varchar_to_enum.sql create mode 100644 src/main/resources/db/migration/V4__add_constraints_and_defaults.sql create mode 100644 validate_enum_data.sql create mode 100644 validate_simple.sql diff --git a/MIGRATION_GUIDE.md b/MIGRATION_GUIDE.md new file mode 100644 index 00000000..b2de3946 --- /dev/null +++ b/MIGRATION_GUIDE.md @@ -0,0 +1,208 @@ +# DB 마이그레이션 실행 가이드 + +## 📁 마이그레이션 파일 목록 + +``` +src/main/resources/db/migration/ +├── V2__align_pk_and_fk_types.sql (PK/FK bigint 통일) +├── V3__convert_varchar_to_enum.sql (varchar → enum 변환) +└── V4__add_constraints_and_defaults.sql (제약조건 및 기본값) +``` + +## 🚀 실행 순서 + +### 1️⃣ 사전 준비 (필수) + +#### ✅ 스냅샷 확인 +- [ ] Dev DB 스냅샷 생성 완료 +- [ ] Prod DB 스냅샷 생성 완료 (실제 배포 전) + +#### ✅ 데이터 검증 (필수) +```bash +# varchar 데이터가 Enum과 일치하는지 검증 +./run_validation.sh +``` + +**중요:** 검증 결과가 비어있어야 정상 (불일치 데이터 없음) + +#### ✅ FK 제약조건명 확인 (선택) +```bash +# department, partnership의 FK 이름 확인 +mysql -h -u -p < check_fk_constraints.sql +``` + +--- + +### 2️⃣ Dev 환경 마이그레이션 + +#### 방법 1: Flyway 자동 실행 (권장) +```bash +# application-dev.yml의 spring.flyway 설정 확인 +# spring.jpa.hibernate.ddl-auto: none 확인 + +# 애플리케이션 실행 시 자동으로 마이그레이션 실행 +./gradlew bootRun --args='--spring.profiles.active=dev' +``` + +#### 방법 2: 수동 실행 +```bash +# V2 실행 +mysql -h -u -p < src/main/resources/db/migration/V2__align_pk_and_fk_types.sql + +# 검증: PK/FK 타입 확인 +mysql -h -u -p -e " + SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = '' + AND COLUMN_NAME IN ('college_id', 'department_id') + ORDER BY TABLE_NAME; +" + +# V3 실행 +mysql -h -u -p < src/main/resources/db/migration/V3__convert_varchar_to_enum.sql + +# 검증: Enum 타입 확인 +mysql -h -u -p -e " + SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = '' + AND DATA_TYPE = 'enum' + ORDER BY TABLE_NAME; +" + +# V4 실행 +mysql -h -u -p < src/main/resources/db/migration/V4__add_constraints_and_defaults.sql + +# 검증: 제약조건 확인 +mysql -h -u -p -e " + SHOW CREATE TABLE college; + SHOW CREATE TABLE menu; + SHOW CREATE TABLE review; +" +``` + +--- + +### 3️⃣ 마이그레이션 검증 + +#### 애플리케이션 테스트 +```bash +# 애플리케이션 재시작 +./gradlew bootRun --args='--spring.profiles.active=dev' + +# 로그 확인 +# - Enum 매핑 오류 없는지 +# - DB 연결 정상인지 +# - API 호출 정상인지 +``` + +#### DB 데이터 확인 +```sql +-- Enum 값 조회 테스트 +SELECT restaurant, time_part FROM meal LIMIT 10; +SELECT provider, role, status FROM user LIMIT 10; + +-- PK/FK 타입 확인 +SELECT + TABLE_NAME, + COLUMN_NAME, + DATA_TYPE, + COLUMN_TYPE +FROM information_schema.COLUMNS +WHERE TABLE_SCHEMA = '' + AND COLUMN_NAME IN ('college_id', 'department_id') +ORDER BY TABLE_NAME, COLUMN_NAME; + +-- 제약조건 확인 +SELECT + TABLE_NAME, + CONSTRAINT_NAME, + CONSTRAINT_TYPE +FROM information_schema.TABLE_CONSTRAINTS +WHERE TABLE_SCHEMA = '' + AND TABLE_NAME IN ('college', 'menu', 'review'); +``` + +--- + +### 4️⃣ Prod 환경 마이그레이션 + +#### 실행 전 체크리스트 +- [ ] Dev 환경 마이그레이션 완료 및 검증 +- [ ] Dev 환경 애플리케이션 정상 동작 확인 +- [ ] Prod DB 스냅샷 생성 완료 +- [ ] 데이터 검증 (validate_enum_data.sql) 완료 +- [ ] 사용량이 적은 시간대 선택 (새벽 2-4시 권장) +- [ ] 롤백 계획 수립 + +#### 실행 +```bash +# Prod 환경에서 동일하게 실행 +./gradlew bootRun --args='--spring.profiles.active=prod' + +# 또는 수동 실행 +mysql -h -u -p < V2__align_pk_and_fk_types.sql +mysql -h -u -p < V3__convert_varchar_to_enum.sql +mysql -h -u -p < V4__add_constraints_and_defaults.sql +``` + +--- + +## ⚠️ 주의사항 + +### 1. metadata lock 방지 +- 사용량이 적은 시간대에 실행 +- 실행 중 다른 세션에서 DDL 작업 금지 + +### 2. 데이터 검증 필수 +```bash +# V3 실행 전 반드시 검증 +./run_validation.sh +``` + +### 3. FK 제약조건 처리 +- V2에서 `SET FOREIGN_KEY_CHECKS = 0/1` 사용 +- FK 제약조건은 자동으로 유지됨 + +### 4. 롤백 방법 +```bash +# AWS RDS 스냅샷으로 복원 +aws rds restore-db-instance-from-db-snapshot \ + --db-instance-identifier your-db-restored \ + --db-snapshot-identifier eatssu-dev-pre-migration-20260207 +``` + +--- + +## 🐛 문제 발생 시 + +### 1. Enum 변환 실패 +``` +ERROR 1265: Data truncated for column 'restaurant' at row 1 +``` +**원인:** DB에 Enum에 없는 값이 존재 +**해결:** `validate_enum_data.sql` 실행하여 불일치 데이터 찾기 + +### 2. PK 타입 변경 실패 +``` +ERROR 1833: Cannot change column: used in a foreign key constraint +``` +**원인:** FK 제약조건이 걸려있음 +**해결:** V2 파일에 `SET FOREIGN_KEY_CHECKS = 0` 이미 포함됨 + +### 3. unique 제약조건 실패 +``` +ERROR 1062: Duplicate entry for key 'UK_college_name' +``` +**원인:** college.name에 중복 데이터 존재 +**해결:** 중복 데이터 정리 후 다시 실행 + +--- + +## ✅ 완료 확인 + +- [ ] V2, V3, V4 모두 정상 실행 +- [ ] flyway_schema_history 테이블에 기록 확인 +- [ ] 애플리케이션 정상 동작 확인 +- [ ] API 테스트 통과 +- [ ] 로그에 오류 없음 diff --git a/check_fk_constraints.sql b/check_fk_constraints.sql new file mode 100644 index 00000000..b8eb04b1 --- /dev/null +++ b/check_fk_constraints.sql @@ -0,0 +1,31 @@ +-- ========================= +-- FK 제약조건명 확인 +-- ========================= +-- 실행 방법: mysql -h -u -p < check_fk_constraints.sql + +-- department, partnership 테이블의 FK 제약조건 확인 +SELECT + CONSTRAINT_NAME AS 'FK 이름', + TABLE_NAME AS '테이블', + COLUMN_NAME AS '컬럼', + REFERENCED_TABLE_NAME AS '참조 테이블', + REFERENCED_COLUMN_NAME AS '참조 컬럼' +FROM information_schema.KEY_COLUMN_USAGE +WHERE TABLE_SCHEMA = DATABASE() + AND REFERENCED_TABLE_NAME IS NOT NULL + AND TABLE_NAME IN ('department', 'partnership') +ORDER BY TABLE_NAME, CONSTRAINT_NAME; + +-- ========================= +-- 전체 FK 제약조건 확인 (참고용) +-- ========================= +SELECT + TABLE_NAME AS '테이블', + CONSTRAINT_NAME AS 'FK 이름', + COLUMN_NAME AS '컬럼', + REFERENCED_TABLE_NAME AS '참조 테이블', + REFERENCED_COLUMN_NAME AS '참조 컬럼' +FROM information_schema.KEY_COLUMN_USAGE +WHERE TABLE_SCHEMA = DATABASE() + AND REFERENCED_TABLE_NAME IS NOT NULL +ORDER BY TABLE_NAME, CONSTRAINT_NAME; diff --git a/run_validation.sh b/run_validation.sh new file mode 100755 index 00000000..cc14d6be --- /dev/null +++ b/run_validation.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +# ========================= +# Enum 데이터 검증 스크립트 +# ========================= + +echo "==========================================" +echo "Enum 데이터 검증 시작" +echo "==========================================" +echo "" + +# 사용자에게 환경 선택 +read -p "검증할 환경을 선택하세요 (dev/prod): " ENV + +if [ "$ENV" != "dev" ] && [ "$ENV" != "prod" ]; then + echo "오류: 'dev' 또는 'prod'만 입력 가능합니다." + exit 1 +fi + +# DB 접속 정보 입력 +read -p "DB 호스트를 입력하세요: " DB_HOST +read -p "DB 사용자명을 입력하세요: " DB_USER +read -sp "DB 비밀번호를 입력하세요: " DB_PASS +echo "" +read -p "DB 이름을 입력하세요: " DB_NAME + +echo "" +echo "[$ENV 환경] 데이터 검증을 시작합니다..." +echo "" + +# 검증 쿼리 실행 +mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" < validate_enum_data.sql > validation_result_${ENV}_$(date +%Y%m%d_%H%M%S).txt 2>&1 + +if [ $? -eq 0 ]; then + echo "✅ 검증 완료! 결과 파일을 확인하세요: validation_result_${ENV}_$(date +%Y%m%d_%H%M%S).txt" + echo "" + echo "⚠️ 중요: 결과 파일에서 아래 내용을 확인하세요" + echo " - 불일치 데이터가 있는 경우: 데이터 정리 후 다시 검증" + echo " - 결과가 비어있는 경우: varchar → enum 변환 진행 가능" + echo "" +else + echo "❌ 검증 실패. 접속 정보를 확인하세요." + exit 1 +fi diff --git a/src/main/resources/db/migration/V1__baseline.sql b/src/main/resources/db/migration/V1__baseline.sql new file mode 100644 index 00000000..3c7a8d25 --- /dev/null +++ b/src/main/resources/db/migration/V1__baseline.sql @@ -0,0 +1,212 @@ +create table college +( + college_id bigint auto_increment + primary key, + name varchar(255) not null, + constraint UK_nyc2rxbj71rdhcw055436agb5 + unique (name) +); + +create table department +( + department_id bigint auto_increment + primary key, + name varchar(255) not null, + college_id bigint null, + constraint FK6p7527hkl1k5a92k34d8yye97 + foreign key (college_id) references college (college_id) +); + +create table meal +( + meal_id bigint auto_increment + primary key, + date date null, + price int null, + restaurant enum ('DODAM', 'DORMITORY', 'FOOD_COURT', 'SNACK_CORNER', 'HAKSIK', 'FACULTY') null, + time_part enum ('MORNING', 'LUNCH', 'DINNER') null +); + +create table menu_category +( + menu_category_id bigint auto_increment + primary key, + name varchar(255) null, + restaurant enum ('DODAM', 'DORMITORY', 'FOOD_COURT', 'SNACK_CORNER', 'HAKSIK', 'FACULTY') null +); + +create table menu +( + menu_id bigint auto_increment + primary key, + is_discontinued bit null, + like_count int null, + name varchar(255) null, + price int null, + restaurant enum ('DODAM', 'DORMITORY', 'FOOD_COURT', 'SNACK_CORNER', 'HAKSIK', 'FACULTY') null, + unlike_count int null, + menu_category_id bigint null, + constraint FKpyeafaiqn171tt9u4atxl9de7 + foreign key (menu_category_id) references menu_category (menu_category_id) +); + +create table meal_menu +( + meal_menu_id bigint auto_increment + primary key, + meal_id bigint null, + menu_id bigint null, + constraint FK4csi2rxcc80koaiybdjkpfntx + foreign key (meal_id) references meal (meal_id), + constraint FK5ywj42p0hun7ifyfd3p3pxxnt + foreign key (menu_id) references menu (menu_id) +); + +create table partnership_restaurant +( + partnership_restaurant_id bigint auto_increment + primary key, + latitude double not null, + longitude double not null, + restaurant_type enum ('RESTAURANT', 'CAFE', 'PUB') not null, + store_name varchar(255) not null +); + +create table partnership +( + partnership_id bigint auto_increment + primary key, + description varchar(255) not null, + end_date date not null, + start_date date not null, + partnership_restaurant_id bigint null, + partnership_college_id bigint null, + partnership_department_id bigint null, + constraint FK3we90emq62kx2w4qvcje88soq + foreign key (partnership_restaurant_id) references partnership_restaurant (partnership_restaurant_id), + constraint FKf71ovavgpo8nn0eusnwfxi58b + foreign key (partnership_department_id) references department (department_id), + constraint FKp5qgfntyy03gl0n2t4t9bar7 + foreign key (partnership_college_id) references college (college_id) +); + +create table user +( + user_id bigint auto_increment + primary key, + created_date datetime(6) not null, + modified_date datetime(6) not null, + credentials varchar(255) null, + email varchar(255) null, + nickname varchar(255) null, + provider enum ('EATSSU', 'KAKAO', 'APPLE') null, + provider_id varchar(255) null, + role enum ('USER', 'ADMIN') null, + status enum ('ACTIVE', 'INACTIVE') null, + department_id bigint null, + device_type enum ('IOS', 'ANDROID') null, + constraint UK_ob8kqyqqgmefl0aco34akdtpe + unique (email), + constraint FKgkh2fko1e4ydv1y6vtrwdc6my + foreign key (department_id) references department (department_id) +); + +create table inquiry +( + user_inquiry_id bigint auto_increment + primary key, + created_date datetime(6) not null, + modified_date datetime(6) not null, + content varchar(255) null, + email varchar(255) null, + status enum ('WAITING', 'ANSWERED', 'HOLD') null, + user_id bigint null, + constraint FKff1ylwlwujmed7diqs8ykf6pv + foreign key (user_id) references user (user_id) +); + +create table partnership_like +( + partnership_like_id bigint auto_increment + primary key, + partnership_restaurant_id bigint null, + user_id bigint null, + constraint FKcwju0bkiwim9w4lc9v27pkdit + foreign key (user_id) references user (user_id), + constraint FKhb06n2mees4p3gxqqrj414q3u + foreign key (partnership_restaurant_id) references partnership_restaurant (partnership_restaurant_id) +); + +create table review +( + review_id bigint auto_increment + primary key, + created_date datetime(6) not null, + modified_date datetime(6) not null, + content varchar(300) null, + rating int null, + amount_rating int null, + main_rating int null, + taste_rating int null, + meal_id bigint null, + menu_id bigint null, + user_id bigint null, + constraint FKbsl9qcmq2sb7otlbp6ibmmwer + foreign key (meal_id) references meal (meal_id), + constraint FKiyf57dy48lyiftdrf7y87rnxi + foreign key (user_id) references user (user_id), + constraint FKkythy7xd59wvq6hwhv23xh7gw + foreign key (menu_id) references menu (menu_id) +); + +create table report +( + review_report_id bigint auto_increment + primary key, + created_date datetime(6) not null, + modified_date datetime(6) not null, + content varchar(255) null, + report_type enum ('NO_ASSOCIATE_CONTENT', 'IMPROPER_CONTENT', 'IMPROPER_ADVERTISEMENT', 'COPY', 'COPYRIGHT', 'EXTRA') null, + status enum ('PENDING', 'IN_PROGRESS', 'RESOLVED', 'REJECTED', 'FALSE_REPORT') null, + review_id bigint null, + reporter_id bigint null, + constraint FKmcui10qh03nnf6h3glch6pvmy + foreign key (review_id) references review (review_id), + constraint FKndpjl61ubcm2tkf7ml1ynq13t + foreign key (reporter_id) references user (user_id) +); + +create table review_image +( + review_image_id bigint auto_increment + primary key, + image_url varchar(255) null, + review_id bigint null, + constraint FK16wp089tx9nm0obc217gvdd6l + foreign key (review_id) references review (review_id) +); + +create table review_like +( + review_like_id bigint auto_increment + primary key, + review_id bigint null, + user_id bigint null, + constraint FK68am9vk1s1e8n1v873meqkk0k + foreign key (review_id) references review (review_id), + constraint FKq4l36vpqal6v4ehikh67g8e49 + foreign key (user_id) references user (user_id) +); + +create table review_menu_like +( + review_menu_like_id bigint auto_increment + primary key, + is_like bit not null, + menu_id bigint null, + review_id bigint null, + constraint FK6ey698wnlhnv3xtn2r60kt3jw + foreign key (review_id) references review (review_id), + constraint FKo33fcdj516ypc6vjy5kamu2ck + foreign key (menu_id) references menu (menu_id) +); \ No newline at end of file diff --git a/src/main/resources/db/migration/V2__align_pk_and_fk_types.sql b/src/main/resources/db/migration/V2__align_pk_and_fk_types.sql new file mode 100644 index 00000000..89c1aa1e --- /dev/null +++ b/src/main/resources/db/migration/V2__align_pk_and_fk_types.sql @@ -0,0 +1,38 @@ +-- ========================= +-- V2: PK/FK 타입 정렬 (int → bigint) +-- ========================= +-- 실행 순서: +-- 1. FK 제약조건 해제 +-- 2. PK 타입 변경 +-- 3. FK 컬럼 타입 변경 +-- 4. FK 제약조건 재생성 +-- ========================= + +SET FOREIGN_KEY_CHECKS = 0; + +-- ========================= +-- 1. PK 타입 변경: int → bigint +-- ========================= + +ALTER TABLE college + MODIFY college_id BIGINT NOT NULL AUTO_INCREMENT; + +ALTER TABLE department + MODIFY department_id BIGINT NOT NULL AUTO_INCREMENT; + +-- ========================= +-- 2. FK 컬럼 타입 변경: int → bigint +-- ========================= + +ALTER TABLE department + MODIFY college_id BIGINT NOT NULL; + +ALTER TABLE partnership + MODIFY partnership_college_id BIGINT, + MODIFY partnership_department_id BIGINT; + +-- ========================= +-- 3. FK 제약조건 복구 +-- ========================= + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/src/main/resources/db/migration/V3__convert_varchar_to_enum.sql b/src/main/resources/db/migration/V3__convert_varchar_to_enum.sql new file mode 100644 index 00000000..150791cd --- /dev/null +++ b/src/main/resources/db/migration/V3__convert_varchar_to_enum.sql @@ -0,0 +1,52 @@ +-- ========================= +-- V3: varchar → enum 변환 +-- ========================= +-- ⚠️ 주의: 이 마이그레이션 실행 전 반드시 데이터 검증 필요 +-- 실행: ./run_validation.sh +-- ========================= + +-- ========================= +-- meal 테이블 +-- ========================= + +ALTER TABLE meal + MODIFY restaurant ENUM ('DODAM','DORMITORY','FOOD_COURT','SNACK_CORNER','HAKSIK','FACULTY'), + MODIFY time_part ENUM ('MORNING','LUNCH','DINNER'); + +-- ========================= +-- menu_category 테이블 +-- ========================= + +ALTER TABLE menu_category + MODIFY restaurant ENUM ('DODAM','DORMITORY','FOOD_COURT','SNACK_CORNER','HAKSIK','FACULTY'); + +-- ========================= +-- menu 테이블 +-- ========================= + +ALTER TABLE menu + MODIFY restaurant ENUM ('DODAM','DORMITORY','FOOD_COURT','SNACK_CORNER','HAKSIK','FACULTY'); + +-- ========================= +-- user 테이블 +-- ========================= + +ALTER TABLE user + MODIFY provider ENUM ('EATSSU','KAKAO','APPLE'), + MODIFY role ENUM ('USER','ADMIN'), + MODIFY status ENUM ('ACTIVE','INACTIVE'); + +-- ========================= +-- inquiry 테이블 +-- ========================= + +ALTER TABLE inquiry + MODIFY status ENUM ('WAITING','ANSWERED','HOLD'); + +-- ========================= +-- report 테이블 +-- ========================= + +ALTER TABLE report + MODIFY report_type ENUM ('NO_ASSOCIATE_CONTENT','IMPROPER_CONTENT','IMPROPER_ADVERTISEMENT','COPY','COPYRIGHT','EXTRA'), + MODIFY status ENUM ('PENDING','IN_PROGRESS','RESOLVED','REJECTED','FALSE_REPORT'); diff --git a/src/main/resources/db/migration/V4__add_constraints_and_defaults.sql b/src/main/resources/db/migration/V4__add_constraints_and_defaults.sql new file mode 100644 index 00000000..443ea3d5 --- /dev/null +++ b/src/main/resources/db/migration/V4__add_constraints_and_defaults.sql @@ -0,0 +1,37 @@ +-- ========================= +-- V4: 제약조건 및 기본값 정렬 +-- ========================= +-- 1. NOT NULL 제약조건 +-- 2. default 값 +-- 3. rating 타입 통일 +-- 4. unique 제약조건 +-- ========================= + +-- ========================= +-- 1. NOT NULL 제약조건 +-- ========================= + +ALTER TABLE menu + MODIFY is_discontinued BIT NOT NULL; + +-- ========================= +-- 2. default 값 설정 +-- ========================= + +ALTER TABLE menu + MODIFY like_count INT DEFAULT 0, + MODIFY unlike_count INT DEFAULT 0; + +-- ========================= +-- 3. rating 타입 통일 (bigint → int) +-- ========================= + +ALTER TABLE review + MODIFY rating INT; + +-- ========================= +-- 4. unique 제약조건 추가 +-- ========================= + +ALTER TABLE college + ADD CONSTRAINT UK_college_name UNIQUE (name); \ No newline at end of file diff --git a/validate_enum_data.sql b/validate_enum_data.sql new file mode 100644 index 00000000..f5a78a38 --- /dev/null +++ b/validate_enum_data.sql @@ -0,0 +1,80 @@ +-- ========================= +-- varchar → enum 변환 전 데이터 검증 SQL +-- ========================= + +-- meal.restaurant 검증 (허용값: DODAM, DORMITORY, FOOD_COURT, SNACK_CORNER, HAKSIK, FACULTY) +SELECT DISTINCT restaurant, COUNT(*) as count +FROM meal +WHERE restaurant NOT IN ('DODAM','DORMITORY','FOOD_COURT','SNACK_CORNER','HAKSIK','FACULTY') +GROUP BY restaurant; + +-- meal.time_part 검증 (허용값: MORNING, LUNCH, DINNER) +SELECT DISTINCT time_part, COUNT(*) as count +FROM meal +WHERE time_part NOT IN ('MORNING','LUNCH','DINNER') +GROUP BY time_part; + +-- menu_category.restaurant 검증 +SELECT DISTINCT restaurant, COUNT(*) as count +FROM menu_category +WHERE restaurant NOT IN ('DODAM','DORMITORY','FOOD_COURT','SNACK_CORNER','HAKSIK','FACULTY') +GROUP BY restaurant; + +-- menu.restaurant 검증 +SELECT DISTINCT restaurant, COUNT(*) as count +FROM menu +WHERE restaurant NOT IN ('DODAM','DORMITORY','FOOD_COURT','SNACK_CORNER','HAKSIK','FACULTY') +GROUP BY restaurant; + +-- user.provider 검증 (허용값: EATSSU, KAKAO, APPLE) +SELECT DISTINCT provider, COUNT(*) as count +FROM user +WHERE provider NOT IN ('EATSSU','KAKAO','APPLE') +GROUP BY provider; + +-- user.role 검증 (허용값: USER, ADMIN) +SELECT DISTINCT role, COUNT(*) as count +FROM user +WHERE role NOT IN ('USER','ADMIN') +GROUP BY role; + +-- user.status 검증 (허용값: ACTIVE, INACTIVE) +SELECT DISTINCT status, COUNT(*) as count +FROM user +WHERE status NOT IN ('ACTIVE','INACTIVE') +GROUP BY status; + +-- inquiry.status 검증 (허용값: WAITING, ANSWERED, HOLD) +SELECT DISTINCT status, COUNT(*) as count +FROM inquiry +WHERE status NOT IN ('WAITING','ANSWERED','HOLD') +GROUP BY status; + +-- report.report_type 검증 (허용값: NO_ASSOCIATE_CONTENT, IMPROPER_CONTENT, IMPROPER_ADVERTISEMENT, COPY, COPYRIGHT, EXTRA) +SELECT DISTINCT report_type, COUNT(*) as count +FROM report +WHERE report_type NOT IN ('NO_ASSOCIATE_CONTENT','IMPROPER_CONTENT','IMPROPER_ADVERTISEMENT','COPY','COPYRIGHT','EXTRA') +GROUP BY report_type; + +-- report.status 검증 (허용값: PENDING, IN_PROGRESS, RESOLVED, REJECTED, FALSE_REPORT) +SELECT DISTINCT status, COUNT(*) as count +FROM report +WHERE status NOT IN ('PENDING','IN_PROGRESS','RESOLVED','REJECTED','FALSE_REPORT') +GROUP BY status; + +-- ========================= +-- 전체 데이터 분포 확인 +-- ========================= + +SELECT 'meal.restaurant' as table_column, restaurant as value, COUNT(*) as count FROM meal GROUP BY restaurant +UNION ALL +SELECT 'meal.time_part', time_part, COUNT(*) FROM meal GROUP BY time_part +UNION ALL +SELECT 'menu.restaurant', restaurant, COUNT(*) FROM menu GROUP BY restaurant +UNION ALL +SELECT 'user.provider', provider, COUNT(*) FROM user GROUP BY provider +UNION ALL +SELECT 'user.role', role, COUNT(*) FROM user GROUP BY role +UNION ALL +SELECT 'user.status', status, COUNT(*) FROM user GROUP BY status +ORDER BY table_column, value; \ No newline at end of file diff --git a/validate_simple.sql b/validate_simple.sql new file mode 100644 index 00000000..cc94c02e --- /dev/null +++ b/validate_simple.sql @@ -0,0 +1,49 @@ +-- ========================= +-- 간단 검증: Enum에 없는 값 찾기 +-- ========================= +-- DB 클라이언트에서 이 쿼리를 복사해서 실행하세요 +-- 결과가 0 rows면 정상! + +-- meal.restaurant 검증 +SELECT 'meal.restaurant' AS 테이블_컬럼, restaurant AS 불일치_값, COUNT(*) AS 개수 +FROM meal +WHERE restaurant NOT IN ('DODAM','DORMITORY','FOOD_COURT','SNACK_CORNER','HAKSIK','FACULTY') +GROUP BY restaurant + +UNION ALL + +-- meal.time_part 검증 +SELECT 'meal.time_part', time_part, COUNT(*) +FROM meal +WHERE time_part NOT IN ('MORNING','LUNCH','DINNER') +GROUP BY time_part + +UNION ALL + +-- user.provider 검증 +SELECT 'user.provider', provider, COUNT(*) +FROM user +WHERE provider NOT IN ('EATSSU','KAKAO','APPLE') +GROUP BY provider + +UNION ALL + +-- user.role 검증 +SELECT 'user.role', role, COUNT(*) +FROM user +WHERE role NOT IN ('USER','ADMIN') +GROUP BY role + +UNION ALL + +-- user.status 검증 +SELECT 'user.status', status, COUNT(*) +FROM user +WHERE status NOT IN ('ACTIVE','INACTIVE') +GROUP BY status; + +-- ========================= +-- 결과 해석: +-- - 0 rows 또는 Empty set → ✅ 마이그레이션 진행 가능 +-- - 데이터가 나오면 → ❌ 해당 데이터 정리 필요 +-- ========================= \ No newline at end of file From 773f1f7cc4a28aa086c95b8c759b640e9017bf39 Mon Sep 17 00:00:00 2001 From: Eunseo Song <162149585+eunseo9311@users.noreply.github.com> Date: Sat, 7 Feb 2026 18:14:12 +0900 Subject: [PATCH 340/399] =?UTF-8?q?fix:=20V4=EC=97=90=EC=84=9C=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=20UNIQUE=20=EC=A0=9C=EC=95=BD=EC=A1=B0=EA=B1=B4=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit V1에 이미 college.name의 UNIQUE 제약조건이 존재하므로 V4에서 중복 추가하는 부분 제거 --- .../db/migration/V4__add_constraints_and_defaults.sql | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/main/resources/db/migration/V4__add_constraints_and_defaults.sql b/src/main/resources/db/migration/V4__add_constraints_and_defaults.sql index 443ea3d5..94f0d694 100644 --- a/src/main/resources/db/migration/V4__add_constraints_and_defaults.sql +++ b/src/main/resources/db/migration/V4__add_constraints_and_defaults.sql @@ -27,11 +27,4 @@ ALTER TABLE menu -- ========================= ALTER TABLE review - MODIFY rating INT; - --- ========================= --- 4. unique 제약조건 추가 --- ========================= - -ALTER TABLE college - ADD CONSTRAINT UK_college_name UNIQUE (name); \ No newline at end of file + MODIFY rating INT; \ No newline at end of file From e9ac4e660555da2a8bf6ae8850fa632f58c8cc71 Mon Sep 17 00:00:00 2001 From: Eunseo Song <162149585+eunseo9311@users.noreply.github.com> Date: Sat, 7 Feb 2026 18:16:15 +0900 Subject: [PATCH 341/399] Update run_validation.sh Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- run_validation.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/run_validation.sh b/run_validation.sh index cc14d6be..d0ba237a 100755 --- a/run_validation.sh +++ b/run_validation.sh @@ -29,10 +29,11 @@ echo "[$ENV 환경] 데이터 검증을 시작합니다..." echo "" # 검증 쿼리 실행 -mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" < validate_enum_data.sql > validation_result_${ENV}_$(date +%Y%m%d_%H%M%S).txt 2>&1 +RESULT_FILE="validation_result_${ENV}_$(date +%Y%m%d_%H%M%S).txt" +mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" < validate_enum_data.sql > "$RESULT_FILE" 2>&1 if [ $? -eq 0 ]; then - echo "✅ 검증 완료! 결과 파일을 확인하세요: validation_result_${ENV}_$(date +%Y%m%d_%H%M%S).txt" + echo "✅ 검증 완료! 결과 파일을 확인하세요: $RESULT_FILE" echo "" echo "⚠️ 중요: 결과 파일에서 아래 내용을 확인하세요" echo " - 불일치 데이터가 있는 경우: 데이터 정리 후 다시 검증" From 4e0a89ef50309d94d96aaa7bfd5bacea709fc0b6 Mon Sep 17 00:00:00 2001 From: Eunseo Song <162149585+eunseo9311@users.noreply.github.com> Date: Sat, 7 Feb 2026 18:52:42 +0900 Subject: [PATCH 342/399] =?UTF-8?q?style:=20V4=20=EB=A7=88=EC=9D=B4?= =?UTF-8?q?=EA=B7=B8=EB=A0=88=EC=9D=B4=EC=85=98=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EB=81=9D=EC=97=90=20newline=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/db/migration/V4__add_constraints_and_defaults.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/db/migration/V4__add_constraints_and_defaults.sql b/src/main/resources/db/migration/V4__add_constraints_and_defaults.sql index 94f0d694..e6089f83 100644 --- a/src/main/resources/db/migration/V4__add_constraints_and_defaults.sql +++ b/src/main/resources/db/migration/V4__add_constraints_and_defaults.sql @@ -27,4 +27,4 @@ ALTER TABLE menu -- ========================= ALTER TABLE review - MODIFY rating INT; \ No newline at end of file + MODIFY rating INT; From 0356bd9c095abff90dd3ed270e97a4a16250b16b Mon Sep 17 00:00:00 2001 From: Eunseo Song <162149585+eunseo9311@users.noreply.github.com> Date: Sun, 15 Feb 2026 00:35:42 +0900 Subject: [PATCH 343/399] =?UTF-8?q?feat:=20Flyway=20=EC=9E=90=EB=8F=99=20?= =?UTF-8?q?=EB=A7=88=EC=9D=B4=EA=B7=B8=EB=A0=88=EC=9D=B4=EC=85=98=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 ++ src/main/resources/application-dev.yml | 7 +++++++ src/main/resources/application-prod.yml | 7 +++++++ 3 files changed, 16 insertions(+) diff --git a/build.gradle b/build.gradle index 9799a10a..5d8312ed 100644 --- a/build.gradle +++ b/build.gradle @@ -31,6 +31,8 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.flywaydb:flyway-core' + implementation 'org.flywaydb:flyway-mysql' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.jetbrains:annotations:20.1.0' implementation 'org.springframework.boot:spring-boot-starter-security' diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index c328707f..239f8e1c 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -5,6 +5,13 @@ server: spring: + ## Flyway + flyway: + enabled: true + baseline-on-migrate: true + baseline-version: 1 + locations: classpath:db/migration + ## Database datasource: driver-class-name: com.mysql.cj.jdbc.Driver diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 945f7fa8..aa2221ac 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -5,6 +5,13 @@ server: spring: + ## Flyway + flyway: + enabled: true + baseline-on-migrate: true + baseline-version: 1 + locations: classpath:db/migration + ## Database datasource: driver-class-name: com.mysql.cj.jdbc.Driver From 7b0b6bcd65871e83a468d19c0e702c763c11885b Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Fri, 13 Mar 2026 21:51:09 +0900 Subject: [PATCH 344/399] =?UTF-8?q?feat:=20=EC=98=88=EC=99=B8=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/entity/SystemAppleAuthenticator.java | 45 +++++++++++++------ .../handler/response/BaseResponseStatus.java | 1 + 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java index b560e71c..f1ed71a1 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java @@ -7,12 +7,14 @@ import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.Jwts; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import ssu.eatssu.domain.auth.dto.AppleKeys; import ssu.eatssu.domain.auth.dto.OAuthInfo; +import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; import java.math.BigInteger; @@ -29,9 +31,11 @@ @Component @RequiredArgsConstructor +@Slf4j public class SystemAppleAuthenticator implements AppleAuthenticator { private final RestTemplate restTemplate; + private final UserRepository userRepository; public OAuthInfo getOAuthInfoByIdentityToken(String identityToken) { PublicKey publicKey = generatePublicKey(identityToken); @@ -42,12 +46,16 @@ public OAuthInfo getOAuthInfoByIdentityToken(String identityToken) { * 애플 로그인 - PublicKey 를 통해 유저 정보(providerId, email) 조회 */ private OAuthInfo getOAuthInfoByPublicKey(String identityToken, PublicKey publicKey) { - // identityToken 에서 publicKey 서명을 통해 Claims 를 추출한다. - Claims claims = Jwts.parserBuilder() - .setSigningKey(publicKey) - .build() - .parseClaimsJws(identityToken) - .getBody(); + Claims claims; + try { + claims = Jwts.parserBuilder() + .setSigningKey(publicKey) + .build() + .parseClaimsJws(identityToken) + .getBody(); + } catch (ExpiredJwtException exception) { + throw new BaseException(INVALID_IDENTITY_TOKEN); + } Object emailObj = claims.get("email"); Object providerIdObj = claims.get("sub"); @@ -55,17 +63,26 @@ private OAuthInfo getOAuthInfoByPublicKey(String identityToken, PublicKey public if (providerIdObj == null) { throw new BaseException(NOT_FOUND_PROVIDER_ID); } + + String providerId = providerIdObj.toString(); + + // email 없는 경우 → Apple 재로그인 케이스 검증 (Apple 스펙상 최초 로그인 시에만 email 포함) if (emailObj == null) { - throw new BaseException(NOT_FOUND_EMAIL); + boolean existsUser = userRepository.findByProviderId(providerId).isPresent(); + + if (existsUser) { + // 가설 맞음: 기존 유저 재로그인 케이스 + log.info("[Apple Login] email claim 없음 & DB 유저 있음. 재로그인 케이스로 확인. providerId={}", providerId); + throw new BaseException(NOT_FOUND_EMAIL); + } else { + // 다른 원인: 신규 유저인데 email 없음 → 슬랙 알럿용 별도 에러코드 + log.warn("[Apple Login] email claim 없음 & DB 유저 없음. 원인 불명. providerId={}", providerId); + throw new BaseException(NOT_FOUND_APPLE_EMAIL_NEW_USER); + } } - try { - String email = emailObj.toString(); - String providerId = providerIdObj.toString(); - return new OAuthInfo(email, providerId); - } catch (ExpiredJwtException exception) { - throw new BaseException(INVALID_IDENTITY_TOKEN); - } + String email = emailObj.toString(); + return new OAuthInfo(email, providerId); } private PublicKey generatePublicKey(String identityToken) { diff --git a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java index 4189568e..dd264ff5 100644 --- a/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java +++ b/src/main/java/ssu/eatssu/global/handler/response/BaseResponseStatus.java @@ -77,6 +77,7 @@ public enum BaseResponseStatus { INVALID_NICKNAME(false, HttpStatus.NOT_FOUND, 40412, "잘못된 닉네임입니다."), NOT_FOUND_PROVIDER_ID(false, HttpStatus.NOT_FOUND, 40413, "Claims에서 ProviderId(sub)를 찾을 수 없습니다."), NOT_FOUND_EMAIL(false, HttpStatus.NOT_FOUND, 40414, "Claims에서 이메일을 찾을 수 없습니다."), + NOT_FOUND_APPLE_EMAIL_NEW_USER(false, HttpStatus.NOT_FOUND, 40415, "신규 Apple 유저인데 email claim이 없습니다."), /** * 405 METHOD_NOT_ALLOWED 지원하지 않은 method 호출 From e2e1ad32ebb8e69d70e985aa7e8d6eeeff2f1d6c Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Fri, 13 Mar 2026 22:14:14 +0900 Subject: [PATCH 345/399] =?UTF-8?q?fix:=20AuthControllerDocs=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95#2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/auth/entity/SystemAppleAuthenticator.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java index f1ed71a1..ce059b4f 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java @@ -71,11 +71,11 @@ private OAuthInfo getOAuthInfoByPublicKey(String identityToken, PublicKey public boolean existsUser = userRepository.findByProviderId(providerId).isPresent(); if (existsUser) { - // 가설 맞음: 기존 유저 재로그인 케이스 - log.info("[Apple Login] email claim 없음 & DB 유저 있음. 재로그인 케이스로 확인. providerId={}", providerId); + // 가설 맞음: 기존 유저 재로그인 케이스 → 슬랙 알럿으로 확인 + log.warn("[Apple Login] email claim 없음 & DB 유저 있음. 재로그인 케이스로 확인. providerId={}", providerId); throw new BaseException(NOT_FOUND_EMAIL); } else { - // 다른 원인: 신규 유저인데 email 없음 → 슬랙 알럿용 별도 에러코드 + // 다른 원인: 신규 유저인데 email 없음 → 슬랙 알럿으로 별도 구분 log.warn("[Apple Login] email claim 없음 & DB 유저 없음. 원인 불명. providerId={}", providerId); throw new BaseException(NOT_FOUND_APPLE_EMAIL_NEW_USER); } From 8ecdb074b1f8f8581b11b63dc4711ae36fbeb19c Mon Sep 17 00:00:00 2001 From: Eunseo Song <162149585+eunseo9311@users.noreply.github.com> Date: Sun, 22 Mar 2026 01:03:01 +0900 Subject: [PATCH 346/399] =?UTF-8?q?fix:=20Apple=20=EC=9E=AC=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EC=8B=9C=20email=20=EC=97=86=EB=8A=94=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0=20providerId=EB=A1=9C=20=EA=B8=B0=EC=A1=B4?= =?UTF-8?q?=20=EC=9C=A0=EC=A0=80=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/entity/SystemAppleAuthenticator.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java index ce059b4f..e6b39868 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java @@ -14,6 +14,7 @@ import org.springframework.web.util.UriComponentsBuilder; import ssu.eatssu.domain.auth.dto.AppleKeys; import ssu.eatssu.domain.auth.dto.OAuthInfo; +import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; @@ -68,17 +69,10 @@ private OAuthInfo getOAuthInfoByPublicKey(String identityToken, PublicKey public // email 없는 경우 → Apple 재로그인 케이스 검증 (Apple 스펙상 최초 로그인 시에만 email 포함) if (emailObj == null) { - boolean existsUser = userRepository.findByProviderId(providerId).isPresent(); - - if (existsUser) { - // 가설 맞음: 기존 유저 재로그인 케이스 → 슬랙 알럿으로 확인 - log.warn("[Apple Login] email claim 없음 & DB 유저 있음. 재로그인 케이스로 확인. providerId={}", providerId); - throw new BaseException(NOT_FOUND_EMAIL); - } else { - // 다른 원인: 신규 유저인데 email 없음 → 슬랙 알럿으로 별도 구분 - log.warn("[Apple Login] email claim 없음 & DB 유저 없음. 원인 불명. providerId={}", providerId); - throw new BaseException(NOT_FOUND_APPLE_EMAIL_NEW_USER); - } + log.info("[Apple Login] email claim 없음. providerId={}로 기존 유저 조회 시도", providerId); + User existingUser = userRepository.findByProviderId(providerId) + .orElseThrow(() -> new BaseException(NOT_FOUND_APPLE_EMAIL_NEW_USER)); + return new OAuthInfo(existingUser.getEmail(), providerId); } String email = emailObj.toString(); From b77bbe71c366e87792e4afd7b802a96d03443fd6 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Sun, 22 Mar 2026 20:51:13 +0900 Subject: [PATCH 347/399] =?UTF-8?q?refactor:=20getOAuthInfoByPublicKey()?= =?UTF-8?q?=EC=9D=98=20=EC=9D=B4=EB=A9=94=EC=9D=BC=20=EC=97=86=EB=8A=94=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0=20=EB=A1=9C=EC=A7=81=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/entity/SystemAppleAuthenticator.java | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java index e6b39868..00e49f70 100644 --- a/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java +++ b/src/main/java/ssu/eatssu/domain/auth/entity/SystemAppleAuthenticator.java @@ -7,14 +7,12 @@ import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.Jwts; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import ssu.eatssu.domain.auth.dto.AppleKeys; import ssu.eatssu.domain.auth.dto.OAuthInfo; -import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; @@ -32,7 +30,6 @@ @Component @RequiredArgsConstructor -@Slf4j public class SystemAppleAuthenticator implements AppleAuthenticator { private final RestTemplate restTemplate; @@ -67,16 +64,14 @@ private OAuthInfo getOAuthInfoByPublicKey(String identityToken, PublicKey public String providerId = providerIdObj.toString(); - // email 없는 경우 → Apple 재로그인 케이스 검증 (Apple 스펙상 최초 로그인 시에만 email 포함) + // email 없는 경우 → Apple 재로그인 케이스 (Apple 스펙상 최초 로그인 시에만 email 포함) if (emailObj == null) { - log.info("[Apple Login] email claim 없음. providerId={}로 기존 유저 조회 시도", providerId); - User existingUser = userRepository.findByProviderId(providerId) + return userRepository.findByProviderId(providerId) + .map(user -> new OAuthInfo(user.getEmail(), providerId)) .orElseThrow(() -> new BaseException(NOT_FOUND_APPLE_EMAIL_NEW_USER)); - return new OAuthInfo(existingUser.getEmail(), providerId); } - String email = emailObj.toString(); - return new OAuthInfo(email, providerId); + return new OAuthInfo(emailObj.toString(), providerId); } private PublicKey generatePublicKey(String identityToken) { From b2b41cd3270d5ee352472dc9df4d9c46ee2d6538 Mon Sep 17 00:00:00 2001 From: Yu Jin Date: Fri, 27 Mar 2026 02:01:23 +0900 Subject: [PATCH 348/399] =?UTF-8?q?fix:=20=EB=A9=94=EB=89=B4=20=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20v2=20menuLike=20null=20=EC=9A=94=EC=B2=AD=EC=9D=84?= =?UTF-8?q?=20400=EC=9C=BC=EB=A1=9C=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit menuLike/menuId 누락 시 FAILED_VALIDATION으로 실패시키고, isLike/imageUrls/menuLikes null도 안전하게 처리해 NPE를 방지합니다. --- .../review/service/ReviewServiceV2.java | 57 +++++++++++++------ 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java index f4318608..25671410 100644 --- a/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java +++ b/src/main/java/ssu/eatssu/domain/review/service/ReviewServiceV2.java @@ -51,6 +51,7 @@ import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_MENU; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_REVIEW; import static ssu.eatssu.global.handler.response.BaseResponseStatus.NOT_FOUND_USER; +import static ssu.eatssu.global.handler.response.BaseResponseStatus.FAILED_VALIDATION; import static ssu.eatssu.global.handler.response.BaseResponseStatus.REVIEW_PERMISSION_DENIED; @Slf4j @@ -78,12 +79,18 @@ public void createMealReview(CustomUserDetails userDetails, CreateMealReviewRequ Review review = request.toReviewEntity(user, meal); - request.getImageUrls().forEach(review::addReviewImage); + List imageUrls = Optional.ofNullable(request.getImageUrls()).orElse(Collections.emptyList()); + imageUrls.forEach(review::addReviewImage); - for (MenuLikeRequest menuLike : request.getMenuLikes()) { + List menuLikes = Optional.ofNullable(request.getMenuLikes()).orElse(Collections.emptyList()); + for (MenuLikeRequest menuLike : menuLikes) { + if (menuLike == null || menuLike.getMenuId() == null) { + throw new BaseException(FAILED_VALIDATION); + } Menu menu = menuRepository.findById(menuLike.getMenuId()) .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); - review.addReviewMenuLike(menu, menuLike.getIsLike()); + boolean isLike = Boolean.TRUE.equals(menuLike.getIsLike()); + review.addReviewMenuLike(menu, isLike); } reviewRepository.save(review); @@ -93,8 +100,8 @@ public void createMealReview(CustomUserDetails userDetails, CreateMealReviewRequ review.getId(), meal.getId(), user.getId(), - request.getImageUrls().size(), - request.getMenuLikes().size()) + imageUrls.size(), + menuLikes.size()) )); } @@ -106,23 +113,31 @@ public void createMenuReview(CustomUserDetails userDetails, CreateMenuReviewRequ User user = userRepository.findById(userDetails.getId()) .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - Menu menu = menuRepository.findById(request.getMenuLike().getMenuId()) + MenuLikeRequest menuLike = request.getMenuLike(); + if (menuLike == null || menuLike.getMenuId() == null) { + throw new BaseException(FAILED_VALIDATION); + } + + Menu menu = menuRepository.findById(menuLike.getMenuId()) .orElseThrow(() -> new BaseException(NOT_FOUND_MENU)); Review review = request.toReviewEntity(user, menu); - review.addReviewMenuLike(menu, request.getMenuLike().getIsLike()); - request.getImageUrls().forEach(review::addReviewImage); + boolean isLike = Boolean.TRUE.equals(menuLike.getIsLike()); + review.addReviewMenuLike(menu, isLike); + + List imageUrls = Optional.ofNullable(request.getImageUrls()).orElse(Collections.emptyList()); + imageUrls.forEach(review::addReviewImage); reviewRepository.save(review); menu.addReview(review); eventPublisher.publishEvent(LogEvent.of( - String.format("MenuReview created: reviewId=%d, menuId=%d, userId=%d, isLike=%s, imageUrl=%s", + String.format("MenuReview created: reviewId=%d, menuId=%d, userId=%d, isLike=%s, images=%d", review.getId(), menu.getId(), user.getId(), - request.getMenuLike().getIsLike(), - request.getImageUrls().size()) + isLike, + imageUrls.size()) )); } @@ -385,12 +400,20 @@ public void updateReview(CustomUserDetails userDetails, Long reviewId, UpdateMea throw new BaseException(REVIEW_PERMISSION_DENIED); } - Map menuLikes = request.getMenuLikes().stream() - .collect(Collectors.toMap( - menuLike -> menuRepository.findById(menuLike.getMenuId()) - .orElseThrow(() -> new BaseException( - NOT_FOUND_MENU)), - MenuLikeRequest::getIsLike)); + List menuLikeRequests = Optional.ofNullable(request.getMenuLikes()).orElse(Collections.emptyList()); + + Map menuLikes = menuLikeRequests.stream() + .filter(Objects::nonNull) + .collect(Collectors.toMap( + menuLike -> { + if (menuLike.getMenuId() == null) { + throw new BaseException(FAILED_VALIDATION); + } + return menuRepository.findById(menuLike.getMenuId()) + .orElseThrow(() -> new BaseException( + NOT_FOUND_MENU)); + }, + menuLike -> Boolean.TRUE.equals(menuLike.getIsLike()))); review.update(request.getContent(), request.getRating(), menuLikes); reviewRepository.save(review); From d4962586f9c112fc6a9635e44bcd926db9eebfc9 Mon Sep 17 00:00:00 2001 From: Yu Jin Date: Fri, 27 Mar 2026 02:01:28 +0900 Subject: [PATCH 349/399] =?UTF-8?q?fix:=20=EB=A9=94=EB=89=B4=20=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20v2=20=EC=9A=94=EC=B2=AD=20=ED=95=84=EC=88=98?= =?UTF-8?q?=EA=B0=92=20=EA=B2=80=EC=A6=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CreateMenuReviewRequestV2의 rating/menuLike와 MenuLikeRequest의 menuId에 검증을 추가해 잘못된 요청을 조기에 400으로 처리합니다. --- .../eatssu/domain/review/dto/CreateMenuReviewRequestV2.java | 5 +++++ .../java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequestV2.java b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequestV2.java index 9041e548..a89149a0 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequestV2.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/CreateMenuReviewRequestV2.java @@ -1,8 +1,10 @@ package ssu.eatssu.domain.review.dto; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.Valid; import jakarta.validation.constraints.Max; import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Getter; import ssu.eatssu.domain.menu.entity.Menu; @@ -16,10 +18,13 @@ @AllArgsConstructor public class CreateMenuReviewRequestV2 { @Schema(description = "평점", example = "5") + @NotNull @Min(1) @Max(5) private Integer rating; + @NotNull + @Valid private MenuLikeRequest menuLike; @Schema(description = "한줄평", example = "이 메뉴 진짜 맛있어요!") diff --git a/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java b/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java index b35c19df..1d37f694 100644 --- a/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java +++ b/src/main/java/ssu/eatssu/domain/review/dto/MenuLikeRequest.java @@ -1,6 +1,7 @@ package ssu.eatssu.domain.review.dto; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Getter; @@ -9,6 +10,7 @@ @AllArgsConstructor public class MenuLikeRequest { @Schema(description = "메뉴 식별자", example = "123") + @NotNull private Long menuId; @Schema(description = "좋아요 선택", example = "좋아요 : true (기본값은 false)") private Boolean isLike; From 6734ce2ee5bf7314b0e2fda27d001cb86494afc4 Mon Sep 17 00:00:00 2001 From: Yu Jin Date: Fri, 27 Mar 2026 12:26:03 +0900 Subject: [PATCH 350/399] Update pull request template to remove resolved issue placeholder (#353) Removed placeholder for resolved issue number in PR template. --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index bca24322..dbac20df 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,7 +1,7 @@ ## #️⃣ Issue Number - +- resolved # ## 📝 요약(Summary) From 9008f40edab301c569ac55bc97f761d1cf41e463 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Mon, 11 May 2026 00:37:05 +0900 Subject: [PATCH 351/399] =?UTF-8?q?feat:=20Partnership=EC=97=90=20period?= =?UTF-8?q?=5Ftype=20=EC=BB=AC=EB=9F=BC=20=EC=B6=94=EA=B0=80=20=EB=B0=8F?= =?UTF-8?q?=20PartnershipInfo=EC=97=90=20period=5Ftype=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 --- .../eatssu/domain/partnership/dto/PartnershipInfo.java | 3 +++ .../domain/partnership/dto/PartnershipResponse.java | 1 - .../ssu/eatssu/domain/partnership/entity/Partnership.java | 8 ++++++++ .../ssu/eatssu/domain/partnership/entity/PeriodType.java | 6 ++++++ 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ssu/eatssu/domain/partnership/entity/PeriodType.java diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java index b50fe3e1..3250dee9 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java @@ -4,6 +4,7 @@ import lombok.Getter; import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; +import ssu.eatssu.domain.partnership.entity.PeriodType; import java.time.LocalDate; @@ -18,6 +19,7 @@ public class PartnershipInfo { private String description; private LocalDate startDate; private LocalDate endDate; + private PeriodType periodType; public static PartnershipInfo fromEntity(Partnership partnership, PartnershipRestaurant restaurant, @@ -27,6 +29,7 @@ public static PartnershipInfo fromEntity(Partnership partnership, .description(partnership.getDescription()) .startDate(partnership.getStartDate()) .endDate(partnership.getEndDate()) + .periodType(partnership.getPeriodType()) .collegeName(partnership.getPartnershipCollege() == null && partnership.getPartnershipDepartment() == null ? "총학생회" : (partnership.getPartnershipCollege() != null ? partnership.getPartnershipCollege() diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java index 1380c807..5027d226 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java @@ -38,4 +38,3 @@ public static PartnershipResponse fromEntity(PartnershipRestaurant restaurant, L .build(); } } - diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java index 3f32b6a1..59126956 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java @@ -2,6 +2,8 @@ import jakarta.persistence.Column; import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; @@ -39,6 +41,12 @@ public class Partnership { @Column(name = "end_date", nullable = false) private LocalDate endDate; + + @Builder.Default + @Enumerated(EnumType.STRING) + @Column(name = "period_type", nullable = false) + private PeriodType periodType = PeriodType.NORMAL; + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "partnership_college_id") private College partnershipCollege; diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PeriodType.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PeriodType.java new file mode 100644 index 00000000..d5125484 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PeriodType.java @@ -0,0 +1,6 @@ +package ssu.eatssu.domain.partnership.entity; + +public enum PeriodType { + NORMAL, + FESTIVAL +} From b0f05378edcc0f3ccd8799938d3f2dac8748c0ed Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Mon, 11 May 2026 00:40:14 +0900 Subject: [PATCH 352/399] =?UTF-8?q?feat:=20V5=5F=5Fadd=5Fperiod=5Ftype=5Ft?= =?UTF-8?q?o=5Fpartnership.sql=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/partnership/entity/Partnership.java | 2 +- .../ssu/eatssu/domain/partnership/entity/PeriodType.java | 2 +- .../db/migration/V5__add_period_type_to_partnership.sql | 6 ++++++ 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/db/migration/V5__add_period_type_to_partnership.sql diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java index 59126956..cf4fa393 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java @@ -45,7 +45,7 @@ public class Partnership { @Builder.Default @Enumerated(EnumType.STRING) @Column(name = "period_type", nullable = false) - private PeriodType periodType = PeriodType.NORMAL; + private PeriodType periodType = PeriodType.REGULAR; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "partnership_college_id") diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PeriodType.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PeriodType.java index d5125484..e2ed3536 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PeriodType.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PeriodType.java @@ -1,6 +1,6 @@ package ssu.eatssu.domain.partnership.entity; public enum PeriodType { - NORMAL, + REGULAR, FESTIVAL } diff --git a/src/main/resources/db/migration/V5__add_period_type_to_partnership.sql b/src/main/resources/db/migration/V5__add_period_type_to_partnership.sql new file mode 100644 index 00000000..b7fd9277 --- /dev/null +++ b/src/main/resources/db/migration/V5__add_period_type_to_partnership.sql @@ -0,0 +1,6 @@ +-- ========================= +-- V5: partnership 기간 타입 추가 +-- ========================= + +ALTER TABLE partnership + ADD COLUMN period_type ENUM ('NORMAL', 'FESTIVAL') NOT NULL DEFAULT 'NORMAL'; From 270eb20a4bb5feed27092f03789c785b1718712d Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Mon, 11 May 2026 00:57:17 +0900 Subject: [PATCH 353/399] =?UTF-8?q?refactor:=20period=5Ftype=EA=B0=92=20RE?= =?UTF-8?q?GULAR=20->=20NORMAL=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ssu/eatssu/domain/partnership/entity/Partnership.java | 2 +- .../java/ssu/eatssu/domain/partnership/entity/PeriodType.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java index cf4fa393..59126956 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java @@ -45,7 +45,7 @@ public class Partnership { @Builder.Default @Enumerated(EnumType.STRING) @Column(name = "period_type", nullable = false) - private PeriodType periodType = PeriodType.REGULAR; + private PeriodType periodType = PeriodType.NORMAL; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "partnership_college_id") diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PeriodType.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PeriodType.java index e2ed3536..d5125484 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PeriodType.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PeriodType.java @@ -1,6 +1,6 @@ package ssu.eatssu.domain.partnership.entity; public enum PeriodType { - REGULAR, + NORMAL, FESTIVAL } From 33980a69cbfd49899375a13e842d1a55efa5321d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=ED=91=B8=EB=A6=84?= Date: Tue, 19 May 2026 15:37:12 +0900 Subject: [PATCH 354/399] =?UTF-8?q?[Feat]=20=EB=8B=A4=EA=B5=AD=EC=96=B4=20?= =?UTF-8?q?=EC=A7=80=EC=9B=90=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?(#358)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: User Entity내 language컬럼 추가 및 flyway 쿼리문 추가 * feat: 유저 언어 설정 API 추가 및 UserService 중복 코드 제거 * feat: College Entity내 i8n컬럼 추가 및 flyway 쿼리문 추가 * feat: Department Entity내 i8n컬럼 추가 및 flyway 쿼리문 추가 * feat: PartnershipRestaurant Entity내 i8n컬럼 추가 및 flyway 쿼리문 추가 * feat: 제휴정보 조회 시 유저의 언어 설정에 따라서 store_name 분기 처리 추가 * feat: 단과대/학과 정보 조회 시 유저의 언어 설정에 따른 분기 처리 추가 * feat: 유저 프로필 조회에 언어 값 추가 및 유저의 언어 설정 조회 API 추가 * fix: 리뷰사항 반영 * fix: UserService @Component 중복 선언 제거 및 @Transactional import 경로 수정 * fix: 리뷰 반영 --- .../partnership/dto/PartnershipResponse.java | 5 +- .../entity/PartnershipRestaurant.java | 22 ++++++- .../service/PartnershipService.java | 27 +++++--- .../user/department/entity/College.java | 24 +++++-- .../user/department/entity/Department.java | 24 +++++-- .../persistence/CollegeRepository.java | 2 +- .../persistence/DepartmentRepository.java | 2 +- .../domain/user/dto/DepartmentResponse.java | 10 ++- .../domain/user/dto/LanguageResponse.java | 15 +++++ .../user/dto/LanguageUpdateRequest.java | 12 ++++ .../domain/user/dto/MyPageResponse.java | 9 ++- .../eatssu/domain/user/entity/Language.java | 8 +++ .../ssu/eatssu/domain/user/entity/User.java | 7 +++ .../user/presentation/UserController.java | 37 +++++++++-- .../domain/user/service/UserService.java | 62 +++++++++++++------ .../ssu/eatssu/global/i18n/Localizable.java | 19 ++++++ .../db/migration/V6__add_language_to_user.sql | 2 + .../V7__add_i18n_columns_to_college.sql | 5 ++ .../V8__add_i18n_columns_to_department.sql | 5 ++ ...i18n_columns_to_partnership_restaurant.sql | 5 ++ .../domain/user/dto/MyPageResponseTest.java | 37 +++++++++++ 21 files changed, 288 insertions(+), 51 deletions(-) create mode 100644 src/main/java/ssu/eatssu/domain/user/dto/LanguageResponse.java create mode 100644 src/main/java/ssu/eatssu/domain/user/dto/LanguageUpdateRequest.java create mode 100644 src/main/java/ssu/eatssu/domain/user/entity/Language.java create mode 100644 src/main/java/ssu/eatssu/global/i18n/Localizable.java create mode 100644 src/main/resources/db/migration/V6__add_language_to_user.sql create mode 100644 src/main/resources/db/migration/V7__add_i18n_columns_to_college.sql create mode 100644 src/main/resources/db/migration/V8__add_i18n_columns_to_department.sql create mode 100644 src/main/resources/db/migration/V9__add_i18n_columns_to_partnership_restaurant.sql create mode 100644 src/test/java/ssu/eatssu/domain/user/dto/MyPageResponseTest.java diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java index 5027d226..942d81d5 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java @@ -5,6 +5,7 @@ import lombok.Getter; import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; import ssu.eatssu.domain.partnership.entity.RestaurantType; +import ssu.eatssu.domain.user.entity.Language; import java.util.List; import java.util.stream.Collectors; @@ -19,7 +20,7 @@ public class PartnershipResponse { private RestaurantType restaurantType; private List partnershipInfos; - public static PartnershipResponse fromEntity(PartnershipRestaurant restaurant, Long userId) { + public static PartnershipResponse fromEntity(PartnershipRestaurant restaurant, Long userId, Language language) { boolean isLiked = restaurant.getLikes().stream() .anyMatch(like -> like.getUser().getId().equals(userId)); @@ -30,7 +31,7 @@ public static PartnershipResponse fromEntity(PartnershipRestaurant restaurant, L .collect(Collectors.toList()); return PartnershipResponse.builder() - .storeName(restaurant.getStoreName()) + .storeName(restaurant.getStoreNameByLanguage(language)) .longitude(restaurant.getLongitude()) .latitude(restaurant.getLatitude()) .restaurantType(restaurant.getRestaurantType()) diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipRestaurant.java b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipRestaurant.java index 732837e8..20e08134 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipRestaurant.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/PartnershipRestaurant.java @@ -13,6 +13,8 @@ import lombok.Getter; import lombok.NoArgsConstructor; import org.hibernate.annotations.BatchSize; +import ssu.eatssu.domain.user.entity.Language; +import ssu.eatssu.global.i18n.Localizable; import java.util.ArrayList; import java.util.List; @@ -20,7 +22,7 @@ @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class PartnershipRestaurant { +public class PartnershipRestaurant implements Localizable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "partnershipRestaurant_id") @@ -34,12 +36,26 @@ public class PartnershipRestaurant { @Column(name = "latitude", nullable = false) private Double latitude; // 위도 == y축 - @Column(name = "store_name", nullable = false) - private String storeName; + @Column(name = "store_name_ko", nullable = false) + private String storeNameKo; + @Column(name = "store_name_en") + private String storeNameEn; + @Column(name = "store_name_ja") + private String storeNameJa; + @Column(name = "store_name_vi") + private String storeNameVi; @OneToMany(mappedBy = "partnershipRestaurant") @BatchSize(size = 20) private List likes = new ArrayList<>(); @OneToMany(mappedBy = "partnershipRestaurant", cascade = CascadeType.ALL, orphanRemoval = true) private List partnerships = new ArrayList<>(); + + public String getStoreName() { + return storeNameKo; + } + + public String getStoreNameByLanguage(Language language) { + return getLocalizedValue(language, storeNameKo, storeNameEn, storeNameJa, storeNameVi); + } } diff --git a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java index 63e5dd98..1b264b50 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java +++ b/src/main/java/ssu/eatssu/domain/partnership/service/PartnershipService.java @@ -18,6 +18,7 @@ import ssu.eatssu.domain.user.department.entity.Department; import ssu.eatssu.domain.user.department.persistence.CollegeRepository; import ssu.eatssu.domain.user.department.persistence.DepartmentRepository; +import ssu.eatssu.domain.user.entity.Language; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.global.handler.response.BaseException; @@ -52,19 +53,22 @@ public void createPartnership(CreatePartnershipRequest request) { NOT_FOUND_PARTNERSHIP_RESTAURANT)); Partnership partnership = request.toPartnershipEntity(partnershipRestaurant); - College college = collegeRepository.findByName(request.getCollege()) + College college = collegeRepository.findByNameKo(request.getCollege()) .orElseThrow(() -> new BaseException(NOT_FOUND_COLLEGE)); partnership.setPartnershipCollege(college); - Department department = departmentRepository.findByName(request.getDepartment()) + Department department = departmentRepository.findByNameKo(request.getDepartment()) .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); partnership.setPartnershipDepartment(department); partnershipRepository.save(partnership); } public List getAllPartnerships(CustomUserDetails customUserDetails) { + Language language = findUserByUserDetails(customUserDetails).getLanguage(); + return partnerShipRestaurantRepository.findAllWithDetails().stream() .map(restaurant -> PartnershipResponse.fromEntity(restaurant, - customUserDetails.getId())) + customUserDetails.getId(), + language)) .collect(Collectors.toList()); } @@ -100,8 +104,7 @@ public void togglePartnershipLike(Long partnershipId, CustomUserDetails userDeta } public List getUserLikedPartnerships(CustomUserDetails customUserDetails) { - User user = userRepository.findById(customUserDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + User user = findUserByUserDetails(customUserDetails); List likes = partnershipLikeRepository.findAllByUserWithDetails(user); @@ -111,14 +114,14 @@ public List getUserLikedPartnerships(CustomUserDetails cust return restaurant.getPartnerships() .stream() .map(partnership -> PartnershipResponse.fromEntity(restaurant, - customUserDetails.getId())); + customUserDetails.getId(), + user.getLanguage())); }).collect(Collectors.toList()); } public List getUserDepartmentPartnerships(CustomUserDetails customUserDetails) { - User user = userRepository.findById(customUserDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + User user = findUserByUserDetails(customUserDetails); Department department = user.getDepartment(); if (department == null) { @@ -130,7 +133,13 @@ public List getUserDepartmentPartnerships(CustomUserDetails .findRestaurantsWithMyPartnerships(college, department) .stream() .map(partnershipRestaurant -> PartnershipResponse.fromEntity(partnershipRestaurant, - customUserDetails.getId())) + customUserDetails.getId(), + user.getLanguage())) .collect(Collectors.toList()); } + + private User findUserByUserDetails(CustomUserDetails userDetails) { + return userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + } } diff --git a/src/main/java/ssu/eatssu/domain/user/department/entity/College.java b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java index b8447a40..1c3d475e 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/entity/College.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/College.java @@ -11,6 +11,8 @@ import lombok.Getter; import lombok.NoArgsConstructor; import ssu.eatssu.domain.partnership.entity.Partnership; +import ssu.eatssu.domain.user.entity.Language; +import ssu.eatssu.global.i18n.Localizable; import java.util.ArrayList; import java.util.List; @@ -18,7 +20,7 @@ @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class College { +public class College implements Localizable { @OneToMany(mappedBy = "college", cascade = CascadeType.ALL, orphanRemoval = true) private final List departments = new ArrayList<>(); @OneToMany(mappedBy = "partnershipCollege", cascade = CascadeType.ALL, orphanRemoval = true) @@ -27,10 +29,24 @@ public class College { @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "college_id") private Long id; - @Column(nullable = false, unique = true) - private String name; + @Column(name = "name_ko", nullable = false, unique = true) + private String nameKo; + @Column(name = "name_en") + private String nameEn; + @Column(name = "name_ja") + private String nameJa; + @Column(name = "name_vi") + private String nameVi; public College(String name) { - this.name = name; + this.nameKo = name; + } + + public String getName() { + return nameKo; + } + + public String getNameByLanguage(Language language) { + return getLocalizedValue(language, nameKo, nameEn, nameJa, nameVi); } } diff --git a/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java index 51f02653..125e452f 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java +++ b/src/main/java/ssu/eatssu/domain/user/department/entity/Department.java @@ -14,6 +14,8 @@ import lombok.Getter; import lombok.NoArgsConstructor; import ssu.eatssu.domain.partnership.entity.Partnership; +import ssu.eatssu.domain.user.entity.Language; +import ssu.eatssu.global.i18n.Localizable; import java.util.ArrayList; import java.util.List; @@ -21,20 +23,34 @@ @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class Department { +public class Department implements Localizable { @OneToMany(mappedBy = "partnershipDepartment", cascade = CascadeType.ALL, orphanRemoval = true) private final List partnerships = new ArrayList<>(); @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "department_id") private Long id; - @Column(nullable = false) - private String name; + @Column(name = "name_ko", nullable = false) + private String nameKo; + @Column(name = "name_en") + private String nameEn; + @Column(name = "name_ja") + private String nameJa; + @Column(name = "name_vi") + private String nameVi; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "college_id") private College college; public Department(String name) { - this.name = name; + this.nameKo = name; + } + + public String getName() { + return nameKo; + } + + public String getNameByLanguage(Language language) { + return getLocalizedValue(language, nameKo, nameEn, nameJa, nameVi); } } diff --git a/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java b/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java index 4e7c6d89..37dcb3bd 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/department/persistence/CollegeRepository.java @@ -6,5 +6,5 @@ import java.util.Optional; public interface CollegeRepository extends JpaRepository { - Optional findByName(String name); + Optional findByNameKo(String nameKo); } diff --git a/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java b/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java index 50e55f12..b4e66879 100644 --- a/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java +++ b/src/main/java/ssu/eatssu/domain/user/department/persistence/DepartmentRepository.java @@ -8,7 +8,7 @@ import java.util.Optional; public interface DepartmentRepository extends JpaRepository { - Optional findByName(String name); + Optional findByNameKo(String nameKo); List findByCollege(College college); } diff --git a/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java index 105ad9e3..708a1ba7 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/DepartmentResponse.java @@ -3,22 +3,26 @@ import lombok.Builder; import ssu.eatssu.domain.user.department.entity.College; import ssu.eatssu.domain.user.department.entity.Department; +import ssu.eatssu.domain.user.entity.Language; @Builder public record DepartmentResponse( Long departmentId, String departmentName, Long collegeId, String collegeName ) { public static DepartmentResponse from(Department department) { + return from(department, Language.KO); + } + + public static DepartmentResponse from(Department department, Language language) { if (department == null) { return new DepartmentResponse(null, null, null, null); } final College college = department.getCollege(); return DepartmentResponse.builder() .departmentId(department.getId()) - .departmentName(department.getName()) + .departmentName(department.getNameByLanguage(language)) .collegeId(college != null ? college.getId() : null) - .collegeName(college != null ? college.getName() : null) + .collegeName(college != null ? college.getNameByLanguage(language) : null) .build(); } } - diff --git a/src/main/java/ssu/eatssu/domain/user/dto/LanguageResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/LanguageResponse.java new file mode 100644 index 00000000..5c43b0d0 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/user/dto/LanguageResponse.java @@ -0,0 +1,15 @@ +package ssu.eatssu.domain.user.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import ssu.eatssu.domain.user.entity.Language; +import ssu.eatssu.domain.user.entity.User; + +@Schema(title = "언어 설정 조회") +public record LanguageResponse( + @Schema(description = "언어 설정", example = "KO") + Language language) { + + public static LanguageResponse from(User user) { + return new LanguageResponse(user.getLanguage()); + } +} diff --git a/src/main/java/ssu/eatssu/domain/user/dto/LanguageUpdateRequest.java b/src/main/java/ssu/eatssu/domain/user/dto/LanguageUpdateRequest.java new file mode 100644 index 00000000..9ab1c1b0 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/user/dto/LanguageUpdateRequest.java @@ -0,0 +1,12 @@ +package ssu.eatssu.domain.user.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import ssu.eatssu.domain.user.entity.Language; + +@Schema(title = "언어 설정 수정") +public record LanguageUpdateRequest( + @NotNull(message = "언어 설정을 입력해주세요.") + @Schema(description = "언어 설정", example = "EN", allowableValues = {"KO", "EN", "JA", "VI"}) + Language language) { +} diff --git a/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java b/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java index 4a5ba2af..aac3c525 100644 --- a/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java +++ b/src/main/java/ssu/eatssu/domain/user/dto/MyPageResponse.java @@ -7,6 +7,7 @@ import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.user.department.entity.College; import ssu.eatssu.domain.user.department.entity.Department; +import ssu.eatssu.domain.user.entity.Language; import ssu.eatssu.domain.user.entity.User; @AllArgsConstructor @@ -21,6 +22,9 @@ public class MyPageResponse { @Schema(description = "연결 계정 정보", example = "GOOGLE") private OAuthProvider provider; + @Schema(description = "언어 설정", example = "KO") + private Language language; + @Schema(description = "학과 id", example = "1") private Long departmentId; @@ -44,10 +48,11 @@ public static MyPageResponse from(User user) { return MyPageResponse.builder() .nickname(user.getNickname()) .provider(user.getProvider()) + .language(user.getLanguage()) .departmentId(department != null ? department.getId() : null) - .departmentName(department != null ? department.getName() : null) + .departmentName(department != null ? department.getNameByLanguage(user.getLanguage()) : null) .collegeId(college != null ? college.getId() : null) - .collegeName(college != null ? college.getName() : null) + .collegeName(college != null ? college.getNameByLanguage(user.getLanguage()) : null) .build(); } } diff --git a/src/main/java/ssu/eatssu/domain/user/entity/Language.java b/src/main/java/ssu/eatssu/domain/user/entity/Language.java new file mode 100644 index 00000000..a20985e3 --- /dev/null +++ b/src/main/java/ssu/eatssu/domain/user/entity/Language.java @@ -0,0 +1,8 @@ +package ssu.eatssu.domain.user.entity; + +public enum Language { + KO, + EN, + JA, + VI +} diff --git a/src/main/java/ssu/eatssu/domain/user/entity/User.java b/src/main/java/ssu/eatssu/domain/user/entity/User.java index 912d2129..d1025d5f 100644 --- a/src/main/java/ssu/eatssu/domain/user/entity/User.java +++ b/src/main/java/ssu/eatssu/domain/user/entity/User.java @@ -59,6 +59,9 @@ public class User extends BaseTimeEntity { private UserStatus status; @Enumerated(EnumType.STRING) private DeviceType deviceType; + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private Language language = Language.KO; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "department_id") private Department department; @@ -123,6 +126,10 @@ public void updateDepartment(Department department) { this.department = department; } + public void updateLanguage(@NotNull Language language) { + this.language = language; + } + // 추후에 기종이 바뀌더라도 업데이트합니다. + V1-> V2 마이그레이션을 수행하는 역할을 하기도 합니다. public void updateDeviceType(DeviceType deviceType) { this.deviceType = deviceType; } } diff --git a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java index 1b198be2..9b7fe845 100644 --- a/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java +++ b/src/main/java/ssu/eatssu/domain/user/presentation/UserController.java @@ -33,6 +33,8 @@ import ssu.eatssu.domain.user.dto.DepartmentResponse; import ssu.eatssu.domain.user.dto.GetCollegeResponse; import ssu.eatssu.domain.user.dto.GetDepartmentResponse; +import ssu.eatssu.domain.user.dto.LanguageResponse; +import ssu.eatssu.domain.user.dto.LanguageUpdateRequest; import ssu.eatssu.domain.user.dto.MyMealReviewResponse; import ssu.eatssu.domain.user.dto.MyPageResponse; import ssu.eatssu.domain.user.dto.MyReviewDetail; @@ -114,6 +116,31 @@ public BaseResponse updateNickname( return BaseResponse.success(); } + @Operation(summary = "언어 설정 수정", description = "유저의 언어 설정을 수정하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "언어 설정 수정 성공"), + @ApiResponse(responseCode = "400", description = "지원하지 않는 언어 또는 누락된 언어 설정", content = @Content(schema = @Schema(implementation = BaseResponse.class))), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @PatchMapping("/language") + public BaseResponse updateLanguage( + @Valid @RequestBody LanguageUpdateRequest request, + @AuthenticationPrincipal CustomUserDetails userDetails) { + userService.updateLanguage(userDetails, request); + return BaseResponse.success(); + } + + @Operation(summary = "언어 설정 조회", description = "유저의 언어 설정을 조회하는 API 입니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "언어 설정 조회 성공"), + @ApiResponse(responseCode = "404", description = "존재하지 않는 유저", content = @Content(schema = @Schema(implementation = BaseResponse.class))) + }) + @GetMapping("/language") + public BaseResponse getLanguage( + @AuthenticationPrincipal CustomUserDetails userDetails) { + return BaseResponse.success(userService.findLanguage(userDetails)); + } + @Operation(summary = "유저 탈퇴", description = "유저 탈퇴 API 입니다.") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "유저 탈퇴 성공"), @@ -229,8 +256,9 @@ public BaseResponse> getMyReviews( @ApiResponse(responseCode = "404", description = "존재하지 않는 단과대", content = @Content(schema = @Schema(implementation = BaseResponse.class))) }) @GetMapping("/lookup/colleges") - public BaseResponse> getColleges() { - List getCollegeResponses = userService.getCollegeList(); + public BaseResponse> getColleges( + @AuthenticationPrincipal CustomUserDetails userDetails) { + List getCollegeResponses = userService.getCollegeList(userDetails); return BaseResponse.success(getCollegeResponses); } @@ -239,8 +267,9 @@ public BaseResponse> getColleges() { @ApiResponse(responseCode = "200", description = "단과대 리스트 조회 성공"), }) @GetMapping("/lookup/departments") - public BaseResponse> getDepartments(@RequestParam Long collegeId) { - List getCollegeResponses = userService.getDepartmentList(collegeId); + public BaseResponse> getDepartments(@RequestParam Long collegeId, + @AuthenticationPrincipal CustomUserDetails userDetails) { + List getCollegeResponses = userService.getDepartmentList(collegeId, userDetails); return BaseResponse.success(getCollegeResponses); } diff --git a/src/main/java/ssu/eatssu/domain/user/service/UserService.java b/src/main/java/ssu/eatssu/domain/user/service/UserService.java index d970b265..60ab183c 100644 --- a/src/main/java/ssu/eatssu/domain/user/service/UserService.java +++ b/src/main/java/ssu/eatssu/domain/user/service/UserService.java @@ -1,11 +1,10 @@ package ssu.eatssu.domain.user.service; -import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationEventPublisher; +import org.springframework.transaction.annotation.Transactional; import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import ssu.eatssu.domain.auth.entity.OAuthProvider; import ssu.eatssu.domain.auth.security.CustomUserDetails; @@ -18,10 +17,13 @@ import ssu.eatssu.domain.user.dto.DepartmentResponse; import ssu.eatssu.domain.user.dto.GetCollegeResponse; import ssu.eatssu.domain.user.dto.GetDepartmentResponse; +import ssu.eatssu.domain.user.dto.LanguageResponse; +import ssu.eatssu.domain.user.dto.LanguageUpdateRequest; import ssu.eatssu.domain.user.dto.MyPageResponse; import ssu.eatssu.domain.user.dto.NicknameUpdateRequest; import ssu.eatssu.domain.user.dto.UpdateDepartmentRequest; import ssu.eatssu.domain.user.entity.DeviceType; +import ssu.eatssu.domain.user.entity.Language; import ssu.eatssu.domain.user.entity.User; import ssu.eatssu.domain.user.repository.UserRepository; import ssu.eatssu.domain.user.util.NicknameValidator; @@ -39,7 +41,6 @@ @Service @RequiredArgsConstructor @Transactional -@Component public class UserService { private final UserRepository userRepository; @@ -65,8 +66,7 @@ public User joinV2(String email, OAuthProvider provider, String providerId, Devi } public void updateNickname(CustomUserDetails userDetails, NicknameUpdateRequest request) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + User user = findUserByUserDetails(userDetails); nicknameValidator.validateNickname(request.nickname()); @@ -84,14 +84,28 @@ public void updateNickname(CustomUserDetails userDetails, NicknameUpdateRequest } public MyPageResponse findMyPage(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + User user = findUserByUserDetails(userDetails); return MyPageResponse.from(user); } + public void updateLanguage(CustomUserDetails userDetails, LanguageUpdateRequest request) { + User user = findUserByUserDetails(userDetails); + + user.updateLanguage(request.language()); + + eventPublisher.publishEvent(LogEvent.of( + String.format("User language updated: userId=%d, language=%s", + user.getId(), request.language())) + ); + } + + public LanguageResponse findLanguage(CustomUserDetails userDetails) { + User user = findUserByUserDetails(userDetails); + return LanguageResponse.from(user); + } + public boolean withdraw(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + User user = findUserByUserDetails(userDetails); user.getReviews().forEach(Review::clearUser); user.getUserInquiries().forEach(inquiry -> inquiry.clearUser()); @@ -122,8 +136,7 @@ private String createCredentials(OAuthProvider provider, String providerId) { @Transactional public void registerDepartment(UpdateDepartmentRequest request, CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); + User user = findUserByUserDetails(userDetails); Department department = departmentRepository.findById(request.getDepartmentId()) .orElseThrow(() -> new BaseException(NOT_FOUND_DEPARTMENT)); @@ -131,28 +144,41 @@ public void registerDepartment(UpdateDepartmentRequest request, CustomUserDetail } public DepartmentResponse getDepartment(CustomUserDetails userDetails) { - User user = userRepository.findById(userDetails.getId()) - .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); - return DepartmentResponse.from(user.getDepartment()); + User user = findUserByUserDetails(userDetails); + return DepartmentResponse.from(user.getDepartment(), user.getLanguage()); + } + + private User findUserByUserDetails(CustomUserDetails userDetails) { + return userRepository.findById(userDetails.getId()) + .orElseThrow(() -> new BaseException(NOT_FOUND_USER)); } - public List getCollegeList() { + public List getCollegeList(CustomUserDetails userDetails) { + Language language = findLanguageOrDefault(userDetails); List colleges = collegeRepository.findAll(); return colleges.stream().map(college -> GetCollegeResponse.builder() .id(college.getId()) - .name(college.getName()) + .name(college.getNameByLanguage(language)) .build()) .toList(); } - public List getDepartmentList(Long collegeId) { + public List getDepartmentList(Long collegeId, CustomUserDetails userDetails) { + Language language = findLanguageOrDefault(userDetails); College college = collegeRepository.findById(collegeId) .orElseThrow(() -> new BaseException(VALIDATION_ERROR)); List departments = departmentRepository.findByCollege(college); return departments.stream().map(department -> GetDepartmentResponse.builder() .id(department.getId()) - .name(department.getName()) + .name(department.getNameByLanguage(language)) .build()) .toList(); } + + private Language findLanguageOrDefault(CustomUserDetails userDetails) { + if (userDetails == null) { + return Language.KO; + } + return findUserByUserDetails(userDetails).getLanguage(); + } } diff --git a/src/main/java/ssu/eatssu/global/i18n/Localizable.java b/src/main/java/ssu/eatssu/global/i18n/Localizable.java new file mode 100644 index 00000000..7c8068be --- /dev/null +++ b/src/main/java/ssu/eatssu/global/i18n/Localizable.java @@ -0,0 +1,19 @@ +package ssu.eatssu.global.i18n; + +import ssu.eatssu.domain.user.entity.Language; + +public interface Localizable { + + default String getLocalizedValue(Language language, String ko, String en, String ja, String vi) { + if (language == null) { + return ko; + } + + return switch (language) { + case EN -> en != null ? en : ko; + case JA -> ja != null ? ja : ko; + case VI -> vi != null ? vi : ko; + case KO -> ko; + }; + } +} diff --git a/src/main/resources/db/migration/V6__add_language_to_user.sql b/src/main/resources/db/migration/V6__add_language_to_user.sql new file mode 100644 index 00000000..450ddd88 --- /dev/null +++ b/src/main/resources/db/migration/V6__add_language_to_user.sql @@ -0,0 +1,2 @@ +ALTER TABLE user + ADD COLUMN language ENUM ('KO', 'EN', 'JA', 'VI') NOT NULL DEFAULT 'KO'; diff --git a/src/main/resources/db/migration/V7__add_i18n_columns_to_college.sql b/src/main/resources/db/migration/V7__add_i18n_columns_to_college.sql new file mode 100644 index 00000000..602aa14c --- /dev/null +++ b/src/main/resources/db/migration/V7__add_i18n_columns_to_college.sql @@ -0,0 +1,5 @@ +ALTER TABLE college + RENAME COLUMN name TO name_ko, + ADD COLUMN name_en VARCHAR(255) NULL, + ADD COLUMN name_ja VARCHAR(255) NULL, + ADD COLUMN name_vi VARCHAR(255) NULL; diff --git a/src/main/resources/db/migration/V8__add_i18n_columns_to_department.sql b/src/main/resources/db/migration/V8__add_i18n_columns_to_department.sql new file mode 100644 index 00000000..79385f3e --- /dev/null +++ b/src/main/resources/db/migration/V8__add_i18n_columns_to_department.sql @@ -0,0 +1,5 @@ +ALTER TABLE department + RENAME COLUMN name TO name_ko, + ADD COLUMN name_en VARCHAR(255) NULL, + ADD COLUMN name_ja VARCHAR(255) NULL, + ADD COLUMN name_vi VARCHAR(255) NULL; diff --git a/src/main/resources/db/migration/V9__add_i18n_columns_to_partnership_restaurant.sql b/src/main/resources/db/migration/V9__add_i18n_columns_to_partnership_restaurant.sql new file mode 100644 index 00000000..5583cfcc --- /dev/null +++ b/src/main/resources/db/migration/V9__add_i18n_columns_to_partnership_restaurant.sql @@ -0,0 +1,5 @@ +ALTER TABLE partnership_restaurant + RENAME COLUMN store_name TO store_name_ko, + ADD COLUMN store_name_en VARCHAR(255) NULL, + ADD COLUMN store_name_ja VARCHAR(255) NULL, + ADD COLUMN store_name_vi VARCHAR(255) NULL; diff --git a/src/test/java/ssu/eatssu/domain/user/dto/MyPageResponseTest.java b/src/test/java/ssu/eatssu/domain/user/dto/MyPageResponseTest.java new file mode 100644 index 00000000..987636b1 --- /dev/null +++ b/src/test/java/ssu/eatssu/domain/user/dto/MyPageResponseTest.java @@ -0,0 +1,37 @@ +package ssu.eatssu.domain.user.dto; + +import org.junit.jupiter.api.Test; +import org.springframework.test.util.ReflectionTestUtils; +import ssu.eatssu.domain.auth.entity.OAuthProvider; +import ssu.eatssu.domain.user.department.entity.College; +import ssu.eatssu.domain.user.department.entity.Department; +import ssu.eatssu.domain.user.entity.Language; +import ssu.eatssu.domain.user.entity.User; + +import static org.assertj.core.api.Assertions.assertThat; + +class MyPageResponseTest { + + @Test + void shouldReturnLocalizedNamesBasedOnUserLanguage() { + // given + College college = new College("IT 대학"); + ReflectionTestUtils.setField(college, "nameEn", "College of IT"); + + Department department = new Department("컴퓨터학부"); + ReflectionTestUtils.setField(department, "nameEn", "School of Computer Science"); + ReflectionTestUtils.setField(department, "college", college); + + User user = User.create("test@test.com", "tester", OAuthProvider.EATSSU, "1234", "credentials"); + user.updateLanguage(Language.EN); + user.updateDepartment(department); + + // when + MyPageResponse response = MyPageResponse.from(user); + + // then + assertThat(response.getLanguage()).isEqualTo(Language.EN); + assertThat(response.getDepartmentName()).isEqualTo("School of Computer Science"); + assertThat(response.getCollegeName()).isEqualTo("College of IT"); + } +} From f230b44a326967a3019bad62f9ba6f9d50f6a971 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Mon, 22 Jun 2026 20:19:02 +0900 Subject: [PATCH 355/399] =?UTF-8?q?feat:=20CLAUDE.md=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20=EB=B0=8F=20AGENTS.md=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 34 ++++++++++++++++++++ CLAUDE.md | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 125 insertions(+), 4 deletions(-) create mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..d7639a71 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,34 @@ +# Repository Guidelines + +## Project Structure & Module Organization + +This is a Spring Boot 3 / Java 17 backend built with Gradle. Application code lives under `src/main/java/ssu/eatssu`, grouped by domain such as `auth`, `menu`, `review`, `user`, `admin`, and shared infrastructure under `global`. Runtime configuration is in `src/main/resources`, with profile files such as `application-dev.yml` and `application-prod.yml`. Flyway migrations are in `src/main/resources/db/migration`. Static admin assets and Mustache templates are under `src/main/resources/static` and `src/main/resources/templates`. Tests live in `src/test/java`, with test configuration in `src/test/resources`. + +## Build, Test, and Development Commands + +- `./gradlew clean build`: compile, test, and build the application jar. +- `./gradlew test`: run the JUnit test suite. +- `./gradlew bootRun --args='--spring.profiles.active=local'`: run the server locally on port `9000`. +- `docker build -f Dockerfile -t eatssu-local .`: build the Docker image locally. + +The CI workflow currently builds Docker images for prod/dev and deploys to EC2 via SSH. + +## Coding Style & Naming Conventions + +Use Java 17 conventions with 4-space indentation. Do not use wildcard imports. Keep domain logic in service classes, persistence in repository/query classes, and request/response shapes in DTOs. Follow existing naming patterns: `*Controller`, `*Service`, `*Repository`, `*Request`, and `*Response`. Comments should be short and useful; follow the project convention for `FIX ME` comments when marking unresolved business or technical concerns. + +## Testing Guidelines + +Tests use JUnit 5 and Spring Boot Test. Test method names should be written in English. For test code, keep `given`, `when`, and `then` comments where they clarify setup and assertions. Run `./gradlew test` before opening a PR. If tests cannot be run because of local configuration, state that clearly in the PR reviewer notes. + +## Commit & Pull Request Guidelines + +Recent commits use prefixes such as `feat:`, `fix:`, `refactor:`, and `style:`; keep commit messages concise and behavior-focused. Pull requests should follow `.github/PULL_REQUEST_TEMPLATE.md`: link the issue with `resolved #`, summarize what changed and why, and include reviewer notes for risks, test gaps, or deployment concerns. Use the issue templates in `.github/ISSUE_TEMPLATE` for feature and fix reports. + +## Security & Configuration Tips + +Never commit secrets, tokens, or local credentials. Keep local-only configuration in ignored files such as `.env` or `application-local.yml`. Be careful with Docker and deployment changes: production logs go to CloudWatch via the `awslogs` driver, and prod/dev behavior is selected by branch-specific GitHub Actions steps. + +## Agent-Specific Workflow + +For every request, analyze before implementing. Start by explaining the relevant process, propose a direction, and state key trade-offs. Do not write or modify code unless the user explicitly asks with direct wording such as "개발해줘", "작성해줘", "수정해줘", or an equivalent implementation request. If the request is exploratory, advisory, or ambiguous, provide analysis and recommendations only. diff --git a/CLAUDE.md b/CLAUDE.md index e74ab612..b06eaa2f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,10 +1,19 @@ -# Copilot instructions +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Instructions - You must respond in Korean for all answers, regardless of the input language. - Do not write any comments in code blocks, even if asked to do so. -- Do not use wildcard when importing libraries -- When you write reviews for pull request, specific review will very helpful for my team. +- Do not use wildcard when importing libraries. +- When you write reviews for pull request, specific review will be very helpful for my team. - Suggest based on logical reasons. +- For every request, follow this order before writing any code: + 1. Analyze the process (현재 구조/흐름 파악) + 2. Suggest a direction (어떤 방향으로 접근할지 제시) + 3. Present trade-offs (각 방향의 장단점 제시) + 4. Do NOT write code unless the user explicitly asks with a direct command such as "개발해줘", "작성해줘", "구현해줘". ## Commenting Convention @@ -19,4 +28,82 @@ - Test method names must be written in **English**. - But if the codes is related to test, write the comment for "given, when, then". -Please follow these conventions when reviewing or suggesting changes to the code. \ No newline at end of file +## Build & Run Commands + +```bash +./gradlew clean build # 전체 빌드 (테스트 포함) +./gradlew test # 테스트만 실행 +./gradlew test --tests "ssu.eatssu.domain.review.service.ReviewServiceTest" # 단일 테스트 클래스 실행 +./gradlew bootRun --args='--spring.profiles.active=local' # 로컬 서버 실행 (port 9000) +docker build -f Dockerfile -t eatssu-local . # Docker 이미지 빌드 +``` + +로컬 실행 시 MySQL이 `localhost:3306/eatssu`에 필요하며, `application-local.yml`에서 DB 정보를 설정한다. `.env` 파일로 환경변수를 오버라이드할 수 있다 (`spring.config.import: optional:file:.env[.properties]`). + +QueryDSL Q클래스는 `src/main/generated`에 생성된다. `./gradlew clean`으로 제거된다. + +## Architecture Overview + +### 패키지 구조 + +``` +src/main/java/ssu/eatssu/ +├── domain/ # 도메인별 패키지 (auth, menu, review, user, admin, ...) +│ └── / +│ ├── entity/ # JPA 엔티티 +│ ├── dto/ # Request/Response DTO +│ ├── presentation/ # Controller (일부 도메인은 controller/) +│ ├── service/ # 비즈니스 로직 +│ ├── persistence/ # Repository (일부 도메인은 repository/) +│ └── ... +└── global/ # 공통 인프라 + ├── config/ # Spring 설정 (Security, QueryDSL, S3, Async 등) + ├── handler/ # 전역 예외 처리, 응답 래퍼 + ├── log/ # AOP 로깅, MDC 필터 + ├── i18n/ # 다국어 지원 인터페이스 + └── util/ # S3 업로더 등 유틸리티 +``` + +### 핵심 도메인 + +- **auth**: Kakao/Apple OAuth 로그인, JWT 토큰 발급/검증 (`JwtTokenProvider`), `CustomUserDetails` +- **menu**: `Menu`(고정 메뉴, `MenuType.FIXED`)와 `Meal`(날짜별 변동 식단, `MenuType.VARIABLE`)이 `MealMenu`를 통해 다대다 연결 +- **review**: `Menu` 또는 `Meal`에 대한 리뷰. V1/V2 Controller·Service가 공존하며, V2가 최신 +- **rating**: `Ratings` 임베디드 객체로 별점 집계 관리 +- **user**: User 엔티티, 학과/단과대학 정보(`department` 하위 패키지), 다국어 설정(`Language` enum: KO/EN/JA/VI) +- **partnership**: 제휴 식당 정보 및 좋아요 +- **admin**: Mustache 템플릿 기반 어드민 UI. 식단/메뉴/카테고리/문의/리포트/리뷰 관리 +- **slice**: 커서 기반 페이지네이션 (`SliceResponse`) +- **slack**: 서버 에러 발생 시 Slack 알림 (`SlackErrorNotifier`) + +### 공통 패턴 + +**응답 래퍼**: 모든 API 응답은 `BaseResponse`로 감싼다. 에러는 `BaseException(BaseResponseStatus)` throw → `GlobalExceptionHandler`에서 처리. + +**에러 코드**: `BaseResponseStatus` enum에 HTTP 상태 + 커스텀 코드 + 메시지를 함께 정의한다. + +**다국어(i18n)**: `Localizable` 인터페이스의 `getLocalizedValue(language, ko, en, ja, vi)`를 구현하여 언어별 필드를 반환한다. + +**복잡한 쿼리**: `*RepositoryCustom` 인터페이스 + `*RepositoryImpl`(QueryDSL) 패턴을 사용한다. + +**DB 마이그레이션**: Flyway를 사용하며, `src/main/resources/db/migration/V{n}__{설명}.sql` 형식으로 관리한다. `ddl-auto: none`이므로 스키마 변경 시 반드시 마이그레이션 파일을 추가해야 한다. + +### API 버전 관리 + +일부 Controller/Service는 V1/V2로 버전이 분리되어 있다(예: `ReviewController`/`ReviewControllerV2`, `ReviewService`/`ReviewServiceV2`). 새 기능은 V2 이상에 추가하거나, 필요 시 새 버전을 생성한다. + +### 테스트 + +테스트는 `@SpringBootTest`로 실제 DB에 연결하여 실행한다. 목(Mock) DB를 사용하지 않는다. + +### 배포 + +GitHub Actions(`deploy.yml`)로 Docker 이미지를 빌드하여 EC2에 SSH 배포한다. `prod`/`dev` 브랜치에 따라 배포 환경이 분기된다. + +## Commit Convention + +커밋 메시지는 `feat:`, `fix:`, `refactor:`, `style:` 등의 prefix를 사용한다. + +## PR Convention + +`.github/PULL_REQUEST_TEMPLATE.md`를 따른다: `resolved #이슈번호`, 변경 사항 요약, 리뷰어 공유사항 작성. From f3ac2b0e55333189c9f7b3a5a360bbb1cb1cdcee Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Mon, 22 Jun 2026 20:22:15 +0900 Subject: [PATCH 356/399] =?UTF-8?q?feat:=20Issue=20=EB=B0=8F=20PR=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EB=AA=85=EB=A0=B9=EC=96=B4=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 --- .claude/commands/feature-issue.md | 40 +++++++++++++++++++++ .claude/commands/fix-issue.md | 40 +++++++++++++++++++++ .claude/commands/pr.md | 58 +++++++++++++++++++++++++++++++ .codex/commands/feature-issue.md | 40 +++++++++++++++++++++ .codex/commands/fix-issue.md | 40 +++++++++++++++++++++ .codex/commands/pr.md | 58 +++++++++++++++++++++++++++++++ 6 files changed, 276 insertions(+) create mode 100644 .claude/commands/feature-issue.md create mode 100644 .claude/commands/fix-issue.md create mode 100644 .claude/commands/pr.md create mode 100644 .codex/commands/feature-issue.md create mode 100644 .codex/commands/fix-issue.md create mode 100644 .codex/commands/pr.md diff --git a/.claude/commands/feature-issue.md b/.claude/commands/feature-issue.md new file mode 100644 index 00000000..5ed737dd --- /dev/null +++ b/.claude/commands/feature-issue.md @@ -0,0 +1,40 @@ +--- +description: Create a GitHub feature issue body using this repository's issue template. +argument-hint: "" +--- + +You are creating a feature issue for this repository. + +Use Korean. + +Use the repository template at `.github/ISSUE_TEMPLATE/feature-report.md`. + +Input from the user: + +```text +$ARGUMENTS +``` + +Output only the final issue content in Markdown. + +Follow this exact structure: + +```markdown +# Feature Report + +## 추가 할 사항들 + +- ... + +## 첨부자료 + +- ... +``` + +Rules: + +- Keep the title suggestion separate at the top as `title: feature: ...`. +- If the user did not provide enough detail, infer a reasonable feature scope from the repository context. +- Do not invent implementation details that are not implied by the request. +- Prefer concrete acceptance criteria over vague descriptions. +- If there is no attachment/reference, write `- 없음`. diff --git a/.claude/commands/fix-issue.md b/.claude/commands/fix-issue.md new file mode 100644 index 00000000..f6bdc53c --- /dev/null +++ b/.claude/commands/fix-issue.md @@ -0,0 +1,40 @@ +--- +description: Create a GitHub fix issue body using this repository's issue template. +argument-hint: "" +--- + +You are creating a fix issue for this repository. + +Use Korean. + +Use the repository template at `.github/ISSUE_TEMPLATE/fix-report.md`. + +Input from the user: + +```text +$ARGUMENTS +``` + +Output only the final issue content in Markdown. + +Follow this exact structure: + +```markdown +# Fix Report + +## 고쳐야 할 사항 + +- ... + +## 첨부자료 + +- ... +``` + +Rules: + +- Keep the title suggestion separate at the top as `title: fix: ...`. +- Describe the current problem, expected behavior, and affected area when possible. +- If the issue is operational, include the relevant environment such as prod, dev, EC2, Docker, or CloudWatch. +- Do not claim a root cause unless it is directly supported by the given context. +- If there is no attachment/reference, write `- 없음`. diff --git a/.claude/commands/pr.md b/.claude/commands/pr.md new file mode 100644 index 00000000..5c92101b --- /dev/null +++ b/.claude/commands/pr.md @@ -0,0 +1,58 @@ +--- +description: Draft a pull request body using this repository's PR template and current git changes. +argument-hint: "" +allowed-tools: Bash(git status --short), Bash(git diff --stat), Bash(git diff --name-only), Bash(git diff) +--- + +You are drafting a pull request for this repository. + +Use Korean. + +Use the repository template at `.github/PULL_REQUEST_TEMPLATE.md`. + +Input from the user: + +```text +$ARGUMENTS +``` + +Before writing the PR body: + +1. Check changed files with `git status --short`. +2. Check the diff summary with `git diff --stat`. +3. Inspect relevant diffs with `git diff`. + +Output only the final PR content in Markdown. + +Follow this exact structure: + +```markdown +## #️⃣ Issue Number + +- resolved # + +## 📝 요약(Summary) + +- + +## 💬 공유사항 to 리뷰어 + +- + +## ✅ PR Checklist + +PR이 다음 요구 사항을 충족하는지 확인하세요. + +- [ ] 커밋 메시지 컨벤션에 맞게 작성했습니다. +- [ ] 변경 사항에 대한 테스트를 했습니다.(버그 수정/기능에 대한 테스트). +``` + +Rules: + +- Fill `resolved #` with an issue number if the user provided one. If not, keep `resolved #`. +- Explain what changed and why, not just how. +- Mention key files or behavior changes when helpful. +- In `공유사항 to 리뷰어`, call out risks, test gaps, migration concerns, deployment concerns, or areas needing focused review. +- For the checklist, mark an item checked only if the evidence is clear from the context or command results. +- If tests were not run, leave the test checkbox unchecked and mention that in reviewer notes. +- Do not include unrelated refactoring in the summary. diff --git a/.codex/commands/feature-issue.md b/.codex/commands/feature-issue.md new file mode 100644 index 00000000..5ed737dd --- /dev/null +++ b/.codex/commands/feature-issue.md @@ -0,0 +1,40 @@ +--- +description: Create a GitHub feature issue body using this repository's issue template. +argument-hint: "" +--- + +You are creating a feature issue for this repository. + +Use Korean. + +Use the repository template at `.github/ISSUE_TEMPLATE/feature-report.md`. + +Input from the user: + +```text +$ARGUMENTS +``` + +Output only the final issue content in Markdown. + +Follow this exact structure: + +```markdown +# Feature Report + +## 추가 할 사항들 + +- ... + +## 첨부자료 + +- ... +``` + +Rules: + +- Keep the title suggestion separate at the top as `title: feature: ...`. +- If the user did not provide enough detail, infer a reasonable feature scope from the repository context. +- Do not invent implementation details that are not implied by the request. +- Prefer concrete acceptance criteria over vague descriptions. +- If there is no attachment/reference, write `- 없음`. diff --git a/.codex/commands/fix-issue.md b/.codex/commands/fix-issue.md new file mode 100644 index 00000000..f6bdc53c --- /dev/null +++ b/.codex/commands/fix-issue.md @@ -0,0 +1,40 @@ +--- +description: Create a GitHub fix issue body using this repository's issue template. +argument-hint: "" +--- + +You are creating a fix issue for this repository. + +Use Korean. + +Use the repository template at `.github/ISSUE_TEMPLATE/fix-report.md`. + +Input from the user: + +```text +$ARGUMENTS +``` + +Output only the final issue content in Markdown. + +Follow this exact structure: + +```markdown +# Fix Report + +## 고쳐야 할 사항 + +- ... + +## 첨부자료 + +- ... +``` + +Rules: + +- Keep the title suggestion separate at the top as `title: fix: ...`. +- Describe the current problem, expected behavior, and affected area when possible. +- If the issue is operational, include the relevant environment such as prod, dev, EC2, Docker, or CloudWatch. +- Do not claim a root cause unless it is directly supported by the given context. +- If there is no attachment/reference, write `- 없음`. diff --git a/.codex/commands/pr.md b/.codex/commands/pr.md new file mode 100644 index 00000000..5c92101b --- /dev/null +++ b/.codex/commands/pr.md @@ -0,0 +1,58 @@ +--- +description: Draft a pull request body using this repository's PR template and current git changes. +argument-hint: "" +allowed-tools: Bash(git status --short), Bash(git diff --stat), Bash(git diff --name-only), Bash(git diff) +--- + +You are drafting a pull request for this repository. + +Use Korean. + +Use the repository template at `.github/PULL_REQUEST_TEMPLATE.md`. + +Input from the user: + +```text +$ARGUMENTS +``` + +Before writing the PR body: + +1. Check changed files with `git status --short`. +2. Check the diff summary with `git diff --stat`. +3. Inspect relevant diffs with `git diff`. + +Output only the final PR content in Markdown. + +Follow this exact structure: + +```markdown +## #️⃣ Issue Number + +- resolved # + +## 📝 요약(Summary) + +- + +## 💬 공유사항 to 리뷰어 + +- + +## ✅ PR Checklist + +PR이 다음 요구 사항을 충족하는지 확인하세요. + +- [ ] 커밋 메시지 컨벤션에 맞게 작성했습니다. +- [ ] 변경 사항에 대한 테스트를 했습니다.(버그 수정/기능에 대한 테스트). +``` + +Rules: + +- Fill `resolved #` with an issue number if the user provided one. If not, keep `resolved #`. +- Explain what changed and why, not just how. +- Mention key files or behavior changes when helpful. +- In `공유사항 to 리뷰어`, call out risks, test gaps, migration concerns, deployment concerns, or areas needing focused review. +- For the checklist, mark an item checked only if the evidence is clear from the context or command results. +- If tests were not run, leave the test checkbox unchecked and mention that in reviewer notes. +- Do not include unrelated refactoring in the summary. From 58b27a602339d870ec069c56055b34295c71a807 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Mon, 22 Jun 2026 20:24:35 +0900 Subject: [PATCH 357/399] =?UTF-8?q?feat:=20grade.properties=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 --- gradle.properties | 1 + 1 file changed, 1 insertion(+) create mode 100644 gradle.properties diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000..719e7332 --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +org.gradle.java.installations.paths=/opt/homebrew/opt/openjdk@17 From eca6940f5e4fffac76f2e4d8c176b6e08d313846 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Mon, 22 Jun 2026 20:28:53 +0900 Subject: [PATCH 358/399] =?UTF-8?q?feat:=20Branch=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EB=AA=85=EB=A0=B9=EC=96=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/commands/branch.md | 74 ++++++++++++++++++++++++++++++++++++++ .codex/commands/branch.md | 74 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+) create mode 100644 .claude/commands/branch.md create mode 100644 .codex/commands/branch.md diff --git a/.claude/commands/branch.md b/.claude/commands/branch.md new file mode 100644 index 00000000..845b9e04 --- /dev/null +++ b/.claude/commands/branch.md @@ -0,0 +1,74 @@ +--- +description: Create or suggest a git branch name using this repository's branch convention. +argument-hint: " # " +allowed-tools: Bash(git status --short), Bash(git branch --show-current), Bash(git switch -c *) +--- + +You are creating or suggesting a git branch for this repository. + +Use Korean. + +Branch naming convention: + +```text +/#- +``` + +Examples: + +```text +feat/#123-add-review-api +fix/#346-handle-apple-email-missing +refactor/#354-clean-partnership-period +docs/#12-update-deploy-guide +``` + +Input from the user: + +```text +$ARGUMENTS +``` + +Process: + +1. Identify the git commit type. +2. Identify the issue number. +3. Convert the feature/fix summary into short English kebab-case. +4. Check current branch and working tree before creating. +5. If the user only asks for a branch name, suggest the branch name only. +6. If the user explicitly asks to create the branch, run `git switch -c `. + +Allowed commit types: + +```text +feat, fix, refactor, style, docs, test, chore +``` + +Rules: + +- Always include `#` before the issue number. +- Use lowercase English in the description. +- Use kebab-case, not spaces, underscores, or Korean. +- Keep the description short, usually 2-6 words. +- If the issue number is missing, ask for it before creating a branch. +- If the type is unclear, choose the most conservative type and explain briefly. +- Before creating a branch, run `git status --short` and `git branch --show-current`. +- If there are uncommitted changes, mention that they will remain in the working tree after switching. + +Output when suggesting: + +```text +추천 브랜치명: feat/#123-add-review-api +``` + +Output when creating: + +```text +생성할 브랜치명: feat/#123-add-review-api +``` + +Then run: + +```bash +git switch -c feat/#123-add-review-api +``` diff --git a/.codex/commands/branch.md b/.codex/commands/branch.md new file mode 100644 index 00000000..845b9e04 --- /dev/null +++ b/.codex/commands/branch.md @@ -0,0 +1,74 @@ +--- +description: Create or suggest a git branch name using this repository's branch convention. +argument-hint: " # " +allowed-tools: Bash(git status --short), Bash(git branch --show-current), Bash(git switch -c *) +--- + +You are creating or suggesting a git branch for this repository. + +Use Korean. + +Branch naming convention: + +```text +/#- +``` + +Examples: + +```text +feat/#123-add-review-api +fix/#346-handle-apple-email-missing +refactor/#354-clean-partnership-period +docs/#12-update-deploy-guide +``` + +Input from the user: + +```text +$ARGUMENTS +``` + +Process: + +1. Identify the git commit type. +2. Identify the issue number. +3. Convert the feature/fix summary into short English kebab-case. +4. Check current branch and working tree before creating. +5. If the user only asks for a branch name, suggest the branch name only. +6. If the user explicitly asks to create the branch, run `git switch -c `. + +Allowed commit types: + +```text +feat, fix, refactor, style, docs, test, chore +``` + +Rules: + +- Always include `#` before the issue number. +- Use lowercase English in the description. +- Use kebab-case, not spaces, underscores, or Korean. +- Keep the description short, usually 2-6 words. +- If the issue number is missing, ask for it before creating a branch. +- If the type is unclear, choose the most conservative type and explain briefly. +- Before creating a branch, run `git status --short` and `git branch --show-current`. +- If there are uncommitted changes, mention that they will remain in the working tree after switching. + +Output when suggesting: + +```text +추천 브랜치명: feat/#123-add-review-api +``` + +Output when creating: + +```text +생성할 브랜치명: feat/#123-add-review-api +``` + +Then run: + +```bash +git switch -c feat/#123-add-review-api +``` From 2f1a36a4b9a7373468886d99c8cf45820e9977e3 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Mon, 22 Jun 2026 20:32:09 +0900 Subject: [PATCH 359/399] =?UTF-8?q?feat:=20Review=20=EB=AA=85=EB=A0=B9?= =?UTF-8?q?=EC=96=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/commands/review.md | 214 +++++++++++++++++++++++++++++++++++++ .codex/commands/review.md | 214 +++++++++++++++++++++++++++++++++++++ 2 files changed, 428 insertions(+) create mode 100644 .claude/commands/review.md create mode 100644 .codex/commands/review.md diff --git a/.claude/commands/review.md b/.claude/commands/review.md new file mode 100644 index 00000000..8062750d --- /dev/null +++ b/.claude/commands/review.md @@ -0,0 +1,214 @@ +# 📄 Backend PR Review Guide (for claude) + +## 📌 목적 + +이 문서는 백엔드 Pull Request를 리뷰할 때, +LLM이 일관되고 실무적인 기준으로 코드 리뷰를 수행하도록 돕기 위한 가이드입니다. + +리뷰는 단순 코드 스타일이 아니라, +**설계 / 안정성 / 성능 / 보안 / 유지보수성 중심**으로 수행해야 합니다. + +--- + +## 리뷰 기본 원칙 + +- 단순 "좋다/나쁘다"가 아니라 **이유 + 개선 방향** 제시 +- 가능하면 **대안 코드** 또는 **구체적 수정 방향** 제시 +- 불필요한 nitpick 지양 +- **문제 → 이유 → 개선안** 구조로 설명 + +--- + +## 1. 아키텍처 / 설계 + +- 책임 분리가 잘 되어 있는가? + - Controller / Service / Repository 역할이 명확한가? +- 비즈니스 로직이 Service에 위치하는가? +- Entity에 로직이 적절히 포함되어 있는가? +- 도메인 중심 설계가 되어 있는가? + +### 체크 포인트 + +- Service가 너무 비대하지 않은가? +- Controller에서 비즈니스 로직 처리하지 않는가? +- Repository가 불필요한 로직을 가지지 않는가? + +--- + +## 2. 도메인 모델 (Entity) + +- 엔티티가 비즈니스 규칙을 잘 표현하는가? +- setter 남용 없이 메서드 기반 변경인가? +- 상태 변경 메서드가 명확한가? + +### 체크 포인트 + +- `user.restore()` 같은 명확한 행위 메서드 존재 여부 +- 무분별한 public setter 사용 여부 +- soft delete 정책 일관성 + +--- + +## 3. 인증 / 보안 + +- 인증 로직이 안전한가? +- 외부 API 토큰을 그대로 신뢰하지 않는가? +- JWT 사용 방식이 올바른가? + +### 체크 포인트 + +- 우리 서비스 JWT 따로 발급하는가 +- refresh token 저장 위치가 안전한가 (DB/Redis) +- 민감 정보 로그 출력 여부 + +--- + +## 4. 예외 처리 + +- 예외가 일관되게 처리되는가? +- 비즈니스 예외 vs 시스템 예외 구분되어 있는가? + +### 체크 포인트 + +- ErrorCode enum 사용 여부 +- try-catch 남용 여부 +- 의미 없는 RuntimeException throw 여부 + +--- + +## 5. 트랜잭션 + +- 필요한 곳에 `@Transactional`이 있는가? +- readOnly 설정이 적절한가? + +### 체크 포인트 + +- 조회 후 엔티티 수정 시 트랜잭션 존재 여부 +- 트랜잭션 범위가 과도하지 않은가 + +--- + +## 6. 성능 / 쿼리 + +- 불필요한 쿼리가 발생하지 않는가? +- N+1 문제 가능성 있는가? + +### 체크 포인트 + +- find 후 다시 조회하는 구조 +- lazy loading 문제 +- 인덱스 고려 여부 + +--- + +## 7. 동시성 / 데이터 정합성 + +- race condition 가능성 있는가? +- 중복 데이터 생성 가능성 있는가? + +### 체크 포인트 + +- 소셜 로그인 중복 가입 가능성 +- DB unique constraint 존재 여부 +- save 전에 검증만 하는 구조 + +--- + +## 8. 테스트 가능성 + +- 테스트 가능한 구조인가? +- 의존성 분리가 잘 되어 있는가? + +### 체크 포인트 + +- Service 단위 테스트 가능 여부 +- 외부 API mock 가능 여부 + +--- + +## 9. 코드 가독성 / 유지보수성 + +- 변수명 / 메서드명이 명확한가? +- 코드 흐름이 직관적인가? + +### 체크 포인트 + +- map/orElseGet 남용 여부 +- if-else가 더 나은 경우인지 +- 메서드 분리 적절한가 + +--- + +## 10. API 설계 + +- RESTful하게 설계되어 있는가? +- 요청/응답이 명확한가? + +### 체크 포인트 + +- DTO 사용 여부 +- Entity 직접 반환 여부 +- 응답 포맷 일관성 + +--- + +## 11. 데이터베이스 + +- 스키마 설계가 적절한가? +- 인덱스가 필요한 곳에 있는가? + +### 체크 포인트 + +- `(oauth_provider, oauth_id)` unique 여부 +- nullable 정책 적절한가 +- enum 사용 시 확장성 고려했는가 + +--- + +## 12. 위험 신호 (중요) + +아래가 보이면 반드시 지적하세요. + +- ❌ 인증 로직이 Controller에 있음 +- ❌ Entity setter 남용 +- ❌ 트랜잭션 없이 엔티티 변경 +- ❌ unique 제약 없이 중복 생성 가능 +- ❌ 외부 API 응답을 그대로 신뢰 +- ❌ 비즈니스 로직이 여러 계층에 흩어짐 + +--- + +## 🧾 리뷰 출력 형식 + +```text +### 문제점 +- 설명 + +### 왜 문제인가 +- 설명 + +### 개선 방법 +- 설명 + +### 개선 예시 코드 (선택) +- 코드 +``` + +--- + +## 리뷰 우선순위 + +1. 버그 가능성 +2. 데이터 정합성 +3. 보안 +4. 성능 +5. 설계 +6. 가독성 + +--- + +## 추가 지침 + +- 작은 스타일 지적보다 **치명적인 설계 문제를 우선** +- "이건 취향" 수준은 과하게 지적하지 않기 +- 반드시 **실무 기준으로 판단** diff --git a/.codex/commands/review.md b/.codex/commands/review.md new file mode 100644 index 00000000..8062750d --- /dev/null +++ b/.codex/commands/review.md @@ -0,0 +1,214 @@ +# 📄 Backend PR Review Guide (for claude) + +## 📌 목적 + +이 문서는 백엔드 Pull Request를 리뷰할 때, +LLM이 일관되고 실무적인 기준으로 코드 리뷰를 수행하도록 돕기 위한 가이드입니다. + +리뷰는 단순 코드 스타일이 아니라, +**설계 / 안정성 / 성능 / 보안 / 유지보수성 중심**으로 수행해야 합니다. + +--- + +## 리뷰 기본 원칙 + +- 단순 "좋다/나쁘다"가 아니라 **이유 + 개선 방향** 제시 +- 가능하면 **대안 코드** 또는 **구체적 수정 방향** 제시 +- 불필요한 nitpick 지양 +- **문제 → 이유 → 개선안** 구조로 설명 + +--- + +## 1. 아키텍처 / 설계 + +- 책임 분리가 잘 되어 있는가? + - Controller / Service / Repository 역할이 명확한가? +- 비즈니스 로직이 Service에 위치하는가? +- Entity에 로직이 적절히 포함되어 있는가? +- 도메인 중심 설계가 되어 있는가? + +### 체크 포인트 + +- Service가 너무 비대하지 않은가? +- Controller에서 비즈니스 로직 처리하지 않는가? +- Repository가 불필요한 로직을 가지지 않는가? + +--- + +## 2. 도메인 모델 (Entity) + +- 엔티티가 비즈니스 규칙을 잘 표현하는가? +- setter 남용 없이 메서드 기반 변경인가? +- 상태 변경 메서드가 명확한가? + +### 체크 포인트 + +- `user.restore()` 같은 명확한 행위 메서드 존재 여부 +- 무분별한 public setter 사용 여부 +- soft delete 정책 일관성 + +--- + +## 3. 인증 / 보안 + +- 인증 로직이 안전한가? +- 외부 API 토큰을 그대로 신뢰하지 않는가? +- JWT 사용 방식이 올바른가? + +### 체크 포인트 + +- 우리 서비스 JWT 따로 발급하는가 +- refresh token 저장 위치가 안전한가 (DB/Redis) +- 민감 정보 로그 출력 여부 + +--- + +## 4. 예외 처리 + +- 예외가 일관되게 처리되는가? +- 비즈니스 예외 vs 시스템 예외 구분되어 있는가? + +### 체크 포인트 + +- ErrorCode enum 사용 여부 +- try-catch 남용 여부 +- 의미 없는 RuntimeException throw 여부 + +--- + +## 5. 트랜잭션 + +- 필요한 곳에 `@Transactional`이 있는가? +- readOnly 설정이 적절한가? + +### 체크 포인트 + +- 조회 후 엔티티 수정 시 트랜잭션 존재 여부 +- 트랜잭션 범위가 과도하지 않은가 + +--- + +## 6. 성능 / 쿼리 + +- 불필요한 쿼리가 발생하지 않는가? +- N+1 문제 가능성 있는가? + +### 체크 포인트 + +- find 후 다시 조회하는 구조 +- lazy loading 문제 +- 인덱스 고려 여부 + +--- + +## 7. 동시성 / 데이터 정합성 + +- race condition 가능성 있는가? +- 중복 데이터 생성 가능성 있는가? + +### 체크 포인트 + +- 소셜 로그인 중복 가입 가능성 +- DB unique constraint 존재 여부 +- save 전에 검증만 하는 구조 + +--- + +## 8. 테스트 가능성 + +- 테스트 가능한 구조인가? +- 의존성 분리가 잘 되어 있는가? + +### 체크 포인트 + +- Service 단위 테스트 가능 여부 +- 외부 API mock 가능 여부 + +--- + +## 9. 코드 가독성 / 유지보수성 + +- 변수명 / 메서드명이 명확한가? +- 코드 흐름이 직관적인가? + +### 체크 포인트 + +- map/orElseGet 남용 여부 +- if-else가 더 나은 경우인지 +- 메서드 분리 적절한가 + +--- + +## 10. API 설계 + +- RESTful하게 설계되어 있는가? +- 요청/응답이 명확한가? + +### 체크 포인트 + +- DTO 사용 여부 +- Entity 직접 반환 여부 +- 응답 포맷 일관성 + +--- + +## 11. 데이터베이스 + +- 스키마 설계가 적절한가? +- 인덱스가 필요한 곳에 있는가? + +### 체크 포인트 + +- `(oauth_provider, oauth_id)` unique 여부 +- nullable 정책 적절한가 +- enum 사용 시 확장성 고려했는가 + +--- + +## 12. 위험 신호 (중요) + +아래가 보이면 반드시 지적하세요. + +- ❌ 인증 로직이 Controller에 있음 +- ❌ Entity setter 남용 +- ❌ 트랜잭션 없이 엔티티 변경 +- ❌ unique 제약 없이 중복 생성 가능 +- ❌ 외부 API 응답을 그대로 신뢰 +- ❌ 비즈니스 로직이 여러 계층에 흩어짐 + +--- + +## 🧾 리뷰 출력 형식 + +```text +### 문제점 +- 설명 + +### 왜 문제인가 +- 설명 + +### 개선 방법 +- 설명 + +### 개선 예시 코드 (선택) +- 코드 +``` + +--- + +## 리뷰 우선순위 + +1. 버그 가능성 +2. 데이터 정합성 +3. 보안 +4. 성능 +5. 설계 +6. 가독성 + +--- + +## 추가 지침 + +- 작은 스타일 지적보다 **치명적인 설계 문제를 우선** +- "이건 취향" 수준은 과하게 지적하지 않기 +- 반드시 **실무 기준으로 판단** From b119c7abbafacc0ecc0d2fdc1463a4041a62f906 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Mon, 22 Jun 2026 20:33:57 +0900 Subject: [PATCH 360/399] =?UTF-8?q?feat:=20Commit=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EB=AA=85=EB=A0=B9=EC=96=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/commands/commit.md | 60 ++++++++++++++++++++++++++++++++++++++ .codex/commands/commit.md | 60 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 .claude/commands/commit.md create mode 100644 .codex/commands/commit.md diff --git a/.claude/commands/commit.md b/.claude/commands/commit.md new file mode 100644 index 00000000..8fd78609 --- /dev/null +++ b/.claude/commands/commit.md @@ -0,0 +1,60 @@ +--- +description: Create a git commit message using this repository's commit convention. +argument-hint: "" +allowed-tools: Bash(git status --short), Bash(git diff --staged) +--- + +You are creating a git commit message for this repository. + +Use Korean. + +Commit message convention: + +```text +: <한글로 간단하게> +``` + +Examples: + +```text +feat: 리뷰 생성 API 추가 +fix: 애플 로그인 이메일 누락 오류 수정 +refactor: Partnership 기간 타입 정리 +style: 코드 포맷 정리 +docs: 배포 가이드 업데이트 +test: 리뷰 서비스 단위 테스트 추가 +chore: 의존성 버전 업데이트 +``` + +Input from the user: + +```text +$ARGUMENTS +``` + +Process: + +1. Run `git status --short` to check staged files. +2. Run `git diff --staged` to inspect actual changes. +3. Identify the appropriate commit type from the changes. +4. Write a short Korean description summarizing what changed and why. + +Allowed commit types: + +```text +feat, fix, refactor, style, docs, test, chore +``` + +Rules: + +- Description is written in Korean. +- Keep it short and clear — one line only. +- Focus on "무엇을 왜" not "어떻게". +- Do not end with a period. +- If nothing is staged, mention it and do not suggest a commit message. + +Output format: + +```text +커밋 메시지: feat: 리뷰 생성 API 추가 +``` diff --git a/.codex/commands/commit.md b/.codex/commands/commit.md new file mode 100644 index 00000000..8fd78609 --- /dev/null +++ b/.codex/commands/commit.md @@ -0,0 +1,60 @@ +--- +description: Create a git commit message using this repository's commit convention. +argument-hint: "" +allowed-tools: Bash(git status --short), Bash(git diff --staged) +--- + +You are creating a git commit message for this repository. + +Use Korean. + +Commit message convention: + +```text +: <한글로 간단하게> +``` + +Examples: + +```text +feat: 리뷰 생성 API 추가 +fix: 애플 로그인 이메일 누락 오류 수정 +refactor: Partnership 기간 타입 정리 +style: 코드 포맷 정리 +docs: 배포 가이드 업데이트 +test: 리뷰 서비스 단위 테스트 추가 +chore: 의존성 버전 업데이트 +``` + +Input from the user: + +```text +$ARGUMENTS +``` + +Process: + +1. Run `git status --short` to check staged files. +2. Run `git diff --staged` to inspect actual changes. +3. Identify the appropriate commit type from the changes. +4. Write a short Korean description summarizing what changed and why. + +Allowed commit types: + +```text +feat, fix, refactor, style, docs, test, chore +``` + +Rules: + +- Description is written in Korean. +- Keep it short and clear — one line only. +- Focus on "무엇을 왜" not "어떻게". +- Do not end with a period. +- If nothing is staged, mention it and do not suggest a commit message. + +Output format: + +```text +커밋 메시지: feat: 리뷰 생성 API 추가 +``` From 054a2669314fc8c99e8e931a56bb050b5c903af9 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Mon, 22 Jun 2026 21:34:23 +0900 Subject: [PATCH 361/399] =?UTF-8?q?refactor:=20Docker=20=EC=A4=91=EB=B3=B5?= =?UTF-8?q?=20=EB=B9=8C=EB=93=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 13 +++++++++++-- .github/workflows/deploy.yml | 5 ++++- Dockerfile | 21 ++------------------- 3 files changed, 17 insertions(+), 22 deletions(-) diff --git a/.dockerignore b/.dockerignore index 8c2ff6b5..963416b1 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,14 @@ .git .gitignore *.md -build/ -src/test/ \ No newline at end of file +src/test/ +.gradle/ +.idea/ +.DS_Store +*/.DS_Store +.env +src/main/resources/application-local.yml + +build/* +!build/libs/ +!build/libs/*.jar diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 18704696..c61d2ef9 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -49,7 +49,10 @@ jobs: run: chmod +x gradlew - name: Gradle로 빌드 - run: ./gradlew clean build -x test + run: ./gradlew build -x test --no-daemon + + - name: 빌드 산출물 확인 + run: ls -lh build/libs/*.jar - name: Docker Hub 로그인 uses: docker/login-action@v2 diff --git a/Dockerfile b/Dockerfile index 800c1fe0..2118eece 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,25 +1,8 @@ -# 1단계: 빌드 단계 (Gradle Wrapper를 사용하여 애플리케이션 빌드) -FROM --platform=linux/amd64 gradle:7.5.1-jdk17 AS builder -WORKDIR /home/gradle/project - -# 소스 코드 전체를 복사 (gradlew, build.gradle, settings.gradle, src/ 등) -COPY --chown=gradle:gradle . . - -# Gradle Wrapper 실행 권한 부여 (실행 권한이 없을 경우를 대비) -RUN chmod +x gradlew - -# Gradle을 사용하여 프로젝트 빌드 (JAR 파일은 build/libs 폴더에 생성됨) -RUN ./gradlew clean build --no-daemon - -# 2단계: 실행 단계 (빌드 결과물 실행을 위한 환경) -FROM --platform=linux/amd64 eclipse-temurin:17-jdk-alpine +FROM --platform=linux/amd64 eclipse-temurin:17-jre-alpine WORKDIR /app -# 빌드 단계에서 생성된 JAR 파일 복사 (파일명이 프로젝트에 따라 달라질 수 있으므로 와일드카드 사용) -COPY --from=builder /home/gradle/project/build/libs/*.jar app.jar +COPY build/libs/eat-ssu.jar app.jar -# 컨테이너에서 사용할 포트 (필요 시 변경) EXPOSE 9000 -# 애플리케이션 실행 ENTRYPOINT ["java", "-jar", "app.jar"] From 953d42cfe92d730f79397bc8df9e6db3b3c06957 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Mon, 22 Jun 2026 21:38:53 +0900 Subject: [PATCH 362/399] =?UTF-8?q?fix:=20plain=20JAR=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=20=EC=96=B5=EC=A0=9C=20=EB=B0=8F=20Docker=20=EB=B9=8C=EB=93=9C?= =?UTF-8?q?=20=EC=84=A0=ED=96=89=20=EC=A1=B0=EA=B1=B4=20=EB=AC=B8=EC=84=9C?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- CLAUDE.md | 2 +- build.gradle | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index b06eaa2f..b898f9fc 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -35,7 +35,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ./gradlew test # 테스트만 실행 ./gradlew test --tests "ssu.eatssu.domain.review.service.ReviewServiceTest" # 단일 테스트 클래스 실행 ./gradlew bootRun --args='--spring.profiles.active=local' # 로컬 서버 실행 (port 9000) -docker build -f Dockerfile -t eatssu-local . # Docker 이미지 빌드 +docker build -f Dockerfile -t eatssu-local . # Docker 이미지 빌드 (반드시 ./gradlew build -x test 선행 필요) ``` 로컬 실행 시 MySQL이 `localhost:3306/eatssu`에 필요하며, `application-local.yml`에서 DB 정보를 설정한다. `.env` 파일로 환경변수를 오버라이드할 수 있다 (`spring.config.import: optional:file:.env[.properties]`). diff --git a/build.gradle b/build.gradle index 5d8312ed..068b8cb8 100644 --- a/build.gradle +++ b/build.gradle @@ -19,6 +19,10 @@ bootJar { archiveVersion = "0.0.1" } +jar { + enabled = false +} + configurations { compileOnly { extendsFrom annotationProcessor From af79cd8d2cd0cbf1a3953ee7791bd929fc8996ce Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Mon, 22 Jun 2026 21:49:03 +0900 Subject: [PATCH 363/399] =?UTF-8?q?refactor:=20Docker=20=EB=B9=8C=EB=93=9C?= =?UTF-8?q?=20=EC=BB=A8=ED=85=8D=EC=8A=A4=ED=8A=B8=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.dockerignore b/.dockerignore index 963416b1..c6718ac2 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,14 +1,13 @@ .git .gitignore *.md -src/test/ +src/ .gradle/ .idea/ .DS_Store */.DS_Store .env -src/main/resources/application-local.yml build/* !build/libs/ -!build/libs/*.jar +!build/libs/eat-ssu.jar From c92668ef678e8d8c883fc51011943d13cf104f53 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Tue, 23 Jun 2026 12:14:46 +0900 Subject: [PATCH 364/399] =?UTF-8?q?fix:=20=EB=B0=B0=ED=8F=AC=20=EC=8B=9C?= =?UTF-8?q?=20=EC=95=B1=20=EC=BB=A8=ED=85=8C=EC=9D=B4=EB=84=88=EB=A7=8C=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index c61d2ef9..57ed70e9 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -83,9 +83,11 @@ jobs: port: 22 script: | sudo docker ps - sudo docker rm -f $(docker ps -qa) + sudo docker rm -f eatssu-prod || true + OLD_PROD_CONTAINERS=$(sudo docker ps -aq --filter ancestor=${{ secrets.DOCKER_REPO }}/eatssu-prod) + if [ -n "$OLD_PROD_CONTAINERS" ]; then sudo docker rm -f $OLD_PROD_CONTAINERS; fi sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-prod - sudo docker run -d -p 9000:9000 \ + sudo docker run -d --name eatssu-prod -p 9000:9000 \ --log-driver=awslogs \ --log-opt awslogs-region=ap-northeast-2 \ --log-opt awslogs-group=prod-ec2-group \ @@ -112,9 +114,11 @@ jobs: key: ${{ secrets.DEV_PRIVATE_KEY }} script: | sudo docker ps - sudo docker rm -f $(docker ps -qa) + sudo docker rm -f eatssu-dev || true + OLD_DEV_CONTAINERS=$(sudo docker ps -aq --filter ancestor=${{ secrets.DOCKER_REPO }}/eatssu-dev) + if [ -n "$OLD_DEV_CONTAINERS" ]; then sudo docker rm -f $OLD_DEV_CONTAINERS; fi sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev - sudo docker run -d -p 9000:9000 \ + sudo docker run -d --name eatssu-dev -p 9000:9000 \ --log-driver=awslogs \ --log-opt awslogs-region=ap-northeast-2 \ --log-opt awslogs-group=dev-ec2-group \ From e148e78943d29758b9d7645a401055a34ceaaab8 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Tue, 23 Jun 2026 12:50:13 +0900 Subject: [PATCH 365/399] =?UTF-8?q?fix:=20=EB=B0=B0=ED=8F=AC=20=EC=BB=A8?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EB=84=88=20=EC=9E=AC=EC=8B=9C=EC=9E=91=20?= =?UTF-8?q?=EC=A0=95=EC=B1=85=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 57ed70e9..6d93bab2 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -84,10 +84,9 @@ jobs: script: | sudo docker ps sudo docker rm -f eatssu-prod || true - OLD_PROD_CONTAINERS=$(sudo docker ps -aq --filter ancestor=${{ secrets.DOCKER_REPO }}/eatssu-prod) - if [ -n "$OLD_PROD_CONTAINERS" ]; then sudo docker rm -f $OLD_PROD_CONTAINERS; fi + sudo docker ps -q --filter publish=9000 | xargs -r sudo docker rm -f sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-prod - sudo docker run -d --name eatssu-prod -p 9000:9000 \ + sudo docker run -d --name eatssu-prod --restart unless-stopped -p 9000:9000 \ --log-driver=awslogs \ --log-opt awslogs-region=ap-northeast-2 \ --log-opt awslogs-group=prod-ec2-group \ @@ -115,10 +114,9 @@ jobs: script: | sudo docker ps sudo docker rm -f eatssu-dev || true - OLD_DEV_CONTAINERS=$(sudo docker ps -aq --filter ancestor=${{ secrets.DOCKER_REPO }}/eatssu-dev) - if [ -n "$OLD_DEV_CONTAINERS" ]; then sudo docker rm -f $OLD_DEV_CONTAINERS; fi + sudo docker ps -q --filter publish=9000 | xargs -r sudo docker rm -f sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev - sudo docker run -d --name eatssu-dev -p 9000:9000 \ + sudo docker run -d --name eatssu-dev --restart unless-stopped -p 9000:9000 \ --log-driver=awslogs \ --log-opt awslogs-region=ap-northeast-2 \ --log-opt awslogs-group=dev-ec2-group \ From 0c0c8d6d303cc913364b107e5192c5b4540fe2e3 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Tue, 23 Jun 2026 12:54:09 +0900 Subject: [PATCH 366/399] =?UTF-8?q?fix:=20=EB=B0=B0=ED=8F=AC=20=EC=BB=A8?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EB=84=88=20=EC=A0=9C=EA=B1=B0=20=EB=AA=85?= =?UTF-8?q?=EB=A0=B9=20=ED=98=B8=ED=99=98=EC=84=B1=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 6d93bab2..6f1f26ef 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -84,7 +84,8 @@ jobs: script: | sudo docker ps sudo docker rm -f eatssu-prod || true - sudo docker ps -q --filter publish=9000 | xargs -r sudo docker rm -f + PUBLISHED_CONTAINERS=$(sudo docker ps -q --filter publish=9000) + if [ -n "$PUBLISHED_CONTAINERS" ]; then sudo docker rm -f $PUBLISHED_CONTAINERS; fi sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-prod sudo docker run -d --name eatssu-prod --restart unless-stopped -p 9000:9000 \ --log-driver=awslogs \ @@ -114,7 +115,8 @@ jobs: script: | sudo docker ps sudo docker rm -f eatssu-dev || true - sudo docker ps -q --filter publish=9000 | xargs -r sudo docker rm -f + PUBLISHED_CONTAINERS=$(sudo docker ps -q --filter publish=9000) + if [ -n "$PUBLISHED_CONTAINERS" ]; then sudo docker rm -f $PUBLISHED_CONTAINERS; fi sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev sudo docker run -d --name eatssu-dev --restart unless-stopped -p 9000:9000 \ --log-driver=awslogs \ From 07b36724b27933cb50fdaf4bfbcf3cae0d5ec90a Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Tue, 23 Jun 2026 15:46:55 +0900 Subject: [PATCH 367/399] =?UTF-8?q?fix:=20=EC=9D=B8=EC=A6=9D=20=EC=9D=91?= =?UTF-8?q?=EB=8B=B5=20=EB=A1=9C=EA=B7=B8=20=EB=A7=88=EC=8A=A4=ED=82=B9=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eatssu/domain/admin/dto/LoginRequest.java | 5 +- .../global/log/ControllerLogAspect.java | 32 ++++++--- .../global/log/ControllerLogAspectTest.java | 68 +++++++++++++++++++ 3 files changed, 95 insertions(+), 10 deletions(-) create mode 100644 src/test/java/ssu/eatssu/global/log/ControllerLogAspectTest.java diff --git a/src/main/java/ssu/eatssu/domain/admin/dto/LoginRequest.java b/src/main/java/ssu/eatssu/domain/admin/dto/LoginRequest.java index 1bafc65d..d9f2d82c 100644 --- a/src/main/java/ssu/eatssu/domain/admin/dto/LoginRequest.java +++ b/src/main/java/ssu/eatssu/domain/admin/dto/LoginRequest.java @@ -1,4 +1,7 @@ package ssu.eatssu.domain.admin.dto; -public record LoginRequest(String loginId, String password) { +import ssu.eatssu.global.log.annotation.LogMask; + +public record LoginRequest(String loginId, + @LogMask String password) { } diff --git a/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java b/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java index 9c203f00..0fc29841 100644 --- a/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java +++ b/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java @@ -31,6 +31,8 @@ @RequiredArgsConstructor public class ControllerLogAspect { + private static final String RESPONSE_BODY_SKIPPED = "[response-body-skipped]"; + private final ObjectMapper objectMapper; private final SlackErrorNotifier slackErrorNotifier; @@ -87,15 +89,7 @@ public Object logApi(ProceedingJoinPoint joinPoint) throws Throwable { Object result = joinPoint.proceed(); long time = System.currentTimeMillis() - start; - String resultJson; - try { - resultJson = objectMapper.writeValueAsString(result); - if (resultJson.length() > 600) { - resultJson = resultJson.substring(0, 600) + "...(truncated)"; - } - } catch (Exception e) { - resultJson = String.valueOf(result); - } + String resultJson = getResponseLog(uri, result); log.info("RESPONSE {} {} ({} ms) result={}", method, uri, time, resultJson); return result; @@ -110,6 +104,26 @@ public Object logApi(ProceedingJoinPoint joinPoint) throws Throwable { } } + private String getResponseLog(String uri, Object result) { + if (isAuthApi(uri)) { + return RESPONSE_BODY_SKIPPED; + } + + try { + String resultJson = objectMapper.writeValueAsString(result); + if (resultJson.length() > 600) { + return resultJson.substring(0, 600) + "...(truncated)"; + } + return resultJson; + } catch (Exception e) { + return String.valueOf(result); + } + } + + private boolean isAuthApi(String uri) { + return uri != null && uri.startsWith("/oauths/"); + } + private String getCauseMessage(Throwable e) { if (e instanceof BaseException baseException) { return baseException.getStatus().getMessage(); diff --git a/src/test/java/ssu/eatssu/global/log/ControllerLogAspectTest.java b/src/test/java/ssu/eatssu/global/log/ControllerLogAspectTest.java new file mode 100644 index 00000000..bd461859 --- /dev/null +++ b/src/test/java/ssu/eatssu/global/log/ControllerLogAspectTest.java @@ -0,0 +1,68 @@ +package ssu.eatssu.global.log; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; +import ssu.eatssu.domain.admin.dto.LoginRequest; +import ssu.eatssu.domain.user.dto.Tokens; +import ssu.eatssu.global.handler.response.BaseResponse; + +import java.lang.reflect.Method; +import java.util.Map; + +import static org.assertj.core.api.Assertions.assertThat; + +class ControllerLogAspectTest { + + private final ControllerLogAspect controllerLogAspect = new ControllerLogAspect(new ObjectMapper(), null); + + @Test + void shouldSkipResponseBodyForOauthApi() throws Exception { + // given + BaseResponse response = BaseResponse.success(new Tokens("access-token", "refresh-token")); + + // when + String result = invokeGetResponseLog("/oauths/kakao", response); + + // then + assertThat(result).isEqualTo("[response-body-skipped]"); + assertThat(result).doesNotContain("access-token", "refresh-token"); + } + + @Test + void shouldLogResponseBodyForNonOauthApi() throws Exception { + // given + BaseResponse response = BaseResponse.success("ok"); + + // when + String result = invokeGetResponseLog("/meals", response); + + // then + assertThat(result).contains("ok"); + } + + @Test + void shouldMaskAnnotatedRequestFields() throws Exception { + // given + LoginRequest request = new LoginRequest("admin", "password"); + + // when + Map result = invokeToSafeMap(request); + + // then + assertThat(result).containsEntry("loginId", "admin"); + assertThat(result).containsEntry("password", "***"); + } + + private String invokeGetResponseLog(String uri, Object result) throws Exception { + Method method = ControllerLogAspect.class.getDeclaredMethod("getResponseLog", String.class, Object.class); + method.setAccessible(true); + return (String) method.invoke(controllerLogAspect, uri, result); + } + + @SuppressWarnings("unchecked") + private Map invokeToSafeMap(Object arg) throws Exception { + Method method = ControllerLogAspect.class.getDeclaredMethod("toSafeMap", Object.class); + method.setAccessible(true); + return (Map) method.invoke(controllerLogAspect, arg); + } +} From dcaddc35d9b159da5a12a27f78b51b69f54e3ad9 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Tue, 23 Jun 2026 16:05:26 +0900 Subject: [PATCH 368/399] =?UTF-8?q?refactor:=20=EB=A1=9C=EA=B7=B8=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EB=A6=AC=ED=94=8C=EB=A0=89?= =?UTF-8?q?=EC=85=98=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/log/ControllerLogAspect.java | 4 ++-- .../global/log/ControllerLogAspectTest.java | 19 +++---------------- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java b/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java index 0fc29841..21af77f4 100644 --- a/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java +++ b/src/main/java/ssu/eatssu/global/log/ControllerLogAspect.java @@ -104,7 +104,7 @@ public Object logApi(ProceedingJoinPoint joinPoint) throws Throwable { } } - private String getResponseLog(String uri, Object result) { + String getResponseLog(String uri, Object result) { if (isAuthApi(uri)) { return RESPONSE_BODY_SKIPPED; } @@ -152,7 +152,7 @@ private String getDeviceTypeFromSecurityContext() { return "unknown"; } - private Map toSafeMap(Object arg) { + Map toSafeMap(Object arg) { Map result = new HashMap<>(); for (Field field : arg.getClass().getDeclaredFields()) { field.setAccessible(true); diff --git a/src/test/java/ssu/eatssu/global/log/ControllerLogAspectTest.java b/src/test/java/ssu/eatssu/global/log/ControllerLogAspectTest.java index bd461859..861970ab 100644 --- a/src/test/java/ssu/eatssu/global/log/ControllerLogAspectTest.java +++ b/src/test/java/ssu/eatssu/global/log/ControllerLogAspectTest.java @@ -6,7 +6,6 @@ import ssu.eatssu.domain.user.dto.Tokens; import ssu.eatssu.global.handler.response.BaseResponse; -import java.lang.reflect.Method; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; @@ -21,7 +20,7 @@ void shouldSkipResponseBodyForOauthApi() throws Exception { BaseResponse response = BaseResponse.success(new Tokens("access-token", "refresh-token")); // when - String result = invokeGetResponseLog("/oauths/kakao", response); + String result = controllerLogAspect.getResponseLog("/oauths/kakao", response); // then assertThat(result).isEqualTo("[response-body-skipped]"); @@ -34,7 +33,7 @@ void shouldLogResponseBodyForNonOauthApi() throws Exception { BaseResponse response = BaseResponse.success("ok"); // when - String result = invokeGetResponseLog("/meals", response); + String result = controllerLogAspect.getResponseLog("/meals", response); // then assertThat(result).contains("ok"); @@ -46,23 +45,11 @@ void shouldMaskAnnotatedRequestFields() throws Exception { LoginRequest request = new LoginRequest("admin", "password"); // when - Map result = invokeToSafeMap(request); + Map result = controllerLogAspect.toSafeMap(request); // then assertThat(result).containsEntry("loginId", "admin"); assertThat(result).containsEntry("password", "***"); } - private String invokeGetResponseLog(String uri, Object result) throws Exception { - Method method = ControllerLogAspect.class.getDeclaredMethod("getResponseLog", String.class, Object.class); - method.setAccessible(true); - return (String) method.invoke(controllerLogAspect, uri, result); - } - - @SuppressWarnings("unchecked") - private Map invokeToSafeMap(Object arg) throws Exception { - Method method = ControllerLogAspect.class.getDeclaredMethod("toSafeMap", Object.class); - method.setAccessible(true); - return (Map) method.invoke(controllerLogAspect, arg); - } } From a9bd88f02a425f24fd950d97022a795455b8ddcd Mon Sep 17 00:00:00 2001 From: Eunseo Song <162149585+eunseo9311@users.noreply.github.com> Date: Sun, 28 Jun 2026 06:16:28 +0900 Subject: [PATCH 369/399] =?UTF-8?q?feat:=20=EB=8B=A8=EA=B3=BC=EB=8C=80?= =?UTF-8?q?=ED=95=99/=ED=95=99=EA=B3=BC/=EC=A0=9C=ED=9C=B4=EC=8B=9D?= =?UTF-8?q?=EB=8B=B9=20=EB=8B=A4=EA=B5=AD=EC=96=B4=20=EB=B2=88=EC=97=AD=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - V10: 단과대학 12개 영어/일본어/베트남어 번역 데이터 추가 - V11: 학과 53개 영어/일본어/베트남어 번역 데이터 추가 - V12: 제휴식당 98개 영어/일본어/베트남어 번역 데이터 추가 --- .../migration/V10__populate_i18n_college.sql | 13 +++ .../V11__populate_i18n_department.sql | 54 ++++++++++ ...__populate_i18n_partnership_restaurant.sql | 99 +++++++++++++++++++ 3 files changed, 166 insertions(+) create mode 100644 src/main/resources/db/migration/V10__populate_i18n_college.sql create mode 100644 src/main/resources/db/migration/V11__populate_i18n_department.sql create mode 100644 src/main/resources/db/migration/V12__populate_i18n_partnership_restaurant.sql diff --git a/src/main/resources/db/migration/V10__populate_i18n_college.sql b/src/main/resources/db/migration/V10__populate_i18n_college.sql new file mode 100644 index 00000000..7af84728 --- /dev/null +++ b/src/main/resources/db/migration/V10__populate_i18n_college.sql @@ -0,0 +1,13 @@ +-- 단과대학 다국어 데이터 추가 +UPDATE college SET name_en = 'Student Council', name_ja = '学生自治会', name_vi = 'Hội Sinh viên' WHERE name_ko = '총학생회'; +UPDATE college SET name_en = 'College of AI', name_ja = 'AI学部', name_vi = 'Khoa AI' WHERE name_ko = 'AI대학'; +UPDATE college SET name_en = 'College of IT', name_ja = 'IT学部', name_vi = 'Khoa IT' WHERE name_ko = 'IT대학'; +UPDATE college SET name_en = 'College of Business Administration', name_ja = '経営学部', name_vi = 'Khoa Quản trị Kinh doanh' WHERE name_ko = '경영대학'; +UPDATE college SET name_en = 'College of Economics and International Commerce', name_ja = '経済・国際商学部', name_vi = 'Khoa Kinh tế và Thương mại Quốc tế' WHERE name_ko = '경제통상대학'; +UPDATE college SET name_en = 'College of Engineering', name_ja = '工学部', name_vi = 'Khoa Kỹ thuật' WHERE name_ko = '공과대학'; +UPDATE college SET name_en = 'College of Law', name_ja = '法学部', name_vi = 'Khoa Luật' WHERE name_ko = '법과대학'; +UPDATE college SET name_en = 'College of Social Sciences', name_ja = '社会科学部', name_vi = 'Khoa Khoa học Xã hội' WHERE name_ko = '사회과학대학'; +UPDATE college SET name_en = 'College of Humanities', name_ja = '人文学部', name_vi = 'Khoa Nhân văn' WHERE name_ko = '인문대학'; +UPDATE college SET name_en = 'College of Natural Sciences', name_ja = '自然科学部', name_vi = 'Khoa Khoa học Tự nhiên' WHERE name_ko = '자연과학대학'; +UPDATE college SET name_en = 'School of Liberal Studies', name_ja = 'リベラル・スタディーズ学部', name_vi = 'Khoa Nghiên cứu Tự do' WHERE name_ko = '자유전공학부'; +UPDATE college SET name_en = 'Department of Next-Generation Semiconductor', name_ja = '次世代半導体学科', name_vi = 'Khoa Bán dẫn Thế hệ Mới' WHERE name_ko = '차세대반도체학과'; diff --git a/src/main/resources/db/migration/V11__populate_i18n_department.sql b/src/main/resources/db/migration/V11__populate_i18n_department.sql new file mode 100644 index 00000000..49d13262 --- /dev/null +++ b/src/main/resources/db/migration/V11__populate_i18n_department.sql @@ -0,0 +1,54 @@ +-- 학과 다국어 데이터 추가 +UPDATE department SET name_en = 'Computer Science & Engineering', name_ja = 'コンピュータ科学工学', name_vi = 'Khoa học và Kỹ thuật Máy tính' WHERE name_ko = '컴퓨터학부'; +UPDATE department SET name_en = 'Electronic Engineering(Electronic Engineering major)', name_ja = '電子工学(電子工学専攻)', name_vi = 'Kỹ thuật Điện tử (chuyên ngành Kỹ thuật Điện tử)' WHERE name_ko = '전자정보공학부(전자공학전공)'; +UPDATE department SET name_en = 'Electronic Engineering(IT convergence major)', name_ja = '電子工学(IT融合専攻)', name_vi = 'Kỹ thuật Điện tử (chuyên ngành Hội tụ IT)' WHERE name_ko = '전자정보공학부(IT융합전공)'; +UPDATE department SET name_en = 'Global School of Media', name_ja = 'グローバルメディア学部', name_vi = 'Khoa Truyền thông Toàn cầu' WHERE name_ko = '글로벌미디어학부'; +UPDATE department SET name_en = 'Software', name_ja = 'ソフトウェア', name_vi = 'Phần mềm' WHERE name_ko = '소프트웨어학부'; +UPDATE department SET name_en = 'AI Convergence', name_ja = 'AI融合', name_vi = 'Hội tụ AI' WHERE name_ko = 'AI융합학부'; +UPDATE department SET name_en = 'AI Software', name_ja = 'AIソフトウェア', name_vi = 'Phần mềm AI' WHERE name_ko = 'AI소프트웨어학부'; +UPDATE department SET name_en = 'Digital Media', name_ja = 'デジタルメディア', name_vi = 'Truyền thông Kỹ thuật số' WHERE name_ko = '디지털미디어학과'; +UPDATE department SET name_en = 'Business Administration', name_ja = '経営学', name_vi = 'Quản trị Kinh doanh' WHERE name_ko = '경영학부'; +UPDATE department SET name_en = 'Entrepreneurship & Small Business', name_ja = 'ベンチャー・中小企業', name_vi = 'Khởi nghiệp và Doanh nghiệp Nhỏ' WHERE name_ko = '벤처중소기업학과'; +UPDATE department SET name_en = 'Accounting', name_ja = '会計学', name_vi = 'Kế toán' WHERE name_ko = '회계학과'; +UPDATE department SET name_en = 'Finance', name_ja = '金融学', name_vi = 'Tài chính' WHERE name_ko = '금융학부'; +UPDATE department SET name_en = 'Venture Management', name_ja = 'ベンチャー経営', name_vi = 'Quản trị Khởi nghiệp' WHERE name_ko = '벤처경영학과'; +UPDATE department SET name_en = 'Innovation Management', name_ja = 'イノベーション経営', name_vi = 'Quản trị Đổi mới' WHERE name_ko = '혁신경영학과'; +UPDATE department SET name_en = 'Welfare & Management', name_ja = '福祉経営', name_vi = 'Quản trị Phúc lợi' WHERE name_ko = '복지경영학과'; +UPDATE department SET name_en = 'Accounting & Tax', name_ja = '会計・税務', name_vi = 'Kế toán và Thuế' WHERE name_ko = '회계세무학과'; +UPDATE department SET name_en = 'Economics', name_ja = '経済学', name_vi = 'Kinh tế học' WHERE name_ko = '경제학과'; +UPDATE department SET name_en = 'Global Commerce', name_ja = 'グローバル商学', name_vi = 'Thương mại Toàn cầu' WHERE name_ko = '글로벌통상학과'; +UPDATE department SET name_en = 'Ecofinance', name_ja = 'エコファイナンス', name_vi = 'Tài chính Kinh tế' WHERE name_ko = '금융경제학과'; +UPDATE department SET name_en = 'International Trade & Transaction', name_ja = '国際貿易・取引', name_vi = 'Thương mại và Giao dịch Quốc tế' WHERE name_ko = '국제무역학과'; +UPDATE department SET name_en = 'Chemical Engineering', name_ja = '化学工学', name_vi = 'Kỹ thuật Hóa học' WHERE name_ko = '화학공학과'; +UPDATE department SET name_en = 'Materials Science & Engineering', name_ja = '材料科学工学', name_vi = 'Khoa học và Kỹ thuật Vật liệu' WHERE name_ko = '신소재공학과'; +UPDATE department SET name_en = 'Electrical Engineering', name_ja = '電気工学', name_vi = 'Kỹ thuật Điện' WHERE name_ko = '전기공학부'; +UPDATE department SET name_en = 'Mechanical Engineering', name_ja = '機械工学', name_vi = 'Kỹ thuật Cơ khí' WHERE name_ko = '기계공학부'; +UPDATE department SET name_en = 'Industrial & Information Systems Engineering', name_ja = '産業・情報システム工学', name_vi = 'Kỹ thuật Hệ thống Công nghiệp và Thông tin' WHERE name_ko = '산업정보시스템공학과'; +UPDATE department SET name_en = 'Architecture', name_ja = '建築学', name_vi = 'Kiến trúc' WHERE name_ko = '건축학부'; +UPDATE department SET name_en = 'Law', name_ja = '法学', name_vi = 'Luật' WHERE name_ko = '법학과'; +UPDATE department SET name_en = 'Global Law', name_ja = 'グローバル法学', name_vi = 'Luật Toàn cầu' WHERE name_ko = '국제법무학과'; +UPDATE department SET name_en = 'Social Welfare', name_ja = '社会福祉学', name_vi = 'Phúc lợi Xã hội' WHERE name_ko = '사회복지학부'; +UPDATE department SET name_en = 'Public Administration', name_ja = '行政学', name_vi = 'Hành chính Công' WHERE name_ko = '행정학부'; +UPDATE department SET name_en = 'Political Science & International Relations', name_ja = '政治学・国際関係', name_vi = 'Khoa học Chính trị và Quan hệ Quốc tế' WHERE name_ko = '정치외교학과'; +UPDATE department SET name_en = 'Information Sociology', name_ja = '情報社会学', name_vi = 'Xã hội học Thông tin' WHERE name_ko = '정보사회학과'; +UPDATE department SET name_en = 'Journalism, Public Relations, and Advertising', name_ja = 'ジャーナリズム・広報・広告', name_vi = 'Báo chí, Quan hệ Công chúng và Quảng cáo' WHERE name_ko = '언론홍보학과'; +UPDATE department SET name_en = 'Lifelong Education', name_ja = '生涯教育', name_vi = 'Giáo dục Suốt đời' WHERE name_ko = '평생교육학과'; +UPDATE department SET name_en = 'Christian Studies', name_ja = 'キリスト教学', name_vi = 'Cơ đốc học' WHERE name_ko = '기독교학과'; +UPDATE department SET name_en = 'Korean Language & Literature', name_ja = '韓国語文学', name_vi = 'Ngôn ngữ và Văn học Hàn Quốc' WHERE name_ko = '국어국문학과'; +UPDATE department SET name_en = 'English Language & Literature', name_ja = '英語英文学', name_vi = 'Ngôn ngữ và Văn học Anh' WHERE name_ko = '영어영문학과'; +UPDATE department SET name_en = 'German Language & Literature', name_ja = 'ドイツ語文学', name_vi = 'Ngôn ngữ và Văn học Đức' WHERE name_ko = '독어독문학과'; +UPDATE department SET name_en = 'French Language & Literature', name_ja = 'フランス語文学', name_vi = 'Ngôn ngữ và Văn học Pháp' WHERE name_ko = '불어불문학과'; +UPDATE department SET name_en = 'Chinese Language & Literature', name_ja = '中国語文学', name_vi = 'Ngôn ngữ và Văn học Trung Quốc' WHERE name_ko = '중어중문학과'; +UPDATE department SET name_en = 'Japanese Language & Literature', name_ja = '日本語文学', name_vi = 'Ngôn ngữ và Văn học Nhật Bản' WHERE name_ko = '일어일문학과'; +UPDATE department SET name_en = 'Philosophy', name_ja = '哲学', name_vi = 'Triết học' WHERE name_ko = '철학과'; +UPDATE department SET name_en = 'History', name_ja = '歴史学', name_vi = 'Lịch sử' WHERE name_ko = '사학과'; +UPDATE department SET name_en = 'Creative Writing', name_ja = '文芸創作', name_vi = 'Sáng tác Văn học' WHERE name_ko = '문예창작전공'; +UPDATE department SET name_en = 'Film Arts', name_ja = '映画芸術', name_vi = 'Nghệ thuật Điện ảnh' WHERE name_ko = '영화예술전공'; +UPDATE department SET name_en = 'Sports', name_ja = 'スポーツ', name_vi = 'Thể thao' WHERE name_ko = '스포츠학부'; +UPDATE department SET name_en = 'Mathematics', name_ja = '数学', name_vi = 'Toán học' WHERE name_ko = '수학과'; +UPDATE department SET name_en = 'Physics', name_ja = '物理学', name_vi = 'Vật lý' WHERE name_ko = '물리학과'; +UPDATE department SET name_en = 'Chemistry', name_ja = '化学', name_vi = 'Hóa học' WHERE name_ko = '화학과'; +UPDATE department SET name_en = 'Actuarial Science', name_ja = '保険数理学', name_vi = 'Khoa học Bảo hiểm' WHERE name_ko = '정보통계보험수리학과'; +UPDATE department SET name_en = 'Biomedical Science', name_ja = '生命医科学', name_vi = 'Khoa học Y sinh' WHERE name_ko = '의생명시스템학부'; +UPDATE department SET name_en = 'Liberal Studies', name_ja = 'リベラル・スタディーズ', name_vi = 'Nghiên cứu Tự do' WHERE name_ko = '자유전공학부'; +UPDATE department SET name_en = 'Next-Generation Semiconductor', name_ja = '次世代半導体', name_vi = 'Bán dẫn Thế hệ Mới' WHERE name_ko = '차세대반도체학과'; diff --git a/src/main/resources/db/migration/V12__populate_i18n_partnership_restaurant.sql b/src/main/resources/db/migration/V12__populate_i18n_partnership_restaurant.sql new file mode 100644 index 00000000..8710072a --- /dev/null +++ b/src/main/resources/db/migration/V12__populate_i18n_partnership_restaurant.sql @@ -0,0 +1,99 @@ +-- 제휴식당 다국어 데이터 추가 +UPDATE partnership_restaurant SET store_name_en = 'Paik’s Coffee (Cafe)', store_name_ja = 'ペクタバン (カフェ)', store_name_vi = 'Paik’s Coffee (Quán cà phê)' WHERE store_name_ko = '빽다방'; +UPDATE partnership_restaurant SET store_name_en = 'Gong Cha (Bubble tea shop)', store_name_ja = 'ゴンチャ (タピオカティー店)', store_name_vi = 'Gong Cha (Trà sữa trân châu)' WHERE store_name_ko = '공차'; +UPDATE partnership_restaurant SET store_name_en = 'Burrito House (Burrito restaurant)', store_name_ja = 'ブリトー屋 (ブリトー店)', store_name_vi = 'Burrito House (Nhà hàng burrito)' WHERE store_name_ko = '부리또집'; +UPDATE partnership_restaurant SET store_name_en = 'Syangchmara (Chinese restaurant)', store_name_ja = 'シャンツマーラー (中華料理店)', store_name_vi = 'Syangchmara (Nhà hàng Trung Hoa)' WHERE store_name_ko = '샹츠마라'; +UPDATE partnership_restaurant SET store_name_en = 'Poke All Day (Salad restaurant)', store_name_ja = 'ポケオールデイ (サラダ専門店)', store_name_vi = 'Poke All Day (Nhà hàng salad)' WHERE store_name_ko = '포케올데이'; +UPDATE partnership_restaurant SET store_name_en = 'Blue Hill (Bar)', store_name_ja = 'ブルーヒル (バー)', store_name_vi = 'Blue Hill (Quán bar)' WHERE store_name_ko = '블루힐'; +UPDATE partnership_restaurant SET store_name_en = 'Zensaiya (Izakaya)', store_name_ja = 'ゼンサイヤ (居酒屋)', store_name_vi = 'Zensaiya (Quán izakaya)' WHERE store_name_ko = '젠사이야'; +UPDATE partnership_restaurant SET store_name_en = 'Nolsoop (Comic book cafe)', store_name_ja = 'ノルスプ (漫画喫茶)', store_name_vi = 'Nolsoop (Quán cà phê truyện tranh)' WHERE store_name_ko = '놀숲'; +UPDATE partnership_restaurant SET store_name_en = 'Hero Board Game Cafe (Board game cafe)', store_name_ja = 'ヒーローボードゲームカフェ (ボードゲームカフェ)', store_name_vi = 'Hero Board Game Cafe (Quán board game)' WHERE store_name_ko = '히어로 보드게임카페'; +UPDATE partnership_restaurant SET store_name_en = 'Gwang-eo Samchon (Seafood restaurant)', store_name_ja = 'クァンオサムチョン (海鮮料理店)', store_name_vi = 'Gwang-eo Samchon (Nhà hàng hải sản)' WHERE store_name_ko = '광어삼촌'; +UPDATE partnership_restaurant SET store_name_en = 'Nondureong Galbi (Korean Galbi Restaurant)', store_name_ja = 'ノンドゥロンカルビ (韓国カルビ店)', store_name_vi = 'Nondureong Galbi (Nhà hàng sườn nướng Hàn Quốc)' WHERE store_name_ko = '논두렁갈비'; +UPDATE partnership_restaurant SET store_name_en = 'Meokdwaeji (Korean BBQ restaurant)', store_name_ja = 'モクトェジ (韓国焼肉店)', store_name_vi = 'Meokdwaeji (Nhà hàng BBQ Hàn Quốc)' WHERE store_name_ko = '먹돼지'; +UPDATE partnership_restaurant SET store_name_en = 'Hwangsaegol (Korean restaurant)', store_name_ja = 'ファンセゴル (韓国料理店)', store_name_vi = 'Hwangsaegol (Nhà hàng Hàn Quốc)' WHERE store_name_ko = '황새골'; +UPDATE partnership_restaurant SET store_name_en = 'Sinuiju Chapssal Sundae (Korean restaurant)', store_name_ja = 'シニジュもち米スンデ (韓国料理店)', store_name_vi = 'Sinuiju Chapssal Sundae (Nhà hàng Hàn Quốc)' WHERE store_name_ko = '신의주 찹쌀순대'; +UPDATE partnership_restaurant SET store_name_en = 'Bultaeneun Sogeum-gui (Barbecue restaurant)', store_name_ja = 'プルタヌンソグムグイ (焼肉店)', store_name_vi = 'Bultaeneun Sogeum-gui (Nhà hàng nướng)' WHERE store_name_ko = '불타는 소금구이'; +UPDATE partnership_restaurant SET store_name_en = 'Jigigo (Korean fast-casual)', store_name_ja = 'ジジゴ (韓国ファストカジュアル)', store_name_vi = 'Jigigo (Quán ăn nhanh Hàn Quốc)' WHERE store_name_ko = '지지고'; +UPDATE partnership_restaurant SET store_name_en = 'Matdakkko (Chicken restaurant)', store_name_ja = 'マッタッコ (チキン店)', store_name_vi = 'Matdakkko (Nhà hàng gà)' WHERE store_name_ko = '맛닭꼬'; +UPDATE partnership_restaurant SET store_name_en = 'Cowork Bistro (Dakgalbi restaurant)', store_name_ja = 'コワークビストロ (タッカルビ店)', store_name_vi = 'Cowork Bistro (Nhà hàng dakgalbi)' WHERE store_name_ko = '코웍 비스트로'; +UPDATE partnership_restaurant SET store_name_en = 'Pizza School (Pizza restaurant)', store_name_ja = 'ピザスクール (ピザ店)', store_name_vi = 'Pizza School (Nhà hàng pizza)' WHERE store_name_ko = '피자스쿨'; +UPDATE partnership_restaurant SET store_name_en = 'Real Fry (Chicken restaurant)', store_name_ja = 'リアルフライ (チキン店)', store_name_vi = 'Real Fry (Nhà hàng gà)' WHERE store_name_ko = '리얼후라이'; +UPDATE partnership_restaurant SET store_name_en = 'Wang Donkatsu Wang Naengmyeon (Korean restaurant)', store_name_ja = 'ワンドンカツワン冷麺 (韓国料理店)', store_name_vi = 'Wang Donkatsu Wang Naengmyeon (Nhà hàng Hàn Quốc)' WHERE store_name_ko = '왕돈까스왕냉면'; +UPDATE partnership_restaurant SET store_name_en = 'Chwihyang (Chinese restaurant)', store_name_ja = 'チュィヒャン (中華料理店)', store_name_vi = 'Chwihyang (Nhà hàng Trung Hoa)' WHERE store_name_ko = '취향'; +UPDATE partnership_restaurant SET store_name_en = 'Cry Cheese Burger (Burger restaurant)', store_name_ja = 'クライチーズバーガー (ハンバーガー店)', store_name_vi = 'Cry Cheese Burger (Nhà hàng burger)' WHERE store_name_ko = '크라이치즈버거'; +UPDATE partnership_restaurant SET store_name_en = 'Cafe Bombom (Cafe)', store_name_ja = 'カフェボムボム (カフェ)', store_name_vi = 'Cafe Bombom (Quán cà phê)' WHERE store_name_ko = '카페 봄봄'; +UPDATE partnership_restaurant SET store_name_en = 'Yoajung (Ice cream shop)', store_name_ja = 'ヨアジョン (アイスクリーム店)', store_name_vi = 'Yoajung (Cửa hàng kem)' WHERE store_name_ko = '요거트아이스크림의정석'; +UPDATE partnership_restaurant SET store_name_en = 'Eveurb Eve (Cafe)', store_name_ja = 'エブアイブ (カフェ)', store_name_vi = 'Eveurb Eve (Quán cà phê)' WHERE store_name_ko = '에브어이브'; +UPDATE partnership_restaurant SET store_name_en = 'A-Play PC Bang (PC cafe)', store_name_ja = 'エイプレイPCバン (PCカフェ)', store_name_vi = 'A-Play PC Bang (Quán net)' WHERE store_name_ko = '에이플 PC방'; +UPDATE partnership_restaurant SET store_name_en = 'Mega Coffee (Cafe)', store_name_ja = 'メガコーヒー (カフェ)', store_name_vi = 'Mega Coffee (Quán cà phê)' WHERE store_name_ko = '메가커피'; +UPDATE partnership_restaurant SET store_name_en = 'Jaksim Study Cafe', store_name_ja = 'チャクシムスタディカフェ', store_name_vi = 'Jaksim Study Cafe' WHERE store_name_ko = '작심 스터디카페'; +UPDATE partnership_restaurant SET store_name_en = 'Padong Chuya (Korean pub)', store_name_ja = 'パドンチュヤ (韓国居酒屋)', store_name_vi = 'Padong Chuya (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '파동추야'; +UPDATE partnership_restaurant SET store_name_en = 'Gachi (Bar)', store_name_ja = 'カチ (バー)', store_name_vi = 'Gachi (Quán bar)' WHERE store_name_ko = '가치'; +UPDATE partnership_restaurant SET store_name_en = '28 Cheongchun Hope-Pocha (Korean pub)', store_name_ja = '28青春ホープポチャ (韓国居酒屋)', store_name_vi = '28 Cheongchun Hope-Pocha (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '28청춘호프포차'; +UPDATE partnership_restaurant SET store_name_en = 'Sangdo-ro 3-ga (Korean pub)', store_name_ja = 'サンドロ3ガ (韓国居酒屋)', store_name_vi = 'Sangdo-ro 3-ga (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '상도로 3가'; +UPDATE partnership_restaurant SET store_name_en = 'Sutgama Barbecue Chicken (Korean BBQ)', store_name_ja = 'スッカマバーベキューチキン (韓国BBQ)', store_name_vi = 'Sutgama Barbecue Chicken (BBQ Hàn Quốc)' WHERE store_name_ko = '숯가마 바베큐 치킨'; +UPDATE partnership_restaurant SET store_name_en = 'Yeokjeon Halmeoni Beer (Korean pub)', store_name_ja = 'ヨクチョンハルモニビール (韓国居酒屋)', store_name_vi = 'Yeokjeon Halmeoni Beer (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '역전할머니맥주'; +UPDATE partnership_restaurant SET store_name_en = 'Geekstar PC Bang (PC Cafe)', store_name_ja = 'ギークスターPCバン (PCカフェ)', store_name_vi = 'Geekstar PC Bang (Quán net)' WHERE store_name_ko = '긱스타 PC방'; +UPDATE partnership_restaurant SET store_name_en = 'Myeon Sikdang (Japanese restaurant)', store_name_ja = 'ミョン食堂 (日本料理店)', store_name_vi = 'Myeon Sikdang (Nhà hàng Nhật Bản)' WHERE store_name_ko = '면식당'; +UPDATE partnership_restaurant SET store_name_en = 'Sambong Burger (Burger restaurant)', store_name_ja = 'サンボンバーガー (ハンバーガー店)', store_name_vi = 'Sambong Burger (Nhà hàng burger)' WHERE store_name_ko = '삼봉버거'; +UPDATE partnership_restaurant SET store_name_en = 'Meal Plan B (Burrito restaurant)', store_name_ja = 'ミールプランビー (ブリトー店)', store_name_vi = 'Meal Plan B (Nhà hàng burrito)' WHERE store_name_ko = '밀플랜비'; +UPDATE partnership_restaurant SET store_name_en = 'Gogi Story (Korean BBQ)', store_name_ja = 'コギストーリー (韓国BBQ)', store_name_vi = 'Gogi Story (BBQ Hàn Quốc)' WHERE store_name_ko = '고기스토리'; +UPDATE partnership_restaurant SET store_name_en = 'Sangdodong Sottukkeong (Korean BBQ)', store_name_ja = 'サンドドンソットゥッコン (韓国BBQ)', store_name_vi = 'Sangdodong Sottukkeong (BBQ Hàn Quốc)' WHERE store_name_ko = '상도동 솥뚜껑'; +UPDATE partnership_restaurant SET store_name_en = 'Hamjibak (Korean restaurant)', store_name_ja = 'ハムジバク (韓国料理店)', store_name_vi = 'Hamjibak (Nhà hàng Hàn Quốc)' WHERE store_name_ko = '함지박'; +UPDATE partnership_restaurant SET store_name_en = 'Black & Joy Coffee (Cafe)', store_name_ja = 'ブラック&ジョイコーヒー (カフェ)', store_name_vi = 'Black & Joy Coffee (Quán cà phê)' WHERE store_name_ko = '블랙&조이커피'; +UPDATE partnership_restaurant SET store_name_en = 'Coffee Tree (Cafe)', store_name_ja = 'コーヒーツリー (カフェ)', store_name_vi = 'Cây Cà phê (Quán cà phê)' WHERE store_name_ko = '커피나무'; +UPDATE partnership_restaurant SET store_name_en = 'Bread & Co. (Bakery)', store_name_ja = 'ブレッド&コー (ベーカリー)', store_name_vi = 'Bread & Co. (Tiệm bánh)' WHERE store_name_ko = '브레댄코'; +UPDATE partnership_restaurant SET store_name_en = 'Ssibam BaeBae (Korean pub)', store_name_ja = 'シバムバベ (韓国居酒屋)', store_name_vi = 'Ssibam BaeBae (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '씨밤바베'; +UPDATE partnership_restaurant SET store_name_en = 'Inssaeng Beer (Korean pub)', store_name_ja = 'インセンビール (韓国居酒屋)', store_name_vi = 'Inssaeng Beer (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '인쌩맥주'; +UPDATE partnership_restaurant SET store_name_en = 'Rikosta Coin Karaoke', store_name_ja = 'リコスタコインカラオケ', store_name_vi = 'Rikosta Coin Karaoke' WHERE store_name_ko = '리코스타 코인노래방'; +UPDATE partnership_restaurant SET store_name_en = 'Slow Cali (Salad restaurant)', store_name_ja = 'スローカリ (サラダ専門店)', store_name_vi = 'Slow Cali (Nhà hàng salad)' WHERE store_name_ko = '슬로우캘리'; +UPDATE partnership_restaurant SET store_name_en = 'Jinpu junghwa Yori (Chinese restaurant)', store_name_ja = 'ジンプ中華料理 (中華料理店)', store_name_vi = 'Jinpu Junghwa Yori (Nhà hàng Trung Hoa)' WHERE store_name_ko = '진푸 중화요리'; +UPDATE partnership_restaurant SET store_name_en = 'Salady (Salad restaurant)', store_name_ja = 'サラディ (サラダ専門店)', store_name_vi = 'Salady (Nhà hàng salad)' WHERE store_name_ko = '샐러디'; +UPDATE partnership_restaurant SET store_name_en = 'Jawoldang (Pub)', store_name_ja = 'チャウォルダン (居酒屋)', store_name_vi = 'Jawoldang (Quán nhậu)' WHERE store_name_ko = '자월당'; +UPDATE partnership_restaurant SET store_name_en = 'Subway', store_name_ja = 'サブウェイ', store_name_vi = 'Subway' WHERE store_name_ko = '써브웨이'; +UPDATE partnership_restaurant SET store_name_en = 'Cheong-un Restaurant (Korean BBQ)', store_name_ja = 'チョンウン食堂 (韓国BBQ)', store_name_vi = 'Cheong-un Restaurant (BBQ Hàn Quốc)' WHERE store_name_ko = '청운음식점'; +UPDATE partnership_restaurant SET store_name_en = 'Paradise (Korean restaurant)', store_name_ja = 'パラダイス (韓国料理店)', store_name_vi = 'Paradise (Nhà hàng Hàn Quốc)' WHERE store_name_ko = '파라다이스'; +UPDATE partnership_restaurant SET store_name_en = 'Hwanggung Jaengban-jjajang (Chinese restaurant) ', store_name_ja = 'ファングンチェンバンチャジャン (中華料理店)', store_name_vi = 'Hwanggung Jaengban-jjajang (Nhà hàng Trung Hoa)' WHERE store_name_ko = '황궁쟁반짜장'; +UPDATE partnership_restaurant SET store_name_en = 'Mendong (Japanese restaurant)', store_name_ja = 'メンドン (日本料理店)', store_name_vi = 'Mendong (Nhà hàng Nhật Bản)' WHERE store_name_ko = '멘동'; +UPDATE partnership_restaurant SET store_name_en = 'Hecbob (Japanese restaurant)', store_name_ja = 'ヘッパプ (日本料理店)', store_name_vi = 'Hecbob (Nhà hàng Nhật Bản)' WHERE store_name_ko = '핵밥'; +UPDATE partnership_restaurant SET store_name_en = 'Eunhwasu Sikdang (Korean restaurant)', store_name_ja = 'ウンファス食堂 (韓国料理店)', store_name_vi = 'Eunhwasu Sikdang (Nhà hàng Hàn Quốc)' WHERE store_name_ko = '은화수식당'; +UPDATE partnership_restaurant SET store_name_en = 'Gossine (Japanese curry restaurant)', store_name_ja = 'ゴシネ (日本カレー店)', store_name_vi = 'Gossine (Nhà hàng cà ri Nhật Bản)' WHERE store_name_ko = '고씨네'; +UPDATE partnership_restaurant SET store_name_en = 'Love & Peace (Korean pub)', store_name_ja = '愛と平和 (韓国居酒屋)', store_name_vi = 'Love & Peace (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '사랑과평화'; +UPDATE partnership_restaurant SET store_name_en = 'EEA Cafe (Cafe)', store_name_ja = 'EEAカフェ (カフェ)', store_name_vi = 'EEA Cafe (Quán cà phê)' WHERE store_name_ko = 'eea cafe'; +UPDATE partnership_restaurant SET store_name_en = 'Son Kalguksu (Korean restaurant)', store_name_ja = 'ソンカルグクス (韓国料理店)', store_name_vi = 'Son Kalguksu (Nhà hàng Hàn Quốc)' WHERE store_name_ko = '손칼국수'; +UPDATE partnership_restaurant SET store_name_en = 'BHC Chicken (Chicken restaurant)', store_name_ja = 'BHCチキン (チキン店)', store_name_vi = 'BHC Chicken (Nhà hàng gà)' WHERE store_name_ko = 'BHC 치킨'; +UPDATE partnership_restaurant SET store_name_en = 'Gochudong Noodle House (Udon noodle restaurant)', store_name_ja = 'コチュドン製麺所 (うどん店)', store_name_vi = 'Gochudong Noodle House (Nhà hàng mì udon)' WHERE store_name_ko = '고추동 제면소'; +UPDATE partnership_restaurant SET store_name_en = 'Michyeo-beorin Padak (Chicken restaurant)', store_name_ja = 'ミチョボリンパダク (チキン店)', store_name_vi = 'Michyeo-beorin Padak (Nhà hàng gà)' WHERE store_name_ko = '미쳐버린 파닭'; +UPDATE partnership_restaurant SET store_name_en = 'Mitery (Italian restaurant)', store_name_ja = 'ミテリ (イタリア料理店)', store_name_vi = 'Mitery (Nhà hàng Ý)' WHERE store_name_ko = '미태리'; +UPDATE partnership_restaurant SET store_name_en = 'Eongkeul Hope (Korean pub)', store_name_ja = 'アンクルホープ (韓国居酒屋)', store_name_vi = 'Eongkeul Hope (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '엉클호프'; +UPDATE partnership_restaurant SET store_name_en = 'Jipdonggari Ssaengju (Korean pub)', store_name_ja = 'チプトンガリセンジュ (韓国居酒屋)', store_name_vi = 'Jipdonggari Ssaengju (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '짚동가리쌩주'; +UPDATE partnership_restaurant SET store_name_en = 'Daseong Banjeom (Chinese restaurant)', store_name_ja = 'タソン飯店 (中華料理店)', store_name_vi = 'Daseong Banjeom (Nhà hàng Trung Hoa)' WHERE store_name_ko = '다성반점'; +UPDATE partnership_restaurant SET store_name_en = 'Jikhwa Samgyeop Jikgusam', store_name_ja = 'チックァサムギョプチックサム', store_name_vi = 'Jikhwa Samgyeop Jikgusam' WHERE store_name_ko = '직화삼겹직구삼'; +UPDATE partnership_restaurant SET store_name_en = 'Real Ansim Tangsuyuk (Chinese restaurant)', store_name_ja = 'リアル安心タンスユク (中華料理店)', store_name_vi = 'Real Ansim Tangsuyuk (Nhà hàng Trung Hoa)' WHERE store_name_ko = '리얼안심탕수육'; +UPDATE partnership_restaurant SET store_name_en = 'Dodamjuk (Korean porridge restaurant)', store_name_ja = 'トダム粥 (韓国粥店)', store_name_vi = 'Dodamjuk (Nhà hàng cháo Hàn Quốc)' WHERE store_name_ko = '도담죽'; +UPDATE partnership_restaurant SET store_name_en = 'Jjigaerang (Korean restaurant)', store_name_ja = 'チゲラン (韓国料理店)', store_name_vi = 'Jjigaerang (Nhà hàng Hàn Quốc)' WHERE store_name_ko = '찌개랑'; +UPDATE partnership_restaurant SET store_name_en = 'Gomo Bapjyo (Korean restaurant)', store_name_ja = 'コモバプジョ (韓国料理店)', store_name_vi = 'Gomo Bapjyo (Nhà hàng Hàn Quốc)' WHERE store_name_ko = '고모밥죠'; +UPDATE partnership_restaurant SET store_name_en = 'Eongteori Saenggogi (Korean BBQ)', store_name_ja = 'オントリセンゴギ (韓国BBQ)', store_name_vi = 'Eongteori Saenggogi (BBQ Hàn Quốc)' WHERE store_name_ko = '엉터리생고기'; +UPDATE partnership_restaurant SET store_name_en = 'Gangnam Bunsik (Korean snack restaurant)', store_name_ja = 'カンナム粉食 (韓国軽食店)', store_name_vi = 'Gangnam Bunsik (Quán ăn vặt Hàn Quốc)' WHERE store_name_ko = '강남분식'; +UPDATE partnership_restaurant SET store_name_en = 'Mihwadam (Korean rice cake shop)', store_name_ja = 'ミファダム (韓国餅店)', store_name_vi = 'Mihwadam (Cửa hàng bánh gạo Hàn Quốc)' WHERE store_name_ko = '미화담'; +UPDATE partnership_restaurant SET store_name_en = 'Nabiru (Japanese restaurant)', store_name_ja = 'ナビル (日本料理店)', store_name_vi = 'Nabiru (Nhà hàng Nhật Bản)' WHERE store_name_ko = '나비루'; +UPDATE partnership_restaurant SET store_name_en = 'Pasta Eottae (Italian restaurant)', store_name_ja = 'パスタオッテ (イタリア料理店)', store_name_vi = 'Pasta Eottae (Nhà hàng Ý)' WHERE store_name_ko = '파스타어때'; +UPDATE partnership_restaurant SET store_name_en = 'Jongno Tteokjip (Korean rice cake shop)', store_name_ja = '鍾路餅店 (韓国餅店)', store_name_vi = 'Jongno Tteokjip (Cửa hàng bánh gạo Hàn Quốc)' WHERE store_name_ko = '종로떡집'; +UPDATE partnership_restaurant SET store_name_en = 'Homis Pizza (Pizza restaurant)', store_name_ja = 'ホミスピザ (ピザ店)', store_name_vi = 'Homis Pizza (Nhà hàng pizza)' WHERE store_name_ko = '호미스 피자'; +UPDATE partnership_restaurant SET store_name_en = 'Dujjim (Korean braised chicken restaurant)', store_name_ja = 'トゥチム (韓国チムタク店)', store_name_vi = 'Dujjim (Nhà hàng gà om Hàn Quốc)' WHERE store_name_ko = '두찜'; +UPDATE partnership_restaurant SET store_name_en = 'Puraimit Steakhouse (Steakhouse)', store_name_ja = 'プライミットステーキハウス (ステーキハウス)', store_name_vi = 'Puraimit Steakhouse (Nhà hàng bít tết)' WHERE store_name_ko = '프라이밋 스테이크하우스'; +UPDATE partnership_restaurant SET store_name_en = 'Jokbal Cheonguk (Jokbal restaurant)', store_name_ja = 'チョッパル天国 (チョッパル店)', store_name_vi = 'Jokbal Cheonguk (Nhà hàng jokbal)' WHERE store_name_ko = '족발천국'; +UPDATE partnership_restaurant SET store_name_en = 'Ogo Tto Ogo Pocha (Korean pub)', store_name_ja = 'オゴットオゴポチャ (韓国居酒屋)', store_name_vi = 'Ogo Tto Ogo Pocha (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '오고또오고 포차'; +UPDATE partnership_restaurant SET store_name_en = 'Bueongi Pocha (Korean pub)', store_name_ja = 'ブオンイポチャ (韓国居酒屋)', store_name_vi = 'Bueongi Pocha (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '부엉이포차'; +UPDATE partnership_restaurant SET store_name_en = 'Sangdo Takoyakki (Takoyaki restaurant)', store_name_ja = 'サンドたこ焼き (たこ焼き店)', store_name_vi = 'Sangdo Takoyaki (Nhà hàng takoyaki)' WHERE store_name_ko = '상도 타코야끼'; +UPDATE partnership_restaurant SET store_name_en = 'Dolgorae Bottle (Liquor store)', store_name_ja = 'ドルゴレボトル (酒屋)', store_name_vi = 'Dolgorae Bottle (Cửa hàng rượu)' WHERE store_name_ko = '돌고래보틀'; +UPDATE partnership_restaurant SET store_name_en = 'Daldal Fruits (Fruit dessert shop)', store_name_ja = 'ダルダルフルーツ (フルーツデザート店)', store_name_vi = 'Daldal Fruits (Tiệm tráng miệng trái cây)' WHERE store_name_ko = '달달프루츠'; +UPDATE partnership_restaurant SET store_name_en = 'Mellowed (Dessert cafe)', store_name_ja = 'メロード (デザートカフェ)', store_name_vi = 'Mellowed (Quán cà phê tráng miệng)' WHERE store_name_ko = '멜로드'; +UPDATE partnership_restaurant SET store_name_en = 'Banchan Nara (Korean side dish shop)', store_name_ja = 'おかずの国 (韓国惣菜店)', store_name_vi = 'Banchan Nara (Cửa hàng món ăn kèm Hàn Quốc)' WHERE store_name_ko = '반찬나라'; +UPDATE partnership_restaurant SET store_name_en = 'Byeolbyeol Chanbang (Korean side dish shop)', store_name_ja = 'ピョルピョルチャンバン (韓国惣菜店)', store_name_vi = 'Byeolbyeol Chanbang (Cửa hàng món ăn kèm Hàn Quốc)' WHERE store_name_ko = '별별찬방'; +UPDATE partnership_restaurant SET store_name_en = 'Yeogi Banchan Ga-ge (Korean side dish shop)', store_name_ja = 'ヨギおかず店 (韓国惣菜店)', store_name_vi = 'Yeogi Banchan Store (Cửa hàng món ăn kèm Hàn Quốc)' WHERE store_name_ko = '여기반찬가게'; +UPDATE partnership_restaurant SET store_name_en = 'Tamaru Bueok (Korean side dish shop)', store_name_ja = 'タマルキッチン (韓国惣菜店)', store_name_vi = 'Tamaru Kitchen (Cửa hàng món ăn kèm Hàn Quốc)' WHERE store_name_ko = '타마르부엌'; +UPDATE partnership_restaurant SET store_name_en = 'Uri Nongsusanmul (Fresh produce & seafood shop)', store_name_ja = 'ウリ農水産物 (農産物・海産物店)', store_name_vi = 'Uri Nongsusanmul (Cửa hàng nông sản và hải sản tươi sống)' WHERE store_name_ko = '우리농수산물'; +UPDATE partnership_restaurant SET store_name_en = 'Eunhye Yachae Ga-ge (Vegetable shop)', store_name_ja = 'ウネ野菜店 (青果店)', store_name_vi = 'Cửa hàng Rau Eunhye (Cửa hàng rau củ)' WHERE store_name_ko = '은혜야채가게'; +UPDATE partnership_restaurant SET store_name_en = 'Sinangchon Sanghoe (Health food & lifestyle goods store)', store_name_ja = 'シナンチョン商会 (健康食品・生活用品店)', store_name_vi = 'Sinangchon Sanghoe (Cửa hàng thực phẩm sức khỏe và đồ gia dụng)' WHERE store_name_ko = '신앙촌상회'; From 3061b11779fb47267ae3b4b60b695f5d2637efc7 Mon Sep 17 00:00:00 2001 From: Eunseo Song <162149585+eunseo9311@users.noreply.github.com> Date: Sun, 28 Jun 2026 06:23:29 +0900 Subject: [PATCH 370/399] =?UTF-8?q?feat:=20=EC=A0=9C=ED=9C=B4=20=ED=98=9C?= =?UTF-8?q?=ED=83=9D=20=EC=84=A4=EB=AA=85=20=EB=8B=A4=EA=B5=AD=EC=96=B4=20?= =?UTF-8?q?=EC=A7=80=EC=9B=90=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Partnership 엔티티에 description_en/ja/vi 필드 추가 및 Localizable 구현 - V13: partnership 테이블에 description_en/ja/vi TEXT 컬럼 추가 - V14: 제휴 혜택 설명 268개 EN/JA/VI 번역 데이터 주입 - PartnershipInfo.fromEntity()에 Language 파라미터 추가 - PartnershipResponse에서 language를 PartnershipInfo로 전달 --- .../partnership/dto/PartnershipInfo.java | 6 +- .../partnership/dto/PartnershipResponse.java | 3 +- .../partnership/entity/Partnership.java | 17 +- .../V13__add_i18n_columns_to_partnership.sql | 4 + ..._populate_i18n_partnership_description.sql | 432 ++++++++++++++++++ 5 files changed, 458 insertions(+), 4 deletions(-) create mode 100644 src/main/resources/db/migration/V13__add_i18n_columns_to_partnership.sql create mode 100644 src/main/resources/db/migration/V14__populate_i18n_partnership_description.sql diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java index 3250dee9..e7590797 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipInfo.java @@ -5,6 +5,7 @@ import ssu.eatssu.domain.partnership.entity.Partnership; import ssu.eatssu.domain.partnership.entity.PartnershipRestaurant; import ssu.eatssu.domain.partnership.entity.PeriodType; +import ssu.eatssu.domain.user.entity.Language; import java.time.LocalDate; @@ -23,10 +24,11 @@ public class PartnershipInfo { public static PartnershipInfo fromEntity(Partnership partnership, PartnershipRestaurant restaurant, - boolean isLiked) { + boolean isLiked, + Language language) { return PartnershipInfo.builder() .id(partnership.getId()) - .description(partnership.getDescription()) + .description(partnership.getDescriptionByLanguage(language)) .startDate(partnership.getStartDate()) .endDate(partnership.getEndDate()) .periodType(partnership.getPeriodType()) diff --git a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java index 942d81d5..98ca1fc8 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java +++ b/src/main/java/ssu/eatssu/domain/partnership/dto/PartnershipResponse.java @@ -27,7 +27,8 @@ public static PartnershipResponse fromEntity(PartnershipRestaurant restaurant, L List infos = restaurant.getPartnerships().stream() .map(partnership -> PartnershipInfo.fromEntity(partnership, restaurant, - isLiked)) + isLiked, + language)) .collect(Collectors.toList()); return PartnershipResponse.builder() diff --git a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java index 59126956..765f7542 100644 --- a/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java +++ b/src/main/java/ssu/eatssu/domain/partnership/entity/Partnership.java @@ -18,6 +18,8 @@ import org.hibernate.annotations.Where; import ssu.eatssu.domain.user.department.entity.College; import ssu.eatssu.domain.user.department.entity.Department; +import ssu.eatssu.domain.user.entity.Language; +import ssu.eatssu.global.i18n.Localizable; import java.time.LocalDate; @@ -27,7 +29,7 @@ @Builder @AllArgsConstructor @Where(clause = "end_date >= CURRENT_DATE") -public class Partnership { +public class Partnership implements Localizable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "partnership_id") @@ -36,6 +38,15 @@ public class Partnership { @Column(name = "description", nullable = false) private String description; + @Column(name = "description_en", columnDefinition = "TEXT") + private String descriptionEn; + + @Column(name = "description_ja", columnDefinition = "TEXT") + private String descriptionJa; + + @Column(name = "description_vi", columnDefinition = "TEXT") + private String descriptionVi; + @Column(name = "start_date", nullable = false) private LocalDate startDate; @@ -59,6 +70,10 @@ public class Partnership { @JoinColumn(name = "partnership_restaurant_id") private PartnershipRestaurant partnershipRestaurant; + public String getDescriptionByLanguage(Language language) { + return getLocalizedValue(language, description, descriptionEn, descriptionJa, descriptionVi); + } + public void setPartnershipCollege(College partnershipCollege) { this.partnershipCollege = partnershipCollege; } diff --git a/src/main/resources/db/migration/V13__add_i18n_columns_to_partnership.sql b/src/main/resources/db/migration/V13__add_i18n_columns_to_partnership.sql new file mode 100644 index 00000000..123813fc --- /dev/null +++ b/src/main/resources/db/migration/V13__add_i18n_columns_to_partnership.sql @@ -0,0 +1,4 @@ +ALTER TABLE partnership + ADD COLUMN description_en TEXT NULL, + ADD COLUMN description_ja TEXT NULL, + ADD COLUMN description_vi TEXT NULL; \ No newline at end of file diff --git a/src/main/resources/db/migration/V14__populate_i18n_partnership_description.sql b/src/main/resources/db/migration/V14__populate_i18n_partnership_description.sql new file mode 100644 index 00000000..bf1a26df --- /dev/null +++ b/src/main/resources/db/migration/V14__populate_i18n_partnership_description.sql @@ -0,0 +1,432 @@ +-- 제휴 혜택 설명 다국어 데이터 추가 +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Get 1 free Sweet Iced Tea when ordering 3 or more drinks (Wednesdays only)', p.description_ja = 'ドリンク3杯以上注文時、スイートアイスティー1杯無料(水曜日のみ)。', p.description_vi = 'Tặng 1 trà đá ngọt khi gọi từ 3 đồ uống trở lên (chỉ thứ Tư).' WHERE pr.store_name_ko = '빽다방' AND p.description = '음료 3개 이상 시키면 달콤 아이스티 1잔(수요일)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Twice a week, get one free pearl topping when purchasing 2 or more drinks.', p.description_ja = '週2回、ドリンク2杯以上購入でタピオカ追加1回無料。', p.description_vi = 'Mỗi tuần 2 lần, mua từ 2 đồ uống trở lên được thêm trân châu miễn phí 1 lần.' WHERE pr.store_name_ko = '공차' AND p.description = '주2번 2잔, 3잔 이상 구매 시 펄 추가 1회 무료'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Get one free topping add-on for purchases between 2:30 PM and 5:30 PM.', p.description_ja = '2:30 PM〜5:30 PMの購入でトッピング追加を1回無料提供。', p.description_vi = 'Tặng 1 lần topping thêm cho giao dịch mua từ 2:30 PM đến 5:30 PM.' WHERE pr.store_name_ko = '부리또집' AND p.description = '오후 2:30~오후 5:30 구매 시 토핑 추가 1회 무료'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For purchases of 30,000 KRW or more (up to 3 receipts combined), choose one: 3 pieces of Youtiao, Cha Pai, or Bing Hong Cha.', p.description_ja = '30,000ウォン以上の購入で、油条3個・茶π・冰紅茶のうち1つを選択。レシートは最大3枚まで合算可能。', p.description_vi = 'Đơn mua từ 30.000 KRW trở lên được chọn 1 trong các món: 3 miếng quẩy Youtiao, Cha Pai hoặc Bing Hong Cha. Có thể gộp tối đa 3 hóa đơn.' WHERE pr.store_name_ko = '샹츠마라' AND p.description = '30000원 이상 구매시(단 영수증 3개 미만) 유토루 3 pcs, 차파이, 삐홍차 중 택 1'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Add 30g of chicken breast or smoked duck topping with a main topping order.', p.description_ja = 'メイントッピング注文時、鶏むね肉または燻製鴨トッピング30gを追加提供。', p.description_vi = 'Khi gọi topping chính, được thêm 30g topping ức gà hoặc vịt hun khói.' WHERE pr.store_name_ko = '포케올데이' AND p.description = '메인 토필 주문시 닭가슴살 또는 훈제오리 토핑 30g 추가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Visit before 6 PM to receive 500ml cocktail soju, or get free kimchi fried rice for cash payments of 70,000 KRW or more.', p.description_ja = '18時以前の来店でカクテル焼酎500mlを提供、または70,000ウォン以上の現金決済でキムチチャーハン1品を提供。', p.description_vi = 'Đến trước 6 PM được tặng 500ml soju cocktail, hoặc thanh toán tiền mặt từ 70.000 KRW trở lên được tặng 1 phần cơm chiên kimchi.' WHERE pr.store_name_ko = '블루힐' AND p.description = '18시 이전 방문 시 칵테일 소주 500ml 제공, 7만원 이상 현금 결제 시 김치볶음밥 하나 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for purchases of 50,000 KRW or more (1 bottle per group).', p.description_ja = '50,000ウォン以上の購入で焼酎1本無料(1グループにつき1本)。', p.description_vi = 'Mua từ 50.000 KRW trở lên được tặng 1 chai soju (mỗi nhóm 1 chai).' WHERE pr.store_name_ko = '젠사이야' AND p.description = '오만원 이상 구매시 소주 한 병 무료 *일행당 1병'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Soongsil University pricing: Set A, B, and C available at youth rates.', p.description_ja = 'Set A・B・Cは青少年料金で利用可能。', p.description_vi = 'Set A, B, C áp dụng giá thanh thiếu niên.' WHERE pr.store_name_ko = '놀숲' AND p.description = '숭실대 요금표: SET A, B, C 요금제 성인 -> 청소년 변경'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '15% off game fees with a Naver review within 1 week, including the same day.', p.description_ja = '当日を含む1週間以内のNaverレビューでゲーム料金15%割引。', p.description_vi = 'Giảm 15% phí chơi game khi viết review Naver trong vòng 1 tuần, tính cả ngày sử dụng.' WHERE pr.store_name_ko = '히어로 보드게임카페' AND p.description = '게임비 15% 할인 / 1주일 이내 (당일 포함) 네이버 리뷰'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1. Americano for 2,000 KRW when ordering through POS before 9 AM + + 2. Free size upgrade from L to J when purchasing 4 or more drinks on Mondays and Fridays. + Excludes single-size menu items such as smoothies, crushes, Brown Sugar Jewelry, and Strawberry Jewelry. + + 3. 10% off group orders of 10 drinks or more. + Only applies to direct POS payments. Delivery/platform orders such as Baemin, Coupang Eats, and Naver are excluded.', p.description_ja = '1. 9時以前にPOS注文するとアメリカーノ2,000ウォン。 + 2. 月・金曜日にドリンク4杯以上購入でL→Jサイズアップ無料。単一サイズメニューは対象外。 + 3. ドリンク10杯以上の団体注文は10%割引。店頭POSでの直接決済のみ対象。プラットフォーム注文は対象外。', p.description_vi = '1. Americano giá 2.000 KRW khi đặt qua POS trước 9 AM. + 2. Mua từ 4 đồ uống vào thứ Hai và thứ Sáu được nâng size miễn phí từ L lên J. Không áp dụng cho món chỉ có một size. + 3. Giảm 10% cho đơn nhóm từ 10 đồ uống trở lên. Chỉ áp dụng khi thanh toán trực tiếp tại POS; không áp dụng cho đơn trên nền tảng.' WHERE pr.store_name_ko = '공차' AND p.description = '1. 9시 이전 POS 주문시 +아메리카노 2000원 구매 + +2. 월, 금요일 4잔 이상 구매시 +L -> J size up +(단일 사이즈메뉴는 제외-스무디, 크러쉬,브라운슈가 쥬얼리 ,딸기쥬얼리 등등) + +3. 10잔 이상 단체 주문시 10%할인 +포스에서 직접 결제, 배민 쿠팡이츠 네이버등 플랫폼 결제는 할인적용x'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottled soft drink.', p.description_ja = 'ボトル飲料1本を無料提供。', p.description_vi = 'Tặng 1 chai nước ngọt.' WHERE pr.store_name_ko = '광어삼촌' AND p.description = '음료 1병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 canned soft drink when ordering 3 or more meals.', p.description_ja = '食事メニュー3品以上注文時、缶ドリンク1本を無料提供。', p.description_vi = 'Gọi từ 3 món ăn trở lên được tặng 1 lon nước ngọt.' WHERE pr.store_name_ko = '논두렁갈비' AND p.description = '식사류 3개 이상 주문시 음료 1캔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when paying with Toss or KakaoPay (meat dishes only).', p.description_ja = 'TossまたはKakaoPay決済時、肉料理5%割引。', p.description_vi = 'Giảm 5% món thịt khi thanh toán bằng Toss hoặc KakaoPay.' WHERE pr.store_name_ko = '먹돼지' AND p.description = '토스 or 카카오페이 결제 시 5% 할인 (고기류 주문 시에만 해당)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Get one free topping add-on (Double Cheese, Corn, Beans, or Jalapeños) for orders placed between 2:30 PM and 5:30 PM.', p.description_ja = '2:30 PM〜5:30 PMの注文で、ダブルチーズ・コーン・豆・ハラペーニョのうちトッピング1つを無料追加。', p.description_vi = 'Đơn đặt từ 2:30 PM đến 5:30 PM được thêm miễn phí 1 topping: phô mai đôi, bắp, đậu hoặc ớt jalapeño.' WHERE pr.store_name_ko = '부리또집' AND p.description = '2시반에서 5시반 사이 주문 시, 토핑(더블치즈, 옥수수콘, 콩, 할라피뇨) 추가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 canned soft drink when ordering Dakhanmari or dumpling hot pot according to the number of people.', p.description_ja = 'タッカンマリまたは餃子鍋を人数分注文時、缶ドリンク1本を無料提供。', p.description_vi = 'Gọi dakhanmari hoặc lẩu mandu theo số người được tặng 1 lon nước ngọt.' WHERE pr.store_name_ko = '황새골' AND p.description = '닭한마리, 만두전골 인원 수 맞춰서 주문 시 음료수 한 캔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4 or more, get 1 free canned soft drink. Or, for groups of 4 or more spending 50,000 KRW or more, get 1 free bottle of soju.', p.description_ja = '4人以上で缶ドリンク1本を無料提供。 + また、4人以上で50,000ウォン以上利用時、焼酎1本を無料提供。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng 1 lon nước ngọt. + Hoặc nhóm từ 4 người trở lên chi từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '신의주 찹쌀순대' AND p.description = '4인 이상 주문 시 음료 한 캔 제공 or 4인 이상 방문하여 5만원 이상 주문 시 소주 한 병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free rice ball for purchases of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の購入でおにぎりを無料提供。', p.description_vi = 'Mua từ 40.000 KRW trở lên được tặng cơm nắm.' WHERE pr.store_name_ko = '불타는 소금구이' AND p.description = '4만원 이상 구매 시 주먹밥 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 20,000 KRW or more, get 2 free drinks. For orders of 30,000 KRW or more, upgrade single items to set menus.', p.description_ja = '20,000ウォン以上の注文でドリンク2杯を無料提供。 + 30,000ウォン以上の注文で単品をセットメニューに変更。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng 2 đồ uống. + Đơn từ 30.000 KRW trở lên được nâng món lẻ thành set menu.' WHERE pr.store_name_ko = '지지고' AND p.description = '2만원 이상 주문 시 음료 2개 제공, 3만원 이상 주문 시 단품을 세트로 변경'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 500ml soft drink for groups of 4 or more.', p.description_ja = '4人以上の来店で1 500ml ソフトドリンクを無料提供。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng 1 500ml nước ngọt.' WHERE pr.store_name_ko = '맛닭꼬' AND p.description = '4인 이상 방문 시 500ml 음료 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free cheese topping when ordering 2 or more servings per table.', p.description_ja = 'テーブルごとに2人前以上注文時、チーズトッピングを無料追加。', p.description_vi = 'Mỗi bàn gọi từ 2 phần trở lên được thêm topping phô mai miễn phí.' WHERE pr.store_name_ko = '코웍 비스트로' AND p.description = '테이블 당 2인분 이상 주문 시 치즈 추가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Add 30g of chicken breast or smoked duck per menu item.', p.description_ja = 'メニュー1品ごとに、鶏むね肉または燻製鴨30gを追加提供。', p.description_vi = 'Thêm 30g ức gà hoặc vịt hun khói cho mỗi món.' WHERE pr.store_name_ko = '포케올데이' AND p.description = '메뉴당 닭가슴살 or 훈제오리 30g 추가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1.25L Pepsi Zero for orders of 30,000 KRW or more.', p.description_ja = '30,000ウォン以上の注文でペプシゼロ1.25Lを無料提供。', p.description_vi = 'Đơn từ 30.000 KRW trở lên được tặng 1 chai Pepsi Zero 1,25L.' WHERE pr.store_name_ko = '피자스쿨' AND p.description = '3만원 이상 주문 시 펩시 제로 1.25L 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 canned soft drink per table.', p.description_ja = 'テーブルごとに1 缶飲料を無料提供。', p.description_vi = 'Tặng 1 nước ngọt đóng lon cho mỗi bàn.' WHERE pr.store_name_ko = '리얼후라이' AND p.description = '테이블 당 음료 1캔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 canned soft drink for orders of 20,000 KRW or more.', p.description_ja = '20,000ウォン以上の注文で缶ドリンク1本を無料提供。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng 1 lon nước ngọt.' WHERE pr.store_name_ko = '왕돈까스왕냉면' AND p.description = '2만원 이상 주문 시 음료 1캔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4 or more, choose one per table: 1 500ml soft drink or 4 fried dumplings.', p.description_ja = '4人以上の来店で、テーブルごとに1 500ml ソフトドリンクまたは4 焼き餃子のいずれかを提供。', p.description_vi = 'Nhóm từ 4 người trở lên chọn 1 ưu đãi cho mỗi bàn: 1 500ml nước ngọt hoặc 4 mandu chiên.' WHERE pr.store_name_ko = '취향' AND p.description = '4인 이상 방문 시 테이블 당 음료 500ml or 군만두 4개 중 택 1 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Double Cheeseburger Set discounted to 9,900 KRW, plus a free cup drink for takeout single-item orders only.', p.description_ja = 'ダブルチーズバーガーセットは9,900ウォン。単品テイクアウト注文時はカップドリンク無料。', p.description_vi = 'Set Double Cheeseburger giá 9.900 KRW, kèm đồ uống ly miễn phí chỉ cho đơn món lẻ mang đi.' WHERE pr.store_name_ko = '크라이치즈버거' AND p.description = '더블치즈버거세트 9,900원으로 할인, 단품 포장 주문 시 컵 음료 제공(포장에만 해당)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Available at youth rates.', p.description_ja = 'Set A・B・Cは青少年料金で利用可能。', p.description_vi = 'Set A, B, C áp dụng giá thanh thiếu niên.' WHERE pr.store_name_ko = '놀숲' AND p.description = '청소년 요금제로 이용 가능'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free extra shot in one drink when ordering 2 big-size iced teas or Americanos.', p.description_ja = 'ビッグサイズのアイスティーまたはアメリカーノを2杯注文時、1杯にショット1回無料追加。', p.description_vi = 'Gọi 2 ly trà đá hoặc Americano cỡ lớn được thêm 1 shot miễn phí vào 1 ly.' WHERE pr.store_name_ko = '카페 봄봄' AND p.description = '아이스티 or 아메리카노 빅사이즈 2잔 주문 시 1잔 샷 추가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For in-store orders of 18,000 KRW or more, choose one topping: chocolate shell, strawberry shell, granola, Froot Loops, Corn Frost, Choco Chex, or bread.', p.description_ja = '18,000ウォン以上の来店注文で、チョコシェル・いちごシェル・グラノーラ・フルートループ・コーンフロスト・チョコチェックス・食パンのうち1つを選択。', p.description_vi = 'Đơn tại cửa hàng từ 18.000 KRW trở lên được chọn 1 topping: sốt phủ chocolate, sốt phủ dâu, granola, Froot Loops, Corn Frost, Choco Chex hoặc bánh mì.' WHERE pr.store_name_ko = '요거트아이스크림의정석' AND p.description = '18,000원 이상 방문 주문 시, 초코/딸게쉘, 그레놀라, 후르트링, 콘프로스트, 첵스초코, 식빵 중 택 1'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off all menu items, excluding set menus.', p.description_ja = 'セットメニューを除く全メニュー10%割引。', p.description_vi = 'Giảm 10% toàn bộ menu, không gồm set menu.' WHERE pr.store_name_ko = '에브어이브' AND p.description = '전 메뉴 10% 할인 (세트메뉴 제외)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '15% off usage fees.', p.description_ja = '利用料金15%割引。', p.description_vi = 'Giảm 15% phí sử dụng.' WHERE pr.store_name_ko = '히어로 보드게임카페' AND p.description = '이용료 15% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1. Americano for 2,000 KRW when ordering through POS before 9 AM. + 2. Free size upgrade from L to J when purchasing 4 or more drinks on Mondays and Fridays. + Excludes single-size menu items such as smoothies, crushes, Brown Sugar Jewelry, and Strawberry Jewelry. + 3. 10% off group orders of 10 drinks or more. + Only applies to direct POS payments. Platform orders are excluded.', p.description_ja = '1. 9時以前にPOS注文するとアメリカーノ2,000ウォン。 + 2. 月・金曜日にドリンク4杯以上購入でL→Jサイズアップ無料。単一サイズメニューは対象外。 + 3. ドリンク10杯以上の団体注文は10%割引。店頭POSでの直接決済のみ対象。プラットフォーム注文は対象外。', p.description_vi = '1. Americano giá 2.000 KRW khi đặt qua POS trước 9 AM. + 2. Mua từ 4 đồ uống vào thứ Hai và thứ Sáu được nâng size miễn phí từ L lên J. Không áp dụng cho món chỉ có một size. + 3. Giảm 10% cho đơn nhóm từ 10 đồ uống trở lên. Chỉ áp dụng khi thanh toán trực tiếp tại POS; không áp dụng cho đơn trên nền tảng.' WHERE pr.store_name_ko = '공차' AND p.description = '1. 9시 이전 POS 주문 시 아메리카노 2000원 구매 +2. 월, 금요일 4잔 이상 구매 시 L -> J size up (단일 사이즈메뉴는 제외-스무디, 크러쉬, 브라운슈가 쥬얼리, 딸기쥬얼리 등등) +3. 10잔 이상 단체 주문 시 10% 할인 *포스에서 직접 결제, 플랫폼 결제는 할인 적용 x'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay for 10 hours and receive 2 bonus hours plus 1 free drink.', p.description_ja = '10時間分の決済で、2時間追加+ドリンク1杯を提供。', p.description_vi = 'Thanh toán 10 giờ được tặng thêm 2 giờ và 1 đồ uống.' WHERE pr.store_name_ko = '에이플 PC방' AND p.description = '10시간 충전 시, 2시간+음료 1잔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free Americano when ordering 4 drinks.', p.description_ja = 'ドリンク4杯注文時、アメリカーノ1杯を無料提供。', p.description_vi = 'Gọi 4 đồ uống được tặng 1 Americano.' WHERE pr.store_name_ko = '메가커피' AND p.description = '음료 4잔 주문시, 아메리카노 1잔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For regular registration: + 1. 103-hour pass + 10 bonus hours; 150-hour pass + 15 bonus hours; 200-hour pass + 20 bonus hours. + 2. 4-week pass (28 days) + 3 bonus days; 12-week pass (84 days) + 9 bonus days. + + For consecutive pass renewal: + 1. 100-hour pass + 15 bonus hours; 150-hour pass + 22.5 bonus hours; 200-hour pass + 30 bonus hours. + 2. 4-week pass (28 days) + 4 bonus days; 12-week pass (84 days) + 12 bonus days. + + Cannot be combined with other promotions.', p.description_ja = '通常登録時: + 1. 103時間券+10時間、150時間券+15時間、200時間券+20時間。 + 2. 4週間券(28日)+3日、12週間券(84日)+9日。 + + 利用券を継続再登録する場合: + 1. 100時間券+15時間、150時間券+22.5時間、200時間券+30時間。 + 2. 4週間券(28日)+4日、12週間券(84日)+12日。 + + 他のイベントとの併用不可。', p.description_vi = 'Khi đăng ký thông thường: + 1. Vé 103 giờ + 10 giờ; vé 150 giờ + 15 giờ; vé 200 giờ + 20 giờ. + 2. Vé 4 tuần (28 ngày) + 3 ngày; vé 12 tuần (84 ngày) + 9 ngày. + + Khi gia hạn liên tiếp: + 1. Vé 100 giờ + 15 giờ; vé 150 giờ + 22,5 giờ; vé 200 giờ + 30 giờ. + 2. Vé 4 tuần (28 ngày) + 4 ngày; vé 12 tuần (84 ngày) + 12 ngày. + + Không áp dụng đồng thời với khuyến mãi khác.' WHERE pr.store_name_ko = '작심 스터디카페' AND p.description = '-일반 등록시 +1. 103시간권 + 10시간, 150시간권 + 15시간, 200시간권 + 20시간 +2. 4주권(28일) + 3일, 12주권(84일) + 9일 +-이용권 이어서 재등록시 +1. 100시간권 + 15시간, 150시간권 + 22.5시간, 200시간권 + 30시간 +2. 4주권(28일) + 4일, 12주권(84일) + 12일 *타 이벤트와 중복 적용 불가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for payments of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の決済で焼酎1本を無料提供。', p.description_vi = 'Thanh toán từ 40.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '파동추야' AND p.description = '4만원 이상 결제 시 소주 1병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free mini nachos per table when ordering 4 or more cocktails.', p.description_ja = 'カクテル4杯以上注文時、テーブルごとにミニナチョスを無料提供。', p.description_vi = 'Gọi từ 4 ly cocktail trở lên được tặng nachos nhỏ cho mỗi bàn.' WHERE pr.store_name_ko = '가치' AND p.description = '칵테일 4잔 이상 주문 시 테이블 당 미니나쵸 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Orders before 6 PM: 1 free bottle of soju per table.', p.description_ja = '18時以前の注文で、テーブルごとに焼酎1本を無料提供。', p.description_vi = 'Đặt món trước 6 PM được tặng 1 chai soju cho mỗi bàn.' WHERE pr.store_name_ko = '28청춘호프포차' AND p.description = '18시 이전 주문 시, 테이블 당 소주 1병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For cash payments of 70,000 KRW or more, choose one free item: Kimchi Fried Rice or Rolled Omelet.', p.description_ja = '70,000ウォン以上の現金決済で、キムチチャーハンまたは卵焼きのうち1つを提供。', p.description_vi = 'Thanh toán tiền mặt từ 70.000 KRW trở lên được chọn 1 món: cơm chiên kimchi hoặc trứng cuộn.' WHERE pr.store_name_ko = '블루힐' AND p.description = '7만원 이상 현금 결제 시 김치볶음밥 or 계란말이 중 택 1 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off total payment, including alcohol, plus 1 free canned soft drink for groups of 2 or more visiting between 11 AM and 5 PM. Cash or bank transfer only.', p.description_ja = '酒類を含む決済金額5%割引。さらに11時〜17時に2人以上で来店時、缶飲料1本提供。現金または口座振込のみ対象。', p.description_vi = 'Giảm 5% tổng thanh toán, bao gồm đồ uống có cồn. Ngoài ra, nhóm từ 2 người đến từ 11 AM đến 5 PM được tặng 1 lon nước ngọt. Chỉ áp dụng khi thanh toán tiền mặt hoặc chuyển khoản.' WHERE pr.store_name_ko = '상도로 3가' AND p.description = '결제금액 5% 할인(술값 포함) + 11시-17시 & 2인 이상 방문 시 음료 1캔 제공(현금, 계좌이체 시)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for payments of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の決済で焼酎1本を無料提供。', p.description_vi = 'Thanh toán từ 40.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '숯가마 바베큐 치킨' AND p.description = '4만원 이상 결제 시 소주 1병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free garlic butter potato for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文でガーリックバターポテトを無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng khoai tây bơ tỏi.' WHERE pr.store_name_ko = '역전할머니맥주' AND p.description = '5만원 이상 주문 시 갈릭빠다포테이토 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free soda when adding 5,000 KRW of credit +Free café drink when adding 10,000 KRW or more of credit', p.description_ja = '5,000ウォンチャージで炭酸飲料を無料提供。 + 10,000ウォン以上のチャージでカフェドリンクを無料提供。', p.description_vi = 'Nạp 5.000 KRW được tặng soda. + Nạp từ 10.000 KRW trở lên được tặng đồ uống cà phê.' WHERE pr.store_name_ko = '긱스타 PC방' AND p.description = '5,000원 충전 시 탄산음료 제공 +10,000원 이상 충전 시 카페음료 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Choose 1 free topping (beans, jalapeños, sweet corn, or double cheese) for visits between 2:30 PM and 5:30 PM.', p.description_ja = '2:30 PM〜5:30 PMの来店で、豆・ハラペーニョ・スイートコーン・ダブルチーズのうちトッピング1つを無料追加。', p.description_vi = 'Đến từ 2:30 PM đến 5:30 PM được chọn thêm miễn phí 1 topping: đậu, ớt jalapeño, bắp ngọt hoặc phô mai đôi.' WHERE pr.store_name_ko = '부리또집' AND p.description = '오후 2:30~5:30 사이 방문 시 추가 토핑 4종 (콩, 할라피뇨, 스위트콘, 더블치즈) 중 택 1 추가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free cheese add-on for groups of 2 or more.', p.description_ja = '2人以上の来店でチーズ追加を無料提供。', p.description_vi = 'Nhóm từ 2 người trở lên được tặng phần phô mai thêm.' WHERE pr.store_name_ko = '코웍 비스트로' AND p.description = '2인 이상 방문 시, 치즈사리 추가 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1.25L Pepsi Zero Sugar Lime for every 30,000 KRW spent. Dine-in and takeout only.', p.description_ja = '30,000ウォンごとの利用で1.25L ペプシゼロシュガーライムを無料提供。 + 店内飲食・テイクアウトのみ対象。', p.description_vi = 'Tặng 1.25L Pepsi Zero Sugar Lime cho mỗi 30.000 KRW chi tiêu. + Chỉ áp dụng cho ăn tại chỗ và mang đi.' WHERE pr.store_name_ko = '피자스쿨' AND p.description = '주문금액 30,000원 당 펩시 제로 슈거 라임 1.25L 제공 (포장 및 매장식사만 적용)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4, choose one per table: 4 fried dumplings or 1 canned soda.', p.description_ja = '4人以上の来店で、テーブルごとに4 焼き餃子または1 缶炭酸飲料のいずれかを提供。', p.description_vi = 'Nhóm từ 4 người trở lên chọn 1 ưu đãi cho mỗi bàn: 4 mandu chiên hoặc 1 soda lon.' WHERE pr.store_name_ko = '취향' AND p.description = '4인 방문 시 군만두 4개 서비스 or 탄산 음료 1캔 (탄산음료 인당 1개가 아닌 테이블 당 1개)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 1–2, get 1 free drink. For groups of 3–4, get 2 free drinks.', p.description_ja = '1〜2人でドリンク1杯を無料提供。 + 3〜4人で2 ドリンクを無料提供。', p.description_vi = 'Nhóm 1–2 người được tặng 1 đồ uống. + Nhóm 3–4 người được tặng 2 đồ uống.' WHERE pr.store_name_ko = '면식당' AND p.description = '2인 이하 음료수 1개 제공 / 3인 이상 4인 이하 음료수 2개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free extra shot in one drink when ordering either 2 Big Size Americanos or 1 Big Size Americano plus 1 Iced Tea.', p.description_ja = 'ビッグサイズアメリカーノ2杯、またはビッグサイズアメリカーノ1杯+アイスティー1杯注文時、1杯にショット1回無料追加。', p.description_vi = 'Gọi 2 Americano cỡ lớn hoặc 1 Americano cỡ lớn + 1 trà đá được thêm 1 shot miễn phí vào 1 ly.' WHERE pr.store_name_ko = '카페 봄봄' AND p.description = '빅 사이즈 아메리카노 두 잔 구매 시 한 잔에 샷 추가 / 빅 사이즈 아메리카노 + 아이스티 구매 시 한 잔에 샷 추가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free pineapple sherbet for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文でパイナップルシャーベットを無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng sorbet dứa.' WHERE pr.store_name_ko = '역전할머니맥주' AND p.description = '50,000원 이상 주문 시 파인애플 샤베트 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free bottled soft drink for groups of 4 or more, or 1 free bottle of soju plus 1 bottled soft drink for payments of 50,000 KRW or more.', p.description_ja = '4人以上の来店でボトルドリンク1本、または50,000ウォン以上の決済で焼酎1本+ボトルドリンク1本を無料提供。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng 1 chai nước ngọt; hoặc thanh toán từ 50.000 KRW trở lên được tặng 1 chai soju + 1 chai nước ngọt.' WHERE pr.store_name_ko = '신의주 찹쌀순대' AND p.description = '4인 이상 방문 시 음료 1병 제공 / 5만원 이상 결제 시 소주 1병 음료 1병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 20,000 KRW or more, get 2 free drinks. For orders of 30,000 KRW or more, upgrade all single items to set menus.', p.description_ja = '20,000ウォン以上の注文でドリンク2杯を無料提供。 + 30,000ウォン以上の注文で単品をすべてセットメニューに変更。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng 2 đồ uống. + Đơn từ 30.000 KRW trở lên được nâng tất cả món lẻ thành set menu.' WHERE pr.store_name_ko = '지지고' AND p.description = '1. 2만원 이상 주문 시 음료수 2개 제공 +2. 3만원 이상 주문 시 단품을 세트로 변경 (주문 건 모두)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Double Cheeseburger Set for 9,900 KRW, plus a free cup drink for takeout single-item orders only.', p.description_ja = 'ダブルチーズバーガーセットは9,900ウォン。単品テイクアウト注文時はカップドリンク無料。', p.description_vi = 'Set Double Cheeseburger giá 9.900 KRW, kèm đồ uống ly miễn phí chỉ cho đơn món lẻ mang đi.' WHERE pr.store_name_ko = '크라이치즈버거' AND p.description = '더블치즈버거세트 9,900원 + 단품 포장 주문 시 컵 음료 제공 (포장에만 해당)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free rice ball for groups of 3 or more.', p.description_ja = '3人以上の来店でおにぎりを無料提供。', p.description_vi = 'Nhóm từ 3 người trở lên được tặng cơm nắm.' WHERE pr.store_name_ko = '불타는 소금구이' AND p.description = '3인 이상 방문 시 주먹밥 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 50,000 KRW or more, choose one: 1 bottled soft drink or 1 bottle of soju.', p.description_ja = '50,000ウォン以上で、ボトルドリンク1本または焼酎1本のうち1つを選択。', p.description_vi = 'Từ 50.000 KRW trở lên được chọn 1 trong các món: 1 chai nước ngọt hoặc 1 chai soju.' WHERE pr.store_name_ko = '광어삼촌' AND p.description = '5만원 이상 주문 시 음료수 1병 or 소주 1병 서비스'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free topping add-on for burrito orders, excluding bacon.', p.description_ja = 'ブリトー注文時、ベーコンを除くトッピング1つ無料。', p.description_vi = 'Gọi burrito được thêm 1 topping miễn phí, trừ bacon.' WHERE pr.store_name_ko = '삼봉버거' AND p.description = '3인 방문 시 음료수 1캔 / 6인 방문 시 음료수 2캔 / 9인 방문 시 음료수 3캔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free topping add-on for burrito orders, excluding bacon.', p.description_ja = 'ブリトー注文時、ベーコンを除くトッピング1つ無料。', p.description_vi = 'Gọi burrito được thêm 1 topping miễn phí, trừ bacon.' WHERE pr.store_name_ko = '밀플랜비' AND p.description = '부리또 주문 시 토핑 추가 (베이컨 제외)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For dine-in orders, get one free 500ml soft drink per table when spending 75,000 KRW or more for groups of up to 4, or 85,000 KRW or more for groups of 5 or more.', p.description_ja = '店内注文で、4人以下は75,000ウォン以上、5人以上は85,000ウォン以上の利用時、テーブルごとに500mlドリンク1本を無料提供。', p.description_vi = 'Đơn ăn tại chỗ được tặng 1 nước ngọt 500ml cho mỗi bàn khi chi tiêu từ 75.000 KRW với nhóm tối đa 4 người, hoặc từ 85.000 KRW với nhóm từ 5 người trở lên.' WHERE pr.store_name_ko = '청운음식점' AND p.description = '4인 이하 7만 5천원 / 5인 이하 8만 5천원 방문 주문 시 한 테이블 음료 500ml 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free soybean paste stew per table, plus free steamed egg once when ordering 3 or more meat servings per table.', p.description_ja = 'テーブルごとにテンジャンチゲを提供。さらにテーブルごとに肉3人前以上注文時、茶碗蒸しを1回無料提供。', p.description_vi = 'Mỗi bàn được tặng canh tương đậu. Gọi từ 3 phần thịt trở lên mỗi bàn được tặng thêm 1 lần trứng hấp.' WHERE pr.store_name_ko = '고기스토리' AND p.description = '테이블 당 된장찌개 제공, 테이블 당 고기 3인분 이상 주문 시 계란찜 1회 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free side menu (Bibim Noodles) plus 1 drink when participating in the review event.', p.description_ja = 'レビューイベント参加時、サイドメニュー(ビビン麺)+ドリンク1杯を無料提供。', p.description_vi = 'Tham gia sự kiện review được tặng món phụ (mì trộn bibim) + 1 đồ uống.' WHERE pr.store_name_ko = '상도동 솥뚜껑' AND p.description = '리뷰이벤트 참여 시 사이드메뉴(비빔면) + 음료 1개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free fried egg per person, or free steamed egg for groups of 4 or more. Naver receipt review required.', p.description_ja = '1人につき目玉焼き1個、または4人以上で茶碗蒸しを提供。Naverレシートレビュー必須。', p.description_vi = 'Tặng trứng ốp la cho mỗi người, hoặc tặng trứng hấp cho nhóm từ 4 người trở lên. Cần đánh giá hóa đơn Naver.' WHERE pr.store_name_ko = '함지박' AND p.description = '인당 계란후라이 또는 4인 이상 시 계란찜 (네이버 영수증 리뷰 필수)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 20,000 KRW or more, get 2 free drinks. For orders of 30,000 KRW or more, upgrade all menu items to set menus.', p.description_ja = '20,000ウォン以上の注文でドリンク2杯を無料提供。 + 30,000ウォン以上の注文で全メニューをセットメニューに変更。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng 2 đồ uống. + Đơn từ 30.000 KRW trở lên được nâng toàn bộ menu thành set menu.' WHERE pr.store_name_ko = '지지고' AND p.description = '2만원 이상 주문 시 음료 2개 서비스, 3만원 이상 주문 시 모든 메뉴 세트로 변경'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off all menu items, excluding set menus.', p.description_ja = 'セットメニューを除く全メニュー10%割引。', p.description_vi = 'Giảm 10% toàn bộ menu, không gồm set menu.' WHERE pr.store_name_ko = '에브어이브' AND p.description = '전메뉴 10% 할인 (세트메뉴 제외)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free extra espresso shot for orders of 10,000 KRW or more.', p.description_ja = '10,000ウォン以上の注文でエスプレッソショット1回無料追加。', p.description_vi = 'Đơn từ 10.000 KRW trở lên được thêm 1 shot espresso miễn phí.' WHERE pr.store_name_ko = '블랙&조이커피' AND p.description = '만원 이상 주문 시 샷 추가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free extra shot once when ordering 2 drinks (2 Big Americanos, or 1 Big Americano plus 1 Iced Tea). +Free extra shot for orders of 5,000 KRW or more through Bombom Order.', p.description_ja = 'ドリンク2杯(ビッグサイズアメリカーノ2杯、またはビッグサイズアメリカーノ1杯+アイスティー1杯)注文時、1杯にショット1回無料追加。Bombom Orderで5,000ウォン以上注文時もショット1回無料追加。', p.description_vi = 'Gọi 2 đồ uống (2 Americano cỡ lớn hoặc 1 Americano cỡ lớn + 1 trà đá) được thêm 1 shot miễn phí vào 1 ly. Đơn từ 5.000 KRW qua Bombom Order cũng được thêm 1 shot miễn phí.' WHERE pr.store_name_ko = '카페 봄봄' AND p.description = '2잔 (빅 아메리카노 2잔/빅 아메 1잔, 아이스티 1잔) 주문 시 샷 추가 1번/봄봄 오더로 5천원 주문 시 샷 추가 무료'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free chocolate shell, strawberry shell, or granola topping for in-store orders of 18,000 KRW or more.', p.description_ja = '来店注文18,000ウォン以上で、チョコシェル・いちごシェル・グラノーラのうちトッピング1つを無料追加。', p.description_vi = 'Đơn tại cửa hàng từ 18.000 KRW trở lên được chọn thêm miễn phí topping sốt phủ chocolate, sốt phủ dâu hoặc granola.' WHERE pr.store_name_ko = '요거트아이스크림의정석' AND p.description = '18000원 이상 방문 주문 시 초코/딸기쉘 or 그래놀라 토핑 추가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free Americano with any slice cake purchase.', p.description_ja = 'カットケーキ購入時、アメリカーノ1杯を無料提供。', p.description_vi = 'Mua miếng bánh kem được tặng 1 Americano.' WHERE pr.store_name_ko = '커피나무' AND p.description = '조각케이크 구매 시 아메리카노 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Morning set: Americano + sandwich for 3,500 KRW, plus free size-up for all drinks.', p.description_ja = 'モーニングセット:アメリカーノ+サンドイッチ3,500ウォン、全ドリンク無料サイズアップ。', p.description_vi = 'Set buổi sáng: Americano + sandwich giá 3.500 KRW, đồng thời nâng size miễn phí cho toàn bộ đồ uống.' WHERE pr.store_name_ko = '브레댄코' AND p.description = '모닝세트: 아메리카노 + 샌드위치 3500원, 음료 전 메뉴 무료 사이즈업'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free instant ramen for orders of 20,000 KRW or more.', p.description_ja = '20,000ウォン以上の注文でインスタントラーメンを無料提供。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng ramen ăn liền.' WHERE pr.store_name_ko = '씨밤바베' AND p.description = '2만원 이상 주문 시 즉석 라면 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free mini nachos per table when ordering 4 or more cocktails.', p.description_ja = 'カクテル4杯以上注文時、テーブルごとにミニナチョスを無料提供。', p.description_vi = 'Gọi từ 4 ly cocktail trở lên được tặng nachos nhỏ cho mỗi bàn.' WHERE pr.store_name_ko = '가치' AND p.description = '칵테일 4잔 이상 주문시 테이블 당 미니 나초'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文で焼酎1本を無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '젠사이야' AND p.description = '5만원 이상 주문 시 소주 1병'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for cash payments of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の現金決済で焼酎1本を無料提供。', p.description_vi = 'Thanh toán tiền mặt từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '인쌩맥주' AND p.description = '5만원 이상 현금결제 시 소주 1병'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For cash payments of 70,000 KRW or more, choose one: Kimchi Fried Rice or Rolled Omelet.', p.description_ja = '70,000ウォン以上の現金決済で、キムチチャーハンまたは卵焼きのうち1つを提供。', p.description_vi = 'Thanh toán tiền mặt từ 70.000 KRW trở lên được chọn 1 món: cơm chiên kimchi hoặc trứng cuộn.' WHERE pr.store_name_ko = '블루힐' AND p.description = '7만원 이상 현금 결제 시 김치볶음밥 또는 계란말이 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free French Fries for orders of 40,000 KRW or more per table.', p.description_ja = '40,000ウォン以上の注文でフライドポテトを無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng khoai tây chiên.' WHERE pr.store_name_ko = '사랑과평화' AND p.description = '테이블당 4만원 이상 주문 시 감자튀김 서비스'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when paying by cash or bank transfer.', p.description_ja = '現金または口座振込決済時、5%割引。', p.description_vi = 'Giảm 5% khi thanh toán bằng tiền mặt hoặc chuyển khoản.' WHERE pr.store_name_ko = '상도로 3가' AND p.description = '현금 or 계좌 이체 시 5% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 350ml canned soft drink for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文で1 350ml 缶ドリンクを無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng 1 350ml nước ngọt đóng lon.' WHERE pr.store_name_ko = '파동추야' AND p.description = '4만원 이상 주문 시 음료 1캔(350ml) 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay 10,000 KRW by bank transfer or cash to receive 10 hours plus 1 free drink.', p.description_ja = '現金または口座振込で10,000ウォンをチャージすると、10時間+ドリンク1杯を提供。', p.description_vi = 'Nạp 10.000 KRW bằng tiền mặt hoặc chuyển khoản được tặng 10 giờ sử dụng và 1 đồ uống.' WHERE pr.store_name_ko = '에이플 PC방' AND p.description = '계좌이체 or 현금 1만원 충전 시 10시간 + 음료 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Set A, B, and C available at youth rates.', p.description_ja = 'Set A・B・Cは青少年料金で利用可能。', p.description_vi = 'Set A, B, C áp dụng giá thanh thiếu niên.' WHERE pr.store_name_ko = '놀숲' AND p.description = 'A B C 세트 청소년 요금제로 이용 가능'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay 10,000 KRW by bank transfer or cash at the counter, then text the owner “I’m a student of the College of Economics and International Commerce, and I recharged 10,000 KRW” to get 5 extra songs.', p.description_ja = 'カウンターで口座振込または現金で10,000ウォンをチャージ後、店主に学生認証メッセージを送ると5曲追加。', p.description_vi = 'Nạp 10.000 KRW bằng chuyển khoản hoặc tiền mặt tại quầy, sau đó nhắn tin xác minh sinh viên cho chủ quán để nhận thêm 5 bài hát.' WHERE pr.store_name_ko = '리코스타 코인노래방' AND p.description = '계좌이체 또는 현금 카운터 1만원 충전 후 사장님께 문자로 ''경통대 학생인데 1만원 충전했습니다'' 인증 시 5곡 추가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off meat dishes when paying with Toss Pay.', p.description_ja = 'Toss Pay決済時、肉料理5%割引。', p.description_vi = 'Giảm 5% món thịt khi thanh toán bằng Toss Pay.' WHERE pr.store_name_ko = '먹돼지' AND p.description = '토스페이 결제 시 고기류 5% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink for groups of 4 or more.', p.description_ja = '4人以上の来店でドリンクを無料提供。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng đồ uống.' WHERE pr.store_name_ko = '신의주 찹쌀순대' AND p.description = '4인 이상 방문 시 음료 1개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free Bibim Noodles plus 1 drink when participating in the review event.', p.description_ja = 'レビューイベント参加時、ビビン麺+ドリンク1杯を無料提供。', p.description_vi = 'Tham gia sự kiện review được tặng mì trộn bibim + 1 đồ uống.' WHERE pr.store_name_ko = '상도동 솥뚜껑' AND p.description = '리뷰이벤트 참여 시 비빔면+음료 1개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1.25L Pepsi Zero Lime for orders of 30,000 KRW or more. Dine-in or takeout only.', p.description_ja = '30,000ウォン以上の注文で1.25L ペプシゼロライムを無料提供。 + 店内飲食またはテイクアウトのみ対象。', p.description_vi = 'Tặng 1.25L Pepsi Zero Lime cho đơn hàng từ 30.000 KRW trở lên. + Chỉ áp dụng cho ăn tại chỗ hoặc mang đi.' WHERE pr.store_name_ko = '피자스쿨' AND p.description = '3만원 이상 주문(매장 식사, 포장) 시 펩시 제로 라임 1.25L 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 30,000 KRW or more, choose one: 2 drinks, soju, beer, or Youtiao. Up to 4 receipts may be combined.', p.description_ja = '30,000ウォン以上の注文で、ドリンク2本・焼酎・ビール・油条のうち1つを選択。レシートは最大4枚まで合算可能。 + レシートは最大4枚まで合算可能。', p.description_vi = 'Đơn từ 30.000 KRW trở lên được chọn 1 trong các món: 2 đồ uống, soju, bia hoặc quẩy Youtiao. Có thể gộp tối đa 4 hóa đơn. + Có thể gộp tối đa 4 hóa đơn.' WHERE pr.store_name_ko = '샹츠마라' AND p.description = '3만원 이상 주문 시 음료수 2개 또는 소주 또는 맥주 또는 유토우 제공(합칠 수 있는 영수증 최대 4개)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned soft drink when ordering 2 or more main dishes.', p.description_ja = '2つ以上 メインメニュー注文時、缶ドリンクを無料提供。', p.description_vi = 'Khi gọi 2 trở lên món chính, được tặng nước ngọt đóng lon.' WHERE pr.store_name_ko = '슬로우캘리' AND p.description = '메인 메뉴 2개 이상 주문 시 캔 음료 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 25,000 KRW or more, get 1 canned soda. +For orders of 30,000 KRW or more, get 1 lemon black tea. +For orders of 40,000 KRW or more, get 14 boiled dumplings.', p.description_ja = '25,000ウォン以上の注文で缶炭酸飲料1本、30,000ウォン以上でレモン紅茶1本、40,000ウォン以上で水餃子14個を無料提供。', p.description_vi = 'Đơn từ 25.000 KRW trở lên được tặng 1 lon soda. Đơn từ 30.000 KRW trở lên được tặng 1 trà đen chanh. Đơn từ 40.000 KRW trở lên được tặng 14 mandu luộc.' WHERE pr.store_name_ko = '진푸 중화요리' AND p.description = '2.5만원 이상 주문 시 탄산 1캔 제공 +3만원 이상 주문 시 레몬 홍차 제공 +4만원 이상 주문 시 물만두 14개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free topping add-on for burrito orders, excluding bacon.', p.description_ja = 'ブリトー注文時、ベーコンを除くトッピング1つ無料。', p.description_vi = 'Gọi burrito được thêm 1 topping miễn phí, trừ bacon.' WHERE pr.store_name_ko = '밀플랜비' AND p.description = '부리또 주문 시 토핑 추가(베이컨 제외)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4 or more, choose either 1 free 500ml soft drink or 1 fried dumpling per person.', p.description_ja = '4人以上の来店で、500mlドリンク1本または1人につき焼き餃子1個のいずれかを提供。', p.description_vi = 'Nhóm từ 4 người trở lên chọn 1 ưu đãi: 1 nước ngọt 500ml hoặc 1 mandu chiên cho mỗi người.' WHERE pr.store_name_ko = '취향' AND p.description = '4인 이상 방문 시 음료 500ml 1개 또는 1인당 군만두 1개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free cheese add-on when ordering 2 or more servings of Dakgalbi.', p.description_ja = 'タッカルビ2人前以上注文時、チーズ追加を無料提供。', p.description_vi = 'Khi gọi từ 2 phần dakgalbi trở lên, được tặng phần phô mai thêm.' WHERE pr.store_name_ko = '코웍 비스트로' AND p.description = '닭갈비 2인분 이상 주문 시 치즈사리 1개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink when ordering 2 or more menu items per table. Excludes lunch hours from 12 PM to 2 PM and dinner hours from 5 PM to 7 PM.', p.description_ja = 'テーブルごとにメニュー2品以上注文時、ドリンクを提供。ランチ12〜14時、ディナー17〜19時は対象外。', p.description_vi = 'Tặng đồ uống khi mỗi bàn gọi từ 2 món trở lên. Không áp dụng giờ trưa 12 PM–2 PM và giờ tối 5 PM–7 PM.' WHERE pr.store_name_ko = '고추동제면소' AND p.description = '테이블당 메뉴 2개 이상 주문 시 음료 서비스(점심 12-2시, 저녁 17-19시 제외)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free soda when ordering 2 main dishes priced at 7,200 KRW or more.', p.description_ja = '7,200ウォン以上のメインメニュー2品注文時、炭酸飲料1杯を無料提供。', p.description_vi = 'Gọi 2 món chính giá từ 7.200 KRW trở lên được tặng 1 soda.' WHERE pr.store_name_ko = '샐러디' AND p.description = '메인메뉴(7,200원 이상) 2개 주문 시 탄산음료 1개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free Americano with any slice cake purchase.', p.description_ja = 'カットケーキ購入時、アメリカーノ1杯を無料提供。', p.description_vi = 'Mua miếng bánh kem được tặng 1 Americano.' WHERE pr.store_name_ko = '커피나무' AND p.description = '조각케이크 구매 시 아메리카노 1잔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1. Americano for 2,000 KRW when ordering through POS before 9 AM. + 2. Free size upgrade from L to J when purchasing 4 or more drinks on Mondays and Fridays. + Excludes single-size menu items such as smoothies, crushes, Brown Sugar Jewelry, and Strawberry Jewelry. + 3. 10% off group orders of 10 drinks or more. + Only applies to direct in-store POS payments.', p.description_ja = '1. 9時以前にPOS注文するとアメリカーノ2,000ウォン。 + 2. 月・金曜日にドリンク4杯以上購入でL→Jサイズアップ無料。単一サイズメニューは対象外。 + 3. ドリンク10杯以上の団体注文は10%割引。店頭POSでの直接決済のみ対象。プラットフォーム注文は対象外。', p.description_vi = '1. Americano giá 2.000 KRW khi đặt qua POS trước 9 AM. + 2. Mua từ 4 đồ uống vào thứ Hai và thứ Sáu được nâng size miễn phí từ L lên J. Không áp dụng cho món chỉ có một size. + 3. Giảm 10% cho đơn nhóm từ 10 đồ uống trở lên. Chỉ áp dụng khi thanh toán trực tiếp tại POS; không áp dụng cho đơn trên nền tảng.' WHERE pr.store_name_ko = '공차' AND p.description = '9시 이전 포스 주문 시 아메리카노 2000원 구매 +월, 금요일 4잔 이상 구매 시 L -> J size up +(단일 사이즈메뉴는 제외-스무디, 크러쉬, 브라운슈가쥬얼리, 딸기쥬얼리 등등) +10잔 이상 단체 주문 시 10% 할인 (단, 현장 포스에서 결제 시에만 가능)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free extra shot once when ordering 2 drinks: 1 Big Americano plus 1 Iced Tea.', p.description_ja = 'ビッグサイズアメリカーノ1杯+アイスティー1杯の計2杯注文時、1杯にショット1回無料追加。', p.description_vi = 'Gọi 2 đồ uống gồm 1 Americano cỡ lớn + 1 trà đá được thêm 1 shot miễn phí vào 1 ly.' WHERE pr.store_name_ko = '카페 봄봄' AND p.description = '2잔(빅 아메리카노, 아이스티 각각 1잔) 주문 시 샷 추가 1번 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 50,000 KRW or more, choose one: Garlic Butter Potato or Seasoned Fries.', p.description_ja = '50,000ウォン以上で、ガーリックバターポテトまたは味付けポテトのうち1つを選択。', p.description_vi = 'Từ 50.000 KRW trở lên được chọn 1 trong các món: khoai tây bơ tỏi hoặc khoai tây lắc gia vị.' WHERE pr.store_name_ko = '역전할머니맥주' AND p.description = '5만원 이상 주문 시 갈릭빠다포테이토 또는 양념감자 중 택 1 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when ordering 2 or more menu items and paying by cash, bank transfer, or KakaoPay.', p.description_ja = 'メニュー2品以上注文後、現金・口座振込・KakaoPay決済時5%割引。', p.description_vi = 'Gọi từ 2 món trở lên và thanh toán bằng tiền mặt, chuyển khoản hoặc KakaoPay được giảm 5%.' WHERE pr.store_name_ko = '인쌩맥주' AND p.description = '메뉴 2개 이상 주문 후 현금, 계좌이체 또는 카카오페이 결제 시 5% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink for orders of 30,000 KRW or more.', p.description_ja = '30,000ウォン以上の注文でドリンクを無料提供。', p.description_vi = 'Đơn từ 30.000 KRW trở lên được tặng đồ uống.' WHERE pr.store_name_ko = '파동추야' AND p.description = '3만원 이상 주문 시 음료 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free French Fries for orders of 40,000 KRW or more per table.', p.description_ja = '40,000ウォン以上の注文でフライドポテトを無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng khoai tây chiên.' WHERE pr.store_name_ko = '사랑과평화' AND p.description = '테이블 당 4만원 이상 주문 시 감자튀김 서비스'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free French Fries once per table when ordering 2 or more highballs or yangmaek drinks.', p.description_ja = 'テーブルごとに1回、ハイボールまたはヤンメクを2杯以上注文時、フライドポテトを無料提供。', p.description_vi = 'Mỗi bàn được tặng khoai tây chiên 1 lần khi gọi từ 2 ly highball hoặc yangmaek trở lên.' WHERE pr.store_name_ko = '자월당' AND p.description = '테이블 당 1회 하이볼 또는 양맥 2잔 이상 주문 시 감자튀김 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay for 9 hours by cash or bank transfer and receive 10 hours plus 1 free drink.', p.description_ja = '現金または口座振込で9時間分を決済すると、10時間+ドリンク1杯を提供。', p.description_vi = 'Thanh toán 9 giờ bằng tiền mặt hoặc chuyển khoản được tặng 10 giờ sử dụng và 1 đồ uống.' WHERE pr.store_name_ko = '에이플 PC방' AND p.description = '9시간 현금 결제 또는 계좌 이체 충전 시 10시간 + 음료 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Set A, B, and C available at youth rates.', p.description_ja = 'Set A・B・Cは青少年料金で利用可能。', p.description_vi = 'Set A, B, C áp dụng giá thanh thiếu niên.' WHERE pr.store_name_ko = '놀숲' AND p.description = '세트 A, B, C 요금제를 성인 -> 청소년으로 변경'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay 10,000 KRW by bank transfer or cash at the counter, then text the owner “I’m a student of the School of Liberal Studies, and I recharged 10,000 KRW” to get 5 extra songs.', p.description_ja = 'カウンターで口座振込または現金で10,000ウォンをチャージ後、店主に学生認証メッセージを送ると5曲追加。', p.description_vi = 'Nạp 10.000 KRW bằng chuyển khoản hoặc tiền mặt tại quầy, sau đó nhắn tin xác minh sinh viên cho chủ quán để nhận thêm 5 bài hát.' WHERE pr.store_name_ko = '리코스타 코인노래방' AND p.description = '계좌이체 또는 카운터 현금 1만원 충전 후 사장님께 문자로 "자전 재학생인데 1만원 충전했습니다." 인증 시 5곡 추가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 1–2, get 1 free drink. For groups of 3–4, get 2 free drinks.', p.description_ja = '1〜2人でドリンク1杯を無料提供。 + 3〜4人で2 ドリンクを無料提供。', p.description_vi = 'Nhóm 1–2 người được tặng 1 đồ uống. + Nhóm 3–4 người được tặng 2 đồ uống.' WHERE pr.store_name_ko = '면식당' AND p.description = '2인 이하 음료 1개 / 3~4인 음료 2개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For purchases of 30,000 KRW or more, choose one: Bing Hong Cha, Cha Pai, or 3 pieces of Youtiao. Up to 3 receipts may be combined.', p.description_ja = '30,000ウォン以上の購入で、油条3個・茶π・冰紅茶のうち1つを選択。レシートは最大3枚まで合算可能。 + レシートは最大3枚まで合算可能。', p.description_vi = 'Đơn mua từ 30.000 KRW trở lên được chọn 1 trong các món: 3 miếng quẩy Youtiao, Cha Pai hoặc Bing Hong Cha. Có thể gộp tối đa 3 hóa đơn. + Có thể gộp tối đa 3 hóa đơn.' WHERE pr.store_name_ko = '샹츠마라' AND p.description = '30,000원 이상 구매 시(영수증 3개 이하 합산 가능) 빙홍차 또는 차파이, 유토우 3p 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 20,000 KRW or more, get 2 free drinks. For orders of 30,000 KRW or more, upgrade all menu items to set menus.', p.description_ja = '20,000ウォン以上の注文でドリンク2杯を無料提供。 + 30,000ウォン以上の注文で全メニューをセットメニューに変更。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng 2 đồ uống. + Đơn từ 30.000 KRW trở lên được nâng toàn bộ menu thành set menu.' WHERE pr.store_name_ko = '지지고' AND p.description = '20,000원 이상 주문 시 음료 2개 제공 +30,000원 이상 주문 시 모든 메뉴 세트로 변경'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when paying with KakaoPay, Toss Pay, or bank transfer for grilled dishes.', p.description_ja = '焼き物注文時、KakaoPay・Toss Pay・口座振込決済で5%割引。', p.description_vi = 'Giảm 5% món nướng khi thanh toán bằng KakaoPay, Toss Pay hoặc chuyển khoản.' WHERE pr.store_name_ko = '먹돼지' AND p.description = '구이류 주문 시 카카오페이/토스페이/계좌이체 시 5% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For set purchases of 13,000 KRW or more, add 1 scoop of Egg Mayo or 1 strip of bacon.', p.description_ja = '13,000ウォン以上のセット購入時、エッグマヨ1スクープまたはベーコン1枚を追加提供。', p.description_vi = 'Mua set từ 13.000 KRW trở lên được thêm 1 muỗng Egg Mayo hoặc 1 lát bacon.' WHERE pr.store_name_ko = '써브웨이' AND p.description = '13,000원 이상 세트 구매 시 에그마요 1스쿱 또는 베이컨 1줄 추가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 500ml soft drink per table for orders of 75,000 KRW or more for groups of up to 4, or 85,000 KRW or more for groups of 5 or more.', p.description_ja = '1テーブルにつき、4人以下は75,000ウォン以上、5人以上は85,000ウォン以上の注文で500mlドリンク1本を無料提供。', p.description_vi = 'Mỗi bàn được tặng 1 đồ uống 500ml khi nhóm tối đa 4 người gọi từ 75.000 KRW trở lên, hoặc nhóm từ 5 người gọi từ 85.000 KRW trở lên.' WHERE pr.store_name_ko = '청운음식점' AND p.description = '한 테이블당 4인 이하 75,000원 / 5인 이상 85,000원 이상 주문 시 500ml 음료 1개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink for groups of 4 or more.', p.description_ja = '4人以上の来店でドリンクを無料提供。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng đồ uống.' WHERE pr.store_name_ko = '파라다이스' AND p.description = '4인 이상 방문 시 음료 1개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink for groups of 3 or more with orders of 20,000 KRW or more.', p.description_ja = '3人以上の来店かつ20,000ウォン以上の注文でドリンク1杯を無料提供。', p.description_vi = 'Nhóm từ 3 người trở lên và đơn từ 20.000 KRW trở lên được tặng 1 đồ uống.' WHERE pr.store_name_ko = '왕돈까스왕냉면' AND p.description = '3인 이상 방문 및 20,000원 이상 주문 시 음료 1개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4 or more, get 1 free drink. Or, for groups of 4 or more spending 50,000 KRW or more, get 1 free bottle of soju.', p.description_ja = '4人以上でドリンク1杯を無料提供。 + また、4人以上で50,000ウォン以上利用時、焼酎1本を無料提供。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng 1 đồ uống. + Hoặc nhóm từ 4 người trở lên chi từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '신의주찹쌀순대' AND p.description = '4인 이상 주문 시 음료 1개 제공 / 4인 이상 방문하여 50,000원 이상 주문 시 소주 1병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Add 30g of chicken breast or smoked duck topping when ordering a main menu item.', p.description_ja = 'メインメニュー注文時、鶏むね肉または燻製鴨トッピング30gを追加提供。', p.description_vi = 'Khi gọi món chính, được thêm 30g topping ức gà hoặc vịt hun khói.' WHERE pr.store_name_ko = '포케올데이' AND p.description = '메인 메뉴 주문 시 닭가슴살 또는 훈제오리 토핑 30g 추가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1 free drink for every 3 people.', p.description_ja = '3人ごとにドリンク1本無料。', p.description_vi = 'Tặng 1 đồ uống cho mỗi 3 người.' WHERE pr.store_name_ko = '삼봉버거' AND p.description = '3인당 음료 1개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for purchases of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の購入で焼酎1本を無料提供。', p.description_vi = 'Mua từ 40.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '숯가마 바베큐 치킨' AND p.description = '40,000원 이상 구매 시 소주 1병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free fried dumplings for groups of 4 or more.', p.description_ja = '4人以上の来店で焼き餃子を無料提供。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng mandu chiên.' WHERE pr.store_name_ko = '황궁쟁반짜장' AND p.description = '4인 이상 방문 시 군만두 무료 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1 free drink for every 2 people.', p.description_ja = '1人1メニュー注文時、2人ごとにドリンク1本無料。例:4人の場合は2本。', p.description_vi = 'Khi mỗi người gọi 1 món, tặng 1 đồ uống cho mỗi 2 người. Ví dụ: 4 người được 2 đồ uống.' WHERE pr.store_name_ko = '멘동' AND p.description = '2인당 음료 1개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 3, get 1 free drink. For groups of 4 or more, get 2 free drinks.', p.description_ja = '3人でドリンク1杯を無料提供。 + 4人以上で2 ドリンクを無料提供。', p.description_vi = 'Nhóm 3 người được tặng 1 đồ uống. + Nhóm từ 4 người trở lên được tặng 2 đồ uống.' WHERE pr.store_name_ko = '핵밥' AND p.description = '3인 주문 시 음료 1개 제공 / 4인 이상 주문 시 음료 2개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink for orders of 2 or more people.', p.description_ja = '2人以上の注文でドリンク1杯を無料提供。', p.description_vi = 'Đơn từ 2 người trở lên được tặng 1 đồ uống.' WHERE pr.store_name_ko = '슬로우캘리' AND p.description = '2인 이상 주문 시 음료 1개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink per table when each person orders 1 menu item. Excludes lunch hours from 12 PM to 2 PM and dinner hours from 5 PM to 7 PM.', p.description_ja = '1人1メニュー注文時、テーブルごとにドリンク1本を提供。ランチ12〜14時、ディナー17〜19時は対象外。', p.description_vi = 'Tặng 1 đồ uống cho mỗi bàn khi mỗi người gọi 1 món. Không áp dụng giờ trưa 12 PM–2 PM và giờ tối 5 PM–7 PM.' WHERE pr.store_name_ko = '고추동제면소' AND p.description = '1인 1메뉴 주문 시 테이블당 음료 1개 제공 (점심 12-2시, 저녁 5-7시 제외)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free cheese add-on per table when ordering 2 or more servings of Dakgalbi.', p.description_ja = 'タッカルビ2人前以上注文時、テーブルごとにチーズ追加を無料提供。', p.description_vi = 'Khi gọi từ 2 phần dakgalbi trở lên, mỗi bàn được tặng phần phô mai thêm.' WHERE pr.store_name_ko = '코웍비스트로' AND p.description = '닭갈비 2인 이상 주문 시 테이블당 치즈사리 1개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free topping add-on for burrito orders, excluding bacon.', p.description_ja = 'ブリトー注文時、ベーコンを除くトッピング1つ無料。', p.description_vi = 'Gọi burrito được thêm 1 topping miễn phí, trừ bacon.' WHERE pr.store_name_ko = '밀플랜비' AND p.description = '브리또 주문 시 토핑 추가 (베이컨 제외)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1 free drink for every 2 main menu items.', p.description_ja = 'メインメニュー2品ごとにドリンク1杯を無料提供。', p.description_vi = 'Cứ mỗi 2 món chính được tặng 1 đồ uống.' WHERE pr.store_name_ko = '은화수식당' AND p.description = '메인 메뉴 2개당 음료수 1개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1 free gimmari fried seaweed roll per person. Student ID or u-SAINT verification is required at the time of ordering. Partnership benefits may not be provided if requested after some time has passed.', p.description_ja = '1人につきキムマリ1個を無料提供。注文時に学生証またはu-SAINT認証が必要です。注文後しばらく経ってからの申し出は対象外となる場合があります。', p.description_vi = 'Tặng 1 gimmari cho mỗi người. Cần xác minh thẻ sinh viên hoặc u-SAINT ngay khi gọi món. Ưu đãi có thể không được áp dụng nếu yêu cầu sau một thời gian.' WHERE pr.store_name_ko = '고씨네' AND p.description = '1인당 김말이 1개 제공 (주문과 동시에 학생증 또는 유세인트 인증 필요. 주문 후 일정 시간 경과 시 제휴 제공 안될 수 있음.)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when ordering 2 or more main menu items and paying by cash or bank transfer.', p.description_ja = 'メインメニュー2品以上注文し、現金または口座振込で決済時5%割引。', p.description_vi = 'Gọi từ 2 món chính trở lên và thanh toán bằng tiền mặt hoặc chuyển khoản được giảm 5%.' WHERE pr.store_name_ko = '인쌩맥주' AND p.description = '메인 메뉴 2개 이상 주문 및 현금 결제 / 계좌 이체 결제 시 5% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For purchases of 50,000 KRW or more, choose one: 1 bottle of soju or Garlic Butter Potato.', p.description_ja = '50,000ウォン以上で、焼酎1本またはガーリックバターポテトのうち1つを選択。', p.description_vi = 'Từ 50.000 KRW trở lên được chọn 1 trong các món: 1 chai soju hoặc khoai tây bơ tỏi.' WHERE pr.store_name_ko = '역전할머니맥주' AND p.description = '50,000원 이상 구매 시 소주 1병 / 갈릭빠다포테이토 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free instant ramen for orders of 20,000 KRW or more per table.', p.description_ja = '20,000ウォン以上の注文でインスタントラーメンを無料提供。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng ramen ăn liền.' WHERE pr.store_name_ko = '씨밤바베' AND p.description = '테이블당 20,000원 이상 주문 시 즉석 라면 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free French Fries for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文でフライドポテトを無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng khoai tây chiên.' WHERE pr.store_name_ko = '사랑과평화' AND p.description = '40,000원 이상 주문 시 감자튀김 1개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文で焼酎1本を無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '젠사이야' AND p.description = '50,000원 이상 주문 시 소주 1병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 Iced Tea when ordering 3 drinks on Fridays.', p.description_ja = '金曜日にドリンク3杯注文時、アイスティー1杯を無料提供。', p.description_vi = 'Thứ Sáu gọi 3 đồ uống được tặng 1 trà đá.' WHERE pr.store_name_ko = '빽다방' AND p.description = '금요일에 음료 3잔 주문 시 아이스티 1잔 무료 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off all menu items, excluding set menus.', p.description_ja = 'セットメニューを除く全メニュー10%割引。', p.description_vi = 'Giảm 10% toàn bộ menu, không gồm set menu.' WHERE pr.store_name_ko = '에브어이브' AND p.description = '전 메뉴 10% 할인 (세트 메뉴 제외)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free extra shot in 1 drink when ordering 2 Big Iced Americanos or 2 Big Iced Teas.', p.description_ja = 'ビッグサイズアイスアメリカーノ2杯またはビッグサイズアイスティー2杯注文時、1杯にショット1回無料追加。', p.description_vi = 'Gọi 2 Americano đá cỡ lớn hoặc 2 trà đá cỡ lớn được thêm 1 shot miễn phí vào 1 ly.' WHERE pr.store_name_ko = '카페봄봄' AND p.description = '빅 아이스아메리카노 또는 빅 아이스티 2잔 주문 시 1잔에 샷 추가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off drinks.', p.description_ja = 'ドリンク10%割引。', p.description_vi = 'Giảm 10% đồ uống.' WHERE pr.store_name_ko = 'eea cafe' AND p.description = '음료 10% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1. Americano for 2,000 KRW when ordering through POS before 1 PM. + 2. Free size upgrade from L to J when purchasing 4 or more drinks on Mondays and Fridays. + Excludes single-size menu items. + 3. 10% off group orders of 10 drinks or more. + Only applies to direct in-store POS payments.', p.description_ja = '1. 13時以前にPOS注文するとアメリカーノ2,000ウォン。 + 2. 月・金曜日にドリンク4杯以上購入でL→Jサイズアップ無料。単一サイズメニューは対象外。 + 3. ドリンク10杯以上の団体注文は10%割引。店頭POSでの直接決済のみ対象。プラットフォーム注文は対象外。', p.description_vi = '1. Americano giá 2.000 KRW khi đặt qua POS trước 1 PM. + 2. Mua từ 4 đồ uống vào thứ Hai và thứ Sáu được nâng size miễn phí từ L lên J. Không áp dụng cho món chỉ có một size. + 3. Giảm 10% cho đơn nhóm từ 10 đồ uống trở lên. Chỉ áp dụng khi thanh toán trực tiếp tại POS; không áp dụng cho đơn trên nền tảng.' WHERE pr.store_name_ko = '공차' AND p.description = '13시 이전 포스 주문 시 아메리카노 2,000원 +월, 금요일 4잔 이상 구매 시 L -> J 사이즈 업 (단일 사이즈 메뉴 제외) +10잔 이상 단체 주문 시 10% 할인 (현장 포스 결제 시에만 적용)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Set A, B, and C available at youth rates.', p.description_ja = 'Set A・B・Cは青少年料金で利用可能。', p.description_vi = 'Set A, B, C áp dụng giá thanh thiếu niên.' WHERE pr.store_name_ko = '놀숲' AND p.description = 'Set a, b, c 요금제를 청소년 요금제로 이용 가능'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '15% off.', p.description_ja = '15%割引。', p.description_vi = 'Giảm 15%.' WHERE pr.store_name_ko = '히어로 보드게임 카페' AND p.description = '15% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free cup drink for takeout single-item orders. Double Cheeseburger Set for 9,900 KRW for dine-in and takeout orders.', p.description_ja = '単品テイクアウト注文時、カップドリンクを無料提供。店内飲食・テイクアウトのダブルチーズバーガーセットは9,900ウォン。', p.description_vi = 'Đơn món lẻ mang đi được tặng đồ uống ly. Set Double Cheeseburger giá 9.900 KRW cho cả ăn tại chỗ và mang đi.' WHERE pr.store_name_ko = '크라이치즈버거' AND p.description = '단품 포장 주문 시 음료컵 무료 제공 / 홀식사 및 포장 더블치즈버거세트 9,900원'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink when visiting after 3 PM. Free Bibim Noodles when writing a review.', p.description_ja = '15時以降の来店でドリンクを無料提供。レビュー作成時、ビビン麺を無料提供。', p.description_vi = 'Đến sau 3 PM được tặng đồ uống. Viết review được tặng mì trộn bibim.' WHERE pr.store_name_ko = '상도동 솥뚜껑' AND p.description = '15시 이후 방문 시, 음료수 증정 / 리뷰 작성 시, 비빔면 증정'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free topping add-on for burrito orders, excluding bacon.', p.description_ja = 'ブリトー注文時、ベーコンを除くトッピング1つ無料。', p.description_vi = 'Gọi burrito được thêm 1 topping miễn phí, trừ bacon.' WHERE pr.store_name_ko = '밀플랜비' AND p.description = '부리또 주문 시, 토핑 무료 추가 (베이컨 제외)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink for tables of 4, or 1 free bottle of soju for orders of 50,000 KRW or more.', p.description_ja = '4人テーブルにドリンクを無料提供、または50,000ウォン以上の注文で焼酎1本を無料提供。', p.description_vi = 'Bàn 4 người được tặng đồ uống, hoặc đơn từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '신의주 찹쌀순대' AND p.description = '4인 테이블 음료 증정 혹은 5만원 이상 주문 시 소주 한 병'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For payments of 30,000 KRW or more, choose one: 3 pieces of Youtiao or 1 bottle of Bing Hong Cha. Receipts must be limited to 3 or fewer.', p.description_ja = '30,000ウォン以上の決済で、油条3個または冰紅茶1本のうち1つを選択。レシートは3枚以下に限ります。', p.description_vi = 'Thanh toán từ 30.000 KRW trở lên được chọn 1 trong 2 món: 3 miếng quẩy Youtiao hoặc 1 chai Bing Hong Cha. Chỉ áp dụng khi có tối đa 3 hóa đơn.' WHERE pr.store_name_ko = '샹츠마라' AND p.description = '3만원 이상 결제 시, 유토우 3p 혹은 삥홍차 1병 (단, 영수증 3장 이하여야 함)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free bottled soft drink when ordering side dishes.', p.description_ja = 'おかず注文時、ボトルドリンクを無料提供。', p.description_vi = 'Khi gọi món ăn kèm, được tặng nước ngọt đóng chai.' WHERE pr.store_name_ko = '가치' AND p.description = '안주 주문 시 음료 1병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 30,000 KRW or more, get free muksabal. For orders of 50,000 KRW or more, get 1 free bottle of soju.', p.description_ja = '30,000ウォン以上の注文でムクサバルを無料提供。 + 50,000ウォン以上の注文で焼酎1本を無料提供。', p.description_vi = 'Đơn từ 30.000 KRW trở lên được tặng muksabal. + Đơn từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '28청춘호프포차' AND p.description = '3만원 이상 주문 시, 묵사발 증정 / 5만원 이상 주문 시, 소주 1병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文で焼酎1本を無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '젠사이야' AND p.description = '5만원 이상 주문 시, 소주 1병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off drinks.', p.description_ja = 'ドリンク10%割引。', p.description_vi = 'Giảm 10% đồ uống.' WHERE pr.store_name_ko = 'eea cafe' AND p.description = '음료 구매 시 10% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off all menu items, excluding set menus.', p.description_ja = 'セットメニューを除く全メニュー10%割引。', p.description_vi = 'Giảm 10% toàn bộ menu, không gồm set menu.' WHERE pr.store_name_ko = '에브어이브' AND p.description = '세트 메뉴 제외 전 메뉴 10% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Available at youth rates.', p.description_ja = 'Set A・B・Cは青少年料金で利用可能。', p.description_vi = 'Set A, B, C áp dụng giá thanh thiếu niên.' WHERE pr.store_name_ko = '놀숲' AND p.description = '청소년 요금 적용'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Get 5 extra songs when paying 10,000 KRW in cash.', p.description_ja = '現金10,000ウォン決済時、5曲追加提供。', p.description_vi = 'Thanh toán 10.000 KRW bằng tiền mặt được tặng thêm 5 bài hát.' WHERE pr.store_name_ko = '리코스타 코인 노래방' AND p.description = '현금 1만원 결제 시 5곡 추가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay 10,000 KRW by bank transfer or cash to receive 10 hours plus 1 free drink.', p.description_ja = '現金または口座振込で10,000ウォンをチャージすると、10時間+ドリンク1杯を提供。', p.description_vi = 'Nạp 10.000 KRW bằng tiền mặt hoặc chuyển khoản được tặng 10 giờ sử dụng và 1 đồ uống.' WHERE pr.store_name_ko = '에이플 PC방' AND p.description = '1만원 계좌이체 혹은 현금 결제 시, 10시간 + 서비스 음료 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 30,000 KRW or more, choose one: 3 pieces of Youtiao, Cha Pai, or Bing Hong Cha. Up to 3 receipts may be combined.', p.description_ja = '30,000ウォン以上の注文で、油条3個・茶π・冰紅茶のうち1つを選択。レシートは最大3枚まで合算可能。 + レシートは最大3枚まで合算可能。', p.description_vi = 'Đơn từ 30.000 KRW trở lên được chọn 1 trong các món: 3 miếng quẩy Youtiao, Cha Pai hoặc Bing Hong Cha. Có thể gộp tối đa 3 hóa đơn. + Có thể gộp tối đa 3 hóa đơn.' WHERE pr.store_name_ko = '샹츠마라' AND p.description = '3만원 이상 주문 시, 유토우 3ps or 차파이(음료) or 빙홍차(음료) +*영수증 3개까지 합치기 가능'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4 or more, get 1 free bottled soft drink. For payments of 50,000 KRW or more, get 1 free bottle of soju or 1 bottled soft drink. Benefits cannot be combined.', p.description_ja = '4人以上の来店でボトルドリンク1本を無料提供。 + 50,000ウォン以上の決済で焼酎1本またはボトルドリンク1本を無料提供。 + 1番と2番の特典は併用不可。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng 1 chai nước ngọt. + Thanh toán từ 50.000 KRW trở lên được tặng 1 chai soju hoặc 1 chai nước ngọt. + Không áp dụng đồng thời ưu đãi 1 và 2.' WHERE pr.store_name_ko = '신의주 찹쌀순대' AND p.description = '1. 4인 이상 방문 시 음료 1병 지급 +2. 5만원 이상 결제 시 소주 1병 또는 음료 1병 제공 +*1, 2번 항목 중복 적용 불가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4 or more, choose one: 1 canned soft drink or 4 fried dumplings.', p.description_ja = '4人以上の来店で、1 缶飲料または4 焼き餃子から1つ選択。', p.description_vi = 'Nhóm từ 4 người trở lên chọn 1 ưu đãi: 1 nước ngọt đóng lon hoặc 4 mandu chiên.' WHERE pr.store_name_ko = '취향' AND p.description = '4인 이상 주문 시 음료 1캔 or 군만두 4개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free topping add-on for burrito orders, excluding bacon.', p.description_ja = 'ブリトー注文時、ベーコンを除くトッピング1つ無料。', p.description_vi = 'Gọi burrito được thêm 1 topping miễn phí, trừ bacon.' WHERE pr.store_name_ko = '밀플랜비' AND p.description = '브리또 주문 시 토핑 1개 무료 (베이컨 제외)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 20,000 KRW or more, get 2 free drinks. For orders of 30,000 KRW or more, upgrade all single items to set menus.', p.description_ja = '20,000ウォン以上の注文でドリンク2杯を無料提供。 + 30,000ウォン以上の注文で単品をセットメニューに変更。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng 2 đồ uống. + Đơn từ 30.000 KRW trở lên được nâng món lẻ thành set menu.' WHERE pr.store_name_ko = '지지고' AND p.description = '2만원 이상 주문 시 음료 2개 제공 +3만원 이상 주문 시 단품을 세트로 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 500ml soft drink per table for orders of 75,000 KRW or more for groups of up to 4, or 85,000 KRW or more for groups of 5 or more.', p.description_ja = '1テーブルにつき、4人以下は75,000ウォン以上、5人以上は85,000ウォン以上の注文で500mlドリンク1本を無料提供。', p.description_vi = 'Mỗi bàn được tặng 1 đồ uống 500ml khi nhóm tối đa 4 người gọi từ 75.000 KRW trở lên, hoặc nhóm từ 5 người gọi từ 85.000 KRW trở lên.' WHERE pr.store_name_ko = '청운음식점' AND p.description = '테이블 당 4인 이하 방문 시 75,000원 이상 or 한 테이블 5인 이상 착석 후 85,000원 이상 주문 시 음료 1개(500ml) 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '500 KRW off per menu item when paying by cash or bank transfer.', p.description_ja = '現金または口座振込決済時、メニュー1品につき500ウォン割引。', p.description_vi = 'Giảm 500 KRW cho mỗi món khi thanh toán bằng tiền mặt hoặc chuyển khoản.' WHERE pr.store_name_ko = '손칼국수 ' AND p.description = '현금/계좌이체 시 메뉴당 500원 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free cheese add-on per table when ordering 2 or more servings of Dakgalbi.', p.description_ja = 'タッカルビ2人前以上注文時、テーブルごとにチーズ追加を無料提供。', p.description_vi = 'Khi gọi từ 2 phần dakgalbi trở lên, mỗi bàn được tặng phần phô mai thêm.' WHERE pr.store_name_ko = '코웍 비스트로' AND p.description = '테이블당 닭갈비 2인분 이상일 시 치즈사리 추가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off grilled dishes when paying with KakaoPay, Toss, cash, or bank transfer.', p.description_ja = '焼き物注文時、KakaoPay・Toss・現金・口座振込決済で5%割引。', p.description_vi = 'Giảm 5% món nướng khi thanh toán bằng KakaoPay, Toss, tiền mặt hoặc chuyển khoản.' WHERE pr.store_name_ko = '먹돼지' AND p.description = '구이류 주문 시, 카카오페이, 계좌이체(현금), 토스 결제 시 5% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1 free drink for every 2 people when each person orders 1 menu item. For example, 2 drinks for 4 people.', p.description_ja = '1人1メニュー注文時、2人ごとにドリンク1杯を無料提供。例:4人の場合はドリンク2杯。', p.description_vi = 'Khi mỗi người gọi 1 món, cứ 2 người được tặng 1 đồ uống. Ví dụ: 4 người được tặng 2 đồ uống.' WHERE pr.store_name_ko = '멘동' AND p.description = '1인 1메뉴 주문 시 2인당 음료 1개 (ex. 4인일 경우 음료 2개)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 1–2, get 1 canned soft drink. For groups of 3–4, get 2 canned soft drinks.', p.description_ja = '1〜2人で缶ドリンク1本を無料提供。 + 3〜4人で2 缶ドリンクを無料提供。', p.description_vi = 'Nhóm 1–2 người được tặng 1 lon nước ngọt. + Nhóm 3–4 người được tặng 2 nước ngọt đóng lon.' WHERE pr.store_name_ko = '면식당' AND p.description = '2인 이하 음료 1캔, 3~4인 음료 2캔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1.25L Pepsi Zero for every 30,000 KRW spent.', p.description_ja = '30,000ウォンごとの利用で1.25L ペプシゼロを無料提供。', p.description_vi = 'Tặng 1.25L Pepsi Zero cho mỗi 30.000 KRW chi tiêu.' WHERE pr.store_name_ko = '피자스쿨' AND p.description = '주문금액 30,000원 당 펩시 제로 1.25L 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free bottled soft drink or 1 bottle of soju for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文でボトルドリンクまたは焼酎1本を無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng nước ngọt đóng chai hoặc 1 chai soju.' WHERE pr.store_name_ko = '광어삼촌' AND p.description = '5만원 이상 주문 시 음료수 또는 소주 1병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free extra shot in one drink when ordering a total of 2 Big Americanos and/or Big Iced Teas.', p.description_ja = 'ビッグサイズアメリカーノまたはビッグサイズアイスティーを合計2杯注文時、1杯にショット1回無料追加。', p.description_vi = 'Gọi tổng cộng 2 ly Americano cỡ lớn và/hoặc trà đá cỡ lớn được thêm 1 shot miễn phí vào 1 ly.' WHERE pr.store_name_ko = '카페봄봄' AND p.description = '아메리카노 혹은 아이스티 빅사이즈 도합 2잔 주문 시 1잔 샷추가 (빅사이즈)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off all menu items, excluding set menus, for in-store payments only.', p.description_ja = '店頭決済時のみ、セットメニューを除く全メニュー10%割引。', p.description_vi = 'Giảm 10% toàn bộ menu, không gồm set menu, chỉ áp dụng khi thanh toán tại cửa hàng.' WHERE pr.store_name_ko = '에브어이브' AND p.description = '방문 결제에 한하여 세트메뉴 제외 10% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when paying by cash or bank transfer.', p.description_ja = '現金または口座振込決済時、5%割引。', p.description_vi = 'Giảm 5% khi thanh toán bằng tiền mặt hoặc chuyển khoản.' WHERE pr.store_name_ko = '상도로 3가' AND p.description = '현금 또는 계좌이체 시 5% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文でドリンクを無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng đồ uống.' WHERE pr.store_name_ko = '파동추야' AND p.description = '40,000원 이상 주문 시 음료 증정'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For cash payments of 70,000 KRW or more, choose one: Kimchi Fried Rice or Rolled Omelet. Groups excluded.', p.description_ja = '70,000ウォン以上の現金決済で、キムチチャーハンまたは卵焼きのうち1つを提供。団体は対象外。', p.description_vi = 'Thanh toán tiền mặt từ 70.000 KRW trở lên được chọn 1 món: cơm chiên kimchi hoặc trứng cuộn. Không áp dụng cho đoàn.' WHERE pr.store_name_ko = '블루힐 ' AND p.description = '70,000원 이상 현금 결제 시 김치볶음밥 또는 계란말이 제공 (단체 제외)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 50,000 KRW or more, choose one: Pineapple Sherbet, 1 bottle of soju (Chamisul/Cheoeumcheoreom), or Garlic Butter Potato.', p.description_ja = '50,000ウォン以上で、パイナップルシャーベット、焼酎1本(チャミスル/チョウムチョロム)、またはガーリックバターポテトのうち1つを選択。', p.description_vi = 'Từ 50.000 KRW trở lên được chọn 1 trong các món: sorbet dứa, 1 chai soju (Chamisul/Cheoeumcheoreom), hoặc khoai tây bơ tỏi.' WHERE pr.store_name_ko = '역전할머니 맥주' AND p.description = '5만원 이상 주문 시, 살얼음 파인애플 or 소주 한 병 (참이슬/처음처럼) or 갈릭빠다 포테이토 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay 10,000 KRW by cash or bank transfer to receive 10 hours plus 1 free drink.', p.description_ja = '現金または口座振込で10,000ウォンをチャージすると、10時間+ドリンク1杯を提供。', p.description_vi = 'Nạp 10.000 KRW bằng tiền mặt hoặc chuyển khoản được tặng 10 giờ sử dụng và 1 đồ uống.' WHERE pr.store_name_ko = '에이플 PC방' AND p.description = '현금 또는 계좌이체로 10,000원 충전 시 10시간 + 음료 1잔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Get a free soda when adding 5,000 KRW of credit. Get a free café drink when adding 10,000 KRW of credit.', p.description_ja = '5,000ウォンチャージで炭酸飲料を無料提供。 + 10,000ウォンチャージでカフェドリンクを無料提供。', p.description_vi = 'Nạp 5.000 KRW được tặng soda. + Nạp 10.000 KRW được tặng đồ uống cà phê.' WHERE pr.store_name_ko = '긱스타 PC방' AND p.description = '5,000원 충전 시 탄산음료 한 잔, 10,000원 충전 시 카페음료 한 잔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Set A, B, and C available at youth rates. All-day pass excluding drinks: 18,000 KRW.', p.description_ja = 'Set A・B・Cは青少年料金で利用可能。ドリンクなしの終日料金は18,000ウォン。', p.description_vi = 'Set A, B, C được áp dụng giá thanh thiếu niên. Vé cả ngày không bao gồm đồ uống: 18.000 KRW.' WHERE pr.store_name_ko = '놀숲' AND p.description = '1. 세트 A, B, C를 성인에서 청소년 가격으로 변경 
 +2. 온종일 요금제(음료 미포함) 18,000원'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '15% off with student ID or u-SAINT verification upon leaving.', p.description_ja = '退店時に学生証またはu-SAINT認証で15%割引。', p.description_vi = 'Giảm 15% khi xuất trình thẻ sinh viên hoặc xác minh u-SAINT lúc rời cửa hàng.' WHERE pr.store_name_ko = '히어로 보드게임 카페' AND p.description = '퇴실 시 학생증 혹은 유세인트 인증 시 15% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off meat dishes when paying by cash, bank transfer, or KakaoPay.', p.description_ja = '肉料理注文後、現金・口座振込・KakaoPay決済時5%割引。', p.description_vi = 'Giảm 5% món thịt khi thanh toán bằng tiền mặt, chuyển khoản hoặc KakaoPay.' WHERE pr.store_name_ko = '먹돼지' AND p.description = '고기류 주문 후 현금 or 계좌 이체 or 카카오페이 결제 시 5% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 1–2, get 1 bottled soft drink. For groups of 3–4, get 2 bottled soft drinks.', p.description_ja = '1〜2人でボトルドリンク1本を無料提供。 + 3〜4人で2 ボトルドリンクを無料提供。', p.description_vi = 'Nhóm 1–2 người được tặng 1 chai nước ngọt. + Nhóm 3–4 người được tặng 2 nước ngọt đóng chai.' WHERE pr.store_name_ko = '면식당' AND p.description = '2인 이하 방문 시 음료수 1병 증정 및 3인 이상 4인 이하 방문 시 음료수 2병 증정'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Choose one free item: 1 piece of Youtiao, 1 bottle of Bing Hong Cha, or 1 bottle of Cha Pai.', p.description_ja = '油条1個・冰紅茶1本・茶π1本のうち1つを無料提供。', p.description_vi = 'Được chọn 1 món miễn phí: 1 miếng quẩy Youtiao, 1 chai Bing Hong Cha hoặc 1 chai Cha Pai.' WHERE pr.store_name_ko = '샹츠마라 ' AND p.description = '유토우 1pc or 빙홍차 1병 or 차파이 1병 중 택 1 증정'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free bottled soft drink, or free Cajun Fries for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文でボトルドリンク、またはケイジャンポテトを無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng nước ngọt đóng chai, hoặc khoai tây Cajun.' WHERE pr.store_name_ko = 'BHC 치킨' AND p.description = '음료수 1병 증정 or 40,000원 이상 주문 시 케이준 후라이 증정'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free bottled soft drink for groups of 4 or more, plus 1 free bottle of soju for orders of 50,000 KRW or more.', p.description_ja = '4人以上の来店でボトルドリンク1本を無料提供。 + 50,000ウォン以上の注文で焼酎1本を無料提供。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng 1 chai nước ngọt. + Đơn từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '신의주 찹쌀순대' AND p.description = '4명 이상 방문 시 음료수 1병 증정 및 50,000원 이상 주문 시 소주 1병 증정'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free gimmari fried seaweed roll. Please request it at the time of ordering.', p.description_ja = 'キムマリ。 + 注文時にお申し出ください。', p.description_vi = 'Tặng gimmari. + Vui lòng yêu cầu ngay khi gọi món.' WHERE pr.store_name_ko = '고씨네' AND p.description = '김말이 1개 증정 *메뉴 주문과 동시에 요청해 주세요'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free bottled soft drink when ordering 2 or more main menu items.', p.description_ja = '2つ以上 メインメニュー注文時、ボトルドリンクを無料提供。', p.description_vi = 'Khi gọi 2 trở lên món chính, được tặng nước ngọt đóng chai.' WHERE pr.store_name_ko = '고추동 제면소' AND p.description = '메인메뉴 두 개 이상 주문 시 음료수 1병 증정'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free bottled soft drink plus free Bibim Noodles with a Naver review.', p.description_ja = 'ボトルドリンク1本を無料提供。Naverレビュー作成時、ビビン麺を無料提供。', p.description_vi = 'Tặng 1 chai nước ngọt. Viết review Naver được tặng mì trộn bibim.' WHERE pr.store_name_ko = '상도동 솥뚜껑' AND p.description = '음료수 1병 증정 및 네이버 리뷰 작성 시 비빔면 증정'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free cheese add-on when ordering Dakgalbi equal to the number of visitors. For example, order 4 servings for 4 people.', p.description_ja = '来店人数以上のタッカルビを注文時、チーズ追加を無料提供。例:4人来店時は4人前以上注文。', p.description_vi = 'Gọi dakgalbi bằng hoặc nhiều hơn số khách đến cửa hàng sẽ được tặng phần phô mai thêm. Ví dụ: 4 người thì gọi từ 4 phần trở lên.' WHERE pr.store_name_ko = '코웍 비스트로' AND p.description = '매장 방문 인원 수 이상 닭갈비 주문 시 치즈사리 증정 (ex. 4인 방문 시 4인분 이상 주문)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For purchases of 18,000 KRW or more, choose one: Chocolate Shell, Strawberry Shell, or Granola.', p.description_ja = '18,000ウォン以上で、チョコシェル・いちごシェル・グラノーラのうち1つを選択。', p.description_vi = 'Từ 18.000 KRW trở lên được chọn 1 trong các món: sốt phủ chocolate, sốt phủ dâu hoặc granola.' WHERE pr.store_name_ko = '요거트아이스크림의정석' AND p.description = '18,000원 이상 구매 시 초코쉘 or 딸기쉘 or 그래놀라 중 택 1 증정'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free Americano with any slice cake purchase.', p.description_ja = 'カットケーキ購入時、アメリカーノ1杯を無料提供。', p.description_vi = 'Mua miếng bánh kem được tặng 1 Americano.' WHERE pr.store_name_ko = '커피나무' AND p.description = '조각케이크 구매 시 아메리카노 1잔 증정'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 50,000 KRW or more, choose one: Pineapple Sherbet or Garlic Butter Potato.', p.description_ja = '50,000ウォン以上で、パイナップルシャーベットまたはガーリックバターポテトのうち1つを選択。', p.description_vi = 'Từ 50.000 KRW trở lên được chọn 1 trong các món: sorbet dứa hoặc khoai tây bơ tỏi.' WHERE pr.store_name_ko = '역전할머니맥주' AND p.description = '50,000원 이상 주문 시 파인애플 샤베트 or 갈릭버터 포테이토 중 택 1 증정'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free bottled soft drink per table.', p.description_ja = 'テーブルごとにボトル飲料を無料提供。', p.description_vi = 'Tặng nước ngọt đóng chai cho mỗi bàn.' WHERE pr.store_name_ko = '리얼 후라이' AND p.description = '테이블 당 음료수 1병 증정'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For cash payments of 70,000 KRW or more, choose one: Kimchi Fried Rice, Rolled Omelet, or Cocktail Soju (420ml).', p.description_ja = '70,000ウォン以上の現金決済で、キムチチャーハン・卵焼き・カクテル焼酎(420ml)のうち1つを選択。', p.description_vi = 'Thanh toán tiền mặt từ 70.000 KRW trở lên được chọn 1 món: cơm chiên kimchi, trứng cuộn hoặc soju cocktail 420ml.' WHERE pr.store_name_ko = '블루힐' AND p.description = '70,000원 이상 현금 결제 시 김치볶음밥 or 계란말이 or 칵테일 소주(420ml) 택 1 증정'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Visit before 6 PM to receive 1 bottle of soju or Soft Tofu Stew.', p.description_ja = '18時以前の来店で、焼酎1本またはスンドゥブチゲを無料提供。', p.description_vi = 'Đến trước 6 PM được tặng 1 chai soju hoặc canh đậu phụ non.' WHERE pr.store_name_ko = '28청춘호프포차' AND p.description = '18시 이전 매장 방문 시 소주 1병 or 순두부 찌개 증정'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free French Fries for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文でフライドポテトを無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng khoai tây chiên.' WHERE pr.store_name_ko = '사랑과평화' AND p.description = '40,000원 이상 주문 시 감자튀김 증정'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Get a free soda when adding 5,000 KRW of credit. Get a free café drink when adding 10,000 KRW of credit.', p.description_ja = '5,000ウォンチャージで炭酸飲料を無料提供。 + 10,000ウォンチャージでカフェドリンクを無料提供。', p.description_vi = 'Nạp 5.000 KRW được tặng soda. + Nạp 10.000 KRW được tặng đồ uống cà phê.' WHERE pr.store_name_ko = '긱스타 PC방' AND p.description = '5,000원 시간 충전 시 탄산음료 증정 및 10,000원 시간 충전 시 카페음료 증정'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Set A, B, and C available at youth rates: Set A 5,500 KRW, Set B 8,500 KRW, Set C 10,500 KRW.', p.description_ja = 'Set A・B・Cは青少年料金で利用可能:Set A 5,500ウォン、Set B 8,500ウォン、Set C 10,500ウォン。', p.description_vi = 'Set A, B, C áp dụng giá thanh thiếu niên: Set A 5.500 KRW, Set B 8.500 KRW, Set C 10.500 KRW.' WHERE pr.store_name_ko = '놀숲' AND p.description = '세트 A, B, C를 청소년 이용금액으로 적용 +set A 5,500원 +set B 8,500원 +set C 10,500원'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '15% off game fees.', p.description_ja = 'ゲーム料金15%割引。', p.description_vi = 'Giảm 15% phí chơi game.' WHERE pr.store_name_ko = '히어로 보드게임 카페' AND p.description = '게임 비용 15% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free gimmari fried seaweed roll topping with Physics Department student ID.', p.description_ja = '物理学科の学生証提示でキムマリトッピングを無料提供。', p.description_vi = 'Xuất trình thẻ sinh viên Khoa Vật lý được tặng topping gimmari.' WHERE pr.store_name_ko = '고씨네' AND p.description = '물리학과 학생증 제시하면 김말이 토핑 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'After visiting with 4 people and showing student ID, choose one per table: 4 fried dumplings or 1 soda.', p.description_ja = '4人で来店し学生証を提示すると、テーブルごとに焼き餃子4個または炭酸飲料1本のいずれかを提供。', p.description_vi = 'Nhóm 4 người đến và xuất trình thẻ sinh viên được chọn 1 ưu đãi cho mỗi bàn: 4 mandu chiên hoặc 1 soda.' WHERE pr.store_name_ko = '취향' AND p.description = '4인 방문 후 학생증 제시하면 군만두 4개 or 탄산음료 테이블 당 1개'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay 10,000 KRW to get 5 extra songs. Student ID verification with phone number and recharge amount verification required.', p.description_ja = '10,000ウォンチャージで5曲追加。携帯番号での学生証確認とチャージ金額の認証が必要。', p.description_vi = 'Nạp 10.000 KRW được thêm 5 bài hát. Cần xác minh thẻ sinh viên bằng số điện thoại và xác minh số tiền nạp.' WHERE pr.store_name_ko = '리코스타 코인 노래방' AND p.description = '1만원 충전 시, 5곡 서비스 (휴대폰 번호로 학생증 제시, 충전 금액 인증)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when paying by bank transfer or cash.', p.description_ja = '口座振込または現金決済時、5%割引。', p.description_vi = 'Giảm 5% khi thanh toán bằng chuyển khoản hoặc tiền mặt.' WHERE pr.store_name_ko = '상도로 3가' AND p.description = '계좌이체 or 현금결제 시 5% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned drinks based on group size: 1 can for 3 people, 2 cans for 6 people, and 3 cans for 9 people.', p.description_ja = '人数に応じて缶飲料を無料提供:3人は1缶、6人は2缶、9人は3缶。', p.description_vi = 'Tặng nước lon theo số người/khẩu phần: 1 lon cho 3 người, 2 lon cho 6 người, 3 lon cho 9 người.' WHERE pr.store_name_ko = '삼봉버거' AND p.description = '3인 방문 시, 음료 1캔 증정 +6인 방문 시, 음료 2캔 증정 +9인 방문 시, 음료 3캔 증정'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'When each person orders 1 menu item: 1 free canned soft drink for groups of 2 or more, or 2 free canned soft drinks for groups of 4 or more.', p.description_ja = '1人1メニュー注文時、2人以上は缶飲料1本、4人以上は缶飲料2本を提供。', p.description_vi = 'Khi mỗi người gọi 1 món: nhóm từ 2 người được tặng 1 lon nước ngọt, nhóm từ 4 người được tặng 2 lon.' WHERE pr.store_name_ko = '멘동' AND p.description = '1인 1메뉴 주문 시 2인 이상 음료수 1캔 / 4인 이상 음료수 2캔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 30,000 KRW or more, choose one: Youtiao, Cha Pai, or Bing Hong Cha. Up to 3 receipts may be combined.', p.description_ja = '30,000ウォン以上の注文で、油条・茶π・冰紅茶のうち1つを選択。レシートは最大3枚まで合算可能。 + レシートは最大3枚まで合算可能。', p.description_vi = 'Đơn từ 30.000 KRW trở lên được chọn 1 trong các món: quẩy Youtiao, Cha Pai hoặc Bing Hong Cha. Có thể gộp tối đa 3 hóa đơn. + Có thể gộp tối đa 3 hóa đơn.' WHERE pr.store_name_ko = '샹츠마라' AND p.description = '3만원 이상 주문 시 유토우 또는 음료(차파이/빙홍차) 중 1개 제공 (영수증 최대 3개까지만 취합 가능)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free topping add-on for burrito orders, excluding bacon.', p.description_ja = 'ブリトー注文時、ベーコンを除くトッピング1つ無料。', p.description_vi = 'Gọi burrito được thêm 1 topping miễn phí, trừ bacon.' WHERE pr.store_name_ko = '밀플랜비' AND p.description = '부리또 주문 시 토핑 1개 무료(베이컨 제외)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 500ml soft drink per table for orders of 75,000 KRW or more for groups of up to 4, or 85,000 KRW or more for groups of up to 5.', p.description_ja = '4人以下は75,000ウォン以上、5人以上は85,000ウォン以上の注文で、テーブルごとに500mlドリンク1本を無料提供。', p.description_vi = 'Tặng 1 nước ngọt 500ml cho mỗi bàn với đơn từ 75.000 KRW cho nhóm tối đa 4 người, hoặc từ 85.000 KRW cho nhóm từ 5 người trở lên.' WHERE pr.store_name_ko = '청운음식점' AND p.description = '한 테이블에 4인 이하 방문 후 7만 5천원 이상 주문 시 또는 한 테이블에 5인 이하 방문 후 8만 5천원 이상 주문 시 음료 1개(500ml) 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when paying with KakaoPay, applicable to meat dishes only.', p.description_ja = 'KakaoPay決済時、肉料理5%割引。', p.description_vi = 'Giảm 5% món thịt khi thanh toán bằng KakaoPay.' WHERE pr.store_name_ko = '먹돼지' AND p.description = '카카오페이로 결제 시 5% 할인 (고기류 주문 시에만 해당)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free French Fries when 2 people visit and order 2 or more chickens.', p.description_ja = '2名で来店しチキン2羽以上注文時、フライドポテトを無料提供。', p.description_vi = '2 người đến và gọi từ 2 phần gà nguyên con trở lên được tặng khoai tây chiên.' WHERE pr.store_name_ko = '미쳐버린 파닭' AND p.description = '2인 방문 후 두 마리 이상 주문 시 감자튀김 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 50,000 KRW or more, choose one: 1 bottle of soju (Chamisul/Cheoeumcheoreom) or Garlic Butter Potato.', p.description_ja = '50,000ウォン以上の注文で、焼酎1本(チャミスル/チョウムチョロム)またはガーリックバターポテトのうち1つを選択。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được chọn 1 món: 1 chai soju (Chamisul/Cheoeumcheoreom) hoặc khoai tây bơ tỏi.' WHERE pr.store_name_ko = '역전할머니맥주' AND p.description = '5만원 이상 주문 시 소주 한 병(참이슬/처음처럼) 또는 갈릭빠다포테이토 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned soft drink for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文で缶ドリンクを無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng nước ngọt đóng lon.' WHERE pr.store_name_ko = '파동추야' AND p.description = '4만원 이상 주문 시 음료수 1캔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 canned soft drink per table.', p.description_ja = 'テーブルごとに1 缶飲料を無料提供。', p.description_vi = 'Tặng 1 nước ngọt đóng lon cho mỗi bàn.' WHERE pr.store_name_ko = '리얼후라이' AND p.description = '테이블 당 음료수 1캔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off per table when writing a Naver receipt review. Payment must be made at the POS, not the kiosk.', p.description_ja = 'Naverレシートレビュー作成時、テーブルごとに 10%割引。 + キオスクではなくPOSでの決済が必要。', p.description_vi = 'Giảm 10% cho mỗi bàn khi viết đánh giá hóa đơn Naver. + Phải thanh toán tại POS, không áp dụng khi thanh toán bằng kiosk.' WHERE pr.store_name_ko = '미태리' AND p.description = '네이버 영수증 리뷰 작성 시 테이블 한 곳 당 10% 할인 (키오스크가 아닌 포스기에서 결제하여야 함)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 gimmari fried seaweed roll with AI College student ID verification. One fried seaweed roll per verified student. Please verify the partnership and request it immediately after ordering. Requests made after some time may be declined.', p.description_ja = 'AI大学の学生証認証時、キムマリ1個を無料提供。認証した学生1名につき1個提供。注文直後に提携認証を行い、キムマリをお申し出ください。時間が経過した後の申し出は断られる場合があります。', p.description_vi = 'Xác minh thẻ sinh viên College of AI được tặng 1 gimmari. Mỗi sinh viên đã xác minh được 1 cái. Vui lòng xác minh ưu đãi và yêu cầu gimmari ngay sau khi gọi món; yêu cầu muộn có thể bị từ chối.' WHERE pr.store_name_ko = '고씨네' AND p.description = 'AI대학 학생증 인증 시 김말이 1개 제공 (학생증 인증 N명당 N개 제공) (주문 직후 제휴 인증하고 김말이 요청해야 함. 주문 시간 경과 후 제휴 요청 시 거절할 수 있음)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Get a free soda when adding 5,000 KRW of credit. Choose one free drink when adding 10,000 KRW of credit: soda, Americano, or iced tea.', p.description_ja = '5,000ウォンチャージで炭酸飲料1杯を無料提供。 + 10,000ウォンチャージで炭酸飲料・アメリカーノ・アイスティーのうち1杯を無料提供。', p.description_vi = 'Nạp 5.000 KRW được tặng 1 soda. + Nạp 10.000 KRW được chọn 1 đồ uống miễn phí: soda, Americano hoặc trà đá.' WHERE pr.store_name_ko = '긱스타 PC방' AND p.description = '5,000원 충전 시 탄산음료 1개 제공 / 10,000원 충전 시 탄산음료, 아메리카노, 아이스티 중 1개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay 10,000 KRW by cash or bank transfer to receive 10 hours plus 1 free drink. Drink options: iced tea, dabang-style coffee, Americano, or soda.', p.description_ja = '現金または口座振込で10,000ウォンをチャージすると、10時間+ドリンク1杯を提供。 ドリンクはアイスティー・ダバンコーヒー・アメリカーノ・炭酸飲料から選択。', p.description_vi = 'Nạp 10.000 KRW bằng tiền mặt hoặc chuyển khoản được tặng 10 giờ sử dụng và 1 đồ uống. Có thể chọn đồ uống: trà đá, cà phê kiểu dabang, Americano hoặc soda.' WHERE pr.store_name_ko = '에이플 PC방' AND p.description = '현금 또는 계좌이체 10,000원 충전 시 10시간+음료증정(아이스티/다방커피/아메리카노/탄산)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 1–2, get 1 canned soft drink. For groups of 3–4, get 2 canned soft drinks.', p.description_ja = '1〜2人で缶ドリンク1本を無料提供。 + 3〜4人で2 缶ドリンクを無料提供。', p.description_vi = 'Nhóm 1–2 người được tặng 1 lon nước ngọt. + Nhóm 3–4 người được tặng 2 nước ngọt đóng lon.' WHERE pr.store_name_ko = '면식당' AND p.description = '2인 이하 방문 시 음료수 1캔 / 3~4인 방문 시 음료수 2캔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4 or more, get 1 canned soft drink. Or, for groups of 4 or more spending 50,000 KRW or more, get 1 free bottle of soju.', p.description_ja = '4人以上で缶ドリンク1本を無料提供。 + また、4人以上で50,000ウォン以上利用時、焼酎1本を無料提供。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng 1 lon nước ngọt. + Hoặc nhóm từ 4 người trở lên chi từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '신의주 찹쌀순대' AND p.description = '4인 이상 주문 시 음료수 1캔 제공 또는 4인 이상 방문 후 5만원 이상 주문 시 소주 한 병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free extra shot in one of the two drinks when ordering either 2 Big Americanos, 2 Iced Teas, or 1 Big Americano plus 1 Iced Tea.', p.description_ja = 'ビッグサイズアメリカーノ2杯、アイスティー2杯、またはビッグサイズアメリカーノ1杯+アイスティー1杯注文時、2杯のうち1杯にショット1回無料追加。', p.description_vi = 'Gọi 2 Americano cỡ lớn, 2 trà đá hoặc 1 Americano cỡ lớn + 1 trà đá được thêm 1 shot miễn phí vào 1 trong 2 ly.' WHERE pr.store_name_ko = '카페봄봄' AND p.description = '아메리카노 빅사이즈 2잔'' 또는 ''아이스티 2잔'' 또는 ''아메리카노 빅사이즈 1잔 + 아이스티 1잔'' 주문 시 두 잔 중 한 잔에 샷 추가 1회 무료'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Add 30g of chicken breast or smoked duck topping when ordering a main topping, excluding side menus.', p.description_ja = 'メイントッピング注文時(サイドメニュー除く)、鶏むね肉または燻製鴨トッピング30gを追加提供。', p.description_vi = 'Khi gọi topping chính, được thêm 30g topping ức gà hoặc vịt hun khói, không áp dụng cho món phụ.' WHERE pr.store_name_ko = '포케올데이' AND p.description = '메인 토핑 주문 시(사이드 메뉴 제외) 닭가슴살 또는 훈제오리 토핑 30g 추가 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4 or more, choose one: 1 serving of hot-stone soupy tteokbokki or 500ml cola.', p.description_ja = '4人以上の来店で、石鍋スープトッポッキ1人前またはコーラ500mlのうち1つを選択。', p.description_vi = 'Nhóm từ 4 người trở lên được chọn 1 món: 1 phần tteokbokki nước trong nồi đá hoặc cola 500ml.' WHERE pr.store_name_ko = '파라다이스' AND p.description = '4인 이상 방문 시 돌솥 국물 떡볶이 1인분 또는 콜라 500ml 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '15% off game fees.', p.description_ja = 'ゲーム料金15%割引。', p.description_vi = 'Giảm 15% phí chơi game.' WHERE pr.store_name_ko = '히어로 보드게임 카페' AND p.description = '게임비 15% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when paying by bank transfer.', p.description_ja = '口座振込決済時、5%割引。', p.description_vi = 'Giảm 5% khi thanh toán bằng chuyển khoản.' WHERE pr.store_name_ko = '인쌩맥주' AND p.description = '계좌이체 결제 시 5% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4, choose one: 1 canned soft drink, or Kimchi Fried Rice/Rolled Omelet for cash payments of 70,000 KRW or more.', p.description_ja = '4人来店時は缶ドリンク1本、または70,000ウォン以上の現金決済時はキムチチャーハン/卵焼きのうち1つを選択。', p.description_vi = 'Nhóm 4 người được chọn 1 lon nước ngọt; hoặc nếu thanh toán tiền mặt từ 70.000 KRW trở lên, được chọn cơm chiên kimchi hoặc trứng cuộn.' WHERE pr.store_name_ko = '블루힐' AND p.description = '4인 방문 시 음료수 1캔 제공 또는 7만원 이상 현금 결제 시 김치볶음밥 또는 계란말이 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned drinks based on order size: 1 can for orders of 3 or more people, 2 cans for 6 or more, and 3 cans for 9 or more.', p.description_ja = '人数に応じて缶飲料を無料提供:3人は1缶、6人は2缶、9人は3缶。', p.description_vi = 'Tặng nước lon theo số người/khẩu phần: 1 lon cho 3 người, 2 lon cho 6 người, 3 lon cho 9 người.' WHERE pr.store_name_ko = '삼봉버거' AND p.description = '3인 이상 주문 시 음료캔 1개 제공 / 6인 이상 주문 시 음료캔 2개 제공 / 9인 이상 주문 시 음료캔 3개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned drinks based on order size: 1 can for orders of 3 or more people, 2 cans for 6 or more, and 3 cans for 9 or more.', p.description_ja = '人数に応じて缶飲料を無料提供:3人は1缶、6人は2缶、9人は3缶。', p.description_vi = 'Tặng nước lon theo số người/khẩu phần: 1 lon cho 3 người, 2 lon cho 6 người, 3 lon cho 9 người.' WHERE pr.store_name_ko = '핵밥' AND p.description = '3인 이상 주문 시 음료캔 1개 제공 / 6인 이상 주문 시 음료캔 2개 제공 / 9인 이상 주문 시 음료캔 3개 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay 10,000 KRW by bank transfer or cash at the counter, then text the owner “I’m an AI College student, and I recharged 10,000 KRW” to get 5 extra songs.', p.description_ja = '口座振込またはカウンターで現金10,000ウォンをチャージ後、店主に「AI大学の在学生で、10,000ウォンチャージしました」と送信すると、5曲追加提供。', p.description_vi = 'Nạp 10.000 KRW bằng chuyển khoản hoặc tiền mặt tại quầy, sau đó nhắn cho chủ quán “Tôi là sinh viên College of AI và đã nạp 10.000 KRW” để được tặng thêm 5 bài hát.' WHERE pr.store_name_ko = '리코스타 코인노래방' AND p.description = '계좌이체 또는 카운터에서 현금으로 10,000원 충전 후 사장님께 문자로 "AI대학 재학생인데, 10,000원 충전했습니다"라고 전송 시 노래 5곡 추가 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free soda with takeout single-item orders. Double Cheeseburger Set discounted from 10,900 KRW to 9,900 KRW.', p.description_ja = 'テイクアウト 単品注文で炭酸飲料を無料提供。 + ダブルチーズバーガーセットは9,900ウォン。単品テイクアウト注文時はカップドリンク無料。', p.description_vi = 'Tặng soda khi mang đi đơn món lẻ. + Set Double Cheeseburger giá 9.900 KRW, kèm đồ uống ly miễn phí chỉ cho đơn món lẻ mang đi.' WHERE pr.store_name_ko = '크라이치즈버거' AND p.description = '단품 포장 주문 시 탄산음료 1잔 제공 더블치즈버거세트 할인 (10,900원 -> 9,900원)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文で焼酎1本を無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '숯가마바베큐치킨' AND p.description = '4만 원 이상 주문 시 소주 1병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 50,000 KRW or less, get a free soft drink. For orders of 50,000 KRW or more, get a free alcoholic beverage. For orders of 100,000 KRW or more, get 10% off.', p.description_ja = '50,000ウォン以下の注文でソフトドリンク提供。50,000ウォン以上の注文で酒類提供。100,000ウォン以上の注文で10%割引。', p.description_vi = 'Đơn từ 50.000 KRW trở xuống được tặng nước ngọt. Đơn từ 50.000 KRW trở lên được tặng đồ uống có cồn. Đơn từ 100.000 KRW trở lên được giảm 10%.' WHERE pr.store_name_ko = '논두렁갈비' AND p.description = '5만 원 이하 음료 제공 / 5만 원 이상 주류 제공 / 10만 원 이상 주문 시 10% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned soft drink. Free minari with a receipt review.', p.description_ja = '缶ドリンク1本を無料提供。レシートレビュー作成時、セリを無料提供。', p.description_vi = 'Tặng 1 lon nước ngọt. Viết review hóa đơn được tặng rau cần nước.' WHERE pr.store_name_ko = '상도동솥뚜껑' AND p.description = '음료수 1캔 제공 / 영수증 리뷰 시 미나리 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free muksabal for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文でムクサバルを無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng muksabal.' WHERE pr.store_name_ko = '28청춘호프포차' AND p.description = '5만 원 이상 주문 시 묵사발 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free cheese balls for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文でチーズボールを無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng cheese ball.' WHERE pr.store_name_ko = '리얼후라이' AND p.description = '5만 원 이상 주문 시 치즈볼 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free popcorn for orders of 20,000 KRW or more.', p.description_ja = '20,000ウォン以上の注文でポップコーンを無料提供。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng bắp rang.' WHERE pr.store_name_ko = '씨밤바베' AND p.description = '2만 원 이상 주문 시 팝콘 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free ramyeon snack for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文でラーメンスナックを無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng snack ramyeon.' WHERE pr.store_name_ko = '엉클호프' AND p.description = '4만 원 이상 주문 시 라면땅 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned soft drink for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文で缶ドリンクを無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng nước ngọt đóng lon.' WHERE pr.store_name_ko = '블루힐' AND p.description = '5만 원 이상 주문 시 음료 1캔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when paying by cash or bank transfer.', p.description_ja = '現金または口座振込決済時、5%割引。', p.description_vi = 'Giảm 5% khi thanh toán bằng tiền mặt hoặc chuyển khoản.' WHERE pr.store_name_ko = '상도로3가' AND p.description = '현금 / 계좌이체 시 5% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned soft drink for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文で缶ドリンクを無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng nước ngọt đóng lon.' WHERE pr.store_name_ko = '역전할머니맥주' AND p.description = '5만 원 이상 주문 시 음료 1캔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文で焼酎1本を無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '젠사이야' AND p.description = '4만 원 이상 주문 시 소주 1병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned soft drink for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文で缶ドリンクを無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng nước ngọt đóng lon.' WHERE pr.store_name_ko = '짚동가리쌩주' AND p.description = '5만 원 이상 주문 시 음료 1캔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned soft drink for dine-in orders of 75,000 KRW or more for groups of up to 4, or 85,000 KRW or more for groups of up to 5.', p.description_ja = '店内飲食で4人以下は75,000ウォン以上、5人以下は85,000ウォン以上の注文で缶飲料を無料提供。', p.description_vi = 'Tặng nước ngọt đóng lon cho đơn ăn tại chỗ từ 75.000 KRW trở lên với nhóm tối đa 4 người, hoặc từ 85.000 KRW trở lên với nhóm tối đa 5 người.' WHERE pr.store_name_ko = '청운음식점' AND p.description = '4인 이하 7만 5천 원 / 5인 이하 8만 5천 원 이상 주문 시 음료 1캔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文で焼酎1本を無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '파동추야' AND p.description = '5만 원 이상 주문 시 소주 1병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju per table for groups of 3 or more.', p.description_ja = '3人以上の来店で、テーブルごとに焼酎1本を無料提供。', p.description_vi = 'Nhóm từ 3 người trở lên được tặng 1 chai soju cho mỗi bàn.' WHERE pr.store_name_ko = '인쌩맥주' AND p.description = '3인 이상 테이블당 소주 1병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free extra shot when ordering 2 Big Size drinks.', p.description_ja = 'ビッグサイズドリンク2杯注文時、ショット1回無料追加。', p.description_vi = 'Gọi 2 đồ uống cỡ lớn được thêm 1 shot miễn phí.' WHERE pr.store_name_ko = '카페봄봄' AND p.description = '빅사이즈 2잔 주문 시 샷 추가'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free shell topping for orders of 18,000 KRW or more.', p.description_ja = '18,000ウォン以上の注文でシェルトッピングを無料提供。', p.description_vi = 'Đơn từ 18.000 KRW trở lên được tặng topping shell.' WHERE pr.store_name_ko = '요거트아이스크림의정석' AND p.description = '1만 8천 원 이상 주문 시 쉘 메뉴 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '15% off usage fees.', p.description_ja = '利用料金15%割引。', p.description_vi = 'Giảm 15% phí sử dụng.' WHERE pr.store_name_ko = '히어로보드게임카페' AND p.description = '이용료 15% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off all menu items for dine-in orders.', p.description_ja = '店内飲食時、全メニュー10%割引。', p.description_vi = 'Giảm 10% toàn bộ menu khi ăn tại chỗ.' WHERE pr.store_name_ko = '다성반점' AND p.description = '방문 식사 시 전 메뉴 10% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '4,000 KRW off 4 selected items, including the Bulgogi Lunch Box for One.', p.description_ja = '一人前プルゴギ弁当を含む対象4品を4,000ウォン割引。', p.description_vi = 'Giảm 4.000 KRW cho 4 món được chọn, bao gồm hộp cơm bulgogi một người.' WHERE pr.store_name_ko = '직화삼겹직구삼' AND p.description = '혼밥불고기도시락 등 4종 4천 원 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5,000 KRW off all tangsuyuk sweet-and-sour pork items.', p.description_ja = '全酢豚メニュー 5,000ウォン割引。', p.description_vi = 'Giảm 5.000 KRW cho all món tangsuyuk.' WHERE pr.store_name_ko = '리얼안심탕수육' AND p.description = '탕수육 전 메뉴 5천 원 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off 9 selected items, including traditional porridge and fried rice.', p.description_ja = '伝統粥・チャーハンを含む9種を10%割引。', p.description_vi = 'Giảm 10% cho 9 món, gồm cháo truyền thống và cơm chiên.' WHERE pr.store_name_ko = '도담죽' AND p.description = '전통죽 / 볶음밥 9종 10% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1,000 KRW off all meal menu items.', p.description_ja = '全食事 メニュー 1,000ウォン割引。', p.description_vi = 'Giảm 1.000 KRW cho all bữa ăn món trong menu.' WHERE pr.store_name_ko = '찌개랑' AND p.description = '모든 식사 메뉴 1천 원 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free soft drink when dining in, 1 drink per 2 people.', p.description_ja = '店内飲食時、2人につきドリンク1本を提供。', p.description_vi = 'Tặng nước ngọt khi ăn tại chỗ, 1 đồ uống cho mỗi 2 người.' WHERE pr.store_name_ko = '고모밥죠' AND p.description = '식사 시 음료 제공 (2인 1개)'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 30,000 KRW or more, get 1 free bottle of alcoholic beverage. Free canned soft drink when ordering a meal.', p.description_ja = '30,000ウォン以上の注文で酒類1本を無料提供。食事注文時、缶ドリンク1本を無料提供。', p.description_vi = 'Đơn từ 30.000 KRW trở lên được tặng 1 chai đồ uống có cồn. Gọi món ăn được tặng 1 lon nước ngọt.' WHERE pr.store_name_ko = '엉터리생고기' AND p.description = '1. 3만 원 이상 주문 시 주류 1병 제공 +2. 식사 주문 시 음료 1캔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free tteokbokki when ordering a meal.', p.description_ja = '食事注文時、トッポッキを無料提供。', p.description_vi = 'Gọi món ăn được tặng tteokbokki.' WHERE pr.store_name_ko = '강남분식' AND p.description = '식사 주문 시 떡볶이 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off 4 types of Oranda, a traditional Korean snack.', p.description_ja = '韓国伝統菓子オランダ4種を10%割引。', p.description_vi = 'Giảm 10% cho 4 loại Oranda, món bánh truyền thống Hàn Quốc.' WHERE pr.store_name_ko = '미화담' AND p.description = '오란다(전통과자) 4종 10% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned soft drink for orders of 10,000 KRW or more.', p.description_ja = '10,000ウォン以上の注文で缶ドリンクを無料提供。', p.description_vi = 'Đơn từ 10.000 KRW trở lên được tặng nước ngọt đóng lon.' WHERE pr.store_name_ko = '나비루' AND p.description = '1만 원 이상 주문 시 음료 1캔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '20% off all items for takeout orders.', p.description_ja = '訪問テイクアウト時、全品20%割引。', p.description_vi = 'Giảm 20% tất cả sản phẩm khi mua mang đi tại cửa hàng.' WHERE pr.store_name_ko = '파스타어때 ' AND p.description = '방문 포장 시 전 품목 20% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off purchases of 5,000 KRW or more.', p.description_ja = '5,000ウォン以上の購入で10%割引。', p.description_vi = 'Mua từ 5.000 KRW trở lên được giảm 10%.' WHERE pr.store_name_ko = '종로떡집' AND p.description = '5천 원 이상 구매 시 10% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 500ml soft drink for phone orders. 7,000 KRW off in-store takeout orders.', p.description_ja = '電話注文時500mlドリンク1本提供。来店テイクアウト時7,000ウォン割引。', p.description_vi = 'Tặng 1 nước ngọt 500ml cho đơn đặt qua điện thoại. Giảm 7.000 KRW khi đến cửa hàng lấy mang đi.' WHERE pr.store_name_ko = '호미스 피자' AND p.description = '1. 전화 주문 시 음료 500ml 1병 제공 +2. 방문 포장 시 7천 원 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '4,000 KRW off takeout orders.', p.description_ja = 'テイクアウト注文は4,000ウォン割引。', p.description_vi = 'Giảm 4.000 KRW cho đơn mang đi.' WHERE pr.store_name_ko = '두찜' AND p.description = '방문 포장 시 4천 원 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when ordering meals.', p.description_ja = '食事注文時、5%割引。', p.description_vi = 'Giảm 5% khi gọi món ăn.' WHERE pr.store_name_ko = '프라이밋 스테이크하우스' AND p.description = '식사 주문 시 5% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off all items when visiting in person.', p.description_ja = '来店時、全品10%割引。', p.description_vi = 'Giảm 10% tất cả sản phẩm khi đến cửa hàng.' WHERE pr.store_name_ko = '족발천국' AND p.description = '방문 시 전 품목 10% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off all menu items.', p.description_ja = '全メニュー10%割引。', p.description_vi = 'Giảm 10% toàn bộ menu.' WHERE pr.store_name_ko = '오고또오고 포차' AND p.description = '전 메뉴 10% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of alcoholic beverage for orders of 20,000 KRW or more.', p.description_ja = '20,000ウォン以上の注文で酒類1本を無料提供。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng 1 chai đồ uống có cồn.' WHERE pr.store_name_ko = '부엉이포차' AND p.description = '2만 원 이상 주문 시 주류 1병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 500ml beer for orders of 20,000 KRW or more.', p.description_ja = '20,000ウォン以上の注文で500mlビールを無料提供。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng 1 ly bia 500ml.' WHERE pr.store_name_ko = '상도 타코야끼' AND p.description = '2만 원 이상 주문 시 맥주 500cc 1잔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of alcoholic beverage for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文で酒類1本を無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng 1 chai đồ uống có cồn.' WHERE pr.store_name_ko = '광어삼촌' AND p.description = '4만 원 이상 주문 시 주류 1병 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '3,000 KRW off when purchasing 2 bottles of wine. Limited to once per person; membership/reward registration required.', p.description_ja = 'ワイン2本購入時、3,000ウォン割引。 + 1人1回限定。ポイント登録が必要。', p.description_vi = 'Giảm 3.000 KRW khi mua 2 chai rượu vang. + Giới hạn 1 lần mỗi người; cần đăng ký tích điểm/thành viên.' WHERE pr.store_name_ko = '돌고래보틀' AND p.description = '와인 2병 구매 시 3천 원 할인 *1인 1회 한정, 적립 필수'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1,000 KRW off when ordering bingsu for 2.', p.description_ja = '2人用かき氷注文時1,000ウォン割引。', p.description_vi = 'Giảm 1.000 KRW khi gọi bingsu cho 2 người.' WHERE pr.store_name_ko = '달달프루츠' AND p.description = '2인 빙수 주문 시 1천 원 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free Americano for orders of 10,000 KRW or more.', p.description_ja = '10,000ウォン以上の注文でアメリカーノを無料提供。', p.description_vi = 'Đơn từ 10.000 KRW trở lên được tặng Americano.' WHERE pr.store_name_ko = '멜로드' AND p.description = '1만 원 이상 주문 시 아메리카노 1잔 제공'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off all side dishes plus 3% point rewards.', p.description_ja = 'おかず全品10%割引+ポイント3%還元。', p.description_vi = 'Giảm 10% toàn bộ món ăn kèm và tích điểm 3%.' WHERE pr.store_name_ko = '반찬나라' AND p.description = '반찬 구매 시 전 품목 10% 할인 및 포인트 3% 적립'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off side dish purchases of 10,000 KRW or more.', p.description_ja = 'おかず10,000ウォン以上購入時、10%割引。', p.description_vi = 'Mua món ăn kèm từ 10.000 KRW trở lên được giảm 10%.' WHERE pr.store_name_ko = '별별찬방' AND p.description = '반찬 1만 원 이상 구매 시 10% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off side dish purchases of 10,000 KRW or more.', p.description_ja = 'おかず10,000ウォン以上購入時、10%割引。', p.description_vi = 'Mua món ăn kèm từ 10.000 KRW trở lên được giảm 10%.' WHERE pr.store_name_ko = '여기반찬가게' AND p.description = '반찬 1만 원 이상 구매 시 10% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off side dish purchases of 10,000 KRW or more.', p.description_ja = 'おかず10,000ウォン以上購入時、10%割引。', p.description_vi = 'Mua món ăn kèm từ 10.000 KRW trở lên được giảm 10%.' WHERE pr.store_name_ko = '타마르부엌' AND p.description = '반찬 1만 원 이상 구매 시 10% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off fruits and vegetables.', p.description_ja = '果物・野菜 10%割引。', p.description_vi = 'Giảm 10% trái cây và rau củ.' WHERE pr.store_name_ko = '우리농수산물' AND p.description = '과일 / 채소 구매 시 10% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off fruits and vegetables.', p.description_ja = '果物・野菜 10%割引。', p.description_vi = 'Giảm 10% trái cây và rau củ.' WHERE pr.store_name_ko = '은혜야채가게' AND p.description = '과일 / 채소 구매 시 10% 할인'; +UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off purchases of 10,000 KRW or more.', p.description_ja = '10,000ウォン以上の購入で10%割引。', p.description_vi = 'Mua từ 10.000 KRW trở lên được giảm 10%.' WHERE pr.store_name_ko = '신앙촌상회' AND p.description = '1만 원 이상 구매 시 10% 할인'; From a9adae02d632c93870d35846762c3e77b05915d5 Mon Sep 17 00:00:00 2001 From: Eunseo Song <162149585+eunseo9311@users.noreply.github.com> Date: Sun, 28 Jun 2026 06:32:18 +0900 Subject: [PATCH 371/399] =?UTF-8?q?feat:=20=EA=B3=A0=EC=A0=95=EB=A9=94?= =?UTF-8?q?=EB=89=B4=20=EB=8B=A4=EA=B5=AD=EC=96=B4=20=EC=A7=80=EC=9B=90=20?= =?UTF-8?q?=EB=B0=8F=2026-1=ED=95=99=EA=B8=B0=20=EC=8A=A4=EB=82=B5?= =?UTF-8?q?=EC=BD=94=EB=84=88=20=EB=A9=94=EB=89=B4=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Menu 엔티티에 name_en/ja/vi 필드 추가 및 Localizable 구현 - V15: menu 테이블에 name_en/ja/vi VARCHAR 컬럼 추가 - V16: 라면→숭실라면 이름 변경, 쌀국수·소떡소떡 신규 추가, 냉모밀 discontinued 처리 - V17: 스낵코너 고정메뉴 23개 EN/JA/VI 번역 데이터 주입 - MenuResponse.from()에 Language 파라미터 추가 - MenuService.getMenusByRestaurant()에 Language 파라미터 추가 - MenuController GET /menus에 language 선택적 쿼리 파라미터 추가 --- .../ssu/eatssu/domain/menu/entity/Menu.java | 14 ++++++++++- .../dto/response/MenuResponse.java | 5 ++-- .../presentation/rest/MenuController.java | 6 +++-- .../domain/menu/service/MenuService.java | 12 ++++++---- .../V15__add_i18n_columns_to_menu.sql | 4 ++++ .../V16__update_snack_corner_menus_26_1.sql | 9 +++++++ .../V17__populate_i18n_menu_name.sql | 24 +++++++++++++++++++ 7 files changed, 65 insertions(+), 9 deletions(-) create mode 100644 src/main/resources/db/migration/V15__add_i18n_columns_to_menu.sql create mode 100644 src/main/resources/db/migration/V16__update_snack_corner_menus_26_1.sql create mode 100644 src/main/resources/db/migration/V17__populate_i18n_menu_name.sql diff --git a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java index a64d9c56..be352d8e 100644 --- a/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java +++ b/src/main/java/ssu/eatssu/domain/menu/entity/Menu.java @@ -19,6 +19,8 @@ import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.review.entity.Review; import ssu.eatssu.domain.review.entity.Reviews; +import ssu.eatssu.domain.user.entity.Language; +import ssu.eatssu.global.i18n.Localizable; import java.util.ArrayList; import java.util.List; @@ -26,7 +28,7 @@ @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class Menu { +public class Menu implements Localizable { // TODO : 삭제되어야 함 @Embedded @@ -40,6 +42,12 @@ public class Menu { @Column(name = "menu_id") private Long id; private String name; + @Column(name = "name_en") + private String nameEn; + @Column(name = "name_ja") + private String nameJa; + @Column(name = "name_vi") + private String nameVi; private Integer price; @Enumerated(EnumType.STRING) private Restaurant restaurant; @@ -67,6 +75,10 @@ public static Menu createFixed(String name, Restaurant restaurant, Integer price return new Menu(name, restaurant, price, category); } + public String getNameByLanguage(Language language) { + return getLocalizedValue(language, name, nameEn, nameJa, nameVi); + } + public void addReview(Review review) { reviews.add(review); } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java index bd3f6e87..2c28c8aa 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/dto/response/MenuResponse.java @@ -5,6 +5,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import ssu.eatssu.domain.menu.entity.Menu; +import ssu.eatssu.domain.user.entity.Language; @Getter @NoArgsConstructor @@ -24,7 +25,7 @@ public class MenuResponse { @Schema(description = "메뉴 평점 (평점이 없으면 null) ", example = "4.4") private Double rating; - public static MenuResponse from(Menu menu, Double rating) { - return new MenuResponse(menu.getId(), menu.getName(), menu.getPrice(), rating); + public static MenuResponse from(Menu menu, Double rating, Language language) { + return new MenuResponse(menu.getId(), menu.getNameByLanguage(language), menu.getPrice(), rating); } } diff --git a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java index 7c125034..008cf8ca 100644 --- a/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java +++ b/src/main/java/ssu/eatssu/domain/menu/presentation/rest/MenuController.java @@ -14,6 +14,7 @@ import ssu.eatssu.domain.menu.presentation.dto.response.MenuRestaurantResponse; import ssu.eatssu.domain.menu.service.MenuService; import ssu.eatssu.domain.restaurant.entity.Restaurant; +import ssu.eatssu.domain.user.entity.Language; import ssu.eatssu.global.handler.response.BaseResponse; @RestController @@ -38,8 +39,9 @@ public class MenuController { }) @GetMapping public BaseResponse getMenus( - @RequestParam("restaurant") Restaurant restaurant) { + @RequestParam("restaurant") Restaurant restaurant, + @RequestParam(required = false) Language language) { - return BaseResponse.success(menuService.getMenusByRestaurant(restaurant)); + return BaseResponse.success(menuService.getMenusByRestaurant(restaurant, language)); } } diff --git a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java index 8b6a67e2..2fbd0025 100644 --- a/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java +++ b/src/main/java/ssu/eatssu/domain/menu/service/MenuService.java @@ -14,6 +14,7 @@ import ssu.eatssu.domain.menu.presentation.dto.response.MenuRestaurantResponse; import ssu.eatssu.domain.restaurant.entity.Restaurant; import ssu.eatssu.domain.restaurant.entity.RestaurantType; +import ssu.eatssu.domain.user.entity.Language; import ssu.eatssu.global.handler.response.BaseException; import ssu.eatssu.global.handler.response.BaseResponseStatus; @@ -37,7 +38,7 @@ private static void validateMenuRestaurant(Restaurant restaurant) { } } - public MenuRestaurantResponse getMenusByRestaurant(Restaurant restaurant) { + public MenuRestaurantResponse getMenusByRestaurant(Restaurant restaurant, Language language) { validateMenuRestaurant(restaurant); List categories = findCategoriesByRestaurant(restaurant); @@ -46,7 +47,8 @@ public MenuRestaurantResponse getMenusByRestaurant(Restaurant restaurant) { for (MenuCategory category : categories) { List menus = getMenuResponsesByRestaurantAndCategory(restaurant, - category); + category, + language); response.add(CategoryWithMenusResponse.of(category.getName(), menus)); } @@ -59,12 +61,14 @@ private List findCategoriesByRestaurant(Restaurant restaurant) { @NotNull private List getMenuResponsesByRestaurantAndCategory(Restaurant restaurant, - MenuCategory category) { + MenuCategory category, + Language language) { return menuRepository.findAllByRestaurantAndCategory(restaurant, category) .stream() .filter(Menu::isContinued) .map(menu -> MenuResponse.from(menu, - menuRatingService.getMainRatingAverage(menu.getId()))) + menuRatingService.getMainRatingAverage(menu.getId()), + language)) .toList(); } diff --git a/src/main/resources/db/migration/V15__add_i18n_columns_to_menu.sql b/src/main/resources/db/migration/V15__add_i18n_columns_to_menu.sql new file mode 100644 index 00000000..5c1a786a --- /dev/null +++ b/src/main/resources/db/migration/V15__add_i18n_columns_to_menu.sql @@ -0,0 +1,4 @@ +ALTER TABLE menu + ADD COLUMN name_en VARCHAR(255) NULL, + ADD COLUMN name_ja VARCHAR(255) NULL, + ADD COLUMN name_vi VARCHAR(255) NULL; \ No newline at end of file diff --git a/src/main/resources/db/migration/V16__update_snack_corner_menus_26_1.sql b/src/main/resources/db/migration/V16__update_snack_corner_menus_26_1.sql new file mode 100644 index 00000000..f2af541f --- /dev/null +++ b/src/main/resources/db/migration/V16__update_snack_corner_menus_26_1.sql @@ -0,0 +1,9 @@ +UPDATE menu SET name = '숭실라면' WHERE name = '라면' AND restaurant = 'SNACK_CORNER'; + +INSERT INTO menu (name, name_en, name_ja, name_vi, restaurant, price, is_discontinued, like_count, unlike_count, menu_category_id) +VALUES ('쌀국수', 'Rice Noodles', 'フォー', 'Phở', 'SNACK_CORNER', 5000, false, 0, 0, NULL); + +INSERT INTO menu (name, name_en, name_ja, name_vi, restaurant, price, is_discontinued, like_count, unlike_count, menu_category_id) +VALUES ('소떡소떡', 'Sotteok Sotteok', 'ソトックソトック', 'Sotteok Sotteok', 'SNACK_CORNER', 2000, false, 0, 0, NULL); + +UPDATE menu SET is_discontinued = true WHERE name = '냉모밀' AND restaurant = 'SNACK_CORNER'; diff --git a/src/main/resources/db/migration/V17__populate_i18n_menu_name.sql b/src/main/resources/db/migration/V17__populate_i18n_menu_name.sql new file mode 100644 index 00000000..b581eb14 --- /dev/null +++ b/src/main/resources/db/migration/V17__populate_i18n_menu_name.sql @@ -0,0 +1,24 @@ +-- 고정 메뉴 다국어 번역 데이터 추가 +UPDATE menu SET name_en = 'Old-school Korean Lunch Box', name_ja = '思い出の弁当', name_vi = 'Cơm hộp kiểu Hàn xưa' WHERE name = '추억의도시락' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Chicken Mayo Rice Bowl', name_ja = 'チキンマヨ丼', name_vi = 'Cơm tô gà mayo' WHERE name = '치킨마요덮밥' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Rice Noodles', name_ja = 'フォー', name_vi = 'Phở' WHERE name = '쌀국수' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Soongsil Gimbap', name_ja = '崇実キンパ', name_vi = 'Soongsil Gimbap ' WHERE name = '숭실김밥' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Soongsil Mini Gimbap', name_ja = '崇実ミニキンパ', name_vi = 'Soongsil Mini Gimbap ' WHERE name = '숭실꼬마김밥' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Tuna Mini Gimbap', name_ja = 'ツナミニキンパ', name_vi = 'Gimbap mini cá ngừ' WHERE name = '참치꼬마김밥' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Soongsil Ramyeon', name_ja = '崇実ラーメン', name_vi = 'Soongsil Ramyeon ' WHERE name = '숭실라면' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Rice Cake & Dumpling Ramyeon', name_ja = '餅・餃子ラーメン', name_vi = 'Ramyeon bánh gạo và mandu' WHERE name = '떡만두라면' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Cheese Ramyeon', name_ja = 'チーズラーメン', name_vi = 'Ramyeon phô mai' WHERE name = '치즈라면' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Ramyeon + Bowl of Rice', name_ja = 'ラーメン+ライス', name_vi = 'Ramyeon + cơm trắng' WHERE name = '라면+공기밥' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Ramyeon + Half Roll of Gimbap', name_ja = 'ラーメン+キンパ半本', name_vi = 'Ramyeon + nửa cuộn gimbap' WHERE name = '라면+김밥반줄' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Tteokbokki', name_ja = 'トッポッキ', name_vi = 'Tteokbokki' WHERE name = '떡볶이' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Rabokki', name_ja = 'ラッポッキ', name_vi = 'Rabokki' WHERE name = '라볶이' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Sotteok Sotteok', name_ja = 'ソトックソトック', name_vi = 'Sotteok Sotteok' WHERE name = '소떡소떡' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Cobb Salad', name_ja = 'コブサラダ', name_vi = 'Salad Cobb' WHERE name = '콥샐러드' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Vegan Tofu Salad', name_ja = 'ヴィーガン豆腐サラダ', name_vi = 'Salad đậu phụ chay' WHERE name = '비건두부샐러드' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Salad Pasta', name_ja = 'サラダパスタ', name_vi = 'Salad Pasta' WHERE name = '샐러드파스타' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Balanced Macro Salad', name_ja = '栄養バランスサラダ', name_vi = 'Salad cân bằng dinh dưỡng' WHERE name = '탄단지샐러드' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Smoked Salmon Salad', name_ja = 'スモークサーモンサラダ', name_vi = 'Salad cá hồi hun khói' WHERE name = '훈제연어샐러드' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Boiled Egg (Salad Add-on)', name_ja = 'ゆで卵(サラダ追加)', name_vi = 'Trứng luộc (thêm vào salad)' WHERE name = '삶은계란(샐)' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = '5 Tofu Sticks', name_ja = '豆腐スティック5本', name_vi = '5 thanh đậu phụ' WHERE name = '두부스틱5개' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = '2 Slices of Sweet Pumpkin', name_ja = 'かぼちゃスライス2枚', name_vi = '2 lát bí đỏ ngọt' WHERE name = '단호박슬라이스2개' AND restaurant = 'SNACK_CORNER'; +UPDATE menu SET name_en = 'Extra Noodles (Salad Add-on)', name_ja = '麺追加(サラダ)', name_vi = 'Thêm mì (salad)' WHERE name = '면추가(샐러드)' AND restaurant = 'SNACK_CORNER'; From 12ab1bb074b3cf0fc0d83dfd67b6c679bad7b603 Mon Sep 17 00:00:00 2001 From: Eunseo Song <162149585+eunseo9311@users.noreply.github.com> Date: Mon, 29 Jun 2026 22:22:24 +0900 Subject: [PATCH 372/399] =?UTF-8?q?refactor:=20DML=20=EC=A0=84=EC=9A=A9=20?= =?UTF-8?q?i18n=20=EB=B2=88=EC=97=AD=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=EB=A7=88=EC=9D=B4=EA=B7=B8=EB=A0=88=EC=9D=B4=EC=85=98=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - V10(college), V11(department), V12(partnership_restaurant), V14(partnership description), V17(menu name) 삭제 - 번역 데이터 주입은 마이그레이션 스크립트 외 별도 방식으로 관리 --- .../migration/V10__populate_i18n_college.sql | 13 - .../V11__populate_i18n_department.sql | 54 --- ...__populate_i18n_partnership_restaurant.sql | 99 ---- ..._populate_i18n_partnership_description.sql | 432 ------------------ .../V17__populate_i18n_menu_name.sql | 24 - 5 files changed, 622 deletions(-) delete mode 100644 src/main/resources/db/migration/V10__populate_i18n_college.sql delete mode 100644 src/main/resources/db/migration/V11__populate_i18n_department.sql delete mode 100644 src/main/resources/db/migration/V12__populate_i18n_partnership_restaurant.sql delete mode 100644 src/main/resources/db/migration/V14__populate_i18n_partnership_description.sql delete mode 100644 src/main/resources/db/migration/V17__populate_i18n_menu_name.sql diff --git a/src/main/resources/db/migration/V10__populate_i18n_college.sql b/src/main/resources/db/migration/V10__populate_i18n_college.sql deleted file mode 100644 index 7af84728..00000000 --- a/src/main/resources/db/migration/V10__populate_i18n_college.sql +++ /dev/null @@ -1,13 +0,0 @@ --- 단과대학 다국어 데이터 추가 -UPDATE college SET name_en = 'Student Council', name_ja = '学生自治会', name_vi = 'Hội Sinh viên' WHERE name_ko = '총학생회'; -UPDATE college SET name_en = 'College of AI', name_ja = 'AI学部', name_vi = 'Khoa AI' WHERE name_ko = 'AI대학'; -UPDATE college SET name_en = 'College of IT', name_ja = 'IT学部', name_vi = 'Khoa IT' WHERE name_ko = 'IT대학'; -UPDATE college SET name_en = 'College of Business Administration', name_ja = '経営学部', name_vi = 'Khoa Quản trị Kinh doanh' WHERE name_ko = '경영대학'; -UPDATE college SET name_en = 'College of Economics and International Commerce', name_ja = '経済・国際商学部', name_vi = 'Khoa Kinh tế và Thương mại Quốc tế' WHERE name_ko = '경제통상대학'; -UPDATE college SET name_en = 'College of Engineering', name_ja = '工学部', name_vi = 'Khoa Kỹ thuật' WHERE name_ko = '공과대학'; -UPDATE college SET name_en = 'College of Law', name_ja = '法学部', name_vi = 'Khoa Luật' WHERE name_ko = '법과대학'; -UPDATE college SET name_en = 'College of Social Sciences', name_ja = '社会科学部', name_vi = 'Khoa Khoa học Xã hội' WHERE name_ko = '사회과학대학'; -UPDATE college SET name_en = 'College of Humanities', name_ja = '人文学部', name_vi = 'Khoa Nhân văn' WHERE name_ko = '인문대학'; -UPDATE college SET name_en = 'College of Natural Sciences', name_ja = '自然科学部', name_vi = 'Khoa Khoa học Tự nhiên' WHERE name_ko = '자연과학대학'; -UPDATE college SET name_en = 'School of Liberal Studies', name_ja = 'リベラル・スタディーズ学部', name_vi = 'Khoa Nghiên cứu Tự do' WHERE name_ko = '자유전공학부'; -UPDATE college SET name_en = 'Department of Next-Generation Semiconductor', name_ja = '次世代半導体学科', name_vi = 'Khoa Bán dẫn Thế hệ Mới' WHERE name_ko = '차세대반도체학과'; diff --git a/src/main/resources/db/migration/V11__populate_i18n_department.sql b/src/main/resources/db/migration/V11__populate_i18n_department.sql deleted file mode 100644 index 49d13262..00000000 --- a/src/main/resources/db/migration/V11__populate_i18n_department.sql +++ /dev/null @@ -1,54 +0,0 @@ --- 학과 다국어 데이터 추가 -UPDATE department SET name_en = 'Computer Science & Engineering', name_ja = 'コンピュータ科学工学', name_vi = 'Khoa học và Kỹ thuật Máy tính' WHERE name_ko = '컴퓨터학부'; -UPDATE department SET name_en = 'Electronic Engineering(Electronic Engineering major)', name_ja = '電子工学(電子工学専攻)', name_vi = 'Kỹ thuật Điện tử (chuyên ngành Kỹ thuật Điện tử)' WHERE name_ko = '전자정보공학부(전자공학전공)'; -UPDATE department SET name_en = 'Electronic Engineering(IT convergence major)', name_ja = '電子工学(IT融合専攻)', name_vi = 'Kỹ thuật Điện tử (chuyên ngành Hội tụ IT)' WHERE name_ko = '전자정보공학부(IT융합전공)'; -UPDATE department SET name_en = 'Global School of Media', name_ja = 'グローバルメディア学部', name_vi = 'Khoa Truyền thông Toàn cầu' WHERE name_ko = '글로벌미디어학부'; -UPDATE department SET name_en = 'Software', name_ja = 'ソフトウェア', name_vi = 'Phần mềm' WHERE name_ko = '소프트웨어학부'; -UPDATE department SET name_en = 'AI Convergence', name_ja = 'AI融合', name_vi = 'Hội tụ AI' WHERE name_ko = 'AI융합학부'; -UPDATE department SET name_en = 'AI Software', name_ja = 'AIソフトウェア', name_vi = 'Phần mềm AI' WHERE name_ko = 'AI소프트웨어학부'; -UPDATE department SET name_en = 'Digital Media', name_ja = 'デジタルメディア', name_vi = 'Truyền thông Kỹ thuật số' WHERE name_ko = '디지털미디어학과'; -UPDATE department SET name_en = 'Business Administration', name_ja = '経営学', name_vi = 'Quản trị Kinh doanh' WHERE name_ko = '경영학부'; -UPDATE department SET name_en = 'Entrepreneurship & Small Business', name_ja = 'ベンチャー・中小企業', name_vi = 'Khởi nghiệp và Doanh nghiệp Nhỏ' WHERE name_ko = '벤처중소기업학과'; -UPDATE department SET name_en = 'Accounting', name_ja = '会計学', name_vi = 'Kế toán' WHERE name_ko = '회계학과'; -UPDATE department SET name_en = 'Finance', name_ja = '金融学', name_vi = 'Tài chính' WHERE name_ko = '금융학부'; -UPDATE department SET name_en = 'Venture Management', name_ja = 'ベンチャー経営', name_vi = 'Quản trị Khởi nghiệp' WHERE name_ko = '벤처경영학과'; -UPDATE department SET name_en = 'Innovation Management', name_ja = 'イノベーション経営', name_vi = 'Quản trị Đổi mới' WHERE name_ko = '혁신경영학과'; -UPDATE department SET name_en = 'Welfare & Management', name_ja = '福祉経営', name_vi = 'Quản trị Phúc lợi' WHERE name_ko = '복지경영학과'; -UPDATE department SET name_en = 'Accounting & Tax', name_ja = '会計・税務', name_vi = 'Kế toán và Thuế' WHERE name_ko = '회계세무학과'; -UPDATE department SET name_en = 'Economics', name_ja = '経済学', name_vi = 'Kinh tế học' WHERE name_ko = '경제학과'; -UPDATE department SET name_en = 'Global Commerce', name_ja = 'グローバル商学', name_vi = 'Thương mại Toàn cầu' WHERE name_ko = '글로벌통상학과'; -UPDATE department SET name_en = 'Ecofinance', name_ja = 'エコファイナンス', name_vi = 'Tài chính Kinh tế' WHERE name_ko = '금융경제학과'; -UPDATE department SET name_en = 'International Trade & Transaction', name_ja = '国際貿易・取引', name_vi = 'Thương mại và Giao dịch Quốc tế' WHERE name_ko = '국제무역학과'; -UPDATE department SET name_en = 'Chemical Engineering', name_ja = '化学工学', name_vi = 'Kỹ thuật Hóa học' WHERE name_ko = '화학공학과'; -UPDATE department SET name_en = 'Materials Science & Engineering', name_ja = '材料科学工学', name_vi = 'Khoa học và Kỹ thuật Vật liệu' WHERE name_ko = '신소재공학과'; -UPDATE department SET name_en = 'Electrical Engineering', name_ja = '電気工学', name_vi = 'Kỹ thuật Điện' WHERE name_ko = '전기공학부'; -UPDATE department SET name_en = 'Mechanical Engineering', name_ja = '機械工学', name_vi = 'Kỹ thuật Cơ khí' WHERE name_ko = '기계공학부'; -UPDATE department SET name_en = 'Industrial & Information Systems Engineering', name_ja = '産業・情報システム工学', name_vi = 'Kỹ thuật Hệ thống Công nghiệp và Thông tin' WHERE name_ko = '산업정보시스템공학과'; -UPDATE department SET name_en = 'Architecture', name_ja = '建築学', name_vi = 'Kiến trúc' WHERE name_ko = '건축학부'; -UPDATE department SET name_en = 'Law', name_ja = '法学', name_vi = 'Luật' WHERE name_ko = '법학과'; -UPDATE department SET name_en = 'Global Law', name_ja = 'グローバル法学', name_vi = 'Luật Toàn cầu' WHERE name_ko = '국제법무학과'; -UPDATE department SET name_en = 'Social Welfare', name_ja = '社会福祉学', name_vi = 'Phúc lợi Xã hội' WHERE name_ko = '사회복지학부'; -UPDATE department SET name_en = 'Public Administration', name_ja = '行政学', name_vi = 'Hành chính Công' WHERE name_ko = '행정학부'; -UPDATE department SET name_en = 'Political Science & International Relations', name_ja = '政治学・国際関係', name_vi = 'Khoa học Chính trị và Quan hệ Quốc tế' WHERE name_ko = '정치외교학과'; -UPDATE department SET name_en = 'Information Sociology', name_ja = '情報社会学', name_vi = 'Xã hội học Thông tin' WHERE name_ko = '정보사회학과'; -UPDATE department SET name_en = 'Journalism, Public Relations, and Advertising', name_ja = 'ジャーナリズム・広報・広告', name_vi = 'Báo chí, Quan hệ Công chúng và Quảng cáo' WHERE name_ko = '언론홍보학과'; -UPDATE department SET name_en = 'Lifelong Education', name_ja = '生涯教育', name_vi = 'Giáo dục Suốt đời' WHERE name_ko = '평생교육학과'; -UPDATE department SET name_en = 'Christian Studies', name_ja = 'キリスト教学', name_vi = 'Cơ đốc học' WHERE name_ko = '기독교학과'; -UPDATE department SET name_en = 'Korean Language & Literature', name_ja = '韓国語文学', name_vi = 'Ngôn ngữ và Văn học Hàn Quốc' WHERE name_ko = '국어국문학과'; -UPDATE department SET name_en = 'English Language & Literature', name_ja = '英語英文学', name_vi = 'Ngôn ngữ và Văn học Anh' WHERE name_ko = '영어영문학과'; -UPDATE department SET name_en = 'German Language & Literature', name_ja = 'ドイツ語文学', name_vi = 'Ngôn ngữ và Văn học Đức' WHERE name_ko = '독어독문학과'; -UPDATE department SET name_en = 'French Language & Literature', name_ja = 'フランス語文学', name_vi = 'Ngôn ngữ và Văn học Pháp' WHERE name_ko = '불어불문학과'; -UPDATE department SET name_en = 'Chinese Language & Literature', name_ja = '中国語文学', name_vi = 'Ngôn ngữ và Văn học Trung Quốc' WHERE name_ko = '중어중문학과'; -UPDATE department SET name_en = 'Japanese Language & Literature', name_ja = '日本語文学', name_vi = 'Ngôn ngữ và Văn học Nhật Bản' WHERE name_ko = '일어일문학과'; -UPDATE department SET name_en = 'Philosophy', name_ja = '哲学', name_vi = 'Triết học' WHERE name_ko = '철학과'; -UPDATE department SET name_en = 'History', name_ja = '歴史学', name_vi = 'Lịch sử' WHERE name_ko = '사학과'; -UPDATE department SET name_en = 'Creative Writing', name_ja = '文芸創作', name_vi = 'Sáng tác Văn học' WHERE name_ko = '문예창작전공'; -UPDATE department SET name_en = 'Film Arts', name_ja = '映画芸術', name_vi = 'Nghệ thuật Điện ảnh' WHERE name_ko = '영화예술전공'; -UPDATE department SET name_en = 'Sports', name_ja = 'スポーツ', name_vi = 'Thể thao' WHERE name_ko = '스포츠학부'; -UPDATE department SET name_en = 'Mathematics', name_ja = '数学', name_vi = 'Toán học' WHERE name_ko = '수학과'; -UPDATE department SET name_en = 'Physics', name_ja = '物理学', name_vi = 'Vật lý' WHERE name_ko = '물리학과'; -UPDATE department SET name_en = 'Chemistry', name_ja = '化学', name_vi = 'Hóa học' WHERE name_ko = '화학과'; -UPDATE department SET name_en = 'Actuarial Science', name_ja = '保険数理学', name_vi = 'Khoa học Bảo hiểm' WHERE name_ko = '정보통계보험수리학과'; -UPDATE department SET name_en = 'Biomedical Science', name_ja = '生命医科学', name_vi = 'Khoa học Y sinh' WHERE name_ko = '의생명시스템학부'; -UPDATE department SET name_en = 'Liberal Studies', name_ja = 'リベラル・スタディーズ', name_vi = 'Nghiên cứu Tự do' WHERE name_ko = '자유전공학부'; -UPDATE department SET name_en = 'Next-Generation Semiconductor', name_ja = '次世代半導体', name_vi = 'Bán dẫn Thế hệ Mới' WHERE name_ko = '차세대반도체학과'; diff --git a/src/main/resources/db/migration/V12__populate_i18n_partnership_restaurant.sql b/src/main/resources/db/migration/V12__populate_i18n_partnership_restaurant.sql deleted file mode 100644 index 8710072a..00000000 --- a/src/main/resources/db/migration/V12__populate_i18n_partnership_restaurant.sql +++ /dev/null @@ -1,99 +0,0 @@ --- 제휴식당 다국어 데이터 추가 -UPDATE partnership_restaurant SET store_name_en = 'Paik’s Coffee (Cafe)', store_name_ja = 'ペクタバン (カフェ)', store_name_vi = 'Paik’s Coffee (Quán cà phê)' WHERE store_name_ko = '빽다방'; -UPDATE partnership_restaurant SET store_name_en = 'Gong Cha (Bubble tea shop)', store_name_ja = 'ゴンチャ (タピオカティー店)', store_name_vi = 'Gong Cha (Trà sữa trân châu)' WHERE store_name_ko = '공차'; -UPDATE partnership_restaurant SET store_name_en = 'Burrito House (Burrito restaurant)', store_name_ja = 'ブリトー屋 (ブリトー店)', store_name_vi = 'Burrito House (Nhà hàng burrito)' WHERE store_name_ko = '부리또집'; -UPDATE partnership_restaurant SET store_name_en = 'Syangchmara (Chinese restaurant)', store_name_ja = 'シャンツマーラー (中華料理店)', store_name_vi = 'Syangchmara (Nhà hàng Trung Hoa)' WHERE store_name_ko = '샹츠마라'; -UPDATE partnership_restaurant SET store_name_en = 'Poke All Day (Salad restaurant)', store_name_ja = 'ポケオールデイ (サラダ専門店)', store_name_vi = 'Poke All Day (Nhà hàng salad)' WHERE store_name_ko = '포케올데이'; -UPDATE partnership_restaurant SET store_name_en = 'Blue Hill (Bar)', store_name_ja = 'ブルーヒル (バー)', store_name_vi = 'Blue Hill (Quán bar)' WHERE store_name_ko = '블루힐'; -UPDATE partnership_restaurant SET store_name_en = 'Zensaiya (Izakaya)', store_name_ja = 'ゼンサイヤ (居酒屋)', store_name_vi = 'Zensaiya (Quán izakaya)' WHERE store_name_ko = '젠사이야'; -UPDATE partnership_restaurant SET store_name_en = 'Nolsoop (Comic book cafe)', store_name_ja = 'ノルスプ (漫画喫茶)', store_name_vi = 'Nolsoop (Quán cà phê truyện tranh)' WHERE store_name_ko = '놀숲'; -UPDATE partnership_restaurant SET store_name_en = 'Hero Board Game Cafe (Board game cafe)', store_name_ja = 'ヒーローボードゲームカフェ (ボードゲームカフェ)', store_name_vi = 'Hero Board Game Cafe (Quán board game)' WHERE store_name_ko = '히어로 보드게임카페'; -UPDATE partnership_restaurant SET store_name_en = 'Gwang-eo Samchon (Seafood restaurant)', store_name_ja = 'クァンオサムチョン (海鮮料理店)', store_name_vi = 'Gwang-eo Samchon (Nhà hàng hải sản)' WHERE store_name_ko = '광어삼촌'; -UPDATE partnership_restaurant SET store_name_en = 'Nondureong Galbi (Korean Galbi Restaurant)', store_name_ja = 'ノンドゥロンカルビ (韓国カルビ店)', store_name_vi = 'Nondureong Galbi (Nhà hàng sườn nướng Hàn Quốc)' WHERE store_name_ko = '논두렁갈비'; -UPDATE partnership_restaurant SET store_name_en = 'Meokdwaeji (Korean BBQ restaurant)', store_name_ja = 'モクトェジ (韓国焼肉店)', store_name_vi = 'Meokdwaeji (Nhà hàng BBQ Hàn Quốc)' WHERE store_name_ko = '먹돼지'; -UPDATE partnership_restaurant SET store_name_en = 'Hwangsaegol (Korean restaurant)', store_name_ja = 'ファンセゴル (韓国料理店)', store_name_vi = 'Hwangsaegol (Nhà hàng Hàn Quốc)' WHERE store_name_ko = '황새골'; -UPDATE partnership_restaurant SET store_name_en = 'Sinuiju Chapssal Sundae (Korean restaurant)', store_name_ja = 'シニジュもち米スンデ (韓国料理店)', store_name_vi = 'Sinuiju Chapssal Sundae (Nhà hàng Hàn Quốc)' WHERE store_name_ko = '신의주 찹쌀순대'; -UPDATE partnership_restaurant SET store_name_en = 'Bultaeneun Sogeum-gui (Barbecue restaurant)', store_name_ja = 'プルタヌンソグムグイ (焼肉店)', store_name_vi = 'Bultaeneun Sogeum-gui (Nhà hàng nướng)' WHERE store_name_ko = '불타는 소금구이'; -UPDATE partnership_restaurant SET store_name_en = 'Jigigo (Korean fast-casual)', store_name_ja = 'ジジゴ (韓国ファストカジュアル)', store_name_vi = 'Jigigo (Quán ăn nhanh Hàn Quốc)' WHERE store_name_ko = '지지고'; -UPDATE partnership_restaurant SET store_name_en = 'Matdakkko (Chicken restaurant)', store_name_ja = 'マッタッコ (チキン店)', store_name_vi = 'Matdakkko (Nhà hàng gà)' WHERE store_name_ko = '맛닭꼬'; -UPDATE partnership_restaurant SET store_name_en = 'Cowork Bistro (Dakgalbi restaurant)', store_name_ja = 'コワークビストロ (タッカルビ店)', store_name_vi = 'Cowork Bistro (Nhà hàng dakgalbi)' WHERE store_name_ko = '코웍 비스트로'; -UPDATE partnership_restaurant SET store_name_en = 'Pizza School (Pizza restaurant)', store_name_ja = 'ピザスクール (ピザ店)', store_name_vi = 'Pizza School (Nhà hàng pizza)' WHERE store_name_ko = '피자스쿨'; -UPDATE partnership_restaurant SET store_name_en = 'Real Fry (Chicken restaurant)', store_name_ja = 'リアルフライ (チキン店)', store_name_vi = 'Real Fry (Nhà hàng gà)' WHERE store_name_ko = '리얼후라이'; -UPDATE partnership_restaurant SET store_name_en = 'Wang Donkatsu Wang Naengmyeon (Korean restaurant)', store_name_ja = 'ワンドンカツワン冷麺 (韓国料理店)', store_name_vi = 'Wang Donkatsu Wang Naengmyeon (Nhà hàng Hàn Quốc)' WHERE store_name_ko = '왕돈까스왕냉면'; -UPDATE partnership_restaurant SET store_name_en = 'Chwihyang (Chinese restaurant)', store_name_ja = 'チュィヒャン (中華料理店)', store_name_vi = 'Chwihyang (Nhà hàng Trung Hoa)' WHERE store_name_ko = '취향'; -UPDATE partnership_restaurant SET store_name_en = 'Cry Cheese Burger (Burger restaurant)', store_name_ja = 'クライチーズバーガー (ハンバーガー店)', store_name_vi = 'Cry Cheese Burger (Nhà hàng burger)' WHERE store_name_ko = '크라이치즈버거'; -UPDATE partnership_restaurant SET store_name_en = 'Cafe Bombom (Cafe)', store_name_ja = 'カフェボムボム (カフェ)', store_name_vi = 'Cafe Bombom (Quán cà phê)' WHERE store_name_ko = '카페 봄봄'; -UPDATE partnership_restaurant SET store_name_en = 'Yoajung (Ice cream shop)', store_name_ja = 'ヨアジョン (アイスクリーム店)', store_name_vi = 'Yoajung (Cửa hàng kem)' WHERE store_name_ko = '요거트아이스크림의정석'; -UPDATE partnership_restaurant SET store_name_en = 'Eveurb Eve (Cafe)', store_name_ja = 'エブアイブ (カフェ)', store_name_vi = 'Eveurb Eve (Quán cà phê)' WHERE store_name_ko = '에브어이브'; -UPDATE partnership_restaurant SET store_name_en = 'A-Play PC Bang (PC cafe)', store_name_ja = 'エイプレイPCバン (PCカフェ)', store_name_vi = 'A-Play PC Bang (Quán net)' WHERE store_name_ko = '에이플 PC방'; -UPDATE partnership_restaurant SET store_name_en = 'Mega Coffee (Cafe)', store_name_ja = 'メガコーヒー (カフェ)', store_name_vi = 'Mega Coffee (Quán cà phê)' WHERE store_name_ko = '메가커피'; -UPDATE partnership_restaurant SET store_name_en = 'Jaksim Study Cafe', store_name_ja = 'チャクシムスタディカフェ', store_name_vi = 'Jaksim Study Cafe' WHERE store_name_ko = '작심 스터디카페'; -UPDATE partnership_restaurant SET store_name_en = 'Padong Chuya (Korean pub)', store_name_ja = 'パドンチュヤ (韓国居酒屋)', store_name_vi = 'Padong Chuya (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '파동추야'; -UPDATE partnership_restaurant SET store_name_en = 'Gachi (Bar)', store_name_ja = 'カチ (バー)', store_name_vi = 'Gachi (Quán bar)' WHERE store_name_ko = '가치'; -UPDATE partnership_restaurant SET store_name_en = '28 Cheongchun Hope-Pocha (Korean pub)', store_name_ja = '28青春ホープポチャ (韓国居酒屋)', store_name_vi = '28 Cheongchun Hope-Pocha (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '28청춘호프포차'; -UPDATE partnership_restaurant SET store_name_en = 'Sangdo-ro 3-ga (Korean pub)', store_name_ja = 'サンドロ3ガ (韓国居酒屋)', store_name_vi = 'Sangdo-ro 3-ga (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '상도로 3가'; -UPDATE partnership_restaurant SET store_name_en = 'Sutgama Barbecue Chicken (Korean BBQ)', store_name_ja = 'スッカマバーベキューチキン (韓国BBQ)', store_name_vi = 'Sutgama Barbecue Chicken (BBQ Hàn Quốc)' WHERE store_name_ko = '숯가마 바베큐 치킨'; -UPDATE partnership_restaurant SET store_name_en = 'Yeokjeon Halmeoni Beer (Korean pub)', store_name_ja = 'ヨクチョンハルモニビール (韓国居酒屋)', store_name_vi = 'Yeokjeon Halmeoni Beer (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '역전할머니맥주'; -UPDATE partnership_restaurant SET store_name_en = 'Geekstar PC Bang (PC Cafe)', store_name_ja = 'ギークスターPCバン (PCカフェ)', store_name_vi = 'Geekstar PC Bang (Quán net)' WHERE store_name_ko = '긱스타 PC방'; -UPDATE partnership_restaurant SET store_name_en = 'Myeon Sikdang (Japanese restaurant)', store_name_ja = 'ミョン食堂 (日本料理店)', store_name_vi = 'Myeon Sikdang (Nhà hàng Nhật Bản)' WHERE store_name_ko = '면식당'; -UPDATE partnership_restaurant SET store_name_en = 'Sambong Burger (Burger restaurant)', store_name_ja = 'サンボンバーガー (ハンバーガー店)', store_name_vi = 'Sambong Burger (Nhà hàng burger)' WHERE store_name_ko = '삼봉버거'; -UPDATE partnership_restaurant SET store_name_en = 'Meal Plan B (Burrito restaurant)', store_name_ja = 'ミールプランビー (ブリトー店)', store_name_vi = 'Meal Plan B (Nhà hàng burrito)' WHERE store_name_ko = '밀플랜비'; -UPDATE partnership_restaurant SET store_name_en = 'Gogi Story (Korean BBQ)', store_name_ja = 'コギストーリー (韓国BBQ)', store_name_vi = 'Gogi Story (BBQ Hàn Quốc)' WHERE store_name_ko = '고기스토리'; -UPDATE partnership_restaurant SET store_name_en = 'Sangdodong Sottukkeong (Korean BBQ)', store_name_ja = 'サンドドンソットゥッコン (韓国BBQ)', store_name_vi = 'Sangdodong Sottukkeong (BBQ Hàn Quốc)' WHERE store_name_ko = '상도동 솥뚜껑'; -UPDATE partnership_restaurant SET store_name_en = 'Hamjibak (Korean restaurant)', store_name_ja = 'ハムジバク (韓国料理店)', store_name_vi = 'Hamjibak (Nhà hàng Hàn Quốc)' WHERE store_name_ko = '함지박'; -UPDATE partnership_restaurant SET store_name_en = 'Black & Joy Coffee (Cafe)', store_name_ja = 'ブラック&ジョイコーヒー (カフェ)', store_name_vi = 'Black & Joy Coffee (Quán cà phê)' WHERE store_name_ko = '블랙&조이커피'; -UPDATE partnership_restaurant SET store_name_en = 'Coffee Tree (Cafe)', store_name_ja = 'コーヒーツリー (カフェ)', store_name_vi = 'Cây Cà phê (Quán cà phê)' WHERE store_name_ko = '커피나무'; -UPDATE partnership_restaurant SET store_name_en = 'Bread & Co. (Bakery)', store_name_ja = 'ブレッド&コー (ベーカリー)', store_name_vi = 'Bread & Co. (Tiệm bánh)' WHERE store_name_ko = '브레댄코'; -UPDATE partnership_restaurant SET store_name_en = 'Ssibam BaeBae (Korean pub)', store_name_ja = 'シバムバベ (韓国居酒屋)', store_name_vi = 'Ssibam BaeBae (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '씨밤바베'; -UPDATE partnership_restaurant SET store_name_en = 'Inssaeng Beer (Korean pub)', store_name_ja = 'インセンビール (韓国居酒屋)', store_name_vi = 'Inssaeng Beer (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '인쌩맥주'; -UPDATE partnership_restaurant SET store_name_en = 'Rikosta Coin Karaoke', store_name_ja = 'リコスタコインカラオケ', store_name_vi = 'Rikosta Coin Karaoke' WHERE store_name_ko = '리코스타 코인노래방'; -UPDATE partnership_restaurant SET store_name_en = 'Slow Cali (Salad restaurant)', store_name_ja = 'スローカリ (サラダ専門店)', store_name_vi = 'Slow Cali (Nhà hàng salad)' WHERE store_name_ko = '슬로우캘리'; -UPDATE partnership_restaurant SET store_name_en = 'Jinpu junghwa Yori (Chinese restaurant)', store_name_ja = 'ジンプ中華料理 (中華料理店)', store_name_vi = 'Jinpu Junghwa Yori (Nhà hàng Trung Hoa)' WHERE store_name_ko = '진푸 중화요리'; -UPDATE partnership_restaurant SET store_name_en = 'Salady (Salad restaurant)', store_name_ja = 'サラディ (サラダ専門店)', store_name_vi = 'Salady (Nhà hàng salad)' WHERE store_name_ko = '샐러디'; -UPDATE partnership_restaurant SET store_name_en = 'Jawoldang (Pub)', store_name_ja = 'チャウォルダン (居酒屋)', store_name_vi = 'Jawoldang (Quán nhậu)' WHERE store_name_ko = '자월당'; -UPDATE partnership_restaurant SET store_name_en = 'Subway', store_name_ja = 'サブウェイ', store_name_vi = 'Subway' WHERE store_name_ko = '써브웨이'; -UPDATE partnership_restaurant SET store_name_en = 'Cheong-un Restaurant (Korean BBQ)', store_name_ja = 'チョンウン食堂 (韓国BBQ)', store_name_vi = 'Cheong-un Restaurant (BBQ Hàn Quốc)' WHERE store_name_ko = '청운음식점'; -UPDATE partnership_restaurant SET store_name_en = 'Paradise (Korean restaurant)', store_name_ja = 'パラダイス (韓国料理店)', store_name_vi = 'Paradise (Nhà hàng Hàn Quốc)' WHERE store_name_ko = '파라다이스'; -UPDATE partnership_restaurant SET store_name_en = 'Hwanggung Jaengban-jjajang (Chinese restaurant) ', store_name_ja = 'ファングンチェンバンチャジャン (中華料理店)', store_name_vi = 'Hwanggung Jaengban-jjajang (Nhà hàng Trung Hoa)' WHERE store_name_ko = '황궁쟁반짜장'; -UPDATE partnership_restaurant SET store_name_en = 'Mendong (Japanese restaurant)', store_name_ja = 'メンドン (日本料理店)', store_name_vi = 'Mendong (Nhà hàng Nhật Bản)' WHERE store_name_ko = '멘동'; -UPDATE partnership_restaurant SET store_name_en = 'Hecbob (Japanese restaurant)', store_name_ja = 'ヘッパプ (日本料理店)', store_name_vi = 'Hecbob (Nhà hàng Nhật Bản)' WHERE store_name_ko = '핵밥'; -UPDATE partnership_restaurant SET store_name_en = 'Eunhwasu Sikdang (Korean restaurant)', store_name_ja = 'ウンファス食堂 (韓国料理店)', store_name_vi = 'Eunhwasu Sikdang (Nhà hàng Hàn Quốc)' WHERE store_name_ko = '은화수식당'; -UPDATE partnership_restaurant SET store_name_en = 'Gossine (Japanese curry restaurant)', store_name_ja = 'ゴシネ (日本カレー店)', store_name_vi = 'Gossine (Nhà hàng cà ri Nhật Bản)' WHERE store_name_ko = '고씨네'; -UPDATE partnership_restaurant SET store_name_en = 'Love & Peace (Korean pub)', store_name_ja = '愛と平和 (韓国居酒屋)', store_name_vi = 'Love & Peace (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '사랑과평화'; -UPDATE partnership_restaurant SET store_name_en = 'EEA Cafe (Cafe)', store_name_ja = 'EEAカフェ (カフェ)', store_name_vi = 'EEA Cafe (Quán cà phê)' WHERE store_name_ko = 'eea cafe'; -UPDATE partnership_restaurant SET store_name_en = 'Son Kalguksu (Korean restaurant)', store_name_ja = 'ソンカルグクス (韓国料理店)', store_name_vi = 'Son Kalguksu (Nhà hàng Hàn Quốc)' WHERE store_name_ko = '손칼국수'; -UPDATE partnership_restaurant SET store_name_en = 'BHC Chicken (Chicken restaurant)', store_name_ja = 'BHCチキン (チキン店)', store_name_vi = 'BHC Chicken (Nhà hàng gà)' WHERE store_name_ko = 'BHC 치킨'; -UPDATE partnership_restaurant SET store_name_en = 'Gochudong Noodle House (Udon noodle restaurant)', store_name_ja = 'コチュドン製麺所 (うどん店)', store_name_vi = 'Gochudong Noodle House (Nhà hàng mì udon)' WHERE store_name_ko = '고추동 제면소'; -UPDATE partnership_restaurant SET store_name_en = 'Michyeo-beorin Padak (Chicken restaurant)', store_name_ja = 'ミチョボリンパダク (チキン店)', store_name_vi = 'Michyeo-beorin Padak (Nhà hàng gà)' WHERE store_name_ko = '미쳐버린 파닭'; -UPDATE partnership_restaurant SET store_name_en = 'Mitery (Italian restaurant)', store_name_ja = 'ミテリ (イタリア料理店)', store_name_vi = 'Mitery (Nhà hàng Ý)' WHERE store_name_ko = '미태리'; -UPDATE partnership_restaurant SET store_name_en = 'Eongkeul Hope (Korean pub)', store_name_ja = 'アンクルホープ (韓国居酒屋)', store_name_vi = 'Eongkeul Hope (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '엉클호프'; -UPDATE partnership_restaurant SET store_name_en = 'Jipdonggari Ssaengju (Korean pub)', store_name_ja = 'チプトンガリセンジュ (韓国居酒屋)', store_name_vi = 'Jipdonggari Ssaengju (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '짚동가리쌩주'; -UPDATE partnership_restaurant SET store_name_en = 'Daseong Banjeom (Chinese restaurant)', store_name_ja = 'タソン飯店 (中華料理店)', store_name_vi = 'Daseong Banjeom (Nhà hàng Trung Hoa)' WHERE store_name_ko = '다성반점'; -UPDATE partnership_restaurant SET store_name_en = 'Jikhwa Samgyeop Jikgusam', store_name_ja = 'チックァサムギョプチックサム', store_name_vi = 'Jikhwa Samgyeop Jikgusam' WHERE store_name_ko = '직화삼겹직구삼'; -UPDATE partnership_restaurant SET store_name_en = 'Real Ansim Tangsuyuk (Chinese restaurant)', store_name_ja = 'リアル安心タンスユク (中華料理店)', store_name_vi = 'Real Ansim Tangsuyuk (Nhà hàng Trung Hoa)' WHERE store_name_ko = '리얼안심탕수육'; -UPDATE partnership_restaurant SET store_name_en = 'Dodamjuk (Korean porridge restaurant)', store_name_ja = 'トダム粥 (韓国粥店)', store_name_vi = 'Dodamjuk (Nhà hàng cháo Hàn Quốc)' WHERE store_name_ko = '도담죽'; -UPDATE partnership_restaurant SET store_name_en = 'Jjigaerang (Korean restaurant)', store_name_ja = 'チゲラン (韓国料理店)', store_name_vi = 'Jjigaerang (Nhà hàng Hàn Quốc)' WHERE store_name_ko = '찌개랑'; -UPDATE partnership_restaurant SET store_name_en = 'Gomo Bapjyo (Korean restaurant)', store_name_ja = 'コモバプジョ (韓国料理店)', store_name_vi = 'Gomo Bapjyo (Nhà hàng Hàn Quốc)' WHERE store_name_ko = '고모밥죠'; -UPDATE partnership_restaurant SET store_name_en = 'Eongteori Saenggogi (Korean BBQ)', store_name_ja = 'オントリセンゴギ (韓国BBQ)', store_name_vi = 'Eongteori Saenggogi (BBQ Hàn Quốc)' WHERE store_name_ko = '엉터리생고기'; -UPDATE partnership_restaurant SET store_name_en = 'Gangnam Bunsik (Korean snack restaurant)', store_name_ja = 'カンナム粉食 (韓国軽食店)', store_name_vi = 'Gangnam Bunsik (Quán ăn vặt Hàn Quốc)' WHERE store_name_ko = '강남분식'; -UPDATE partnership_restaurant SET store_name_en = 'Mihwadam (Korean rice cake shop)', store_name_ja = 'ミファダム (韓国餅店)', store_name_vi = 'Mihwadam (Cửa hàng bánh gạo Hàn Quốc)' WHERE store_name_ko = '미화담'; -UPDATE partnership_restaurant SET store_name_en = 'Nabiru (Japanese restaurant)', store_name_ja = 'ナビル (日本料理店)', store_name_vi = 'Nabiru (Nhà hàng Nhật Bản)' WHERE store_name_ko = '나비루'; -UPDATE partnership_restaurant SET store_name_en = 'Pasta Eottae (Italian restaurant)', store_name_ja = 'パスタオッテ (イタリア料理店)', store_name_vi = 'Pasta Eottae (Nhà hàng Ý)' WHERE store_name_ko = '파스타어때'; -UPDATE partnership_restaurant SET store_name_en = 'Jongno Tteokjip (Korean rice cake shop)', store_name_ja = '鍾路餅店 (韓国餅店)', store_name_vi = 'Jongno Tteokjip (Cửa hàng bánh gạo Hàn Quốc)' WHERE store_name_ko = '종로떡집'; -UPDATE partnership_restaurant SET store_name_en = 'Homis Pizza (Pizza restaurant)', store_name_ja = 'ホミスピザ (ピザ店)', store_name_vi = 'Homis Pizza (Nhà hàng pizza)' WHERE store_name_ko = '호미스 피자'; -UPDATE partnership_restaurant SET store_name_en = 'Dujjim (Korean braised chicken restaurant)', store_name_ja = 'トゥチム (韓国チムタク店)', store_name_vi = 'Dujjim (Nhà hàng gà om Hàn Quốc)' WHERE store_name_ko = '두찜'; -UPDATE partnership_restaurant SET store_name_en = 'Puraimit Steakhouse (Steakhouse)', store_name_ja = 'プライミットステーキハウス (ステーキハウス)', store_name_vi = 'Puraimit Steakhouse (Nhà hàng bít tết)' WHERE store_name_ko = '프라이밋 스테이크하우스'; -UPDATE partnership_restaurant SET store_name_en = 'Jokbal Cheonguk (Jokbal restaurant)', store_name_ja = 'チョッパル天国 (チョッパル店)', store_name_vi = 'Jokbal Cheonguk (Nhà hàng jokbal)' WHERE store_name_ko = '족발천국'; -UPDATE partnership_restaurant SET store_name_en = 'Ogo Tto Ogo Pocha (Korean pub)', store_name_ja = 'オゴットオゴポチャ (韓国居酒屋)', store_name_vi = 'Ogo Tto Ogo Pocha (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '오고또오고 포차'; -UPDATE partnership_restaurant SET store_name_en = 'Bueongi Pocha (Korean pub)', store_name_ja = 'ブオンイポチャ (韓国居酒屋)', store_name_vi = 'Bueongi Pocha (Quán nhậu Hàn Quốc)' WHERE store_name_ko = '부엉이포차'; -UPDATE partnership_restaurant SET store_name_en = 'Sangdo Takoyakki (Takoyaki restaurant)', store_name_ja = 'サンドたこ焼き (たこ焼き店)', store_name_vi = 'Sangdo Takoyaki (Nhà hàng takoyaki)' WHERE store_name_ko = '상도 타코야끼'; -UPDATE partnership_restaurant SET store_name_en = 'Dolgorae Bottle (Liquor store)', store_name_ja = 'ドルゴレボトル (酒屋)', store_name_vi = 'Dolgorae Bottle (Cửa hàng rượu)' WHERE store_name_ko = '돌고래보틀'; -UPDATE partnership_restaurant SET store_name_en = 'Daldal Fruits (Fruit dessert shop)', store_name_ja = 'ダルダルフルーツ (フルーツデザート店)', store_name_vi = 'Daldal Fruits (Tiệm tráng miệng trái cây)' WHERE store_name_ko = '달달프루츠'; -UPDATE partnership_restaurant SET store_name_en = 'Mellowed (Dessert cafe)', store_name_ja = 'メロード (デザートカフェ)', store_name_vi = 'Mellowed (Quán cà phê tráng miệng)' WHERE store_name_ko = '멜로드'; -UPDATE partnership_restaurant SET store_name_en = 'Banchan Nara (Korean side dish shop)', store_name_ja = 'おかずの国 (韓国惣菜店)', store_name_vi = 'Banchan Nara (Cửa hàng món ăn kèm Hàn Quốc)' WHERE store_name_ko = '반찬나라'; -UPDATE partnership_restaurant SET store_name_en = 'Byeolbyeol Chanbang (Korean side dish shop)', store_name_ja = 'ピョルピョルチャンバン (韓国惣菜店)', store_name_vi = 'Byeolbyeol Chanbang (Cửa hàng món ăn kèm Hàn Quốc)' WHERE store_name_ko = '별별찬방'; -UPDATE partnership_restaurant SET store_name_en = 'Yeogi Banchan Ga-ge (Korean side dish shop)', store_name_ja = 'ヨギおかず店 (韓国惣菜店)', store_name_vi = 'Yeogi Banchan Store (Cửa hàng món ăn kèm Hàn Quốc)' WHERE store_name_ko = '여기반찬가게'; -UPDATE partnership_restaurant SET store_name_en = 'Tamaru Bueok (Korean side dish shop)', store_name_ja = 'タマルキッチン (韓国惣菜店)', store_name_vi = 'Tamaru Kitchen (Cửa hàng món ăn kèm Hàn Quốc)' WHERE store_name_ko = '타마르부엌'; -UPDATE partnership_restaurant SET store_name_en = 'Uri Nongsusanmul (Fresh produce & seafood shop)', store_name_ja = 'ウリ農水産物 (農産物・海産物店)', store_name_vi = 'Uri Nongsusanmul (Cửa hàng nông sản và hải sản tươi sống)' WHERE store_name_ko = '우리농수산물'; -UPDATE partnership_restaurant SET store_name_en = 'Eunhye Yachae Ga-ge (Vegetable shop)', store_name_ja = 'ウネ野菜店 (青果店)', store_name_vi = 'Cửa hàng Rau Eunhye (Cửa hàng rau củ)' WHERE store_name_ko = '은혜야채가게'; -UPDATE partnership_restaurant SET store_name_en = 'Sinangchon Sanghoe (Health food & lifestyle goods store)', store_name_ja = 'シナンチョン商会 (健康食品・生活用品店)', store_name_vi = 'Sinangchon Sanghoe (Cửa hàng thực phẩm sức khỏe và đồ gia dụng)' WHERE store_name_ko = '신앙촌상회'; diff --git a/src/main/resources/db/migration/V14__populate_i18n_partnership_description.sql b/src/main/resources/db/migration/V14__populate_i18n_partnership_description.sql deleted file mode 100644 index bf1a26df..00000000 --- a/src/main/resources/db/migration/V14__populate_i18n_partnership_description.sql +++ /dev/null @@ -1,432 +0,0 @@ --- 제휴 혜택 설명 다국어 데이터 추가 -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Get 1 free Sweet Iced Tea when ordering 3 or more drinks (Wednesdays only)', p.description_ja = 'ドリンク3杯以上注文時、スイートアイスティー1杯無料(水曜日のみ)。', p.description_vi = 'Tặng 1 trà đá ngọt khi gọi từ 3 đồ uống trở lên (chỉ thứ Tư).' WHERE pr.store_name_ko = '빽다방' AND p.description = '음료 3개 이상 시키면 달콤 아이스티 1잔(수요일)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Twice a week, get one free pearl topping when purchasing 2 or more drinks.', p.description_ja = '週2回、ドリンク2杯以上購入でタピオカ追加1回無料。', p.description_vi = 'Mỗi tuần 2 lần, mua từ 2 đồ uống trở lên được thêm trân châu miễn phí 1 lần.' WHERE pr.store_name_ko = '공차' AND p.description = '주2번 2잔, 3잔 이상 구매 시 펄 추가 1회 무료'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Get one free topping add-on for purchases between 2:30 PM and 5:30 PM.', p.description_ja = '2:30 PM〜5:30 PMの購入でトッピング追加を1回無料提供。', p.description_vi = 'Tặng 1 lần topping thêm cho giao dịch mua từ 2:30 PM đến 5:30 PM.' WHERE pr.store_name_ko = '부리또집' AND p.description = '오후 2:30~오후 5:30 구매 시 토핑 추가 1회 무료'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For purchases of 30,000 KRW or more (up to 3 receipts combined), choose one: 3 pieces of Youtiao, Cha Pai, or Bing Hong Cha.', p.description_ja = '30,000ウォン以上の購入で、油条3個・茶π・冰紅茶のうち1つを選択。レシートは最大3枚まで合算可能。', p.description_vi = 'Đơn mua từ 30.000 KRW trở lên được chọn 1 trong các món: 3 miếng quẩy Youtiao, Cha Pai hoặc Bing Hong Cha. Có thể gộp tối đa 3 hóa đơn.' WHERE pr.store_name_ko = '샹츠마라' AND p.description = '30000원 이상 구매시(단 영수증 3개 미만) 유토루 3 pcs, 차파이, 삐홍차 중 택 1'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Add 30g of chicken breast or smoked duck topping with a main topping order.', p.description_ja = 'メイントッピング注文時、鶏むね肉または燻製鴨トッピング30gを追加提供。', p.description_vi = 'Khi gọi topping chính, được thêm 30g topping ức gà hoặc vịt hun khói.' WHERE pr.store_name_ko = '포케올데이' AND p.description = '메인 토필 주문시 닭가슴살 또는 훈제오리 토핑 30g 추가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Visit before 6 PM to receive 500ml cocktail soju, or get free kimchi fried rice for cash payments of 70,000 KRW or more.', p.description_ja = '18時以前の来店でカクテル焼酎500mlを提供、または70,000ウォン以上の現金決済でキムチチャーハン1品を提供。', p.description_vi = 'Đến trước 6 PM được tặng 500ml soju cocktail, hoặc thanh toán tiền mặt từ 70.000 KRW trở lên được tặng 1 phần cơm chiên kimchi.' WHERE pr.store_name_ko = '블루힐' AND p.description = '18시 이전 방문 시 칵테일 소주 500ml 제공, 7만원 이상 현금 결제 시 김치볶음밥 하나 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for purchases of 50,000 KRW or more (1 bottle per group).', p.description_ja = '50,000ウォン以上の購入で焼酎1本無料(1グループにつき1本)。', p.description_vi = 'Mua từ 50.000 KRW trở lên được tặng 1 chai soju (mỗi nhóm 1 chai).' WHERE pr.store_name_ko = '젠사이야' AND p.description = '오만원 이상 구매시 소주 한 병 무료 *일행당 1병'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Soongsil University pricing: Set A, B, and C available at youth rates.', p.description_ja = 'Set A・B・Cは青少年料金で利用可能。', p.description_vi = 'Set A, B, C áp dụng giá thanh thiếu niên.' WHERE pr.store_name_ko = '놀숲' AND p.description = '숭실대 요금표: SET A, B, C 요금제 성인 -> 청소년 변경'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '15% off game fees with a Naver review within 1 week, including the same day.', p.description_ja = '当日を含む1週間以内のNaverレビューでゲーム料金15%割引。', p.description_vi = 'Giảm 15% phí chơi game khi viết review Naver trong vòng 1 tuần, tính cả ngày sử dụng.' WHERE pr.store_name_ko = '히어로 보드게임카페' AND p.description = '게임비 15% 할인 / 1주일 이내 (당일 포함) 네이버 리뷰'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1. Americano for 2,000 KRW when ordering through POS before 9 AM - - 2. Free size upgrade from L to J when purchasing 4 or more drinks on Mondays and Fridays. - Excludes single-size menu items such as smoothies, crushes, Brown Sugar Jewelry, and Strawberry Jewelry. - - 3. 10% off group orders of 10 drinks or more. - Only applies to direct POS payments. Delivery/platform orders such as Baemin, Coupang Eats, and Naver are excluded.', p.description_ja = '1. 9時以前にPOS注文するとアメリカーノ2,000ウォン。 - 2. 月・金曜日にドリンク4杯以上購入でL→Jサイズアップ無料。単一サイズメニューは対象外。 - 3. ドリンク10杯以上の団体注文は10%割引。店頭POSでの直接決済のみ対象。プラットフォーム注文は対象外。', p.description_vi = '1. Americano giá 2.000 KRW khi đặt qua POS trước 9 AM. - 2. Mua từ 4 đồ uống vào thứ Hai và thứ Sáu được nâng size miễn phí từ L lên J. Không áp dụng cho món chỉ có một size. - 3. Giảm 10% cho đơn nhóm từ 10 đồ uống trở lên. Chỉ áp dụng khi thanh toán trực tiếp tại POS; không áp dụng cho đơn trên nền tảng.' WHERE pr.store_name_ko = '공차' AND p.description = '1. 9시 이전 POS 주문시 -아메리카노 2000원 구매 - -2. 월, 금요일 4잔 이상 구매시 -L -> J size up -(단일 사이즈메뉴는 제외-스무디, 크러쉬,브라운슈가 쥬얼리 ,딸기쥬얼리 등등) - -3. 10잔 이상 단체 주문시 10%할인 -포스에서 직접 결제, 배민 쿠팡이츠 네이버등 플랫폼 결제는 할인적용x'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottled soft drink.', p.description_ja = 'ボトル飲料1本を無料提供。', p.description_vi = 'Tặng 1 chai nước ngọt.' WHERE pr.store_name_ko = '광어삼촌' AND p.description = '음료 1병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 canned soft drink when ordering 3 or more meals.', p.description_ja = '食事メニュー3品以上注文時、缶ドリンク1本を無料提供。', p.description_vi = 'Gọi từ 3 món ăn trở lên được tặng 1 lon nước ngọt.' WHERE pr.store_name_ko = '논두렁갈비' AND p.description = '식사류 3개 이상 주문시 음료 1캔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when paying with Toss or KakaoPay (meat dishes only).', p.description_ja = 'TossまたはKakaoPay決済時、肉料理5%割引。', p.description_vi = 'Giảm 5% món thịt khi thanh toán bằng Toss hoặc KakaoPay.' WHERE pr.store_name_ko = '먹돼지' AND p.description = '토스 or 카카오페이 결제 시 5% 할인 (고기류 주문 시에만 해당)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Get one free topping add-on (Double Cheese, Corn, Beans, or Jalapeños) for orders placed between 2:30 PM and 5:30 PM.', p.description_ja = '2:30 PM〜5:30 PMの注文で、ダブルチーズ・コーン・豆・ハラペーニョのうちトッピング1つを無料追加。', p.description_vi = 'Đơn đặt từ 2:30 PM đến 5:30 PM được thêm miễn phí 1 topping: phô mai đôi, bắp, đậu hoặc ớt jalapeño.' WHERE pr.store_name_ko = '부리또집' AND p.description = '2시반에서 5시반 사이 주문 시, 토핑(더블치즈, 옥수수콘, 콩, 할라피뇨) 추가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 canned soft drink when ordering Dakhanmari or dumpling hot pot according to the number of people.', p.description_ja = 'タッカンマリまたは餃子鍋を人数分注文時、缶ドリンク1本を無料提供。', p.description_vi = 'Gọi dakhanmari hoặc lẩu mandu theo số người được tặng 1 lon nước ngọt.' WHERE pr.store_name_ko = '황새골' AND p.description = '닭한마리, 만두전골 인원 수 맞춰서 주문 시 음료수 한 캔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4 or more, get 1 free canned soft drink. Or, for groups of 4 or more spending 50,000 KRW or more, get 1 free bottle of soju.', p.description_ja = '4人以上で缶ドリンク1本を無料提供。 - また、4人以上で50,000ウォン以上利用時、焼酎1本を無料提供。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng 1 lon nước ngọt. - Hoặc nhóm từ 4 người trở lên chi từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '신의주 찹쌀순대' AND p.description = '4인 이상 주문 시 음료 한 캔 제공 or 4인 이상 방문하여 5만원 이상 주문 시 소주 한 병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free rice ball for purchases of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の購入でおにぎりを無料提供。', p.description_vi = 'Mua từ 40.000 KRW trở lên được tặng cơm nắm.' WHERE pr.store_name_ko = '불타는 소금구이' AND p.description = '4만원 이상 구매 시 주먹밥 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 20,000 KRW or more, get 2 free drinks. For orders of 30,000 KRW or more, upgrade single items to set menus.', p.description_ja = '20,000ウォン以上の注文でドリンク2杯を無料提供。 - 30,000ウォン以上の注文で単品をセットメニューに変更。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng 2 đồ uống. - Đơn từ 30.000 KRW trở lên được nâng món lẻ thành set menu.' WHERE pr.store_name_ko = '지지고' AND p.description = '2만원 이상 주문 시 음료 2개 제공, 3만원 이상 주문 시 단품을 세트로 변경'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 500ml soft drink for groups of 4 or more.', p.description_ja = '4人以上の来店で1 500ml ソフトドリンクを無料提供。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng 1 500ml nước ngọt.' WHERE pr.store_name_ko = '맛닭꼬' AND p.description = '4인 이상 방문 시 500ml 음료 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free cheese topping when ordering 2 or more servings per table.', p.description_ja = 'テーブルごとに2人前以上注文時、チーズトッピングを無料追加。', p.description_vi = 'Mỗi bàn gọi từ 2 phần trở lên được thêm topping phô mai miễn phí.' WHERE pr.store_name_ko = '코웍 비스트로' AND p.description = '테이블 당 2인분 이상 주문 시 치즈 추가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Add 30g of chicken breast or smoked duck per menu item.', p.description_ja = 'メニュー1品ごとに、鶏むね肉または燻製鴨30gを追加提供。', p.description_vi = 'Thêm 30g ức gà hoặc vịt hun khói cho mỗi món.' WHERE pr.store_name_ko = '포케올데이' AND p.description = '메뉴당 닭가슴살 or 훈제오리 30g 추가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1.25L Pepsi Zero for orders of 30,000 KRW or more.', p.description_ja = '30,000ウォン以上の注文でペプシゼロ1.25Lを無料提供。', p.description_vi = 'Đơn từ 30.000 KRW trở lên được tặng 1 chai Pepsi Zero 1,25L.' WHERE pr.store_name_ko = '피자스쿨' AND p.description = '3만원 이상 주문 시 펩시 제로 1.25L 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 canned soft drink per table.', p.description_ja = 'テーブルごとに1 缶飲料を無料提供。', p.description_vi = 'Tặng 1 nước ngọt đóng lon cho mỗi bàn.' WHERE pr.store_name_ko = '리얼후라이' AND p.description = '테이블 당 음료 1캔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 canned soft drink for orders of 20,000 KRW or more.', p.description_ja = '20,000ウォン以上の注文で缶ドリンク1本を無料提供。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng 1 lon nước ngọt.' WHERE pr.store_name_ko = '왕돈까스왕냉면' AND p.description = '2만원 이상 주문 시 음료 1캔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4 or more, choose one per table: 1 500ml soft drink or 4 fried dumplings.', p.description_ja = '4人以上の来店で、テーブルごとに1 500ml ソフトドリンクまたは4 焼き餃子のいずれかを提供。', p.description_vi = 'Nhóm từ 4 người trở lên chọn 1 ưu đãi cho mỗi bàn: 1 500ml nước ngọt hoặc 4 mandu chiên.' WHERE pr.store_name_ko = '취향' AND p.description = '4인 이상 방문 시 테이블 당 음료 500ml or 군만두 4개 중 택 1 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Double Cheeseburger Set discounted to 9,900 KRW, plus a free cup drink for takeout single-item orders only.', p.description_ja = 'ダブルチーズバーガーセットは9,900ウォン。単品テイクアウト注文時はカップドリンク無料。', p.description_vi = 'Set Double Cheeseburger giá 9.900 KRW, kèm đồ uống ly miễn phí chỉ cho đơn món lẻ mang đi.' WHERE pr.store_name_ko = '크라이치즈버거' AND p.description = '더블치즈버거세트 9,900원으로 할인, 단품 포장 주문 시 컵 음료 제공(포장에만 해당)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Available at youth rates.', p.description_ja = 'Set A・B・Cは青少年料金で利用可能。', p.description_vi = 'Set A, B, C áp dụng giá thanh thiếu niên.' WHERE pr.store_name_ko = '놀숲' AND p.description = '청소년 요금제로 이용 가능'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free extra shot in one drink when ordering 2 big-size iced teas or Americanos.', p.description_ja = 'ビッグサイズのアイスティーまたはアメリカーノを2杯注文時、1杯にショット1回無料追加。', p.description_vi = 'Gọi 2 ly trà đá hoặc Americano cỡ lớn được thêm 1 shot miễn phí vào 1 ly.' WHERE pr.store_name_ko = '카페 봄봄' AND p.description = '아이스티 or 아메리카노 빅사이즈 2잔 주문 시 1잔 샷 추가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For in-store orders of 18,000 KRW or more, choose one topping: chocolate shell, strawberry shell, granola, Froot Loops, Corn Frost, Choco Chex, or bread.', p.description_ja = '18,000ウォン以上の来店注文で、チョコシェル・いちごシェル・グラノーラ・フルートループ・コーンフロスト・チョコチェックス・食パンのうち1つを選択。', p.description_vi = 'Đơn tại cửa hàng từ 18.000 KRW trở lên được chọn 1 topping: sốt phủ chocolate, sốt phủ dâu, granola, Froot Loops, Corn Frost, Choco Chex hoặc bánh mì.' WHERE pr.store_name_ko = '요거트아이스크림의정석' AND p.description = '18,000원 이상 방문 주문 시, 초코/딸게쉘, 그레놀라, 후르트링, 콘프로스트, 첵스초코, 식빵 중 택 1'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off all menu items, excluding set menus.', p.description_ja = 'セットメニューを除く全メニュー10%割引。', p.description_vi = 'Giảm 10% toàn bộ menu, không gồm set menu.' WHERE pr.store_name_ko = '에브어이브' AND p.description = '전 메뉴 10% 할인 (세트메뉴 제외)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '15% off usage fees.', p.description_ja = '利用料金15%割引。', p.description_vi = 'Giảm 15% phí sử dụng.' WHERE pr.store_name_ko = '히어로 보드게임카페' AND p.description = '이용료 15% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1. Americano for 2,000 KRW when ordering through POS before 9 AM. - 2. Free size upgrade from L to J when purchasing 4 or more drinks on Mondays and Fridays. - Excludes single-size menu items such as smoothies, crushes, Brown Sugar Jewelry, and Strawberry Jewelry. - 3. 10% off group orders of 10 drinks or more. - Only applies to direct POS payments. Platform orders are excluded.', p.description_ja = '1. 9時以前にPOS注文するとアメリカーノ2,000ウォン。 - 2. 月・金曜日にドリンク4杯以上購入でL→Jサイズアップ無料。単一サイズメニューは対象外。 - 3. ドリンク10杯以上の団体注文は10%割引。店頭POSでの直接決済のみ対象。プラットフォーム注文は対象外。', p.description_vi = '1. Americano giá 2.000 KRW khi đặt qua POS trước 9 AM. - 2. Mua từ 4 đồ uống vào thứ Hai và thứ Sáu được nâng size miễn phí từ L lên J. Không áp dụng cho món chỉ có một size. - 3. Giảm 10% cho đơn nhóm từ 10 đồ uống trở lên. Chỉ áp dụng khi thanh toán trực tiếp tại POS; không áp dụng cho đơn trên nền tảng.' WHERE pr.store_name_ko = '공차' AND p.description = '1. 9시 이전 POS 주문 시 아메리카노 2000원 구매 -2. 월, 금요일 4잔 이상 구매 시 L -> J size up (단일 사이즈메뉴는 제외-스무디, 크러쉬, 브라운슈가 쥬얼리, 딸기쥬얼리 등등) -3. 10잔 이상 단체 주문 시 10% 할인 *포스에서 직접 결제, 플랫폼 결제는 할인 적용 x'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay for 10 hours and receive 2 bonus hours plus 1 free drink.', p.description_ja = '10時間分の決済で、2時間追加+ドリンク1杯を提供。', p.description_vi = 'Thanh toán 10 giờ được tặng thêm 2 giờ và 1 đồ uống.' WHERE pr.store_name_ko = '에이플 PC방' AND p.description = '10시간 충전 시, 2시간+음료 1잔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free Americano when ordering 4 drinks.', p.description_ja = 'ドリンク4杯注文時、アメリカーノ1杯を無料提供。', p.description_vi = 'Gọi 4 đồ uống được tặng 1 Americano.' WHERE pr.store_name_ko = '메가커피' AND p.description = '음료 4잔 주문시, 아메리카노 1잔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For regular registration: - 1. 103-hour pass + 10 bonus hours; 150-hour pass + 15 bonus hours; 200-hour pass + 20 bonus hours. - 2. 4-week pass (28 days) + 3 bonus days; 12-week pass (84 days) + 9 bonus days. - - For consecutive pass renewal: - 1. 100-hour pass + 15 bonus hours; 150-hour pass + 22.5 bonus hours; 200-hour pass + 30 bonus hours. - 2. 4-week pass (28 days) + 4 bonus days; 12-week pass (84 days) + 12 bonus days. - - Cannot be combined with other promotions.', p.description_ja = '通常登録時: - 1. 103時間券+10時間、150時間券+15時間、200時間券+20時間。 - 2. 4週間券(28日)+3日、12週間券(84日)+9日。 - - 利用券を継続再登録する場合: - 1. 100時間券+15時間、150時間券+22.5時間、200時間券+30時間。 - 2. 4週間券(28日)+4日、12週間券(84日)+12日。 - - 他のイベントとの併用不可。', p.description_vi = 'Khi đăng ký thông thường: - 1. Vé 103 giờ + 10 giờ; vé 150 giờ + 15 giờ; vé 200 giờ + 20 giờ. - 2. Vé 4 tuần (28 ngày) + 3 ngày; vé 12 tuần (84 ngày) + 9 ngày. - - Khi gia hạn liên tiếp: - 1. Vé 100 giờ + 15 giờ; vé 150 giờ + 22,5 giờ; vé 200 giờ + 30 giờ. - 2. Vé 4 tuần (28 ngày) + 4 ngày; vé 12 tuần (84 ngày) + 12 ngày. - - Không áp dụng đồng thời với khuyến mãi khác.' WHERE pr.store_name_ko = '작심 스터디카페' AND p.description = '-일반 등록시 -1. 103시간권 + 10시간, 150시간권 + 15시간, 200시간권 + 20시간 -2. 4주권(28일) + 3일, 12주권(84일) + 9일 --이용권 이어서 재등록시 -1. 100시간권 + 15시간, 150시간권 + 22.5시간, 200시간권 + 30시간 -2. 4주권(28일) + 4일, 12주권(84일) + 12일 *타 이벤트와 중복 적용 불가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for payments of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の決済で焼酎1本を無料提供。', p.description_vi = 'Thanh toán từ 40.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '파동추야' AND p.description = '4만원 이상 결제 시 소주 1병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free mini nachos per table when ordering 4 or more cocktails.', p.description_ja = 'カクテル4杯以上注文時、テーブルごとにミニナチョスを無料提供。', p.description_vi = 'Gọi từ 4 ly cocktail trở lên được tặng nachos nhỏ cho mỗi bàn.' WHERE pr.store_name_ko = '가치' AND p.description = '칵테일 4잔 이상 주문 시 테이블 당 미니나쵸 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Orders before 6 PM: 1 free bottle of soju per table.', p.description_ja = '18時以前の注文で、テーブルごとに焼酎1本を無料提供。', p.description_vi = 'Đặt món trước 6 PM được tặng 1 chai soju cho mỗi bàn.' WHERE pr.store_name_ko = '28청춘호프포차' AND p.description = '18시 이전 주문 시, 테이블 당 소주 1병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For cash payments of 70,000 KRW or more, choose one free item: Kimchi Fried Rice or Rolled Omelet.', p.description_ja = '70,000ウォン以上の現金決済で、キムチチャーハンまたは卵焼きのうち1つを提供。', p.description_vi = 'Thanh toán tiền mặt từ 70.000 KRW trở lên được chọn 1 món: cơm chiên kimchi hoặc trứng cuộn.' WHERE pr.store_name_ko = '블루힐' AND p.description = '7만원 이상 현금 결제 시 김치볶음밥 or 계란말이 중 택 1 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off total payment, including alcohol, plus 1 free canned soft drink for groups of 2 or more visiting between 11 AM and 5 PM. Cash or bank transfer only.', p.description_ja = '酒類を含む決済金額5%割引。さらに11時〜17時に2人以上で来店時、缶飲料1本提供。現金または口座振込のみ対象。', p.description_vi = 'Giảm 5% tổng thanh toán, bao gồm đồ uống có cồn. Ngoài ra, nhóm từ 2 người đến từ 11 AM đến 5 PM được tặng 1 lon nước ngọt. Chỉ áp dụng khi thanh toán tiền mặt hoặc chuyển khoản.' WHERE pr.store_name_ko = '상도로 3가' AND p.description = '결제금액 5% 할인(술값 포함) + 11시-17시 & 2인 이상 방문 시 음료 1캔 제공(현금, 계좌이체 시)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for payments of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の決済で焼酎1本を無料提供。', p.description_vi = 'Thanh toán từ 40.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '숯가마 바베큐 치킨' AND p.description = '4만원 이상 결제 시 소주 1병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free garlic butter potato for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文でガーリックバターポテトを無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng khoai tây bơ tỏi.' WHERE pr.store_name_ko = '역전할머니맥주' AND p.description = '5만원 이상 주문 시 갈릭빠다포테이토 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free soda when adding 5,000 KRW of credit -Free café drink when adding 10,000 KRW or more of credit', p.description_ja = '5,000ウォンチャージで炭酸飲料を無料提供。 - 10,000ウォン以上のチャージでカフェドリンクを無料提供。', p.description_vi = 'Nạp 5.000 KRW được tặng soda. - Nạp từ 10.000 KRW trở lên được tặng đồ uống cà phê.' WHERE pr.store_name_ko = '긱스타 PC방' AND p.description = '5,000원 충전 시 탄산음료 제공 -10,000원 이상 충전 시 카페음료 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Choose 1 free topping (beans, jalapeños, sweet corn, or double cheese) for visits between 2:30 PM and 5:30 PM.', p.description_ja = '2:30 PM〜5:30 PMの来店で、豆・ハラペーニョ・スイートコーン・ダブルチーズのうちトッピング1つを無料追加。', p.description_vi = 'Đến từ 2:30 PM đến 5:30 PM được chọn thêm miễn phí 1 topping: đậu, ớt jalapeño, bắp ngọt hoặc phô mai đôi.' WHERE pr.store_name_ko = '부리또집' AND p.description = '오후 2:30~5:30 사이 방문 시 추가 토핑 4종 (콩, 할라피뇨, 스위트콘, 더블치즈) 중 택 1 추가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free cheese add-on for groups of 2 or more.', p.description_ja = '2人以上の来店でチーズ追加を無料提供。', p.description_vi = 'Nhóm từ 2 người trở lên được tặng phần phô mai thêm.' WHERE pr.store_name_ko = '코웍 비스트로' AND p.description = '2인 이상 방문 시, 치즈사리 추가 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1.25L Pepsi Zero Sugar Lime for every 30,000 KRW spent. Dine-in and takeout only.', p.description_ja = '30,000ウォンごとの利用で1.25L ペプシゼロシュガーライムを無料提供。 - 店内飲食・テイクアウトのみ対象。', p.description_vi = 'Tặng 1.25L Pepsi Zero Sugar Lime cho mỗi 30.000 KRW chi tiêu. - Chỉ áp dụng cho ăn tại chỗ và mang đi.' WHERE pr.store_name_ko = '피자스쿨' AND p.description = '주문금액 30,000원 당 펩시 제로 슈거 라임 1.25L 제공 (포장 및 매장식사만 적용)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4, choose one per table: 4 fried dumplings or 1 canned soda.', p.description_ja = '4人以上の来店で、テーブルごとに4 焼き餃子または1 缶炭酸飲料のいずれかを提供。', p.description_vi = 'Nhóm từ 4 người trở lên chọn 1 ưu đãi cho mỗi bàn: 4 mandu chiên hoặc 1 soda lon.' WHERE pr.store_name_ko = '취향' AND p.description = '4인 방문 시 군만두 4개 서비스 or 탄산 음료 1캔 (탄산음료 인당 1개가 아닌 테이블 당 1개)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 1–2, get 1 free drink. For groups of 3–4, get 2 free drinks.', p.description_ja = '1〜2人でドリンク1杯を無料提供。 - 3〜4人で2 ドリンクを無料提供。', p.description_vi = 'Nhóm 1–2 người được tặng 1 đồ uống. - Nhóm 3–4 người được tặng 2 đồ uống.' WHERE pr.store_name_ko = '면식당' AND p.description = '2인 이하 음료수 1개 제공 / 3인 이상 4인 이하 음료수 2개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free extra shot in one drink when ordering either 2 Big Size Americanos or 1 Big Size Americano plus 1 Iced Tea.', p.description_ja = 'ビッグサイズアメリカーノ2杯、またはビッグサイズアメリカーノ1杯+アイスティー1杯注文時、1杯にショット1回無料追加。', p.description_vi = 'Gọi 2 Americano cỡ lớn hoặc 1 Americano cỡ lớn + 1 trà đá được thêm 1 shot miễn phí vào 1 ly.' WHERE pr.store_name_ko = '카페 봄봄' AND p.description = '빅 사이즈 아메리카노 두 잔 구매 시 한 잔에 샷 추가 / 빅 사이즈 아메리카노 + 아이스티 구매 시 한 잔에 샷 추가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free pineapple sherbet for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文でパイナップルシャーベットを無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng sorbet dứa.' WHERE pr.store_name_ko = '역전할머니맥주' AND p.description = '50,000원 이상 주문 시 파인애플 샤베트 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free bottled soft drink for groups of 4 or more, or 1 free bottle of soju plus 1 bottled soft drink for payments of 50,000 KRW or more.', p.description_ja = '4人以上の来店でボトルドリンク1本、または50,000ウォン以上の決済で焼酎1本+ボトルドリンク1本を無料提供。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng 1 chai nước ngọt; hoặc thanh toán từ 50.000 KRW trở lên được tặng 1 chai soju + 1 chai nước ngọt.' WHERE pr.store_name_ko = '신의주 찹쌀순대' AND p.description = '4인 이상 방문 시 음료 1병 제공 / 5만원 이상 결제 시 소주 1병 음료 1병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 20,000 KRW or more, get 2 free drinks. For orders of 30,000 KRW or more, upgrade all single items to set menus.', p.description_ja = '20,000ウォン以上の注文でドリンク2杯を無料提供。 - 30,000ウォン以上の注文で単品をすべてセットメニューに変更。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng 2 đồ uống. - Đơn từ 30.000 KRW trở lên được nâng tất cả món lẻ thành set menu.' WHERE pr.store_name_ko = '지지고' AND p.description = '1. 2만원 이상 주문 시 음료수 2개 제공 -2. 3만원 이상 주문 시 단품을 세트로 변경 (주문 건 모두)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Double Cheeseburger Set for 9,900 KRW, plus a free cup drink for takeout single-item orders only.', p.description_ja = 'ダブルチーズバーガーセットは9,900ウォン。単品テイクアウト注文時はカップドリンク無料。', p.description_vi = 'Set Double Cheeseburger giá 9.900 KRW, kèm đồ uống ly miễn phí chỉ cho đơn món lẻ mang đi.' WHERE pr.store_name_ko = '크라이치즈버거' AND p.description = '더블치즈버거세트 9,900원 + 단품 포장 주문 시 컵 음료 제공 (포장에만 해당)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free rice ball for groups of 3 or more.', p.description_ja = '3人以上の来店でおにぎりを無料提供。', p.description_vi = 'Nhóm từ 3 người trở lên được tặng cơm nắm.' WHERE pr.store_name_ko = '불타는 소금구이' AND p.description = '3인 이상 방문 시 주먹밥 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 50,000 KRW or more, choose one: 1 bottled soft drink or 1 bottle of soju.', p.description_ja = '50,000ウォン以上で、ボトルドリンク1本または焼酎1本のうち1つを選択。', p.description_vi = 'Từ 50.000 KRW trở lên được chọn 1 trong các món: 1 chai nước ngọt hoặc 1 chai soju.' WHERE pr.store_name_ko = '광어삼촌' AND p.description = '5만원 이상 주문 시 음료수 1병 or 소주 1병 서비스'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free topping add-on for burrito orders, excluding bacon.', p.description_ja = 'ブリトー注文時、ベーコンを除くトッピング1つ無料。', p.description_vi = 'Gọi burrito được thêm 1 topping miễn phí, trừ bacon.' WHERE pr.store_name_ko = '삼봉버거' AND p.description = '3인 방문 시 음료수 1캔 / 6인 방문 시 음료수 2캔 / 9인 방문 시 음료수 3캔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free topping add-on for burrito orders, excluding bacon.', p.description_ja = 'ブリトー注文時、ベーコンを除くトッピング1つ無料。', p.description_vi = 'Gọi burrito được thêm 1 topping miễn phí, trừ bacon.' WHERE pr.store_name_ko = '밀플랜비' AND p.description = '부리또 주문 시 토핑 추가 (베이컨 제외)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For dine-in orders, get one free 500ml soft drink per table when spending 75,000 KRW or more for groups of up to 4, or 85,000 KRW or more for groups of 5 or more.', p.description_ja = '店内注文で、4人以下は75,000ウォン以上、5人以上は85,000ウォン以上の利用時、テーブルごとに500mlドリンク1本を無料提供。', p.description_vi = 'Đơn ăn tại chỗ được tặng 1 nước ngọt 500ml cho mỗi bàn khi chi tiêu từ 75.000 KRW với nhóm tối đa 4 người, hoặc từ 85.000 KRW với nhóm từ 5 người trở lên.' WHERE pr.store_name_ko = '청운음식점' AND p.description = '4인 이하 7만 5천원 / 5인 이하 8만 5천원 방문 주문 시 한 테이블 음료 500ml 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free soybean paste stew per table, plus free steamed egg once when ordering 3 or more meat servings per table.', p.description_ja = 'テーブルごとにテンジャンチゲを提供。さらにテーブルごとに肉3人前以上注文時、茶碗蒸しを1回無料提供。', p.description_vi = 'Mỗi bàn được tặng canh tương đậu. Gọi từ 3 phần thịt trở lên mỗi bàn được tặng thêm 1 lần trứng hấp.' WHERE pr.store_name_ko = '고기스토리' AND p.description = '테이블 당 된장찌개 제공, 테이블 당 고기 3인분 이상 주문 시 계란찜 1회 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free side menu (Bibim Noodles) plus 1 drink when participating in the review event.', p.description_ja = 'レビューイベント参加時、サイドメニュー(ビビン麺)+ドリンク1杯を無料提供。', p.description_vi = 'Tham gia sự kiện review được tặng món phụ (mì trộn bibim) + 1 đồ uống.' WHERE pr.store_name_ko = '상도동 솥뚜껑' AND p.description = '리뷰이벤트 참여 시 사이드메뉴(비빔면) + 음료 1개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free fried egg per person, or free steamed egg for groups of 4 or more. Naver receipt review required.', p.description_ja = '1人につき目玉焼き1個、または4人以上で茶碗蒸しを提供。Naverレシートレビュー必須。', p.description_vi = 'Tặng trứng ốp la cho mỗi người, hoặc tặng trứng hấp cho nhóm từ 4 người trở lên. Cần đánh giá hóa đơn Naver.' WHERE pr.store_name_ko = '함지박' AND p.description = '인당 계란후라이 또는 4인 이상 시 계란찜 (네이버 영수증 리뷰 필수)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 20,000 KRW or more, get 2 free drinks. For orders of 30,000 KRW or more, upgrade all menu items to set menus.', p.description_ja = '20,000ウォン以上の注文でドリンク2杯を無料提供。 - 30,000ウォン以上の注文で全メニューをセットメニューに変更。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng 2 đồ uống. - Đơn từ 30.000 KRW trở lên được nâng toàn bộ menu thành set menu.' WHERE pr.store_name_ko = '지지고' AND p.description = '2만원 이상 주문 시 음료 2개 서비스, 3만원 이상 주문 시 모든 메뉴 세트로 변경'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off all menu items, excluding set menus.', p.description_ja = 'セットメニューを除く全メニュー10%割引。', p.description_vi = 'Giảm 10% toàn bộ menu, không gồm set menu.' WHERE pr.store_name_ko = '에브어이브' AND p.description = '전메뉴 10% 할인 (세트메뉴 제외)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free extra espresso shot for orders of 10,000 KRW or more.', p.description_ja = '10,000ウォン以上の注文でエスプレッソショット1回無料追加。', p.description_vi = 'Đơn từ 10.000 KRW trở lên được thêm 1 shot espresso miễn phí.' WHERE pr.store_name_ko = '블랙&조이커피' AND p.description = '만원 이상 주문 시 샷 추가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free extra shot once when ordering 2 drinks (2 Big Americanos, or 1 Big Americano plus 1 Iced Tea). -Free extra shot for orders of 5,000 KRW or more through Bombom Order.', p.description_ja = 'ドリンク2杯(ビッグサイズアメリカーノ2杯、またはビッグサイズアメリカーノ1杯+アイスティー1杯)注文時、1杯にショット1回無料追加。Bombom Orderで5,000ウォン以上注文時もショット1回無料追加。', p.description_vi = 'Gọi 2 đồ uống (2 Americano cỡ lớn hoặc 1 Americano cỡ lớn + 1 trà đá) được thêm 1 shot miễn phí vào 1 ly. Đơn từ 5.000 KRW qua Bombom Order cũng được thêm 1 shot miễn phí.' WHERE pr.store_name_ko = '카페 봄봄' AND p.description = '2잔 (빅 아메리카노 2잔/빅 아메 1잔, 아이스티 1잔) 주문 시 샷 추가 1번/봄봄 오더로 5천원 주문 시 샷 추가 무료'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free chocolate shell, strawberry shell, or granola topping for in-store orders of 18,000 KRW or more.', p.description_ja = '来店注文18,000ウォン以上で、チョコシェル・いちごシェル・グラノーラのうちトッピング1つを無料追加。', p.description_vi = 'Đơn tại cửa hàng từ 18.000 KRW trở lên được chọn thêm miễn phí topping sốt phủ chocolate, sốt phủ dâu hoặc granola.' WHERE pr.store_name_ko = '요거트아이스크림의정석' AND p.description = '18000원 이상 방문 주문 시 초코/딸기쉘 or 그래놀라 토핑 추가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free Americano with any slice cake purchase.', p.description_ja = 'カットケーキ購入時、アメリカーノ1杯を無料提供。', p.description_vi = 'Mua miếng bánh kem được tặng 1 Americano.' WHERE pr.store_name_ko = '커피나무' AND p.description = '조각케이크 구매 시 아메리카노 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Morning set: Americano + sandwich for 3,500 KRW, plus free size-up for all drinks.', p.description_ja = 'モーニングセット:アメリカーノ+サンドイッチ3,500ウォン、全ドリンク無料サイズアップ。', p.description_vi = 'Set buổi sáng: Americano + sandwich giá 3.500 KRW, đồng thời nâng size miễn phí cho toàn bộ đồ uống.' WHERE pr.store_name_ko = '브레댄코' AND p.description = '모닝세트: 아메리카노 + 샌드위치 3500원, 음료 전 메뉴 무료 사이즈업'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free instant ramen for orders of 20,000 KRW or more.', p.description_ja = '20,000ウォン以上の注文でインスタントラーメンを無料提供。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng ramen ăn liền.' WHERE pr.store_name_ko = '씨밤바베' AND p.description = '2만원 이상 주문 시 즉석 라면 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free mini nachos per table when ordering 4 or more cocktails.', p.description_ja = 'カクテル4杯以上注文時、テーブルごとにミニナチョスを無料提供。', p.description_vi = 'Gọi từ 4 ly cocktail trở lên được tặng nachos nhỏ cho mỗi bàn.' WHERE pr.store_name_ko = '가치' AND p.description = '칵테일 4잔 이상 주문시 테이블 당 미니 나초'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文で焼酎1本を無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '젠사이야' AND p.description = '5만원 이상 주문 시 소주 1병'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for cash payments of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の現金決済で焼酎1本を無料提供。', p.description_vi = 'Thanh toán tiền mặt từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '인쌩맥주' AND p.description = '5만원 이상 현금결제 시 소주 1병'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For cash payments of 70,000 KRW or more, choose one: Kimchi Fried Rice or Rolled Omelet.', p.description_ja = '70,000ウォン以上の現金決済で、キムチチャーハンまたは卵焼きのうち1つを提供。', p.description_vi = 'Thanh toán tiền mặt từ 70.000 KRW trở lên được chọn 1 món: cơm chiên kimchi hoặc trứng cuộn.' WHERE pr.store_name_ko = '블루힐' AND p.description = '7만원 이상 현금 결제 시 김치볶음밥 또는 계란말이 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free French Fries for orders of 40,000 KRW or more per table.', p.description_ja = '40,000ウォン以上の注文でフライドポテトを無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng khoai tây chiên.' WHERE pr.store_name_ko = '사랑과평화' AND p.description = '테이블당 4만원 이상 주문 시 감자튀김 서비스'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when paying by cash or bank transfer.', p.description_ja = '現金または口座振込決済時、5%割引。', p.description_vi = 'Giảm 5% khi thanh toán bằng tiền mặt hoặc chuyển khoản.' WHERE pr.store_name_ko = '상도로 3가' AND p.description = '현금 or 계좌 이체 시 5% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 350ml canned soft drink for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文で1 350ml 缶ドリンクを無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng 1 350ml nước ngọt đóng lon.' WHERE pr.store_name_ko = '파동추야' AND p.description = '4만원 이상 주문 시 음료 1캔(350ml) 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay 10,000 KRW by bank transfer or cash to receive 10 hours plus 1 free drink.', p.description_ja = '現金または口座振込で10,000ウォンをチャージすると、10時間+ドリンク1杯を提供。', p.description_vi = 'Nạp 10.000 KRW bằng tiền mặt hoặc chuyển khoản được tặng 10 giờ sử dụng và 1 đồ uống.' WHERE pr.store_name_ko = '에이플 PC방' AND p.description = '계좌이체 or 현금 1만원 충전 시 10시간 + 음료 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Set A, B, and C available at youth rates.', p.description_ja = 'Set A・B・Cは青少年料金で利用可能。', p.description_vi = 'Set A, B, C áp dụng giá thanh thiếu niên.' WHERE pr.store_name_ko = '놀숲' AND p.description = 'A B C 세트 청소년 요금제로 이용 가능'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay 10,000 KRW by bank transfer or cash at the counter, then text the owner “I’m a student of the College of Economics and International Commerce, and I recharged 10,000 KRW” to get 5 extra songs.', p.description_ja = 'カウンターで口座振込または現金で10,000ウォンをチャージ後、店主に学生認証メッセージを送ると5曲追加。', p.description_vi = 'Nạp 10.000 KRW bằng chuyển khoản hoặc tiền mặt tại quầy, sau đó nhắn tin xác minh sinh viên cho chủ quán để nhận thêm 5 bài hát.' WHERE pr.store_name_ko = '리코스타 코인노래방' AND p.description = '계좌이체 또는 현금 카운터 1만원 충전 후 사장님께 문자로 ''경통대 학생인데 1만원 충전했습니다'' 인증 시 5곡 추가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off meat dishes when paying with Toss Pay.', p.description_ja = 'Toss Pay決済時、肉料理5%割引。', p.description_vi = 'Giảm 5% món thịt khi thanh toán bằng Toss Pay.' WHERE pr.store_name_ko = '먹돼지' AND p.description = '토스페이 결제 시 고기류 5% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink for groups of 4 or more.', p.description_ja = '4人以上の来店でドリンクを無料提供。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng đồ uống.' WHERE pr.store_name_ko = '신의주 찹쌀순대' AND p.description = '4인 이상 방문 시 음료 1개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free Bibim Noodles plus 1 drink when participating in the review event.', p.description_ja = 'レビューイベント参加時、ビビン麺+ドリンク1杯を無料提供。', p.description_vi = 'Tham gia sự kiện review được tặng mì trộn bibim + 1 đồ uống.' WHERE pr.store_name_ko = '상도동 솥뚜껑' AND p.description = '리뷰이벤트 참여 시 비빔면+음료 1개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1.25L Pepsi Zero Lime for orders of 30,000 KRW or more. Dine-in or takeout only.', p.description_ja = '30,000ウォン以上の注文で1.25L ペプシゼロライムを無料提供。 - 店内飲食またはテイクアウトのみ対象。', p.description_vi = 'Tặng 1.25L Pepsi Zero Lime cho đơn hàng từ 30.000 KRW trở lên. - Chỉ áp dụng cho ăn tại chỗ hoặc mang đi.' WHERE pr.store_name_ko = '피자스쿨' AND p.description = '3만원 이상 주문(매장 식사, 포장) 시 펩시 제로 라임 1.25L 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 30,000 KRW or more, choose one: 2 drinks, soju, beer, or Youtiao. Up to 4 receipts may be combined.', p.description_ja = '30,000ウォン以上の注文で、ドリンク2本・焼酎・ビール・油条のうち1つを選択。レシートは最大4枚まで合算可能。 - レシートは最大4枚まで合算可能。', p.description_vi = 'Đơn từ 30.000 KRW trở lên được chọn 1 trong các món: 2 đồ uống, soju, bia hoặc quẩy Youtiao. Có thể gộp tối đa 4 hóa đơn. - Có thể gộp tối đa 4 hóa đơn.' WHERE pr.store_name_ko = '샹츠마라' AND p.description = '3만원 이상 주문 시 음료수 2개 또는 소주 또는 맥주 또는 유토우 제공(합칠 수 있는 영수증 최대 4개)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned soft drink when ordering 2 or more main dishes.', p.description_ja = '2つ以上 メインメニュー注文時、缶ドリンクを無料提供。', p.description_vi = 'Khi gọi 2 trở lên món chính, được tặng nước ngọt đóng lon.' WHERE pr.store_name_ko = '슬로우캘리' AND p.description = '메인 메뉴 2개 이상 주문 시 캔 음료 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 25,000 KRW or more, get 1 canned soda. -For orders of 30,000 KRW or more, get 1 lemon black tea. -For orders of 40,000 KRW or more, get 14 boiled dumplings.', p.description_ja = '25,000ウォン以上の注文で缶炭酸飲料1本、30,000ウォン以上でレモン紅茶1本、40,000ウォン以上で水餃子14個を無料提供。', p.description_vi = 'Đơn từ 25.000 KRW trở lên được tặng 1 lon soda. Đơn từ 30.000 KRW trở lên được tặng 1 trà đen chanh. Đơn từ 40.000 KRW trở lên được tặng 14 mandu luộc.' WHERE pr.store_name_ko = '진푸 중화요리' AND p.description = '2.5만원 이상 주문 시 탄산 1캔 제공 -3만원 이상 주문 시 레몬 홍차 제공 -4만원 이상 주문 시 물만두 14개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free topping add-on for burrito orders, excluding bacon.', p.description_ja = 'ブリトー注文時、ベーコンを除くトッピング1つ無料。', p.description_vi = 'Gọi burrito được thêm 1 topping miễn phí, trừ bacon.' WHERE pr.store_name_ko = '밀플랜비' AND p.description = '부리또 주문 시 토핑 추가(베이컨 제외)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4 or more, choose either 1 free 500ml soft drink or 1 fried dumpling per person.', p.description_ja = '4人以上の来店で、500mlドリンク1本または1人につき焼き餃子1個のいずれかを提供。', p.description_vi = 'Nhóm từ 4 người trở lên chọn 1 ưu đãi: 1 nước ngọt 500ml hoặc 1 mandu chiên cho mỗi người.' WHERE pr.store_name_ko = '취향' AND p.description = '4인 이상 방문 시 음료 500ml 1개 또는 1인당 군만두 1개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free cheese add-on when ordering 2 or more servings of Dakgalbi.', p.description_ja = 'タッカルビ2人前以上注文時、チーズ追加を無料提供。', p.description_vi = 'Khi gọi từ 2 phần dakgalbi trở lên, được tặng phần phô mai thêm.' WHERE pr.store_name_ko = '코웍 비스트로' AND p.description = '닭갈비 2인분 이상 주문 시 치즈사리 1개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink when ordering 2 or more menu items per table. Excludes lunch hours from 12 PM to 2 PM and dinner hours from 5 PM to 7 PM.', p.description_ja = 'テーブルごとにメニュー2品以上注文時、ドリンクを提供。ランチ12〜14時、ディナー17〜19時は対象外。', p.description_vi = 'Tặng đồ uống khi mỗi bàn gọi từ 2 món trở lên. Không áp dụng giờ trưa 12 PM–2 PM và giờ tối 5 PM–7 PM.' WHERE pr.store_name_ko = '고추동제면소' AND p.description = '테이블당 메뉴 2개 이상 주문 시 음료 서비스(점심 12-2시, 저녁 17-19시 제외)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free soda when ordering 2 main dishes priced at 7,200 KRW or more.', p.description_ja = '7,200ウォン以上のメインメニュー2品注文時、炭酸飲料1杯を無料提供。', p.description_vi = 'Gọi 2 món chính giá từ 7.200 KRW trở lên được tặng 1 soda.' WHERE pr.store_name_ko = '샐러디' AND p.description = '메인메뉴(7,200원 이상) 2개 주문 시 탄산음료 1개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free Americano with any slice cake purchase.', p.description_ja = 'カットケーキ購入時、アメリカーノ1杯を無料提供。', p.description_vi = 'Mua miếng bánh kem được tặng 1 Americano.' WHERE pr.store_name_ko = '커피나무' AND p.description = '조각케이크 구매 시 아메리카노 1잔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1. Americano for 2,000 KRW when ordering through POS before 9 AM. - 2. Free size upgrade from L to J when purchasing 4 or more drinks on Mondays and Fridays. - Excludes single-size menu items such as smoothies, crushes, Brown Sugar Jewelry, and Strawberry Jewelry. - 3. 10% off group orders of 10 drinks or more. - Only applies to direct in-store POS payments.', p.description_ja = '1. 9時以前にPOS注文するとアメリカーノ2,000ウォン。 - 2. 月・金曜日にドリンク4杯以上購入でL→Jサイズアップ無料。単一サイズメニューは対象外。 - 3. ドリンク10杯以上の団体注文は10%割引。店頭POSでの直接決済のみ対象。プラットフォーム注文は対象外。', p.description_vi = '1. Americano giá 2.000 KRW khi đặt qua POS trước 9 AM. - 2. Mua từ 4 đồ uống vào thứ Hai và thứ Sáu được nâng size miễn phí từ L lên J. Không áp dụng cho món chỉ có một size. - 3. Giảm 10% cho đơn nhóm từ 10 đồ uống trở lên. Chỉ áp dụng khi thanh toán trực tiếp tại POS; không áp dụng cho đơn trên nền tảng.' WHERE pr.store_name_ko = '공차' AND p.description = '9시 이전 포스 주문 시 아메리카노 2000원 구매 -월, 금요일 4잔 이상 구매 시 L -> J size up -(단일 사이즈메뉴는 제외-스무디, 크러쉬, 브라운슈가쥬얼리, 딸기쥬얼리 등등) -10잔 이상 단체 주문 시 10% 할인 (단, 현장 포스에서 결제 시에만 가능)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free extra shot once when ordering 2 drinks: 1 Big Americano plus 1 Iced Tea.', p.description_ja = 'ビッグサイズアメリカーノ1杯+アイスティー1杯の計2杯注文時、1杯にショット1回無料追加。', p.description_vi = 'Gọi 2 đồ uống gồm 1 Americano cỡ lớn + 1 trà đá được thêm 1 shot miễn phí vào 1 ly.' WHERE pr.store_name_ko = '카페 봄봄' AND p.description = '2잔(빅 아메리카노, 아이스티 각각 1잔) 주문 시 샷 추가 1번 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 50,000 KRW or more, choose one: Garlic Butter Potato or Seasoned Fries.', p.description_ja = '50,000ウォン以上で、ガーリックバターポテトまたは味付けポテトのうち1つを選択。', p.description_vi = 'Từ 50.000 KRW trở lên được chọn 1 trong các món: khoai tây bơ tỏi hoặc khoai tây lắc gia vị.' WHERE pr.store_name_ko = '역전할머니맥주' AND p.description = '5만원 이상 주문 시 갈릭빠다포테이토 또는 양념감자 중 택 1 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when ordering 2 or more menu items and paying by cash, bank transfer, or KakaoPay.', p.description_ja = 'メニュー2品以上注文後、現金・口座振込・KakaoPay決済時5%割引。', p.description_vi = 'Gọi từ 2 món trở lên và thanh toán bằng tiền mặt, chuyển khoản hoặc KakaoPay được giảm 5%.' WHERE pr.store_name_ko = '인쌩맥주' AND p.description = '메뉴 2개 이상 주문 후 현금, 계좌이체 또는 카카오페이 결제 시 5% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink for orders of 30,000 KRW or more.', p.description_ja = '30,000ウォン以上の注文でドリンクを無料提供。', p.description_vi = 'Đơn từ 30.000 KRW trở lên được tặng đồ uống.' WHERE pr.store_name_ko = '파동추야' AND p.description = '3만원 이상 주문 시 음료 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free French Fries for orders of 40,000 KRW or more per table.', p.description_ja = '40,000ウォン以上の注文でフライドポテトを無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng khoai tây chiên.' WHERE pr.store_name_ko = '사랑과평화' AND p.description = '테이블 당 4만원 이상 주문 시 감자튀김 서비스'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free French Fries once per table when ordering 2 or more highballs or yangmaek drinks.', p.description_ja = 'テーブルごとに1回、ハイボールまたはヤンメクを2杯以上注文時、フライドポテトを無料提供。', p.description_vi = 'Mỗi bàn được tặng khoai tây chiên 1 lần khi gọi từ 2 ly highball hoặc yangmaek trở lên.' WHERE pr.store_name_ko = '자월당' AND p.description = '테이블 당 1회 하이볼 또는 양맥 2잔 이상 주문 시 감자튀김 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay for 9 hours by cash or bank transfer and receive 10 hours plus 1 free drink.', p.description_ja = '現金または口座振込で9時間分を決済すると、10時間+ドリンク1杯を提供。', p.description_vi = 'Thanh toán 9 giờ bằng tiền mặt hoặc chuyển khoản được tặng 10 giờ sử dụng và 1 đồ uống.' WHERE pr.store_name_ko = '에이플 PC방' AND p.description = '9시간 현금 결제 또는 계좌 이체 충전 시 10시간 + 음료 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Set A, B, and C available at youth rates.', p.description_ja = 'Set A・B・Cは青少年料金で利用可能。', p.description_vi = 'Set A, B, C áp dụng giá thanh thiếu niên.' WHERE pr.store_name_ko = '놀숲' AND p.description = '세트 A, B, C 요금제를 성인 -> 청소년으로 변경'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay 10,000 KRW by bank transfer or cash at the counter, then text the owner “I’m a student of the School of Liberal Studies, and I recharged 10,000 KRW” to get 5 extra songs.', p.description_ja = 'カウンターで口座振込または現金で10,000ウォンをチャージ後、店主に学生認証メッセージを送ると5曲追加。', p.description_vi = 'Nạp 10.000 KRW bằng chuyển khoản hoặc tiền mặt tại quầy, sau đó nhắn tin xác minh sinh viên cho chủ quán để nhận thêm 5 bài hát.' WHERE pr.store_name_ko = '리코스타 코인노래방' AND p.description = '계좌이체 또는 카운터 현금 1만원 충전 후 사장님께 문자로 "자전 재학생인데 1만원 충전했습니다." 인증 시 5곡 추가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 1–2, get 1 free drink. For groups of 3–4, get 2 free drinks.', p.description_ja = '1〜2人でドリンク1杯を無料提供。 - 3〜4人で2 ドリンクを無料提供。', p.description_vi = 'Nhóm 1–2 người được tặng 1 đồ uống. - Nhóm 3–4 người được tặng 2 đồ uống.' WHERE pr.store_name_ko = '면식당' AND p.description = '2인 이하 음료 1개 / 3~4인 음료 2개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For purchases of 30,000 KRW or more, choose one: Bing Hong Cha, Cha Pai, or 3 pieces of Youtiao. Up to 3 receipts may be combined.', p.description_ja = '30,000ウォン以上の購入で、油条3個・茶π・冰紅茶のうち1つを選択。レシートは最大3枚まで合算可能。 - レシートは最大3枚まで合算可能。', p.description_vi = 'Đơn mua từ 30.000 KRW trở lên được chọn 1 trong các món: 3 miếng quẩy Youtiao, Cha Pai hoặc Bing Hong Cha. Có thể gộp tối đa 3 hóa đơn. - Có thể gộp tối đa 3 hóa đơn.' WHERE pr.store_name_ko = '샹츠마라' AND p.description = '30,000원 이상 구매 시(영수증 3개 이하 합산 가능) 빙홍차 또는 차파이, 유토우 3p 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 20,000 KRW or more, get 2 free drinks. For orders of 30,000 KRW or more, upgrade all menu items to set menus.', p.description_ja = '20,000ウォン以上の注文でドリンク2杯を無料提供。 - 30,000ウォン以上の注文で全メニューをセットメニューに変更。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng 2 đồ uống. - Đơn từ 30.000 KRW trở lên được nâng toàn bộ menu thành set menu.' WHERE pr.store_name_ko = '지지고' AND p.description = '20,000원 이상 주문 시 음료 2개 제공 -30,000원 이상 주문 시 모든 메뉴 세트로 변경'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when paying with KakaoPay, Toss Pay, or bank transfer for grilled dishes.', p.description_ja = '焼き物注文時、KakaoPay・Toss Pay・口座振込決済で5%割引。', p.description_vi = 'Giảm 5% món nướng khi thanh toán bằng KakaoPay, Toss Pay hoặc chuyển khoản.' WHERE pr.store_name_ko = '먹돼지' AND p.description = '구이류 주문 시 카카오페이/토스페이/계좌이체 시 5% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For set purchases of 13,000 KRW or more, add 1 scoop of Egg Mayo or 1 strip of bacon.', p.description_ja = '13,000ウォン以上のセット購入時、エッグマヨ1スクープまたはベーコン1枚を追加提供。', p.description_vi = 'Mua set từ 13.000 KRW trở lên được thêm 1 muỗng Egg Mayo hoặc 1 lát bacon.' WHERE pr.store_name_ko = '써브웨이' AND p.description = '13,000원 이상 세트 구매 시 에그마요 1스쿱 또는 베이컨 1줄 추가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 500ml soft drink per table for orders of 75,000 KRW or more for groups of up to 4, or 85,000 KRW or more for groups of 5 or more.', p.description_ja = '1テーブルにつき、4人以下は75,000ウォン以上、5人以上は85,000ウォン以上の注文で500mlドリンク1本を無料提供。', p.description_vi = 'Mỗi bàn được tặng 1 đồ uống 500ml khi nhóm tối đa 4 người gọi từ 75.000 KRW trở lên, hoặc nhóm từ 5 người gọi từ 85.000 KRW trở lên.' WHERE pr.store_name_ko = '청운음식점' AND p.description = '한 테이블당 4인 이하 75,000원 / 5인 이상 85,000원 이상 주문 시 500ml 음료 1개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink for groups of 4 or more.', p.description_ja = '4人以上の来店でドリンクを無料提供。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng đồ uống.' WHERE pr.store_name_ko = '파라다이스' AND p.description = '4인 이상 방문 시 음료 1개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink for groups of 3 or more with orders of 20,000 KRW or more.', p.description_ja = '3人以上の来店かつ20,000ウォン以上の注文でドリンク1杯を無料提供。', p.description_vi = 'Nhóm từ 3 người trở lên và đơn từ 20.000 KRW trở lên được tặng 1 đồ uống.' WHERE pr.store_name_ko = '왕돈까스왕냉면' AND p.description = '3인 이상 방문 및 20,000원 이상 주문 시 음료 1개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4 or more, get 1 free drink. Or, for groups of 4 or more spending 50,000 KRW or more, get 1 free bottle of soju.', p.description_ja = '4人以上でドリンク1杯を無料提供。 - また、4人以上で50,000ウォン以上利用時、焼酎1本を無料提供。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng 1 đồ uống. - Hoặc nhóm từ 4 người trở lên chi từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '신의주찹쌀순대' AND p.description = '4인 이상 주문 시 음료 1개 제공 / 4인 이상 방문하여 50,000원 이상 주문 시 소주 1병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Add 30g of chicken breast or smoked duck topping when ordering a main menu item.', p.description_ja = 'メインメニュー注文時、鶏むね肉または燻製鴨トッピング30gを追加提供。', p.description_vi = 'Khi gọi món chính, được thêm 30g topping ức gà hoặc vịt hun khói.' WHERE pr.store_name_ko = '포케올데이' AND p.description = '메인 메뉴 주문 시 닭가슴살 또는 훈제오리 토핑 30g 추가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1 free drink for every 3 people.', p.description_ja = '3人ごとにドリンク1本無料。', p.description_vi = 'Tặng 1 đồ uống cho mỗi 3 người.' WHERE pr.store_name_ko = '삼봉버거' AND p.description = '3인당 음료 1개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for purchases of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の購入で焼酎1本を無料提供。', p.description_vi = 'Mua từ 40.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '숯가마 바베큐 치킨' AND p.description = '40,000원 이상 구매 시 소주 1병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free fried dumplings for groups of 4 or more.', p.description_ja = '4人以上の来店で焼き餃子を無料提供。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng mandu chiên.' WHERE pr.store_name_ko = '황궁쟁반짜장' AND p.description = '4인 이상 방문 시 군만두 무료 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1 free drink for every 2 people.', p.description_ja = '1人1メニュー注文時、2人ごとにドリンク1本無料。例:4人の場合は2本。', p.description_vi = 'Khi mỗi người gọi 1 món, tặng 1 đồ uống cho mỗi 2 người. Ví dụ: 4 người được 2 đồ uống.' WHERE pr.store_name_ko = '멘동' AND p.description = '2인당 음료 1개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 3, get 1 free drink. For groups of 4 or more, get 2 free drinks.', p.description_ja = '3人でドリンク1杯を無料提供。 - 4人以上で2 ドリンクを無料提供。', p.description_vi = 'Nhóm 3 người được tặng 1 đồ uống. - Nhóm từ 4 người trở lên được tặng 2 đồ uống.' WHERE pr.store_name_ko = '핵밥' AND p.description = '3인 주문 시 음료 1개 제공 / 4인 이상 주문 시 음료 2개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink for orders of 2 or more people.', p.description_ja = '2人以上の注文でドリンク1杯を無料提供。', p.description_vi = 'Đơn từ 2 người trở lên được tặng 1 đồ uống.' WHERE pr.store_name_ko = '슬로우캘리' AND p.description = '2인 이상 주문 시 음료 1개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink per table when each person orders 1 menu item. Excludes lunch hours from 12 PM to 2 PM and dinner hours from 5 PM to 7 PM.', p.description_ja = '1人1メニュー注文時、テーブルごとにドリンク1本を提供。ランチ12〜14時、ディナー17〜19時は対象外。', p.description_vi = 'Tặng 1 đồ uống cho mỗi bàn khi mỗi người gọi 1 món. Không áp dụng giờ trưa 12 PM–2 PM và giờ tối 5 PM–7 PM.' WHERE pr.store_name_ko = '고추동제면소' AND p.description = '1인 1메뉴 주문 시 테이블당 음료 1개 제공 (점심 12-2시, 저녁 5-7시 제외)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free cheese add-on per table when ordering 2 or more servings of Dakgalbi.', p.description_ja = 'タッカルビ2人前以上注文時、テーブルごとにチーズ追加を無料提供。', p.description_vi = 'Khi gọi từ 2 phần dakgalbi trở lên, mỗi bàn được tặng phần phô mai thêm.' WHERE pr.store_name_ko = '코웍비스트로' AND p.description = '닭갈비 2인 이상 주문 시 테이블당 치즈사리 1개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free topping add-on for burrito orders, excluding bacon.', p.description_ja = 'ブリトー注文時、ベーコンを除くトッピング1つ無料。', p.description_vi = 'Gọi burrito được thêm 1 topping miễn phí, trừ bacon.' WHERE pr.store_name_ko = '밀플랜비' AND p.description = '브리또 주문 시 토핑 추가 (베이컨 제외)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1 free drink for every 2 main menu items.', p.description_ja = 'メインメニュー2品ごとにドリンク1杯を無料提供。', p.description_vi = 'Cứ mỗi 2 món chính được tặng 1 đồ uống.' WHERE pr.store_name_ko = '은화수식당' AND p.description = '메인 메뉴 2개당 음료수 1개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1 free gimmari fried seaweed roll per person. Student ID or u-SAINT verification is required at the time of ordering. Partnership benefits may not be provided if requested after some time has passed.', p.description_ja = '1人につきキムマリ1個を無料提供。注文時に学生証またはu-SAINT認証が必要です。注文後しばらく経ってからの申し出は対象外となる場合があります。', p.description_vi = 'Tặng 1 gimmari cho mỗi người. Cần xác minh thẻ sinh viên hoặc u-SAINT ngay khi gọi món. Ưu đãi có thể không được áp dụng nếu yêu cầu sau một thời gian.' WHERE pr.store_name_ko = '고씨네' AND p.description = '1인당 김말이 1개 제공 (주문과 동시에 학생증 또는 유세인트 인증 필요. 주문 후 일정 시간 경과 시 제휴 제공 안될 수 있음.)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when ordering 2 or more main menu items and paying by cash or bank transfer.', p.description_ja = 'メインメニュー2品以上注文し、現金または口座振込で決済時5%割引。', p.description_vi = 'Gọi từ 2 món chính trở lên và thanh toán bằng tiền mặt hoặc chuyển khoản được giảm 5%.' WHERE pr.store_name_ko = '인쌩맥주' AND p.description = '메인 메뉴 2개 이상 주문 및 현금 결제 / 계좌 이체 결제 시 5% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For purchases of 50,000 KRW or more, choose one: 1 bottle of soju or Garlic Butter Potato.', p.description_ja = '50,000ウォン以上で、焼酎1本またはガーリックバターポテトのうち1つを選択。', p.description_vi = 'Từ 50.000 KRW trở lên được chọn 1 trong các món: 1 chai soju hoặc khoai tây bơ tỏi.' WHERE pr.store_name_ko = '역전할머니맥주' AND p.description = '50,000원 이상 구매 시 소주 1병 / 갈릭빠다포테이토 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free instant ramen for orders of 20,000 KRW or more per table.', p.description_ja = '20,000ウォン以上の注文でインスタントラーメンを無料提供。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng ramen ăn liền.' WHERE pr.store_name_ko = '씨밤바베' AND p.description = '테이블당 20,000원 이상 주문 시 즉석 라면 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free French Fries for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文でフライドポテトを無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng khoai tây chiên.' WHERE pr.store_name_ko = '사랑과평화' AND p.description = '40,000원 이상 주문 시 감자튀김 1개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文で焼酎1本を無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '젠사이야' AND p.description = '50,000원 이상 주문 시 소주 1병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 Iced Tea when ordering 3 drinks on Fridays.', p.description_ja = '金曜日にドリンク3杯注文時、アイスティー1杯を無料提供。', p.description_vi = 'Thứ Sáu gọi 3 đồ uống được tặng 1 trà đá.' WHERE pr.store_name_ko = '빽다방' AND p.description = '금요일에 음료 3잔 주문 시 아이스티 1잔 무료 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off all menu items, excluding set menus.', p.description_ja = 'セットメニューを除く全メニュー10%割引。', p.description_vi = 'Giảm 10% toàn bộ menu, không gồm set menu.' WHERE pr.store_name_ko = '에브어이브' AND p.description = '전 메뉴 10% 할인 (세트 메뉴 제외)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free extra shot in 1 drink when ordering 2 Big Iced Americanos or 2 Big Iced Teas.', p.description_ja = 'ビッグサイズアイスアメリカーノ2杯またはビッグサイズアイスティー2杯注文時、1杯にショット1回無料追加。', p.description_vi = 'Gọi 2 Americano đá cỡ lớn hoặc 2 trà đá cỡ lớn được thêm 1 shot miễn phí vào 1 ly.' WHERE pr.store_name_ko = '카페봄봄' AND p.description = '빅 아이스아메리카노 또는 빅 아이스티 2잔 주문 시 1잔에 샷 추가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off drinks.', p.description_ja = 'ドリンク10%割引。', p.description_vi = 'Giảm 10% đồ uống.' WHERE pr.store_name_ko = 'eea cafe' AND p.description = '음료 10% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1. Americano for 2,000 KRW when ordering through POS before 1 PM. - 2. Free size upgrade from L to J when purchasing 4 or more drinks on Mondays and Fridays. - Excludes single-size menu items. - 3. 10% off group orders of 10 drinks or more. - Only applies to direct in-store POS payments.', p.description_ja = '1. 13時以前にPOS注文するとアメリカーノ2,000ウォン。 - 2. 月・金曜日にドリンク4杯以上購入でL→Jサイズアップ無料。単一サイズメニューは対象外。 - 3. ドリンク10杯以上の団体注文は10%割引。店頭POSでの直接決済のみ対象。プラットフォーム注文は対象外。', p.description_vi = '1. Americano giá 2.000 KRW khi đặt qua POS trước 1 PM. - 2. Mua từ 4 đồ uống vào thứ Hai và thứ Sáu được nâng size miễn phí từ L lên J. Không áp dụng cho món chỉ có một size. - 3. Giảm 10% cho đơn nhóm từ 10 đồ uống trở lên. Chỉ áp dụng khi thanh toán trực tiếp tại POS; không áp dụng cho đơn trên nền tảng.' WHERE pr.store_name_ko = '공차' AND p.description = '13시 이전 포스 주문 시 아메리카노 2,000원 -월, 금요일 4잔 이상 구매 시 L -> J 사이즈 업 (단일 사이즈 메뉴 제외) -10잔 이상 단체 주문 시 10% 할인 (현장 포스 결제 시에만 적용)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Set A, B, and C available at youth rates.', p.description_ja = 'Set A・B・Cは青少年料金で利用可能。', p.description_vi = 'Set A, B, C áp dụng giá thanh thiếu niên.' WHERE pr.store_name_ko = '놀숲' AND p.description = 'Set a, b, c 요금제를 청소년 요금제로 이용 가능'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '15% off.', p.description_ja = '15%割引。', p.description_vi = 'Giảm 15%.' WHERE pr.store_name_ko = '히어로 보드게임 카페' AND p.description = '15% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free cup drink for takeout single-item orders. Double Cheeseburger Set for 9,900 KRW for dine-in and takeout orders.', p.description_ja = '単品テイクアウト注文時、カップドリンクを無料提供。店内飲食・テイクアウトのダブルチーズバーガーセットは9,900ウォン。', p.description_vi = 'Đơn món lẻ mang đi được tặng đồ uống ly. Set Double Cheeseburger giá 9.900 KRW cho cả ăn tại chỗ và mang đi.' WHERE pr.store_name_ko = '크라이치즈버거' AND p.description = '단품 포장 주문 시 음료컵 무료 제공 / 홀식사 및 포장 더블치즈버거세트 9,900원'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink when visiting after 3 PM. Free Bibim Noodles when writing a review.', p.description_ja = '15時以降の来店でドリンクを無料提供。レビュー作成時、ビビン麺を無料提供。', p.description_vi = 'Đến sau 3 PM được tặng đồ uống. Viết review được tặng mì trộn bibim.' WHERE pr.store_name_ko = '상도동 솥뚜껑' AND p.description = '15시 이후 방문 시, 음료수 증정 / 리뷰 작성 시, 비빔면 증정'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free topping add-on for burrito orders, excluding bacon.', p.description_ja = 'ブリトー注文時、ベーコンを除くトッピング1つ無料。', p.description_vi = 'Gọi burrito được thêm 1 topping miễn phí, trừ bacon.' WHERE pr.store_name_ko = '밀플랜비' AND p.description = '부리또 주문 시, 토핑 무료 추가 (베이컨 제외)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink for tables of 4, or 1 free bottle of soju for orders of 50,000 KRW or more.', p.description_ja = '4人テーブルにドリンクを無料提供、または50,000ウォン以上の注文で焼酎1本を無料提供。', p.description_vi = 'Bàn 4 người được tặng đồ uống, hoặc đơn từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '신의주 찹쌀순대' AND p.description = '4인 테이블 음료 증정 혹은 5만원 이상 주문 시 소주 한 병'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For payments of 30,000 KRW or more, choose one: 3 pieces of Youtiao or 1 bottle of Bing Hong Cha. Receipts must be limited to 3 or fewer.', p.description_ja = '30,000ウォン以上の決済で、油条3個または冰紅茶1本のうち1つを選択。レシートは3枚以下に限ります。', p.description_vi = 'Thanh toán từ 30.000 KRW trở lên được chọn 1 trong 2 món: 3 miếng quẩy Youtiao hoặc 1 chai Bing Hong Cha. Chỉ áp dụng khi có tối đa 3 hóa đơn.' WHERE pr.store_name_ko = '샹츠마라' AND p.description = '3만원 이상 결제 시, 유토우 3p 혹은 삥홍차 1병 (단, 영수증 3장 이하여야 함)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free bottled soft drink when ordering side dishes.', p.description_ja = 'おかず注文時、ボトルドリンクを無料提供。', p.description_vi = 'Khi gọi món ăn kèm, được tặng nước ngọt đóng chai.' WHERE pr.store_name_ko = '가치' AND p.description = '안주 주문 시 음료 1병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 30,000 KRW or more, get free muksabal. For orders of 50,000 KRW or more, get 1 free bottle of soju.', p.description_ja = '30,000ウォン以上の注文でムクサバルを無料提供。 - 50,000ウォン以上の注文で焼酎1本を無料提供。', p.description_vi = 'Đơn từ 30.000 KRW trở lên được tặng muksabal. - Đơn từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '28청춘호프포차' AND p.description = '3만원 이상 주문 시, 묵사발 증정 / 5만원 이상 주문 시, 소주 1병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文で焼酎1本を無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '젠사이야' AND p.description = '5만원 이상 주문 시, 소주 1병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off drinks.', p.description_ja = 'ドリンク10%割引。', p.description_vi = 'Giảm 10% đồ uống.' WHERE pr.store_name_ko = 'eea cafe' AND p.description = '음료 구매 시 10% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off all menu items, excluding set menus.', p.description_ja = 'セットメニューを除く全メニュー10%割引。', p.description_vi = 'Giảm 10% toàn bộ menu, không gồm set menu.' WHERE pr.store_name_ko = '에브어이브' AND p.description = '세트 메뉴 제외 전 메뉴 10% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Available at youth rates.', p.description_ja = 'Set A・B・Cは青少年料金で利用可能。', p.description_vi = 'Set A, B, C áp dụng giá thanh thiếu niên.' WHERE pr.store_name_ko = '놀숲' AND p.description = '청소년 요금 적용'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Get 5 extra songs when paying 10,000 KRW in cash.', p.description_ja = '現金10,000ウォン決済時、5曲追加提供。', p.description_vi = 'Thanh toán 10.000 KRW bằng tiền mặt được tặng thêm 5 bài hát.' WHERE pr.store_name_ko = '리코스타 코인 노래방' AND p.description = '현금 1만원 결제 시 5곡 추가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay 10,000 KRW by bank transfer or cash to receive 10 hours plus 1 free drink.', p.description_ja = '現金または口座振込で10,000ウォンをチャージすると、10時間+ドリンク1杯を提供。', p.description_vi = 'Nạp 10.000 KRW bằng tiền mặt hoặc chuyển khoản được tặng 10 giờ sử dụng và 1 đồ uống.' WHERE pr.store_name_ko = '에이플 PC방' AND p.description = '1만원 계좌이체 혹은 현금 결제 시, 10시간 + 서비스 음료 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 30,000 KRW or more, choose one: 3 pieces of Youtiao, Cha Pai, or Bing Hong Cha. Up to 3 receipts may be combined.', p.description_ja = '30,000ウォン以上の注文で、油条3個・茶π・冰紅茶のうち1つを選択。レシートは最大3枚まで合算可能。 - レシートは最大3枚まで合算可能。', p.description_vi = 'Đơn từ 30.000 KRW trở lên được chọn 1 trong các món: 3 miếng quẩy Youtiao, Cha Pai hoặc Bing Hong Cha. Có thể gộp tối đa 3 hóa đơn. - Có thể gộp tối đa 3 hóa đơn.' WHERE pr.store_name_ko = '샹츠마라' AND p.description = '3만원 이상 주문 시, 유토우 3ps or 차파이(음료) or 빙홍차(음료) -*영수증 3개까지 합치기 가능'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4 or more, get 1 free bottled soft drink. For payments of 50,000 KRW or more, get 1 free bottle of soju or 1 bottled soft drink. Benefits cannot be combined.', p.description_ja = '4人以上の来店でボトルドリンク1本を無料提供。 - 50,000ウォン以上の決済で焼酎1本またはボトルドリンク1本を無料提供。 - 1番と2番の特典は併用不可。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng 1 chai nước ngọt. - Thanh toán từ 50.000 KRW trở lên được tặng 1 chai soju hoặc 1 chai nước ngọt. - Không áp dụng đồng thời ưu đãi 1 và 2.' WHERE pr.store_name_ko = '신의주 찹쌀순대' AND p.description = '1. 4인 이상 방문 시 음료 1병 지급 -2. 5만원 이상 결제 시 소주 1병 또는 음료 1병 제공 -*1, 2번 항목 중복 적용 불가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4 or more, choose one: 1 canned soft drink or 4 fried dumplings.', p.description_ja = '4人以上の来店で、1 缶飲料または4 焼き餃子から1つ選択。', p.description_vi = 'Nhóm từ 4 người trở lên chọn 1 ưu đãi: 1 nước ngọt đóng lon hoặc 4 mandu chiên.' WHERE pr.store_name_ko = '취향' AND p.description = '4인 이상 주문 시 음료 1캔 or 군만두 4개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free topping add-on for burrito orders, excluding bacon.', p.description_ja = 'ブリトー注文時、ベーコンを除くトッピング1つ無料。', p.description_vi = 'Gọi burrito được thêm 1 topping miễn phí, trừ bacon.' WHERE pr.store_name_ko = '밀플랜비' AND p.description = '브리또 주문 시 토핑 1개 무료 (베이컨 제외)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 20,000 KRW or more, get 2 free drinks. For orders of 30,000 KRW or more, upgrade all single items to set menus.', p.description_ja = '20,000ウォン以上の注文でドリンク2杯を無料提供。 - 30,000ウォン以上の注文で単品をセットメニューに変更。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng 2 đồ uống. - Đơn từ 30.000 KRW trở lên được nâng món lẻ thành set menu.' WHERE pr.store_name_ko = '지지고' AND p.description = '2만원 이상 주문 시 음료 2개 제공 -3만원 이상 주문 시 단품을 세트로 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 500ml soft drink per table for orders of 75,000 KRW or more for groups of up to 4, or 85,000 KRW or more for groups of 5 or more.', p.description_ja = '1テーブルにつき、4人以下は75,000ウォン以上、5人以上は85,000ウォン以上の注文で500mlドリンク1本を無料提供。', p.description_vi = 'Mỗi bàn được tặng 1 đồ uống 500ml khi nhóm tối đa 4 người gọi từ 75.000 KRW trở lên, hoặc nhóm từ 5 người gọi từ 85.000 KRW trở lên.' WHERE pr.store_name_ko = '청운음식점' AND p.description = '테이블 당 4인 이하 방문 시 75,000원 이상 or 한 테이블 5인 이상 착석 후 85,000원 이상 주문 시 음료 1개(500ml) 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '500 KRW off per menu item when paying by cash or bank transfer.', p.description_ja = '現金または口座振込決済時、メニュー1品につき500ウォン割引。', p.description_vi = 'Giảm 500 KRW cho mỗi món khi thanh toán bằng tiền mặt hoặc chuyển khoản.' WHERE pr.store_name_ko = '손칼국수 ' AND p.description = '현금/계좌이체 시 메뉴당 500원 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free cheese add-on per table when ordering 2 or more servings of Dakgalbi.', p.description_ja = 'タッカルビ2人前以上注文時、テーブルごとにチーズ追加を無料提供。', p.description_vi = 'Khi gọi từ 2 phần dakgalbi trở lên, mỗi bàn được tặng phần phô mai thêm.' WHERE pr.store_name_ko = '코웍 비스트로' AND p.description = '테이블당 닭갈비 2인분 이상일 시 치즈사리 추가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off grilled dishes when paying with KakaoPay, Toss, cash, or bank transfer.', p.description_ja = '焼き物注文時、KakaoPay・Toss・現金・口座振込決済で5%割引。', p.description_vi = 'Giảm 5% món nướng khi thanh toán bằng KakaoPay, Toss, tiền mặt hoặc chuyển khoản.' WHERE pr.store_name_ko = '먹돼지' AND p.description = '구이류 주문 시, 카카오페이, 계좌이체(현금), 토스 결제 시 5% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1 free drink for every 2 people when each person orders 1 menu item. For example, 2 drinks for 4 people.', p.description_ja = '1人1メニュー注文時、2人ごとにドリンク1杯を無料提供。例:4人の場合はドリンク2杯。', p.description_vi = 'Khi mỗi người gọi 1 món, cứ 2 người được tặng 1 đồ uống. Ví dụ: 4 người được tặng 2 đồ uống.' WHERE pr.store_name_ko = '멘동' AND p.description = '1인 1메뉴 주문 시 2인당 음료 1개 (ex. 4인일 경우 음료 2개)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 1–2, get 1 canned soft drink. For groups of 3–4, get 2 canned soft drinks.', p.description_ja = '1〜2人で缶ドリンク1本を無料提供。 - 3〜4人で2 缶ドリンクを無料提供。', p.description_vi = 'Nhóm 1–2 người được tặng 1 lon nước ngọt. - Nhóm 3–4 người được tặng 2 nước ngọt đóng lon.' WHERE pr.store_name_ko = '면식당' AND p.description = '2인 이하 음료 1캔, 3~4인 음료 2캔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1.25L Pepsi Zero for every 30,000 KRW spent.', p.description_ja = '30,000ウォンごとの利用で1.25L ペプシゼロを無料提供。', p.description_vi = 'Tặng 1.25L Pepsi Zero cho mỗi 30.000 KRW chi tiêu.' WHERE pr.store_name_ko = '피자스쿨' AND p.description = '주문금액 30,000원 당 펩시 제로 1.25L 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free bottled soft drink or 1 bottle of soju for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文でボトルドリンクまたは焼酎1本を無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng nước ngọt đóng chai hoặc 1 chai soju.' WHERE pr.store_name_ko = '광어삼촌' AND p.description = '5만원 이상 주문 시 음료수 또는 소주 1병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free extra shot in one drink when ordering a total of 2 Big Americanos and/or Big Iced Teas.', p.description_ja = 'ビッグサイズアメリカーノまたはビッグサイズアイスティーを合計2杯注文時、1杯にショット1回無料追加。', p.description_vi = 'Gọi tổng cộng 2 ly Americano cỡ lớn và/hoặc trà đá cỡ lớn được thêm 1 shot miễn phí vào 1 ly.' WHERE pr.store_name_ko = '카페봄봄' AND p.description = '아메리카노 혹은 아이스티 빅사이즈 도합 2잔 주문 시 1잔 샷추가 (빅사이즈)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off all menu items, excluding set menus, for in-store payments only.', p.description_ja = '店頭決済時のみ、セットメニューを除く全メニュー10%割引。', p.description_vi = 'Giảm 10% toàn bộ menu, không gồm set menu, chỉ áp dụng khi thanh toán tại cửa hàng.' WHERE pr.store_name_ko = '에브어이브' AND p.description = '방문 결제에 한하여 세트메뉴 제외 10% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when paying by cash or bank transfer.', p.description_ja = '現金または口座振込決済時、5%割引。', p.description_vi = 'Giảm 5% khi thanh toán bằng tiền mặt hoặc chuyển khoản.' WHERE pr.store_name_ko = '상도로 3가' AND p.description = '현금 또는 계좌이체 시 5% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free drink for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文でドリンクを無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng đồ uống.' WHERE pr.store_name_ko = '파동추야' AND p.description = '40,000원 이상 주문 시 음료 증정'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For cash payments of 70,000 KRW or more, choose one: Kimchi Fried Rice or Rolled Omelet. Groups excluded.', p.description_ja = '70,000ウォン以上の現金決済で、キムチチャーハンまたは卵焼きのうち1つを提供。団体は対象外。', p.description_vi = 'Thanh toán tiền mặt từ 70.000 KRW trở lên được chọn 1 món: cơm chiên kimchi hoặc trứng cuộn. Không áp dụng cho đoàn.' WHERE pr.store_name_ko = '블루힐 ' AND p.description = '70,000원 이상 현금 결제 시 김치볶음밥 또는 계란말이 제공 (단체 제외)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 50,000 KRW or more, choose one: Pineapple Sherbet, 1 bottle of soju (Chamisul/Cheoeumcheoreom), or Garlic Butter Potato.', p.description_ja = '50,000ウォン以上で、パイナップルシャーベット、焼酎1本(チャミスル/チョウムチョロム)、またはガーリックバターポテトのうち1つを選択。', p.description_vi = 'Từ 50.000 KRW trở lên được chọn 1 trong các món: sorbet dứa, 1 chai soju (Chamisul/Cheoeumcheoreom), hoặc khoai tây bơ tỏi.' WHERE pr.store_name_ko = '역전할머니 맥주' AND p.description = '5만원 이상 주문 시, 살얼음 파인애플 or 소주 한 병 (참이슬/처음처럼) or 갈릭빠다 포테이토 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay 10,000 KRW by cash or bank transfer to receive 10 hours plus 1 free drink.', p.description_ja = '現金または口座振込で10,000ウォンをチャージすると、10時間+ドリンク1杯を提供。', p.description_vi = 'Nạp 10.000 KRW bằng tiền mặt hoặc chuyển khoản được tặng 10 giờ sử dụng và 1 đồ uống.' WHERE pr.store_name_ko = '에이플 PC방' AND p.description = '현금 또는 계좌이체로 10,000원 충전 시 10시간 + 음료 1잔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Get a free soda when adding 5,000 KRW of credit. Get a free café drink when adding 10,000 KRW of credit.', p.description_ja = '5,000ウォンチャージで炭酸飲料を無料提供。 - 10,000ウォンチャージでカフェドリンクを無料提供。', p.description_vi = 'Nạp 5.000 KRW được tặng soda. - Nạp 10.000 KRW được tặng đồ uống cà phê.' WHERE pr.store_name_ko = '긱스타 PC방' AND p.description = '5,000원 충전 시 탄산음료 한 잔, 10,000원 충전 시 카페음료 한 잔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Set A, B, and C available at youth rates. All-day pass excluding drinks: 18,000 KRW.', p.description_ja = 'Set A・B・Cは青少年料金で利用可能。ドリンクなしの終日料金は18,000ウォン。', p.description_vi = 'Set A, B, C được áp dụng giá thanh thiếu niên. Vé cả ngày không bao gồm đồ uống: 18.000 KRW.' WHERE pr.store_name_ko = '놀숲' AND p.description = '1. 세트 A, B, C를 성인에서 청소년 가격으로 변경 
 -2. 온종일 요금제(음료 미포함) 18,000원'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '15% off with student ID or u-SAINT verification upon leaving.', p.description_ja = '退店時に学生証またはu-SAINT認証で15%割引。', p.description_vi = 'Giảm 15% khi xuất trình thẻ sinh viên hoặc xác minh u-SAINT lúc rời cửa hàng.' WHERE pr.store_name_ko = '히어로 보드게임 카페' AND p.description = '퇴실 시 학생증 혹은 유세인트 인증 시 15% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off meat dishes when paying by cash, bank transfer, or KakaoPay.', p.description_ja = '肉料理注文後、現金・口座振込・KakaoPay決済時5%割引。', p.description_vi = 'Giảm 5% món thịt khi thanh toán bằng tiền mặt, chuyển khoản hoặc KakaoPay.' WHERE pr.store_name_ko = '먹돼지' AND p.description = '고기류 주문 후 현금 or 계좌 이체 or 카카오페이 결제 시 5% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 1–2, get 1 bottled soft drink. For groups of 3–4, get 2 bottled soft drinks.', p.description_ja = '1〜2人でボトルドリンク1本を無料提供。 - 3〜4人で2 ボトルドリンクを無料提供。', p.description_vi = 'Nhóm 1–2 người được tặng 1 chai nước ngọt. - Nhóm 3–4 người được tặng 2 nước ngọt đóng chai.' WHERE pr.store_name_ko = '면식당' AND p.description = '2인 이하 방문 시 음료수 1병 증정 및 3인 이상 4인 이하 방문 시 음료수 2병 증정'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Choose one free item: 1 piece of Youtiao, 1 bottle of Bing Hong Cha, or 1 bottle of Cha Pai.', p.description_ja = '油条1個・冰紅茶1本・茶π1本のうち1つを無料提供。', p.description_vi = 'Được chọn 1 món miễn phí: 1 miếng quẩy Youtiao, 1 chai Bing Hong Cha hoặc 1 chai Cha Pai.' WHERE pr.store_name_ko = '샹츠마라 ' AND p.description = '유토우 1pc or 빙홍차 1병 or 차파이 1병 중 택 1 증정'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free bottled soft drink, or free Cajun Fries for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文でボトルドリンク、またはケイジャンポテトを無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng nước ngọt đóng chai, hoặc khoai tây Cajun.' WHERE pr.store_name_ko = 'BHC 치킨' AND p.description = '음료수 1병 증정 or 40,000원 이상 주문 시 케이준 후라이 증정'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free bottled soft drink for groups of 4 or more, plus 1 free bottle of soju for orders of 50,000 KRW or more.', p.description_ja = '4人以上の来店でボトルドリンク1本を無料提供。 - 50,000ウォン以上の注文で焼酎1本を無料提供。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng 1 chai nước ngọt. - Đơn từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '신의주 찹쌀순대' AND p.description = '4명 이상 방문 시 음료수 1병 증정 및 50,000원 이상 주문 시 소주 1병 증정'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free gimmari fried seaweed roll. Please request it at the time of ordering.', p.description_ja = 'キムマリ。 - 注文時にお申し出ください。', p.description_vi = 'Tặng gimmari. - Vui lòng yêu cầu ngay khi gọi món.' WHERE pr.store_name_ko = '고씨네' AND p.description = '김말이 1개 증정 *메뉴 주문과 동시에 요청해 주세요'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free bottled soft drink when ordering 2 or more main menu items.', p.description_ja = '2つ以上 メインメニュー注文時、ボトルドリンクを無料提供。', p.description_vi = 'Khi gọi 2 trở lên món chính, được tặng nước ngọt đóng chai.' WHERE pr.store_name_ko = '고추동 제면소' AND p.description = '메인메뉴 두 개 이상 주문 시 음료수 1병 증정'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free bottled soft drink plus free Bibim Noodles with a Naver review.', p.description_ja = 'ボトルドリンク1本を無料提供。Naverレビュー作成時、ビビン麺を無料提供。', p.description_vi = 'Tặng 1 chai nước ngọt. Viết review Naver được tặng mì trộn bibim.' WHERE pr.store_name_ko = '상도동 솥뚜껑' AND p.description = '음료수 1병 증정 및 네이버 리뷰 작성 시 비빔면 증정'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free cheese add-on when ordering Dakgalbi equal to the number of visitors. For example, order 4 servings for 4 people.', p.description_ja = '来店人数以上のタッカルビを注文時、チーズ追加を無料提供。例:4人来店時は4人前以上注文。', p.description_vi = 'Gọi dakgalbi bằng hoặc nhiều hơn số khách đến cửa hàng sẽ được tặng phần phô mai thêm. Ví dụ: 4 người thì gọi từ 4 phần trở lên.' WHERE pr.store_name_ko = '코웍 비스트로' AND p.description = '매장 방문 인원 수 이상 닭갈비 주문 시 치즈사리 증정 (ex. 4인 방문 시 4인분 이상 주문)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For purchases of 18,000 KRW or more, choose one: Chocolate Shell, Strawberry Shell, or Granola.', p.description_ja = '18,000ウォン以上で、チョコシェル・いちごシェル・グラノーラのうち1つを選択。', p.description_vi = 'Từ 18.000 KRW trở lên được chọn 1 trong các món: sốt phủ chocolate, sốt phủ dâu hoặc granola.' WHERE pr.store_name_ko = '요거트아이스크림의정석' AND p.description = '18,000원 이상 구매 시 초코쉘 or 딸기쉘 or 그래놀라 중 택 1 증정'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free Americano with any slice cake purchase.', p.description_ja = 'カットケーキ購入時、アメリカーノ1杯を無料提供。', p.description_vi = 'Mua miếng bánh kem được tặng 1 Americano.' WHERE pr.store_name_ko = '커피나무' AND p.description = '조각케이크 구매 시 아메리카노 1잔 증정'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 50,000 KRW or more, choose one: Pineapple Sherbet or Garlic Butter Potato.', p.description_ja = '50,000ウォン以上で、パイナップルシャーベットまたはガーリックバターポテトのうち1つを選択。', p.description_vi = 'Từ 50.000 KRW trở lên được chọn 1 trong các món: sorbet dứa hoặc khoai tây bơ tỏi.' WHERE pr.store_name_ko = '역전할머니맥주' AND p.description = '50,000원 이상 주문 시 파인애플 샤베트 or 갈릭버터 포테이토 중 택 1 증정'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free bottled soft drink per table.', p.description_ja = 'テーブルごとにボトル飲料を無料提供。', p.description_vi = 'Tặng nước ngọt đóng chai cho mỗi bàn.' WHERE pr.store_name_ko = '리얼 후라이' AND p.description = '테이블 당 음료수 1병 증정'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For cash payments of 70,000 KRW or more, choose one: Kimchi Fried Rice, Rolled Omelet, or Cocktail Soju (420ml).', p.description_ja = '70,000ウォン以上の現金決済で、キムチチャーハン・卵焼き・カクテル焼酎(420ml)のうち1つを選択。', p.description_vi = 'Thanh toán tiền mặt từ 70.000 KRW trở lên được chọn 1 món: cơm chiên kimchi, trứng cuộn hoặc soju cocktail 420ml.' WHERE pr.store_name_ko = '블루힐' AND p.description = '70,000원 이상 현금 결제 시 김치볶음밥 or 계란말이 or 칵테일 소주(420ml) 택 1 증정'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Visit before 6 PM to receive 1 bottle of soju or Soft Tofu Stew.', p.description_ja = '18時以前の来店で、焼酎1本またはスンドゥブチゲを無料提供。', p.description_vi = 'Đến trước 6 PM được tặng 1 chai soju hoặc canh đậu phụ non.' WHERE pr.store_name_ko = '28청춘호프포차' AND p.description = '18시 이전 매장 방문 시 소주 1병 or 순두부 찌개 증정'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free French Fries for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文でフライドポテトを無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng khoai tây chiên.' WHERE pr.store_name_ko = '사랑과평화' AND p.description = '40,000원 이상 주문 시 감자튀김 증정'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Get a free soda when adding 5,000 KRW of credit. Get a free café drink when adding 10,000 KRW of credit.', p.description_ja = '5,000ウォンチャージで炭酸飲料を無料提供。 - 10,000ウォンチャージでカフェドリンクを無料提供。', p.description_vi = 'Nạp 5.000 KRW được tặng soda. - Nạp 10.000 KRW được tặng đồ uống cà phê.' WHERE pr.store_name_ko = '긱스타 PC방' AND p.description = '5,000원 시간 충전 시 탄산음료 증정 및 10,000원 시간 충전 시 카페음료 증정'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Set A, B, and C available at youth rates: Set A 5,500 KRW, Set B 8,500 KRW, Set C 10,500 KRW.', p.description_ja = 'Set A・B・Cは青少年料金で利用可能:Set A 5,500ウォン、Set B 8,500ウォン、Set C 10,500ウォン。', p.description_vi = 'Set A, B, C áp dụng giá thanh thiếu niên: Set A 5.500 KRW, Set B 8.500 KRW, Set C 10.500 KRW.' WHERE pr.store_name_ko = '놀숲' AND p.description = '세트 A, B, C를 청소년 이용금액으로 적용 -set A 5,500원 -set B 8,500원 -set C 10,500원'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '15% off game fees.', p.description_ja = 'ゲーム料金15%割引。', p.description_vi = 'Giảm 15% phí chơi game.' WHERE pr.store_name_ko = '히어로 보드게임 카페' AND p.description = '게임 비용 15% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free gimmari fried seaweed roll topping with Physics Department student ID.', p.description_ja = '物理学科の学生証提示でキムマリトッピングを無料提供。', p.description_vi = 'Xuất trình thẻ sinh viên Khoa Vật lý được tặng topping gimmari.' WHERE pr.store_name_ko = '고씨네' AND p.description = '물리학과 학생증 제시하면 김말이 토핑 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'After visiting with 4 people and showing student ID, choose one per table: 4 fried dumplings or 1 soda.', p.description_ja = '4人で来店し学生証を提示すると、テーブルごとに焼き餃子4個または炭酸飲料1本のいずれかを提供。', p.description_vi = 'Nhóm 4 người đến và xuất trình thẻ sinh viên được chọn 1 ưu đãi cho mỗi bàn: 4 mandu chiên hoặc 1 soda.' WHERE pr.store_name_ko = '취향' AND p.description = '4인 방문 후 학생증 제시하면 군만두 4개 or 탄산음료 테이블 당 1개'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay 10,000 KRW to get 5 extra songs. Student ID verification with phone number and recharge amount verification required.', p.description_ja = '10,000ウォンチャージで5曲追加。携帯番号での学生証確認とチャージ金額の認証が必要。', p.description_vi = 'Nạp 10.000 KRW được thêm 5 bài hát. Cần xác minh thẻ sinh viên bằng số điện thoại và xác minh số tiền nạp.' WHERE pr.store_name_ko = '리코스타 코인 노래방' AND p.description = '1만원 충전 시, 5곡 서비스 (휴대폰 번호로 학생증 제시, 충전 금액 인증)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when paying by bank transfer or cash.', p.description_ja = '口座振込または現金決済時、5%割引。', p.description_vi = 'Giảm 5% khi thanh toán bằng chuyển khoản hoặc tiền mặt.' WHERE pr.store_name_ko = '상도로 3가' AND p.description = '계좌이체 or 현금결제 시 5% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned drinks based on group size: 1 can for 3 people, 2 cans for 6 people, and 3 cans for 9 people.', p.description_ja = '人数に応じて缶飲料を無料提供:3人は1缶、6人は2缶、9人は3缶。', p.description_vi = 'Tặng nước lon theo số người/khẩu phần: 1 lon cho 3 người, 2 lon cho 6 người, 3 lon cho 9 người.' WHERE pr.store_name_ko = '삼봉버거' AND p.description = '3인 방문 시, 음료 1캔 증정 -6인 방문 시, 음료 2캔 증정 -9인 방문 시, 음료 3캔 증정'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'When each person orders 1 menu item: 1 free canned soft drink for groups of 2 or more, or 2 free canned soft drinks for groups of 4 or more.', p.description_ja = '1人1メニュー注文時、2人以上は缶飲料1本、4人以上は缶飲料2本を提供。', p.description_vi = 'Khi mỗi người gọi 1 món: nhóm từ 2 người được tặng 1 lon nước ngọt, nhóm từ 4 người được tặng 2 lon.' WHERE pr.store_name_ko = '멘동' AND p.description = '1인 1메뉴 주문 시 2인 이상 음료수 1캔 / 4인 이상 음료수 2캔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 30,000 KRW or more, choose one: Youtiao, Cha Pai, or Bing Hong Cha. Up to 3 receipts may be combined.', p.description_ja = '30,000ウォン以上の注文で、油条・茶π・冰紅茶のうち1つを選択。レシートは最大3枚まで合算可能。 - レシートは最大3枚まで合算可能。', p.description_vi = 'Đơn từ 30.000 KRW trở lên được chọn 1 trong các món: quẩy Youtiao, Cha Pai hoặc Bing Hong Cha. Có thể gộp tối đa 3 hóa đơn. - Có thể gộp tối đa 3 hóa đơn.' WHERE pr.store_name_ko = '샹츠마라' AND p.description = '3만원 이상 주문 시 유토우 또는 음료(차파이/빙홍차) 중 1개 제공 (영수증 최대 3개까지만 취합 가능)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free topping add-on for burrito orders, excluding bacon.', p.description_ja = 'ブリトー注文時、ベーコンを除くトッピング1つ無料。', p.description_vi = 'Gọi burrito được thêm 1 topping miễn phí, trừ bacon.' WHERE pr.store_name_ko = '밀플랜비' AND p.description = '부리또 주문 시 토핑 1개 무료(베이컨 제외)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 500ml soft drink per table for orders of 75,000 KRW or more for groups of up to 4, or 85,000 KRW or more for groups of up to 5.', p.description_ja = '4人以下は75,000ウォン以上、5人以上は85,000ウォン以上の注文で、テーブルごとに500mlドリンク1本を無料提供。', p.description_vi = 'Tặng 1 nước ngọt 500ml cho mỗi bàn với đơn từ 75.000 KRW cho nhóm tối đa 4 người, hoặc từ 85.000 KRW cho nhóm từ 5 người trở lên.' WHERE pr.store_name_ko = '청운음식점' AND p.description = '한 테이블에 4인 이하 방문 후 7만 5천원 이상 주문 시 또는 한 테이블에 5인 이하 방문 후 8만 5천원 이상 주문 시 음료 1개(500ml) 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when paying with KakaoPay, applicable to meat dishes only.', p.description_ja = 'KakaoPay決済時、肉料理5%割引。', p.description_vi = 'Giảm 5% món thịt khi thanh toán bằng KakaoPay.' WHERE pr.store_name_ko = '먹돼지' AND p.description = '카카오페이로 결제 시 5% 할인 (고기류 주문 시에만 해당)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free French Fries when 2 people visit and order 2 or more chickens.', p.description_ja = '2名で来店しチキン2羽以上注文時、フライドポテトを無料提供。', p.description_vi = '2 người đến và gọi từ 2 phần gà nguyên con trở lên được tặng khoai tây chiên.' WHERE pr.store_name_ko = '미쳐버린 파닭' AND p.description = '2인 방문 후 두 마리 이상 주문 시 감자튀김 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 50,000 KRW or more, choose one: 1 bottle of soju (Chamisul/Cheoeumcheoreom) or Garlic Butter Potato.', p.description_ja = '50,000ウォン以上の注文で、焼酎1本(チャミスル/チョウムチョロム)またはガーリックバターポテトのうち1つを選択。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được chọn 1 món: 1 chai soju (Chamisul/Cheoeumcheoreom) hoặc khoai tây bơ tỏi.' WHERE pr.store_name_ko = '역전할머니맥주' AND p.description = '5만원 이상 주문 시 소주 한 병(참이슬/처음처럼) 또는 갈릭빠다포테이토 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned soft drink for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文で缶ドリンクを無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng nước ngọt đóng lon.' WHERE pr.store_name_ko = '파동추야' AND p.description = '4만원 이상 주문 시 음료수 1캔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 canned soft drink per table.', p.description_ja = 'テーブルごとに1 缶飲料を無料提供。', p.description_vi = 'Tặng 1 nước ngọt đóng lon cho mỗi bàn.' WHERE pr.store_name_ko = '리얼후라이' AND p.description = '테이블 당 음료수 1캔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off per table when writing a Naver receipt review. Payment must be made at the POS, not the kiosk.', p.description_ja = 'Naverレシートレビュー作成時、テーブルごとに 10%割引。 - キオスクではなくPOSでの決済が必要。', p.description_vi = 'Giảm 10% cho mỗi bàn khi viết đánh giá hóa đơn Naver. - Phải thanh toán tại POS, không áp dụng khi thanh toán bằng kiosk.' WHERE pr.store_name_ko = '미태리' AND p.description = '네이버 영수증 리뷰 작성 시 테이블 한 곳 당 10% 할인 (키오스크가 아닌 포스기에서 결제하여야 함)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 gimmari fried seaweed roll with AI College student ID verification. One fried seaweed roll per verified student. Please verify the partnership and request it immediately after ordering. Requests made after some time may be declined.', p.description_ja = 'AI大学の学生証認証時、キムマリ1個を無料提供。認証した学生1名につき1個提供。注文直後に提携認証を行い、キムマリをお申し出ください。時間が経過した後の申し出は断られる場合があります。', p.description_vi = 'Xác minh thẻ sinh viên College of AI được tặng 1 gimmari. Mỗi sinh viên đã xác minh được 1 cái. Vui lòng xác minh ưu đãi và yêu cầu gimmari ngay sau khi gọi món; yêu cầu muộn có thể bị từ chối.' WHERE pr.store_name_ko = '고씨네' AND p.description = 'AI대학 학생증 인증 시 김말이 1개 제공 (학생증 인증 N명당 N개 제공) (주문 직후 제휴 인증하고 김말이 요청해야 함. 주문 시간 경과 후 제휴 요청 시 거절할 수 있음)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Get a free soda when adding 5,000 KRW of credit. Choose one free drink when adding 10,000 KRW of credit: soda, Americano, or iced tea.', p.description_ja = '5,000ウォンチャージで炭酸飲料1杯を無料提供。 - 10,000ウォンチャージで炭酸飲料・アメリカーノ・アイスティーのうち1杯を無料提供。', p.description_vi = 'Nạp 5.000 KRW được tặng 1 soda. - Nạp 10.000 KRW được chọn 1 đồ uống miễn phí: soda, Americano hoặc trà đá.' WHERE pr.store_name_ko = '긱스타 PC방' AND p.description = '5,000원 충전 시 탄산음료 1개 제공 / 10,000원 충전 시 탄산음료, 아메리카노, 아이스티 중 1개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay 10,000 KRW by cash or bank transfer to receive 10 hours plus 1 free drink. Drink options: iced tea, dabang-style coffee, Americano, or soda.', p.description_ja = '現金または口座振込で10,000ウォンをチャージすると、10時間+ドリンク1杯を提供。 ドリンクはアイスティー・ダバンコーヒー・アメリカーノ・炭酸飲料から選択。', p.description_vi = 'Nạp 10.000 KRW bằng tiền mặt hoặc chuyển khoản được tặng 10 giờ sử dụng và 1 đồ uống. Có thể chọn đồ uống: trà đá, cà phê kiểu dabang, Americano hoặc soda.' WHERE pr.store_name_ko = '에이플 PC방' AND p.description = '현금 또는 계좌이체 10,000원 충전 시 10시간+음료증정(아이스티/다방커피/아메리카노/탄산)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 1–2, get 1 canned soft drink. For groups of 3–4, get 2 canned soft drinks.', p.description_ja = '1〜2人で缶ドリンク1本を無料提供。 - 3〜4人で2 缶ドリンクを無料提供。', p.description_vi = 'Nhóm 1–2 người được tặng 1 lon nước ngọt. - Nhóm 3–4 người được tặng 2 nước ngọt đóng lon.' WHERE pr.store_name_ko = '면식당' AND p.description = '2인 이하 방문 시 음료수 1캔 / 3~4인 방문 시 음료수 2캔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4 or more, get 1 canned soft drink. Or, for groups of 4 or more spending 50,000 KRW or more, get 1 free bottle of soju.', p.description_ja = '4人以上で缶ドリンク1本を無料提供。 - また、4人以上で50,000ウォン以上利用時、焼酎1本を無料提供。', p.description_vi = 'Nhóm từ 4 người trở lên được tặng 1 lon nước ngọt. - Hoặc nhóm từ 4 người trở lên chi từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '신의주 찹쌀순대' AND p.description = '4인 이상 주문 시 음료수 1캔 제공 또는 4인 이상 방문 후 5만원 이상 주문 시 소주 한 병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free extra shot in one of the two drinks when ordering either 2 Big Americanos, 2 Iced Teas, or 1 Big Americano plus 1 Iced Tea.', p.description_ja = 'ビッグサイズアメリカーノ2杯、アイスティー2杯、またはビッグサイズアメリカーノ1杯+アイスティー1杯注文時、2杯のうち1杯にショット1回無料追加。', p.description_vi = 'Gọi 2 Americano cỡ lớn, 2 trà đá hoặc 1 Americano cỡ lớn + 1 trà đá được thêm 1 shot miễn phí vào 1 trong 2 ly.' WHERE pr.store_name_ko = '카페봄봄' AND p.description = '아메리카노 빅사이즈 2잔'' 또는 ''아이스티 2잔'' 또는 ''아메리카노 빅사이즈 1잔 + 아이스티 1잔'' 주문 시 두 잔 중 한 잔에 샷 추가 1회 무료'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Add 30g of chicken breast or smoked duck topping when ordering a main topping, excluding side menus.', p.description_ja = 'メイントッピング注文時(サイドメニュー除く)、鶏むね肉または燻製鴨トッピング30gを追加提供。', p.description_vi = 'Khi gọi topping chính, được thêm 30g topping ức gà hoặc vịt hun khói, không áp dụng cho món phụ.' WHERE pr.store_name_ko = '포케올데이' AND p.description = '메인 토핑 주문 시(사이드 메뉴 제외) 닭가슴살 또는 훈제오리 토핑 30g 추가 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4 or more, choose one: 1 serving of hot-stone soupy tteokbokki or 500ml cola.', p.description_ja = '4人以上の来店で、石鍋スープトッポッキ1人前またはコーラ500mlのうち1つを選択。', p.description_vi = 'Nhóm từ 4 người trở lên được chọn 1 món: 1 phần tteokbokki nước trong nồi đá hoặc cola 500ml.' WHERE pr.store_name_ko = '파라다이스' AND p.description = '4인 이상 방문 시 돌솥 국물 떡볶이 1인분 또는 콜라 500ml 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '15% off game fees.', p.description_ja = 'ゲーム料金15%割引。', p.description_vi = 'Giảm 15% phí chơi game.' WHERE pr.store_name_ko = '히어로 보드게임 카페' AND p.description = '게임비 15% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when paying by bank transfer.', p.description_ja = '口座振込決済時、5%割引。', p.description_vi = 'Giảm 5% khi thanh toán bằng chuyển khoản.' WHERE pr.store_name_ko = '인쌩맥주' AND p.description = '계좌이체 결제 시 5% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For groups of 4, choose one: 1 canned soft drink, or Kimchi Fried Rice/Rolled Omelet for cash payments of 70,000 KRW or more.', p.description_ja = '4人来店時は缶ドリンク1本、または70,000ウォン以上の現金決済時はキムチチャーハン/卵焼きのうち1つを選択。', p.description_vi = 'Nhóm 4 người được chọn 1 lon nước ngọt; hoặc nếu thanh toán tiền mặt từ 70.000 KRW trở lên, được chọn cơm chiên kimchi hoặc trứng cuộn.' WHERE pr.store_name_ko = '블루힐' AND p.description = '4인 방문 시 음료수 1캔 제공 또는 7만원 이상 현금 결제 시 김치볶음밥 또는 계란말이 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned drinks based on order size: 1 can for orders of 3 or more people, 2 cans for 6 or more, and 3 cans for 9 or more.', p.description_ja = '人数に応じて缶飲料を無料提供:3人は1缶、6人は2缶、9人は3缶。', p.description_vi = 'Tặng nước lon theo số người/khẩu phần: 1 lon cho 3 người, 2 lon cho 6 người, 3 lon cho 9 người.' WHERE pr.store_name_ko = '삼봉버거' AND p.description = '3인 이상 주문 시 음료캔 1개 제공 / 6인 이상 주문 시 음료캔 2개 제공 / 9인 이상 주문 시 음료캔 3개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned drinks based on order size: 1 can for orders of 3 or more people, 2 cans for 6 or more, and 3 cans for 9 or more.', p.description_ja = '人数に応じて缶飲料を無料提供:3人は1缶、6人は2缶、9人は3缶。', p.description_vi = 'Tặng nước lon theo số người/khẩu phần: 1 lon cho 3 người, 2 lon cho 6 người, 3 lon cho 9 người.' WHERE pr.store_name_ko = '핵밥' AND p.description = '3인 이상 주문 시 음료캔 1개 제공 / 6인 이상 주문 시 음료캔 2개 제공 / 9인 이상 주문 시 음료캔 3개 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Pay 10,000 KRW by bank transfer or cash at the counter, then text the owner “I’m an AI College student, and I recharged 10,000 KRW” to get 5 extra songs.', p.description_ja = '口座振込またはカウンターで現金10,000ウォンをチャージ後、店主に「AI大学の在学生で、10,000ウォンチャージしました」と送信すると、5曲追加提供。', p.description_vi = 'Nạp 10.000 KRW bằng chuyển khoản hoặc tiền mặt tại quầy, sau đó nhắn cho chủ quán “Tôi là sinh viên College of AI và đã nạp 10.000 KRW” để được tặng thêm 5 bài hát.' WHERE pr.store_name_ko = '리코스타 코인노래방' AND p.description = '계좌이체 또는 카운터에서 현금으로 10,000원 충전 후 사장님께 문자로 "AI대학 재학생인데, 10,000원 충전했습니다"라고 전송 시 노래 5곡 추가 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free soda with takeout single-item orders. Double Cheeseburger Set discounted from 10,900 KRW to 9,900 KRW.', p.description_ja = 'テイクアウト 単品注文で炭酸飲料を無料提供。 - ダブルチーズバーガーセットは9,900ウォン。単品テイクアウト注文時はカップドリンク無料。', p.description_vi = 'Tặng soda khi mang đi đơn món lẻ. - Set Double Cheeseburger giá 9.900 KRW, kèm đồ uống ly miễn phí chỉ cho đơn món lẻ mang đi.' WHERE pr.store_name_ko = '크라이치즈버거' AND p.description = '단품 포장 주문 시 탄산음료 1잔 제공 더블치즈버거세트 할인 (10,900원 -> 9,900원)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文で焼酎1本を無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '숯가마바베큐치킨' AND p.description = '4만 원 이상 주문 시 소주 1병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 50,000 KRW or less, get a free soft drink. For orders of 50,000 KRW or more, get a free alcoholic beverage. For orders of 100,000 KRW or more, get 10% off.', p.description_ja = '50,000ウォン以下の注文でソフトドリンク提供。50,000ウォン以上の注文で酒類提供。100,000ウォン以上の注文で10%割引。', p.description_vi = 'Đơn từ 50.000 KRW trở xuống được tặng nước ngọt. Đơn từ 50.000 KRW trở lên được tặng đồ uống có cồn. Đơn từ 100.000 KRW trở lên được giảm 10%.' WHERE pr.store_name_ko = '논두렁갈비' AND p.description = '5만 원 이하 음료 제공 / 5만 원 이상 주류 제공 / 10만 원 이상 주문 시 10% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned soft drink. Free minari with a receipt review.', p.description_ja = '缶ドリンク1本を無料提供。レシートレビュー作成時、セリを無料提供。', p.description_vi = 'Tặng 1 lon nước ngọt. Viết review hóa đơn được tặng rau cần nước.' WHERE pr.store_name_ko = '상도동솥뚜껑' AND p.description = '음료수 1캔 제공 / 영수증 리뷰 시 미나리 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free muksabal for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文でムクサバルを無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng muksabal.' WHERE pr.store_name_ko = '28청춘호프포차' AND p.description = '5만 원 이상 주문 시 묵사발 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free cheese balls for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文でチーズボールを無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng cheese ball.' WHERE pr.store_name_ko = '리얼후라이' AND p.description = '5만 원 이상 주문 시 치즈볼 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free popcorn for orders of 20,000 KRW or more.', p.description_ja = '20,000ウォン以上の注文でポップコーンを無料提供。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng bắp rang.' WHERE pr.store_name_ko = '씨밤바베' AND p.description = '2만 원 이상 주문 시 팝콘 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free ramyeon snack for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文でラーメンスナックを無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng snack ramyeon.' WHERE pr.store_name_ko = '엉클호프' AND p.description = '4만 원 이상 주문 시 라면땅 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned soft drink for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文で缶ドリンクを無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng nước ngọt đóng lon.' WHERE pr.store_name_ko = '블루힐' AND p.description = '5만 원 이상 주문 시 음료 1캔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when paying by cash or bank transfer.', p.description_ja = '現金または口座振込決済時、5%割引。', p.description_vi = 'Giảm 5% khi thanh toán bằng tiền mặt hoặc chuyển khoản.' WHERE pr.store_name_ko = '상도로3가' AND p.description = '현금 / 계좌이체 시 5% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned soft drink for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文で缶ドリンクを無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng nước ngọt đóng lon.' WHERE pr.store_name_ko = '역전할머니맥주' AND p.description = '5만 원 이상 주문 시 음료 1캔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文で焼酎1本を無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '젠사이야' AND p.description = '4만 원 이상 주문 시 소주 1병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned soft drink for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文で缶ドリンクを無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng nước ngọt đóng lon.' WHERE pr.store_name_ko = '짚동가리쌩주' AND p.description = '5만 원 이상 주문 시 음료 1캔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned soft drink for dine-in orders of 75,000 KRW or more for groups of up to 4, or 85,000 KRW or more for groups of up to 5.', p.description_ja = '店内飲食で4人以下は75,000ウォン以上、5人以下は85,000ウォン以上の注文で缶飲料を無料提供。', p.description_vi = 'Tặng nước ngọt đóng lon cho đơn ăn tại chỗ từ 75.000 KRW trở lên với nhóm tối đa 4 người, hoặc từ 85.000 KRW trở lên với nhóm tối đa 5 người.' WHERE pr.store_name_ko = '청운음식점' AND p.description = '4인 이하 7만 5천 원 / 5인 이하 8만 5천 원 이상 주문 시 음료 1캔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju for orders of 50,000 KRW or more.', p.description_ja = '50,000ウォン以上の注文で焼酎1本を無料提供。', p.description_vi = 'Đơn từ 50.000 KRW trở lên được tặng 1 chai soju.' WHERE pr.store_name_ko = '파동추야' AND p.description = '5만 원 이상 주문 시 소주 1병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of soju per table for groups of 3 or more.', p.description_ja = '3人以上の来店で、テーブルごとに焼酎1本を無料提供。', p.description_vi = 'Nhóm từ 3 người trở lên được tặng 1 chai soju cho mỗi bàn.' WHERE pr.store_name_ko = '인쌩맥주' AND p.description = '3인 이상 테이블당 소주 1병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free extra shot when ordering 2 Big Size drinks.', p.description_ja = 'ビッグサイズドリンク2杯注文時、ショット1回無料追加。', p.description_vi = 'Gọi 2 đồ uống cỡ lớn được thêm 1 shot miễn phí.' WHERE pr.store_name_ko = '카페봄봄' AND p.description = '빅사이즈 2잔 주문 시 샷 추가'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free shell topping for orders of 18,000 KRW or more.', p.description_ja = '18,000ウォン以上の注文でシェルトッピングを無料提供。', p.description_vi = 'Đơn từ 18.000 KRW trở lên được tặng topping shell.' WHERE pr.store_name_ko = '요거트아이스크림의정석' AND p.description = '1만 8천 원 이상 주문 시 쉘 메뉴 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '15% off usage fees.', p.description_ja = '利用料金15%割引。', p.description_vi = 'Giảm 15% phí sử dụng.' WHERE pr.store_name_ko = '히어로보드게임카페' AND p.description = '이용료 15% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off all menu items for dine-in orders.', p.description_ja = '店内飲食時、全メニュー10%割引。', p.description_vi = 'Giảm 10% toàn bộ menu khi ăn tại chỗ.' WHERE pr.store_name_ko = '다성반점' AND p.description = '방문 식사 시 전 메뉴 10% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '4,000 KRW off 4 selected items, including the Bulgogi Lunch Box for One.', p.description_ja = '一人前プルゴギ弁当を含む対象4品を4,000ウォン割引。', p.description_vi = 'Giảm 4.000 KRW cho 4 món được chọn, bao gồm hộp cơm bulgogi một người.' WHERE pr.store_name_ko = '직화삼겹직구삼' AND p.description = '혼밥불고기도시락 등 4종 4천 원 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5,000 KRW off all tangsuyuk sweet-and-sour pork items.', p.description_ja = '全酢豚メニュー 5,000ウォン割引。', p.description_vi = 'Giảm 5.000 KRW cho all món tangsuyuk.' WHERE pr.store_name_ko = '리얼안심탕수육' AND p.description = '탕수육 전 메뉴 5천 원 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off 9 selected items, including traditional porridge and fried rice.', p.description_ja = '伝統粥・チャーハンを含む9種を10%割引。', p.description_vi = 'Giảm 10% cho 9 món, gồm cháo truyền thống và cơm chiên.' WHERE pr.store_name_ko = '도담죽' AND p.description = '전통죽 / 볶음밥 9종 10% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1,000 KRW off all meal menu items.', p.description_ja = '全食事 メニュー 1,000ウォン割引。', p.description_vi = 'Giảm 1.000 KRW cho all bữa ăn món trong menu.' WHERE pr.store_name_ko = '찌개랑' AND p.description = '모든 식사 메뉴 1천 원 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free soft drink when dining in, 1 drink per 2 people.', p.description_ja = '店内飲食時、2人につきドリンク1本を提供。', p.description_vi = 'Tặng nước ngọt khi ăn tại chỗ, 1 đồ uống cho mỗi 2 người.' WHERE pr.store_name_ko = '고모밥죠' AND p.description = '식사 시 음료 제공 (2인 1개)'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'For orders of 30,000 KRW or more, get 1 free bottle of alcoholic beverage. Free canned soft drink when ordering a meal.', p.description_ja = '30,000ウォン以上の注文で酒類1本を無料提供。食事注文時、缶ドリンク1本を無料提供。', p.description_vi = 'Đơn từ 30.000 KRW trở lên được tặng 1 chai đồ uống có cồn. Gọi món ăn được tặng 1 lon nước ngọt.' WHERE pr.store_name_ko = '엉터리생고기' AND p.description = '1. 3만 원 이상 주문 시 주류 1병 제공 -2. 식사 주문 시 음료 1캔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free tteokbokki when ordering a meal.', p.description_ja = '食事注文時、トッポッキを無料提供。', p.description_vi = 'Gọi món ăn được tặng tteokbokki.' WHERE pr.store_name_ko = '강남분식' AND p.description = '식사 주문 시 떡볶이 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off 4 types of Oranda, a traditional Korean snack.', p.description_ja = '韓国伝統菓子オランダ4種を10%割引。', p.description_vi = 'Giảm 10% cho 4 loại Oranda, món bánh truyền thống Hàn Quốc.' WHERE pr.store_name_ko = '미화담' AND p.description = '오란다(전통과자) 4종 10% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free canned soft drink for orders of 10,000 KRW or more.', p.description_ja = '10,000ウォン以上の注文で缶ドリンクを無料提供。', p.description_vi = 'Đơn từ 10.000 KRW trở lên được tặng nước ngọt đóng lon.' WHERE pr.store_name_ko = '나비루' AND p.description = '1만 원 이상 주문 시 음료 1캔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '20% off all items for takeout orders.', p.description_ja = '訪問テイクアウト時、全品20%割引。', p.description_vi = 'Giảm 20% tất cả sản phẩm khi mua mang đi tại cửa hàng.' WHERE pr.store_name_ko = '파스타어때 ' AND p.description = '방문 포장 시 전 품목 20% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off purchases of 5,000 KRW or more.', p.description_ja = '5,000ウォン以上の購入で10%割引。', p.description_vi = 'Mua từ 5.000 KRW trở lên được giảm 10%.' WHERE pr.store_name_ko = '종로떡집' AND p.description = '5천 원 이상 구매 시 10% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 500ml soft drink for phone orders. 7,000 KRW off in-store takeout orders.', p.description_ja = '電話注文時500mlドリンク1本提供。来店テイクアウト時7,000ウォン割引。', p.description_vi = 'Tặng 1 nước ngọt 500ml cho đơn đặt qua điện thoại. Giảm 7.000 KRW khi đến cửa hàng lấy mang đi.' WHERE pr.store_name_ko = '호미스 피자' AND p.description = '1. 전화 주문 시 음료 500ml 1병 제공 -2. 방문 포장 시 7천 원 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '4,000 KRW off takeout orders.', p.description_ja = 'テイクアウト注文は4,000ウォン割引。', p.description_vi = 'Giảm 4.000 KRW cho đơn mang đi.' WHERE pr.store_name_ko = '두찜' AND p.description = '방문 포장 시 4천 원 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '5% off when ordering meals.', p.description_ja = '食事注文時、5%割引。', p.description_vi = 'Giảm 5% khi gọi món ăn.' WHERE pr.store_name_ko = '프라이밋 스테이크하우스' AND p.description = '식사 주문 시 5% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off all items when visiting in person.', p.description_ja = '来店時、全品10%割引。', p.description_vi = 'Giảm 10% tất cả sản phẩm khi đến cửa hàng.' WHERE pr.store_name_ko = '족발천국' AND p.description = '방문 시 전 품목 10% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off all menu items.', p.description_ja = '全メニュー10%割引。', p.description_vi = 'Giảm 10% toàn bộ menu.' WHERE pr.store_name_ko = '오고또오고 포차' AND p.description = '전 메뉴 10% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of alcoholic beverage for orders of 20,000 KRW or more.', p.description_ja = '20,000ウォン以上の注文で酒類1本を無料提供。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng 1 chai đồ uống có cồn.' WHERE pr.store_name_ko = '부엉이포차' AND p.description = '2만 원 이상 주문 시 주류 1병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 500ml beer for orders of 20,000 KRW or more.', p.description_ja = '20,000ウォン以上の注文で500mlビールを無料提供。', p.description_vi = 'Đơn từ 20.000 KRW trở lên được tặng 1 ly bia 500ml.' WHERE pr.store_name_ko = '상도 타코야끼' AND p.description = '2만 원 이상 주문 시 맥주 500cc 1잔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free 1 bottle of alcoholic beverage for orders of 40,000 KRW or more.', p.description_ja = '40,000ウォン以上の注文で酒類1本を無料提供。', p.description_vi = 'Đơn từ 40.000 KRW trở lên được tặng 1 chai đồ uống có cồn.' WHERE pr.store_name_ko = '광어삼촌' AND p.description = '4만 원 이상 주문 시 주류 1병 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '3,000 KRW off when purchasing 2 bottles of wine. Limited to once per person; membership/reward registration required.', p.description_ja = 'ワイン2本購入時、3,000ウォン割引。 - 1人1回限定。ポイント登録が必要。', p.description_vi = 'Giảm 3.000 KRW khi mua 2 chai rượu vang. - Giới hạn 1 lần mỗi người; cần đăng ký tích điểm/thành viên.' WHERE pr.store_name_ko = '돌고래보틀' AND p.description = '와인 2병 구매 시 3천 원 할인 *1인 1회 한정, 적립 필수'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '1,000 KRW off when ordering bingsu for 2.', p.description_ja = '2人用かき氷注文時1,000ウォン割引。', p.description_vi = 'Giảm 1.000 KRW khi gọi bingsu cho 2 người.' WHERE pr.store_name_ko = '달달프루츠' AND p.description = '2인 빙수 주문 시 1천 원 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = 'Free Americano for orders of 10,000 KRW or more.', p.description_ja = '10,000ウォン以上の注文でアメリカーノを無料提供。', p.description_vi = 'Đơn từ 10.000 KRW trở lên được tặng Americano.' WHERE pr.store_name_ko = '멜로드' AND p.description = '1만 원 이상 주문 시 아메리카노 1잔 제공'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off all side dishes plus 3% point rewards.', p.description_ja = 'おかず全品10%割引+ポイント3%還元。', p.description_vi = 'Giảm 10% toàn bộ món ăn kèm và tích điểm 3%.' WHERE pr.store_name_ko = '반찬나라' AND p.description = '반찬 구매 시 전 품목 10% 할인 및 포인트 3% 적립'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off side dish purchases of 10,000 KRW or more.', p.description_ja = 'おかず10,000ウォン以上購入時、10%割引。', p.description_vi = 'Mua món ăn kèm từ 10.000 KRW trở lên được giảm 10%.' WHERE pr.store_name_ko = '별별찬방' AND p.description = '반찬 1만 원 이상 구매 시 10% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off side dish purchases of 10,000 KRW or more.', p.description_ja = 'おかず10,000ウォン以上購入時、10%割引。', p.description_vi = 'Mua món ăn kèm từ 10.000 KRW trở lên được giảm 10%.' WHERE pr.store_name_ko = '여기반찬가게' AND p.description = '반찬 1만 원 이상 구매 시 10% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off side dish purchases of 10,000 KRW or more.', p.description_ja = 'おかず10,000ウォン以上購入時、10%割引。', p.description_vi = 'Mua món ăn kèm từ 10.000 KRW trở lên được giảm 10%.' WHERE pr.store_name_ko = '타마르부엌' AND p.description = '반찬 1만 원 이상 구매 시 10% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off fruits and vegetables.', p.description_ja = '果物・野菜 10%割引。', p.description_vi = 'Giảm 10% trái cây và rau củ.' WHERE pr.store_name_ko = '우리농수산물' AND p.description = '과일 / 채소 구매 시 10% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off fruits and vegetables.', p.description_ja = '果物・野菜 10%割引。', p.description_vi = 'Giảm 10% trái cây và rau củ.' WHERE pr.store_name_ko = '은혜야채가게' AND p.description = '과일 / 채소 구매 시 10% 할인'; -UPDATE partnership p JOIN partnership_restaurant pr ON p.partnership_restaurant_id = pr.partnership_restaurant_id SET p.description_en = '10% off purchases of 10,000 KRW or more.', p.description_ja = '10,000ウォン以上の購入で10%割引。', p.description_vi = 'Mua từ 10.000 KRW trở lên được giảm 10%.' WHERE pr.store_name_ko = '신앙촌상회' AND p.description = '1만 원 이상 구매 시 10% 할인'; diff --git a/src/main/resources/db/migration/V17__populate_i18n_menu_name.sql b/src/main/resources/db/migration/V17__populate_i18n_menu_name.sql deleted file mode 100644 index b581eb14..00000000 --- a/src/main/resources/db/migration/V17__populate_i18n_menu_name.sql +++ /dev/null @@ -1,24 +0,0 @@ --- 고정 메뉴 다국어 번역 데이터 추가 -UPDATE menu SET name_en = 'Old-school Korean Lunch Box', name_ja = '思い出の弁当', name_vi = 'Cơm hộp kiểu Hàn xưa' WHERE name = '추억의도시락' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Chicken Mayo Rice Bowl', name_ja = 'チキンマヨ丼', name_vi = 'Cơm tô gà mayo' WHERE name = '치킨마요덮밥' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Rice Noodles', name_ja = 'フォー', name_vi = 'Phở' WHERE name = '쌀국수' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Soongsil Gimbap', name_ja = '崇実キンパ', name_vi = 'Soongsil Gimbap ' WHERE name = '숭실김밥' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Soongsil Mini Gimbap', name_ja = '崇実ミニキンパ', name_vi = 'Soongsil Mini Gimbap ' WHERE name = '숭실꼬마김밥' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Tuna Mini Gimbap', name_ja = 'ツナミニキンパ', name_vi = 'Gimbap mini cá ngừ' WHERE name = '참치꼬마김밥' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Soongsil Ramyeon', name_ja = '崇実ラーメン', name_vi = 'Soongsil Ramyeon ' WHERE name = '숭실라면' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Rice Cake & Dumpling Ramyeon', name_ja = '餅・餃子ラーメン', name_vi = 'Ramyeon bánh gạo và mandu' WHERE name = '떡만두라면' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Cheese Ramyeon', name_ja = 'チーズラーメン', name_vi = 'Ramyeon phô mai' WHERE name = '치즈라면' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Ramyeon + Bowl of Rice', name_ja = 'ラーメン+ライス', name_vi = 'Ramyeon + cơm trắng' WHERE name = '라면+공기밥' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Ramyeon + Half Roll of Gimbap', name_ja = 'ラーメン+キンパ半本', name_vi = 'Ramyeon + nửa cuộn gimbap' WHERE name = '라면+김밥반줄' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Tteokbokki', name_ja = 'トッポッキ', name_vi = 'Tteokbokki' WHERE name = '떡볶이' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Rabokki', name_ja = 'ラッポッキ', name_vi = 'Rabokki' WHERE name = '라볶이' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Sotteok Sotteok', name_ja = 'ソトックソトック', name_vi = 'Sotteok Sotteok' WHERE name = '소떡소떡' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Cobb Salad', name_ja = 'コブサラダ', name_vi = 'Salad Cobb' WHERE name = '콥샐러드' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Vegan Tofu Salad', name_ja = 'ヴィーガン豆腐サラダ', name_vi = 'Salad đậu phụ chay' WHERE name = '비건두부샐러드' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Salad Pasta', name_ja = 'サラダパスタ', name_vi = 'Salad Pasta' WHERE name = '샐러드파스타' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Balanced Macro Salad', name_ja = '栄養バランスサラダ', name_vi = 'Salad cân bằng dinh dưỡng' WHERE name = '탄단지샐러드' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Smoked Salmon Salad', name_ja = 'スモークサーモンサラダ', name_vi = 'Salad cá hồi hun khói' WHERE name = '훈제연어샐러드' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Boiled Egg (Salad Add-on)', name_ja = 'ゆで卵(サラダ追加)', name_vi = 'Trứng luộc (thêm vào salad)' WHERE name = '삶은계란(샐)' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = '5 Tofu Sticks', name_ja = '豆腐スティック5本', name_vi = '5 thanh đậu phụ' WHERE name = '두부스틱5개' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = '2 Slices of Sweet Pumpkin', name_ja = 'かぼちゃスライス2枚', name_vi = '2 lát bí đỏ ngọt' WHERE name = '단호박슬라이스2개' AND restaurant = 'SNACK_CORNER'; -UPDATE menu SET name_en = 'Extra Noodles (Salad Add-on)', name_ja = '麺追加(サラダ)', name_vi = 'Thêm mì (salad)' WHERE name = '면추가(샐러드)' AND restaurant = 'SNACK_CORNER'; From b0a2b5fd14e0fb3b5da6bc54c62fc31d419e153e Mon Sep 17 00:00:00 2001 From: Eunseo Song <162149585+eunseo9311@users.noreply.github.com> Date: Mon, 29 Jun 2026 22:24:48 +0900 Subject: [PATCH 373/399] =?UTF-8?q?refactor:=20=EC=8A=A4=EB=82=B5=EC=BD=94?= =?UTF-8?q?=EB=84=88=20=EB=A9=94=EB=89=B4=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20DML=20=EB=A7=88=EC=9D=B4=EA=B7=B8=EB=A0=88=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20=ED=8C=8C=EC=9D=BC=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../db/migration/V16__update_snack_corner_menus_26_1.sql | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 src/main/resources/db/migration/V16__update_snack_corner_menus_26_1.sql diff --git a/src/main/resources/db/migration/V16__update_snack_corner_menus_26_1.sql b/src/main/resources/db/migration/V16__update_snack_corner_menus_26_1.sql deleted file mode 100644 index f2af541f..00000000 --- a/src/main/resources/db/migration/V16__update_snack_corner_menus_26_1.sql +++ /dev/null @@ -1,9 +0,0 @@ -UPDATE menu SET name = '숭실라면' WHERE name = '라면' AND restaurant = 'SNACK_CORNER'; - -INSERT INTO menu (name, name_en, name_ja, name_vi, restaurant, price, is_discontinued, like_count, unlike_count, menu_category_id) -VALUES ('쌀국수', 'Rice Noodles', 'フォー', 'Phở', 'SNACK_CORNER', 5000, false, 0, 0, NULL); - -INSERT INTO menu (name, name_en, name_ja, name_vi, restaurant, price, is_discontinued, like_count, unlike_count, menu_category_id) -VALUES ('소떡소떡', 'Sotteok Sotteok', 'ソトックソトック', 'Sotteok Sotteok', 'SNACK_CORNER', 2000, false, 0, 0, NULL); - -UPDATE menu SET is_discontinued = true WHERE name = '냉모밀' AND restaurant = 'SNACK_CORNER'; From a55b6c73db824353da8b95d29643ad8bf6bfd4f2 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Tue, 30 Jun 2026 17:48:23 +0900 Subject: [PATCH 374/399] =?UTF-8?q?feat:=20Grafana=20Cloud=20=EB=A9=94?= =?UTF-8?q?=ED=8A=B8=EB=A6=AD=20application=20=ED=83=9C=EA=B7=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-dev.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 239f8e1c..e2aebc77 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -104,3 +104,7 @@ management: web: exposure: include: health, info, metrics, prometheus + + metrics: + tags: + application: eatssu-dev From 735a4bdaeb46a9a0837a1ab01e29e3c4318f5919 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Tue, 30 Jun 2026 17:51:13 +0900 Subject: [PATCH 375/399] =?UTF-8?q?fix:=20actuator=20=EC=97=94=EB=93=9C?= =?UTF-8?q?=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EC=99=B8=EB=B6=80=20=EB=85=B8?= =?UTF-8?q?=EC=B6=9C=20=EB=B2=94=EC=9C=84=20=EC=B6=95=EC=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 3072cee1..014115d5 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -29,7 +29,7 @@ public class SecurityConfig { private static final String[] AUTH_WHITELIST = { "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", "/oauths/v2/kakao","/oauths/v2/apple", "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics/**", - "/v2/reviews/menus/**", "/v2/reviews/meals/**", "/actuator/**", "/error-test/**" + "/v2/reviews/menus/**", "/v2/reviews/meals/**", "/actuator/health", "/error-test/**" }; private static final String[] ADMIN_PAGE_LIST = { From 00dc53439e69ed510ec362c66c1728dd04f4f397 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Tue, 30 Jun 2026 17:57:43 +0900 Subject: [PATCH 376/399] =?UTF-8?q?feat:=20actuator=20=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=20=ED=8F=AC=ED=8A=B8=20=EB=B6=84=EB=A6=AC=20=EB=B0=8F=20?= =?UTF-8?q?=EB=A1=9C=EC=BB=AC=20=EB=B0=94=EC=9D=B8=EB=94=A9=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-dev.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index e2aebc77..335c73cc 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -94,6 +94,10 @@ logging: com.zaxxer.hikari: INFO management: + server: + port: 9001 + address: 127.0.0.1 + endpoint: metrics: enabled: true From 1d9bd82ef744e0aeb122f5d84de0394c76040da9 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Tue, 30 Jun 2026 18:09:06 +0900 Subject: [PATCH 377/399] =?UTF-8?q?fix:=20actuator=20prometheus=20?= =?UTF-8?q?=EC=97=94=EB=93=9C=ED=8F=AC=EC=9D=B8=ED=8A=B8=20whitelist=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java index 014115d5..3e85dd15 100644 --- a/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java +++ b/src/main/java/ssu/eatssu/domain/auth/infrastructure/SecurityConfig.java @@ -29,7 +29,7 @@ public class SecurityConfig { private static final String[] AUTH_WHITELIST = { "/", "/oauths/kakao", "/oauths/apple", "/menus/**", "/meals/**", "/admin/login", "/oauths/v2/kakao","/oauths/v2/apple", "/reviews", "/reviews/menus/**", "/reviews/meals/**", "/v2/reviews/statistics/**", - "/v2/reviews/menus/**", "/v2/reviews/meals/**", "/actuator/health", "/error-test/**" + "/v2/reviews/menus/**", "/v2/reviews/meals/**", "/actuator/health", "/actuator/prometheus", "/error-test/**" }; private static final String[] ADMIN_PAGE_LIST = { From 3a557b6d278c847330aac150fe52885f9a694d00 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Tue, 30 Jun 2026 18:19:32 +0900 Subject: [PATCH 378/399] =?UTF-8?q?fix:=20management=20=ED=8F=AC=ED=8A=B8?= =?UTF-8?q?=20Docker=20publish=20=EB=B0=8F=20=EB=B0=94=EC=9D=B8=EB=94=A9?= =?UTF-8?q?=20=EC=A3=BC=EC=86=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 2 +- src/main/resources/application-dev.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 6f1f26ef..388ba283 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -118,7 +118,7 @@ jobs: PUBLISHED_CONTAINERS=$(sudo docker ps -q --filter publish=9000) if [ -n "$PUBLISHED_CONTAINERS" ]; then sudo docker rm -f $PUBLISHED_CONTAINERS; fi sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-dev - sudo docker run -d --name eatssu-dev --restart unless-stopped -p 9000:9000 \ + sudo docker run -d --name eatssu-dev --restart unless-stopped -p 9000:9000 -p 127.0.0.1:9001:9001 \ --log-driver=awslogs \ --log-opt awslogs-region=ap-northeast-2 \ --log-opt awslogs-group=dev-ec2-group \ diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 335c73cc..017f7054 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -96,7 +96,7 @@ logging: management: server: port: 9001 - address: 127.0.0.1 + address: 0.0.0.0 endpoint: metrics: From 3df77311f37c79f1160667bc18e2a17358179c1f Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Wed, 1 Jul 2026 01:19:16 +0900 Subject: [PATCH 379/399] =?UTF-8?q?feat:=20prod=20=EC=84=9C=EB=B2=84=20Gra?= =?UTF-8?q?fana=20Cloud=20=EB=AA=A8=EB=8B=88=ED=84=B0=EB=A7=81=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - application-prod.yml: management server port 9001 분리 및 eatssu-prod 메트릭 태그 추가 - deploy.yml: prod docker run에 -p 127.0.0.1:9001:9001 포트 publish 추가 resolved #380 Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/deploy.yml | 2 +- src/main/resources/application-prod.yml | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 388ba283..66424d3f 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -87,7 +87,7 @@ jobs: PUBLISHED_CONTAINERS=$(sudo docker ps -q --filter publish=9000) if [ -n "$PUBLISHED_CONTAINERS" ]; then sudo docker rm -f $PUBLISHED_CONTAINERS; fi sudo docker pull ${{ secrets.DOCKER_REPO }}/eatssu-prod - sudo docker run -d --name eatssu-prod --restart unless-stopped -p 9000:9000 \ + sudo docker run -d --name eatssu-prod --restart unless-stopped -p 9000:9000 -p 127.0.0.1:9001:9001 \ --log-driver=awslogs \ --log-opt awslogs-region=ap-northeast-2 \ --log-opt awslogs-group=prod-ec2-group \ diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index aa2221ac..d7eb680e 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -100,6 +100,10 @@ logging: management: + server: + port: 9001 + address: 0.0.0.0 + endpoint: metrics: enabled: true @@ -111,3 +115,7 @@ management: exposure: include: health, info, metrics, prometheus + metrics: + tags: + application: eatssu-prod + From 95ff14618cdd10410be6d68f3053ad96ad87fd35 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Wed, 1 Jul 2026 23:16:43 +0900 Subject: [PATCH 380/399] =?UTF-8?q?refactor:=20CLAUDE.md=20=EC=BB=A8?= =?UTF-8?q?=EB=B2=A4=EC=85=98=EC=9D=84=20.claude/rules=EB=A1=9C=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 파일 경로별로만 필요한 테스트/영속성/코멘팅 컨벤션을 rules/testing.md, rules/persistence.md, rules/commenting.md로 옮겨 관련 없는 작업 시 불필요한 컨텍스트 로드를 줄인다. --- .claude/rules/commenting.md | 12 ++++++++++++ .claude/rules/persistence.md | 12 ++++++++++++ .claude/rules/testing.md | 10 ++++++++++ CLAUDE.md | 21 --------------------- 4 files changed, 34 insertions(+), 21 deletions(-) create mode 100644 .claude/rules/commenting.md create mode 100644 .claude/rules/persistence.md create mode 100644 .claude/rules/testing.md diff --git a/.claude/rules/commenting.md b/.claude/rules/commenting.md new file mode 100644 index 00000000..86df7560 --- /dev/null +++ b/.claude/rules/commenting.md @@ -0,0 +1,12 @@ +--- +paths: + - "src/main/java/**/*.java" +--- + +# Commenting Convention + +- Comments should be written in a single line whenever possible. +- Each comment must include the author's name and the date. +- Use IntelliJ's default `FIX ME` comment format. + - Use this for parts of the code where there may be a potential issue but immediate exception handling is unnecessary. + - Also use this for parts that are not yet finalized due to unclear business requirements. diff --git a/.claude/rules/persistence.md b/.claude/rules/persistence.md new file mode 100644 index 00000000..8f75fc57 --- /dev/null +++ b/.claude/rules/persistence.md @@ -0,0 +1,12 @@ +--- +paths: + - "**/persistence/**/*.java" + - "**/repository/**/*.java" + - "src/main/resources/db/migration/**" +--- + +# Persistence & Migration Convention + +- Complex queries use the `*RepositoryCustom` interface + `*RepositoryImpl` (QueryDSL) pattern. +- Schema is managed with Flyway migration files at `src/main/resources/db/migration/V{n}__{설명}.sql`. +- `ddl-auto` is set to `none`, so any schema change must be accompanied by a new migration file. diff --git a/.claude/rules/testing.md b/.claude/rules/testing.md new file mode 100644 index 00000000..6eaca78e --- /dev/null +++ b/.claude/rules/testing.md @@ -0,0 +1,10 @@ +--- +paths: + - "src/test/**/*.java" +--- + +# Test Code Convention + +- Test method names must be written in **English**. +- If the code is related to test, write comments for "given, when, then". +- Tests run with `@SpringBootTest` connected to a real DB. Do not mock the DB. diff --git a/CLAUDE.md b/CLAUDE.md index b898f9fc..a6628e13 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -15,19 +15,6 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co 3. Present trade-offs (각 방향의 장단점 제시) 4. Do NOT write code unless the user explicitly asks with a direct command such as "개발해줘", "작성해줘", "구현해줘". -## Commenting Convention - -- Comments should be written in a single line whenever possible. -- Each comment must include the author's name and the date. -- Use IntelliJ's default `FIX ME` comment format. - - Use this for parts of the code where there may be a potential issue but immediate exception handling is unnecessary. - - Also use this for parts that are not yet finalized due to unclear business requirements. - -## Test Code Convention - -- Test method names must be written in **English**. -- But if the codes is related to test, write the comment for "given, when, then". - ## Build & Run Commands ```bash @@ -84,18 +71,10 @@ src/main/java/ssu/eatssu/ **다국어(i18n)**: `Localizable` 인터페이스의 `getLocalizedValue(language, ko, en, ja, vi)`를 구현하여 언어별 필드를 반환한다. -**복잡한 쿼리**: `*RepositoryCustom` 인터페이스 + `*RepositoryImpl`(QueryDSL) 패턴을 사용한다. - -**DB 마이그레이션**: Flyway를 사용하며, `src/main/resources/db/migration/V{n}__{설명}.sql` 형식으로 관리한다. `ddl-auto: none`이므로 스키마 변경 시 반드시 마이그레이션 파일을 추가해야 한다. - ### API 버전 관리 일부 Controller/Service는 V1/V2로 버전이 분리되어 있다(예: `ReviewController`/`ReviewControllerV2`, `ReviewService`/`ReviewServiceV2`). 새 기능은 V2 이상에 추가하거나, 필요 시 새 버전을 생성한다. -### 테스트 - -테스트는 `@SpringBootTest`로 실제 DB에 연결하여 실행한다. 목(Mock) DB를 사용하지 않는다. - ### 배포 GitHub Actions(`deploy.yml`)로 Docker 이미지를 빌드하여 EC2에 SSH 배포한다. `prod`/`dev` 브랜치에 따라 배포 환경이 분기된다. From 65765cc79951721e586099f48839b93a71455799 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Wed, 1 Jul 2026 23:16:51 +0900 Subject: [PATCH 381/399] =?UTF-8?q?refactor:=20review=20=EC=BB=A4=EB=A7=A8?= =?UTF-8?q?=EB=93=9C=EB=A5=BC=20backend-review=EB=A1=9C=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Claude Code 내장 review/code-review skill과 이름이 겹쳐 /review 실행 시 혼선이 생길 수 있어 backend-review로 구분한다. 체크리스트 내용은 그대로 유지. --- .claude/commands/{review.md => backend-review.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .claude/commands/{review.md => backend-review.md} (100%) diff --git a/.claude/commands/review.md b/.claude/commands/backend-review.md similarity index 100% rename from .claude/commands/review.md rename to .claude/commands/backend-review.md From 9b335f48358f69d604358b6e1dd2e4061321e5f4 Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Wed, 1 Jul 2026 23:17:12 +0900 Subject: [PATCH 382/399] =?UTF-8?q?docs:=20=EC=BD=94=EB=93=9C=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=20=EC=A0=84=20=EB=90=98=EB=AC=BB=EA=B8=B0=20=EB=B0=8F?= =?UTF-8?q?=20=EC=9D=B4=EC=8A=88=20=EB=8B=A8=EC=9C=84=20=EC=9E=91=EC=97=85?= =?UTF-8?q?=20=EA=B7=9C=EC=B9=99=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 방향 제시 전 불명확한 부분은 먼저 확인 질문을 하도록 프로세스를 보강하고, 여러 기능이 담긴 이슈는 항목 단위로 분석→방향→트레이드오프→승인 사이클을 반복하도록 명시한다. --- CLAUDE.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index a6628e13..6f81abff 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -11,9 +11,11 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co - Suggest based on logical reasons. - For every request, follow this order before writing any code: 1. Analyze the process (현재 구조/흐름 파악) - 2. Suggest a direction (어떤 방향으로 접근할지 제시) - 3. Present trade-offs (각 방향의 장단점 제시) - 4. Do NOT write code unless the user explicitly asks with a direct command such as "개발해줘", "작성해줘", "구현해줘". + 2. If anything is unclear or requires a decision only the user can make, ask clarifying questions before proposing a direction + 3. Suggest a direction based on the analysis (and any answers received) + 4. Present trade-offs for each direction + 5. Do NOT write code unless the user explicitly asks with a direct command such as "개발해줘", "작성해줘", "구현해줘". +- When implementing from a GitHub issue with multiple feature items, process one item at a time: complete the full analyze → clarify → direction → trade-off → explicit approval cycle for a single item before moving to the next. ## Build & Run Commands From 0c9fc52940cab89e966c3a715078cff5bb5a359a Mon Sep 17 00:00:00 2001 From: pooreumjung Date: Wed, 1 Jul 2026 23:24:21 +0900 Subject: [PATCH 383/399] =?UTF-8?q?feat:=20=EC=9D=B4=EC=8A=88/PR=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EC=8B=9C=20=EB=8B=B4=EB=8B=B9=EC=9E=90?= =?UTF-8?q?=C2=B7=EB=9D=BC=EB=B2=A8=C2=B7=EB=A6=AC=EB=B7=B0=EC=96=B4=20?= =?UTF-8?q?=EC=9E=90=EB=8F=99=20=EC=A7=80=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feature-issue/fix-issue 커맨드는 실제 생성 시 --assignee @me와 템플릿에 맞는 라벨을 자동으로 붙이고, pr 커맨드는 --assignee @me에 더해 고정 리뷰어(eunseo9311, sjinssun)와 브랜치 타입 기반 라벨을 자동으로 지정한다. --- .claude/commands/feature-issue.md | 9 +++++++++ .claude/commands/fix-issue.md | 9 +++++++++ .claude/commands/pr.md | 22 ++++++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/.claude/commands/feature-issue.md b/.claude/commands/feature-issue.md index 5ed737dd..a7325b5c 100644 --- a/.claude/commands/feature-issue.md +++ b/.claude/commands/feature-issue.md @@ -38,3 +38,12 @@ Rules: - Do not invent implementation details that are not implied by the request. - Prefer concrete acceptance criteria over vague descriptions. - If there is no attachment/reference, write `- 없음`. + +When the user explicitly asks to create the issue (not just draft it), run: + +```bash +gh issue create --title "feature: " --body "" --assignee @me --label feat +``` + +- Always include `--assignee @me` so the issue is assigned to the current user. +- Always include `--label feat` to match this template's convention. diff --git a/.claude/commands/fix-issue.md b/.claude/commands/fix-issue.md index f6bdc53c..3882cddd 100644 --- a/.claude/commands/fix-issue.md +++ b/.claude/commands/fix-issue.md @@ -38,3 +38,12 @@ Rules: - If the issue is operational, include the relevant environment such as prod, dev, EC2, Docker, or CloudWatch. - Do not claim a root cause unless it is directly supported by the given context. - If there is no attachment/reference, write `- 없음`. + +When the user explicitly asks to create the issue (not just draft it), run: + +```bash +gh issue create --title "fix: " --body "" --assignee @me --label fix +``` + +- Always include `--assignee @me` so the issue is assigned to the current user. +- Always include `--label fix` to match this template's convention. diff --git a/.claude/commands/pr.md b/.claude/commands/pr.md index 5c92101b..a0a8a826 100644 --- a/.claude/commands/pr.md +++ b/.claude/commands/pr.md @@ -56,3 +56,25 @@ Rules: - For the checklist, mark an item checked only if the evidence is clear from the context or command results. - If tests were not run, leave the test checkbox unchecked and mention that in reviewer notes. - Do not include unrelated refactoring in the summary. + +When the user explicitly asks to create the PR (not just draft it), run: + +```bash +gh pr create --title ": " --body "" --assignee @me --reviewer eunseo9311,sjinssun --label